ftp://ftp.linux.ncsu.edu/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/4/en/os...
[xscreensaver] / configure.in
index 322862f6dd55af18720a4a99551ce9e7830be6d3..740cd97f27eafe5969b79babbcf5bb12b607ee2d 100644 (file)
@@ -1,6 +1,7 @@
-# configure.in --- xscreensaver, Copyright (c) 1997 Jamie Zawinski.
+# configure.in --- xscreensaver, Copyright (c) 1997-2004 Jamie Zawinski.
 #
 
+AC_PREREQ(2.52)
 AC_INIT(driver/subprocs.c)
 AC_CONFIG_HEADER(config.h)
 
@@ -23,7 +24,6 @@ for d in driver utils hacks hacks/glx ; do
   fi
 done
 
-
 ###############################################################################
 #
 #       Function to figure out how to run the compiler.
@@ -46,7 +46,7 @@ AC_DEFUN(AC_PROG_CC_ANSI,
       ;;
 
       *-dec-* )
-        AC_MSG_RESULT(DEC: adding -std1)
+        AC_MSG_RESULT(DEC: adding -std1 -ieee)
         CC="$CC -std1"
       ;;
 
@@ -56,6 +56,8 @@ AC_DEFUN(AC_PROG_CC_ANSI,
     esac
   fi
 
+  OBJCC="$CC"
+
   AC_MSG_CHECKING([whether the compiler works on ANSI C])
   AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
      AC_MSG_RESULT(yes),
@@ -65,9 +67,10 @@ AC_DEFUN(AC_PROG_CC_ANSI,
 
   if test -n "$GCC"; then
     AC_MSG_RESULT(Turning on gcc compiler warnings.)
-    CC="$CC -Wall -Wstrict-prototypes -Wnested-externs -Wno-format"
-    AC_MSG_RESULT(Disabling C++ comments in ANSI C code.)
-    CC="$CC -Wp,-lang-c89"
+    CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs"
+    OBJCC="$OBJCC -Wall"
+    # supposedly gcc 3.4 will have "-Wdeclaration-after-statement"
+    # and then perhaps we can do without -pedantic?
   else
     case "$host" in
       *-irix5* |*-irix6.[0-3]* )
@@ -85,6 +88,104 @@ AC_DEFUN(AC_PROG_CC_ANSI,
 ])
 
 
+###############################################################################
+#
+#       Functions 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_DEFUN(AC_GCC_ACCEPTS_STD,
+ [if test -n "$GCC"; then
+   AC_CACHE_CHECK([whether gcc accepts -std],
+     ac_cv_gcc_accepts_std,
+    [if ( ( gcc -E -std=c89 - </dev/null >/dev/null ) 2>&1 | \
+          grep unrecognized >/dev/null ); then
+       ac_cv_gcc_accepts_std=no
+     else
+       ac_cv_gcc_accepts_std=yes
+     fi])
+   ac_gcc_accepts_std="$ac_cv_gcc_accepts_std"
+  fi
+])
+
+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="$CC -std=c89 -U__STRICT_ANSI__"
+   else
+     # The old way:
+     CC="$CC -Wp,-lang-c89"
+   fi
+  fi
+])
+
+
+###############################################################################
+#
+#       Function to figure out how to turn off Objective C on MacOS X.
+#       (We have to do this to work around an Apple-specific gcc bug.)
+#
+###############################################################################
+
+AC_DEFUN(AC_GCC_ACCEPTS_NO_CPP_PRECOMP,
+ [if test -n "$GCC"; then
+   AC_CACHE_CHECK([whether gcc accepts -no-cpp-precomp],
+     ac_cv_gcc_accepts_no_cpp_precomp,
+    [if ( ( gcc -E -no-cpp-precomp - </dev/null >/dev/null ) 2>&1 | \
+          grep unrecognized >/dev/null ); then
+       ac_cv_gcc_accepts_no_cpp_precomp=no
+     else
+       ac_cv_gcc_accepts_no_cpp_precomp=yes
+     fi])
+   ac_gcc_accepts_no_cpp_precomp="$ac_cv_gcc_accepts_no_cpp_precomp"
+  fi
+])
+
+AC_DEFUN(AC_NO_OBJECTIVE_C,
+ [if test -n "$GCC"; then
+   AC_GCC_ACCEPTS_NO_CPP_PRECOMP
+   if test "$ac_gcc_accepts_no_cpp_precomp" = yes ; then
+     AC_MSG_RESULT(Disabling Objective C extensions in ANSI C code.)
+     CC="$CC -no-cpp-precomp"
+   fi
+  fi
+])
+
+
 ###############################################################################
 #
 #       Function to figure out how to create directory trees.
@@ -92,33 +193,33 @@ AC_DEFUN(AC_PROG_CC_ANSI,
 ###############################################################################
 
 AC_DEFUN(AC_PROG_INSTALL_DIRS,
- [AC_CACHE_CHECK([whether \"\${INSTALL} -d\" creates intermediate directories],
+ [AC_CACHE_CHECK([whether "\${INSTALL} -d" creates intermediate directories],
     ac_cv_install_d_creates_dirs,
     [ac_cv_install_d_creates_dirs=no
      rm -rf conftestdir
      if mkdir conftestdir; then
-       cd conftestdir >&-
-       ${INSTALL} -d `pwd`/dir1/dir2 >&- 2>&-
+       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 .. >&-
+       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_CACHE_CHECK([whether "mkdir -p" creates intermediate directories],
       ac_cv_mkdir_p_creates_dirs,
       [ac_cv_mkdir_p_creates_dirs=no
        rm -rf conftestdir
        if mkdir conftestdir; then
-         cd conftestdir >&-
-         mkdir -p dir1/dir2 >&- 2>&-
+         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 .. >&-
+         cd .. 2>/dev/null
          rm -rf conftestdir
        fi
       ])
@@ -193,6 +294,26 @@ AC_DEFUN(AC_PROG_PERL,
  ])
 
 
+###############################################################################
+#
+#       Function to demand "bc".  Losers.
+#
+###############################################################################
+
+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.
@@ -230,7 +351,12 @@ AC_DEFUN(AC_CHECK_ICMP,
                    i.icmp_id = 0;
                    i.icmp_seq = 0;
                    si.sin_family = AF_INET;
-                   ip.ip_hl = 0;],
+                   #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
@@ -264,7 +390,7 @@ AC_DEFUN(AC_CHECK_ICMPHDR,
                    struct ip ip;
                    i.type = ICMP_ECHO;
                    i.code = 0;
-                   i.cksum = 0;
+                   i.checksum = 0;
                    i.un.echo.id = 0;
                    i.un.echo.sequence = 0;
                    si.sin_family = AF_INET;
@@ -288,17 +414,17 @@ AC_DEFUN(AC_CHECK_ICMPHDR,
 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])
 
@@ -436,15 +562,15 @@ AC_DEFUN(AC_X_RANDOM_PATHS,
       #
       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
+        if test -d /usr/include/$version || test -d /usr/contrib/$version/include
         then
            # if contrib exists, use it...
-           if test -d /usr/contrib/$version/lib ; then
+           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/lib/$version ; then
+           if test -d /usr/include/$version ; then
              X_CFLAGS="$X_CFLAGS -I/usr/include/$version"
              X_LIBS="$X_LIBS -L/usr/lib/$version"
            fi
@@ -456,21 +582,29 @@ AC_DEFUN(AC_X_RANDOM_PATHS,
       # Now find Motif.  Thanks for not making xmkmf find this by
       # default, you losers.
       #
-      if test -d /usr/lib/Motif1.2 ; then
+      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/lib/Motif1.1 ; then
+      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/Mesa/lib ; then
+      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"
@@ -497,10 +631,20 @@ AC_DEFUN(AC_X_RANDOM_PATHS,
       #
       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"
+        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, [X_LIBS="$X_LIBS -lgen"])
+        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])
@@ -521,7 +665,7 @@ AC_DEFUN(AC_CHECK_X_HEADER, [
     CPPFLAGS="$CPPFLAGS -I$includedir"
   fi
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  AC_CHECK_HEADER([$1], [$2])
+  AC_CHECK_HEADER([$1],[$2],[$3],[$4])
   CPPFLAGS="$ac_save_CPPFLAGS"])
 
 # Like AC_EGREP_HEADER, but it uses the already-computed -I directories.
@@ -654,15 +798,26 @@ AC_DEFUN(HANDLE_X_PATH_ARG, [
 # random compiler setup
 AC_CANONICAL_HOST
 AC_PROG_CC_ANSI
+AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE
+AC_NO_OBJECTIVE_C
 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
 
+# 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.)
+#
+INSTALL_SCRIPT='${INSTALL}'
+
 # random libc stuff
 AC_HEADER_STDC
 AC_CHECK_HEADERS(unistd.h)
@@ -674,9 +829,8 @@ AC_HEADER_TIME
 AC_HEADER_SYS_WAIT
 AC_HEADER_DIRENT
 AC_GETTIMEOFDAY_ARGS
-AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv)
-
-AC_CHECK_FUNCS(sigaction syslog realpath)
+AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv sbrk)
+AC_CHECK_FUNCS(sigaction syslog realpath setrlimit)
 AC_CHECK_ICMP
 AC_CHECK_ICMPHDR
 AC_CHECK_HEADERS(crypt.h sys/select.h)
@@ -684,19 +838,45 @@ AC_PROG_PERL
 
 if test -z "$PERL" ; then
   # don't let it be blank...
-  PERL=/usr/local/bin/perl5
+  PERL=/usr/bin/perl
 fi
 
 AC_PATH_XTRA
 
 if test "$have_x" != yes; then
-  AC_MSG_ERROR(Couldn't find X11 headers/libs.  Try \`$0 --help'.)
+  AC_MSG_ERROR(Couldn't find X11 headers/libs.  Try `$0 --help'.)
 fi
 
 AC_PATH_X_APP_DEFAULTS
 AC_X_RANDOM_PATHS
 AC_XPOINTER
 
+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)
+
+
+
+###############################################################################
+#
+#       Gettext support
+#
+###############################################################################
+
+AC_PROG_INTLTOOL
+GETTEXT_PACKAGE=xscreensaver
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE")
+AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE")
+AC_SUBST(GETTEXT_PACKAGE)
+
+ALL_LINGUAS="ca da de es et fi fr hu it ja ko nl no pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
+AM_GLIB_GNU_GETTEXT
+MKINSTALLDIRS="$INSTALL_DIRS"
 
 
 ###############################################################################
@@ -706,19 +886,18 @@ AC_XPOINTER
 ###############################################################################
 
 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"
-  MOTIF_LIBS="-lXmu $MOTIF_LIBS"
-  GTK_LIBS="-lXmu $GTK_LIBS"
-  ATHENA_LIBS="-lXmu $ATHENA_LIBS"
-  ATHENA3D_LIBS="-lXmu $ATHENA3D_LIBS"
+  XMU_LIBS='-lXmu'
   AC_DEFINE(HAVE_XMU)
 fi
 
@@ -768,43 +947,87 @@ fi
 
 ###############################################################################
 #
-#       Handle the --enable-subdir option
+#       Handle the --with-hackdir option
 #
 ###############################################################################
 
-AC_ARG_ENABLE(subdir,[
+have_hackdir=yes
+with_hackdir_req=unspecified
+AC_ARG_WITH(hackdir,[
 Installation options:
 
-  --enable-subdir=DIR     Put the demo programs in a subdirectory of \`bindir',
-                          instead of putting them in bindir itself.  You can
-                          specify the name of the subdirectory.  For example,
-                          \`--exec-prefix=/usr/local --enable-subdir=demos'
-                          would put xscreensaver in /usr/local/bin/, and would
-                          put the demos in /usr/local/bin/demos/.  (If DIR
-                          begins with /, then bindir will not be prepended.)
+  --with-hackdir=DIR      Where to install the hundreds of demo executables.
+                          Default: `PREFIX/lib/xscreensaver/'],
+  [with_hackdir="$withval"; with_hackdir_req="$withval"],[with_hackdir=yes])
 
-  --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
+if test x"$with_hackdir" = xyes; then
+  HACKDIR='${exec_prefix}/lib/xscreensaver'
+elif test x"$with_hackdir" = 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
+  if test -z "`echo $with_hackdir | sed 's@^/.*@@'`" ; then
     # absolute path
-    HACKDIR=$enable_subdir
+    HACKDIR=$with_hackdir
   else
     # relative path
-    HACKDIR='${bindir}/'$enable_subdir
+    HACKDIR="\${exec_prefix}$with_hackdir"
   fi
 fi
 
 # canonicalize slashes.
 HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'`
 
+# This option used to be called --enable-subdir; make sure that is no longer
+# used, since configure brain-damagedly ignores unknown --enable options.
+
+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
+
+
+###############################################################################
+#
+#       Handle the --with-configdir option
+#
+###############################################################################
+
+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: `GNOMEPREFIX/control-center/screensavers/'
+                          or `PREFIX/lib/xscreensaver/config/', depending on
+                          whether GNOME is available.
+],
+  [with_configdir="$withval"; with_configdir_req="$withval"],
+  [with_configdir=yes])
+
+if test x"$with_configdir" = xyes; then
+  # filled in later...
+  HACK_CONF_DIR=''
+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
+
+
+
 
 ###############################################################################
 #
@@ -816,7 +1039,7 @@ 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
+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.  
 
@@ -836,7 +1059,8 @@ 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)])
+                     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"
@@ -859,7 +1083,8 @@ AC_ARG_WITH(mit-ext,
 HANDLE_X_PATH_ARG(with_mit, --with-mit-ext, MIT-SCREEN-SAVER)
 
 if test "$with_mit" = yes; then
-  AC_CHECK_X_HEADER(X11/extensions/scrnsaver.h, [have_mit=yes])
+  AC_CHECK_X_HEADER(X11/extensions/scrnsaver.h, [have_mit=yes],,
+                    [#include <X11/Xlib.h>])
 
   # 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!
@@ -914,7 +1139,8 @@ 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)])
+                     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
@@ -938,7 +1164,8 @@ 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])
+  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
@@ -976,16 +1203,26 @@ 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])
+  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 -lXdpms
+  # 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(Xdpms, DPMSInfo,
-                  [have_dpms=yes; SAVER_LIBS="$SAVER_LIBS -lXdpms"], [true],
-                  -lXext -lX11)
+    AC_CHECK_X_LIB(Xext, DPMSInfo, [have_dpms=yes], [true], -lXext -lX11)
+
+    # if that failed, look in -lXdpms (this is where it was in XFree86 3.x)
+    if test "$have_dpms" = no; then
+      AC_CHECK_X_LIB(Xdpms, DPMSInfo,
+                    [have_dpms=yes; XDPMS_LIBS="-lXdpms"], [true],
+                    -lXext -lX11)
+    fi
   fi
 
+
   # if that succeeded, then we've really got it.
   if test "$have_dpms" = yes; then
     AC_DEFINE(HAVE_DPMS_EXTENSION)
@@ -999,7 +1236,54 @@ fi
 
 ###############################################################################
 #
-#       Check for the XF86VMODE server extension.
+#       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; SAVER_LIBS="$SAVER_LIBS -lXinerama"],
+                     [true], -lXext -lX11)
+    fi
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test "$have_xinerama" = yes; then
+    AC_DEFINE(HAVE_XINERAMA)
+  fi
+
+elif test "$with_xinerama" != no; then
+  echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama"
+  exit 1
+fi
+
+
+###############################################################################
+#
+#       Check for the XF86VMODE server extension (for virtual screens.)
 #
 ###############################################################################
 
@@ -1012,16 +1296,21 @@ AC_ARG_WITH(xf86vmode-ext,
 
 HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode)
 
+VIDMODE_LIBS=""
+
 if test "$with_xf86vmode" = yes; then
 
   # first check for xf86vmode.h
-  AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes])
+  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; SAVER_LIBS="$SAVER_LIBS -lXxf86vm"],
+                  [have_xf86vmode=yes;
+                   VIDMODE_LIBS="-lXxf86vm";
+                   SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"],
                    [true], -lXext -lX11)
   fi
 
@@ -1036,15 +1325,156 @@ elif test "$with_xf86vmode" != no; then
 fi
 
 
+###############################################################################
+#
+#       Check for the XF86VMODE server extension (for gamma fading.)
+#
+###############################################################################
+
+have_xf86gamma=no
+have_xf86gamma_ramp=no
+with_xf86gamma_req=unspecified
+AC_ARG_WITH(xf86gamma-ext,
+[  --with-xf86gamma-ext    Include support for XFree86 gamma fading.],
+  [with_xf86gamma="$withval"; with_xf86gamma_req="$withval"],
+  [with_xf86gamma=yes])
+
+HANDLE_X_PATH_ARG(with_xf86gamma, --with-xf86gamma-ext, xf86gamma)
+
+if test "$with_xf86gamma" = yes; then
+
+  # first check for xf86vmode.h, if we haven't already
+  if test "$have_xf86vmode" = yes; then
+    have_xf86gamma=yes
+  else
+    AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86gamma=yes],,
+                      [#include <X11/Xlib.h>])
+  fi
+
+  # if that succeeded, then check for the -lXxf86vm
+  if test "$have_xf86gamma" = yes; then
+    have_xf86gamma=no
+    AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGamma,
+                  [have_xf86gamma=yes],
+                   [true], -lXext -lX11)
+  fi
+
+  # check for the Ramp versions of the functions too.
+  if test "$have_xf86gamma" = yes; then
+    have_xf86gamma_ramp=no
+    AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGammaRamp,
+                  [have_xf86gamma_ramp=yes],
+                   [true], -lXext -lX11)
+  fi
+
+  # if those tests succeeded, then we've really got the functions.
+  if test "$have_xf86gamma" = yes; then
+    AC_DEFINE(HAVE_XF86VMODE_GAMMA)
+  fi
+
+  if test "$have_xf86gamma_ramp" = yes; then
+    AC_DEFINE(HAVE_XF86VMODE_GAMMA_RAMP)
+  fi
+
+  # pull in the lib, if we haven't already
+  if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then
+    SAVER_LIBS="$SAVER_LIBS -lXxf86vm"
+  fi
+
+elif test "$with_xf86gamma" != no; then
+  echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode"
+  exit 1
+fi
+
+
+###############################################################################
+#
+#       Check for the RANDR (Resize and Rotate) server extension.
+#
+#       We need this to detect when the resolution of the desktop
+#       has changed out from under us (this is a newer, different
+#       mechanism than the XF86VMODE virtual viewports.)
+#
+###############################################################################
+
+have_randr=no
+with_randr_req=unspecified
+AC_ARG_WITH(randr-ext,
+[  --with-randr-ext        Include support for the X Resize+Rotate extension.],
+  [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes])
+
+HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR)
+
+if test "$with_randr" = yes; then
+
+  # first check for Randr.h
+  AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],,
+                    [#include <X11/Xlib.h>])
+
+  # if that succeeded, then check for the XRR code in the libraries
+  if test "$have_randr" = yes; then
+
+    # RANDR probably needs -lXrender
+    xrender_libs=
+    AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder,
+                   [xrender_libs="-lXrender"], [true], -lXext -lX11)
+
+    # first look for RANDR in -lXext
+    have_randr=no
+    AC_CHECK_X_LIB(Xext, XRRGetScreenInfo,
+                   [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"],
+                   [true], $xrender_libs -lXext -lX11)
+
+    # if that failed, look in -lXrandr
+    if test "$have_randr" = no; then
+      AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo,
+             [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"],
+                     [true], $xrender_libs -lXext -lX11)
+    fi
+  fi
+
+  # if that succeeded, then we've really got it.
+  if test "$have_randr" = yes; then
+    AC_DEFINE(HAVE_RANDR)
+  fi
+
+elif test "$with_randr" != no; then
+  echo "error: must be yes or no: --with-randr-ext=$with_randr"
+  exit 1
+fi
+
+
+###############################################################################
+#
+#       Check for XF86MiscSetGrabKeysState (but only bother if we are already
+#      using other XF86 stuff.)
+#
+###############################################################################
+
+have_xf86miscsetgrabkeysstate=no
+if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
+  AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState,
+                [have_xf86miscsetgrabkeysstate=yes],
+                [true], -lXext -lX11)
+  if test "$have_xf86miscsetgrabkeysstate" = yes ; then
+    SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
+    AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE)
+  fi
+fi
+
+
 ###############################################################################
 #
 #       Check for HP XHPDisableReset and XHPEnableReset.
 #
 ###############################################################################
 
+AC_MSG_CHECKING([for XHPDisableReset in X11/XHPlib.h])
 AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h,
                   [AC_DEFINE(HAVE_XHPDISABLERESET)
-                   SAVER_LIBS="-lXhp11 $SAVER_LIBS"])
+                   SAVER_LIBS="-lXhp11 $SAVER_LIBS"
+                   AC_MSG_RESULT(yes)],
+                  [AC_MSG_RESULT(no)])
 
 
 ###############################################################################
@@ -1092,8 +1522,7 @@ AC_ARG_ENABLE(locking,[
 Screen locking options:
 
   --enable-locking        Compile in support for locking the display.
-  --disable-locking       Do not allow locking at all.
-],
+  --disable-locking       Do not allow locking at all.],
   [enable_locking="$enableval"],[enable_locking=yes])
 if test "$enable_locking" = yes; then
   true
@@ -1104,6 +1533,15 @@ else
   exit 1
 fi
 
+# We can't lock on MacOS X, so don't even bother compiling in support for it.
+#
+if test "$ac_macosx" = yes; then
+  if test "$enable_locking" = yes; then
+    AC_MSG_RESULT(locking disabled: it doesn't work on MacOS X)
+    enable_locking=no
+    AC_DEFINE(NO_LOCKING)
+  fi
+fi
 
 
 ###############################################################################
@@ -1146,7 +1584,6 @@ fi
 #fi
 
 
-
 ###############################################################################
 #
 #       Check for PAM.
@@ -1188,6 +1625,13 @@ if test "$enable_locking" = yes -a "$with_pam" = yes; then
     # 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])
+    if test "$have_timedwait" = no ; then
+      AC_CHECK_LIB(rt, 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_COMPILE([#include <stdio.h>
@@ -1224,6 +1668,7 @@ fi
 ###############################################################################
 
 have_kerberos=no
+have_kerberos5=no
 with_kerberos_req=unspecified
 
 AC_ARG_WITH(kerberos, 
@@ -1233,21 +1678,65 @@ AC_ARG_WITH(kerberos,
 HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos)
 
 if test "$enable_locking" = yes -a "$with_kerberos" = yes; then
-  AC_CACHE_CHECK([for Kerberos], ac_cv_kerberos,
+  AC_CACHE_CHECK([for Kerberos 4], ac_cv_kerberos,
                  [AC_TRY_X_COMPILE([#include <krb.h>],,
                                    [ac_cv_kerberos=yes],
                                    [ac_cv_kerberos=no])])
+  AC_CACHE_CHECK([for Kerberos 5], ac_cv_kerberos5,
+                 [AC_TRY_X_COMPILE([#include <kerberosIV/krb.h>],,
+                                   [ac_cv_kerberos5=yes],
+                                   [ac_cv_kerberos5=no])])
+
   if test "$ac_cv_kerberos" = yes ; then
     have_kerberos=yes
     AC_DEFINE(HAVE_KERBEROS)
+  fi
+
+  if test "$ac_cv_kerberos5" = yes ; then
+
+    # Andrew Snare <ajs@pigpond.com> wrote:
+    #
+    # You were assuming that if kerberosV (krb5) was found, then kerberosIV
+    # (krb4) was also available.  This turns out not to be the case with
+    # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV
+    # is optional.
+    #
+    # So, disable kerberosV support if libkrb4 can't be found.
+    # This is not the best solution, but it makes the compile not fail.
+    #
+    AC_CHECK_X_LIB(krb4, krb_get_tf_realm,
+                   [have_kerberos=yes],
+                   [have_kerberos=no])
+    if test "$have_kerberos" = yes ; then
+      have_kerberos5=yes
+      AC_DEFINE(HAVE_KERBEROS)
+      AC_DEFINE(HAVE_KERBEROS5)
+    else
+      have_kerberos5=no
+      AC_MSG_WARN([Cannot find compat lib (libkrb4) needed to use Kerberos 5])
+    fi
+
+  fi
+
+  if test "$have_kerberos5" = yes ; then
+    # from Matt Knopp <mhat@infocalypse.netlag.com>
+    # (who got it from amu@mit.edu)
+
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"
+
+    # jwz: MacOS X uses -lkrb5, but not -lcrypt
+    AC_CHECK_X_LIB(crypt, crypt, [PASSWD_LIBS="$PASSWD_LIBS -lcrypt"])
 
-    # from Tim Showalter <tjs+@andrew.cmu.edu>
-    PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes"
+  elif test "$have_kerberos" = yes ; then
+    # from Tim Showalter <tjs@psaux.com> for FreeBSD 4.2
+    PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err"
+  fi
+
+  if test "$have_kerberos" = yes ; then
     AC_CHECK_FUNC(res_search,,
       AC_CHECK_LIB(resolv,res_search,PASSWD_LIBS="${PASSWD_LIBS} -lresolv",
         AC_MSG_WARN([Can't find DNS resolver libraries needed for Kerberos])
       ))
-
   fi
 fi
 
@@ -1468,6 +1957,44 @@ elif test "$have_shadow" = yes ; then
 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 -lXm.
@@ -1479,8 +2006,9 @@ with_motif_req=unspecified
 AC_ARG_WITH(motif,[
 User interface options:
 
-  --with-motif            Use the Motif toolkit for the user interface.],
-  [with_motif="$withval"; with_motif_req="$withval"],[with_motif=yes])
+  --with-motif            Use the Motif toolkit for the user interface
+                          (not recommended.)],
+  [with_motif="$withval"; with_motif_req="$withval"],[with_motif=no])
 
 HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif)
 
@@ -1494,17 +2022,29 @@ if test "$with_motif" = yes; then
   AC_CHECK_X_HEADER(Xm/Xm.h,
                     [have_motif=yes
                      AC_DEFINE(HAVE_MOTIF)
-                     MOTIF_LIBS="$MOTIF_LIBS -lXm"])
+                     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
 
 
 ###############################################################################
 #
-#       Check for -lgtk.
+#       Check for -lgtk (and Gnome stuff)
 #
 ###############################################################################
 
 have_gtk=no
+have_gtk2=no
 with_gtk_req=unspecified
 AC_ARG_WITH(gtk,
 [  --with-gtk              Use the Gtk toolkit for the user interface.],
@@ -1528,113 +2068,489 @@ if test "$with_gtk" != yes -a "$with_gtk" != no ; then
   exit 1
 fi
 
+have_gnome=no
+with_gnome_req=unspecified
+AC_ARG_WITH(gnome,
+[  --with-gnome            Include support for the Gnome 1.x Control Center.
+                          (This option is not needed with GTK 2.x / Gnome 2.x.)
+],
+  [with_gnome="$withval"; with_gnome_req="$withval"],[with_gnome=yes])
+
+# if --with-gnome=/directory/ was specified, remember that directory so that
+# we can also look for the `gnome-config' program in that directory.
+case "$with_gnome" in
+  /*)
+    gnome_dir="$with_gnome"
+    ;;
+  *)
+    gnome_dir=""
+    ;;
+esac
+
+HANDLE_X_PATH_ARG(with_gnome, --with-gnome, Gnome)
+
+if test "$with_gnome" != yes -a "$with_gnome" != no ; then
+  echo "error: must be yes or no: --with-gnome=$with_gnome"
+  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
+}
+
+
 jurassic_gtk=no
+gtk2_halfassed=no
+
 if test "$with_gtk" = yes; then
   have_gtk=no
   
-  # if the user specified --with-gtk=/foo/ then look in /foo/bin/
-  # for glib-config and gtk-config.
+  # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
+  # look in /foo/bin/ for glib-config, gtk-config, and gnome-config.
   #
   gtk_path="$PATH"
 
   if test ! -z "$gtk_dir"; then
     # canonicalize slashes.
-    gtk_dir=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
-    gtk_path="$gtk_dir:$gtk_dir:$gtk_path"
+    foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+    gtk_path="$foo:$gtk_path"
   fi
 
-  AC_PATH_PROGS(glib_config, glib-config,, $gtk_path)
-  AC_PATH_PROGS(gtk_config,  gtk-config,,  $gtk_path)
-
-  if test -n "$glib_config" -a  -n "gtk_config" ; then
-    have_gtk=yes
-  fi
-  if test "$have_gtk" = yes; then
-    AC_CACHE_CHECK([Gtk version number], ac_cv_gtk_version_string,
-                   [ac_cv_gtk_version_string=`$glib_config --version`])
-    ac_gtk_version_string=$ac_cv_gtk_version_string
-    # M4 sucks!!
-    changequote(X,Y)
-    maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'`
-    min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'`
-    changequote([,])
-    ac_gtk_version=`echo "$maj * 1000 + $min" | bc`
-    if test -z "$ac_gtk_version"; then
-      ac_gtk_version=unknown
-      ac_gtk_version_string=unknown
-    fi
-    if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
-    then
-      have_gtk=no
-      jurassic_gtk=yes
-    fi
-  fi
-  if test "$have_gtk" = yes; then
-    AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
-                   [ac_cv_gtk_config_cflags=`$gtk_config --cflags`])
-    AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
-                   [ac_cv_gtk_config_libs=`$gtk_config --libs`])
-    INCLUDES="$INCLUDES $ac_cv_gtk_config_cflags"
-    GTK_LIBS="$GTK_LIBS $ac_cv_gtk_config_libs"
-    AC_DEFINE(HAVE_GTK)
+  if test ! -z "$gnome_dir"; then
+    # canonicalize slashes.
+    foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+    gtk_path="$foo:$gtk_path"
   fi
-fi
-
 
-###############################################################################
-#
-#       Check for -lXaw and -lXaw3d.
-#
-###############################################################################
+  AC_PATH_PROGS(pkg_config, pkg-config,, $gtk_path)
 
-have_athena=no
-have_athena3d=no
-with_athena_req=unspecified
-AC_ARG_WITH(athena,
-[  --with-athena           Use the Athena toolkit for the user interface.],
-  [with_athena="$withval"; with_athena_req="$withval"],[with_athena=yes])
+  if test -n "$pkg_config" ; then
+    #
+    # the new way...
+    # run 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
+    }
 
-HANDLE_X_PATH_ARG(with_athena, --with-athena, Athena)
+    AC_MSG_RESULT(checking for GTK 2.x with pkg-config based tests...)
 
+    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      0.1
+    have_gtk="$ok"
 
-if test "$with_athena" != yes -a "$with_athena" != no ; then
-  echo "error: must be yes or no: --with-athena=$with_athena"
-  exit 1
-fi
+    if test "$have_gtk" = yes; then
+      have_gtk2=yes
+      AC_DEFINE(HAVE_GTK2)
+    else
+      if test -n "$ac_gtk_version_string" ; then
+        gtk2_halfassed="$ac_gtk_version_string"
+        gtk2_halfassed_lib="$req"
+      fi
+    fi
+
+    if test "$have_gtk" = no; then
+      #
+      # we don't have GTK 2.  Let's look for GTK 1.
+      #
+      AC_MSG_RESULT(checking for GTK 1.x with pkg-config based tests...)
+
+      pkgs=''
+      ok="yes"
+      pkg_check_version gtk+       1.2     ; ac_gtk_version_string="$vers"
+      pkg_check_version glib       1.0
+      pkg_check_version gdk_pixbuf 0.1
+      have_gtk="$ok"
+
+      # Now check for Gnome...
+      #
+      if test "$have_gtk" = yes -a "$with_gnome" = yes; then
+        old_pkgs="$pkgs"
+        ok=yes
+        pkg_check_version capplet    1.0
+        pkg_check_version gnomeui    1.0
+        pkg_check_version gdk_pixbuf 0.1
+        have_gnome="$ok"
+
+        if test "$have_gnome" = no; then
+          pkgs="$old_pkgs"
+        else
+          AC_DEFINE(HAVE_CRAPPLET)
+        fi
+      fi
+    fi
+
+    if test "$have_gtk" = yes; then
+      parse_gtk_version_string
+      jurassic_gtk=no
+    else
+      have_gnome=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
+
+    ac_gnome_config_cflags=$ac_gtk_config_cflags
+    ac_gnome_config_libs=$ac_gtk_config_libs
+
+  else
+    #
+    # the old way...
+    # run {gnome,gtk}-config based tests.
+    #
+    AC_MSG_RESULT(checking for GTK 1.x with gtk-config based tests...)
+
+    AC_PATH_PROGS(glib_config,  glib12-config glib-config,,  $gtk_path)
+    AC_PATH_PROGS(gtk_config,   gtk12-config  gtk-config,,   $gtk_path)
+
+    if test "$with_gnome" = yes; then
+      AC_PATH_PROGS(gnome_config, gnome-config,, $gtk_path)
+    fi
+
+    if test -n "$glib_config" -a  -n "$gtk_config" ; then
+      have_gtk=yes
+      if test "$with_gnome" = yes -a -n "$gnome_config" ; then
+        have_gnome=yes
+      fi
+    fi
+
+    if test "$have_gtk" = yes; then
+      AC_CACHE_CHECK([Gtk version number], ac_cv_gtk_version_string,
+                     [ac_cv_gtk_version_string=`$gtk_config --version`])
+      ac_gtk_version_string=$ac_cv_gtk_version_string
+      parse_gtk_version_string
+    fi
+
+    if test "$have_gtk" = yes; then
+      if test "$ac_gtk_version" = "unknown" || test "$ac_gtk_version" -lt 1002
+      then
+        have_gtk=no
+        have_gnome=no
+        jurassic_gtk=yes
+      fi
+    fi
+
+    if test "$have_gtk" = yes; then
+      AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags,
+                     [ac_cv_gtk_config_cflags=`$gtk_config --cflags`])
+      AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs,
+                     [ac_cv_gtk_config_libs=`$gtk_config --libs`])
+    fi
+    ac_gtk_config_cflags=$ac_cv_gtk_config_cflags
+    ac_gtk_config_libs=$ac_cv_gtk_config_libs
+
+    # Check for Gnome Capplet support.
+    # Note that this is only needed with Gnome 1.x, not Gnome 2.x.
+    # In a Gnome 2.x world, libcapplet will not exist.
+    # (In fact, this likely won't even be checked, since in a Gnome 2.x
+    # world, we will probably be up in the "$pkg_config" branch instead
+    # of here in the "$gnome_config" branch.)
+    #
+    if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+      gnome_config_libs="gtk capplet gnomeui gdk_pixbuf"
+      AC_MSG_CHECKING(for Gnome capplet includes)
+      AC_CACHE_VAL(ac_cv_gnome_config_cflags,
+        [if ( $gnome_config --cflags $gnome_config_libs 2>&1 | \
+              grep Unknown >/dev/null ) ; then
+           ac_cv_gnome_config_cflags=''
+         else
+          ac_cv_gnome_config_cflags=`$gnome_config --cflags $gnome_config_libs`
+         fi])
+      ac_gnome_config_cflags=$ac_cv_gnome_config_cflags
+      if test "$ac_gnome_config_cflags" = "" ; then
+        have_gnome=no
+        AC_MSG_RESULT(no)
+      else
+        AC_MSG_RESULT($ac_gnome_config_cflags)
+      fi
+    fi
+
+    if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+      AC_MSG_CHECKING(for Gnome capplet libs)
+      AC_CACHE_VAL(ac_cv_gnome_config_libs,
+        [if ( $gnome_config --libs $gnome_config_libs 2>&1 |
+              grep Unknown >/dev/null ) ; then
+           ac_cv_gnome_config_libs=''
+         else
+           ac_cv_gnome_config_libs=`$gnome_config --libs $gnome_config_libs`
+         fi])
+      ac_gnome_config_libs=$ac_cv_gnome_config_libs
+      if test "$ac_gnome_config_libs" = "" ; then
+        have_gnome=no
+        AC_MSG_RESULT(no)
+      else
+        AC_MSG_RESULT($ac_gnome_config_libs)
+      fi
+    fi
+
+    # If we have Gnome, then override the gtk-config values with 
+    # the gnome-config values.
+    #
+    if test "$have_gnome" = yes -a "$have_gtk" = yes; then
+      ac_gtk_config_cflags=$ac_gnome_config_cflags
+      ac_gtk_config_libs=$ac_gnome_config_libs
+      AC_DEFINE(HAVE_CRAPPLET)
+    fi
+
+  fi   # end of {gnome,gtk}-config based tests
+
+  if test "$have_gtk" = yes -a "$have_gtk2" = no; then
+    # check for this function that was not in libcapplet 1.2.
+    # (only needed in Gnome/Gtk 1.x, not Gnome/Gtk 2.x)
+    AC_CHECK_X_LIB(capplet, capplet_widget_changes_are_immediate,
+                   [AC_DEFINE(HAVE_CRAPPLET_IMMEDIATE)], [true],
+                   $ac_gnome_config_libs)
+  fi
+
+
+  GNOME_DATADIR=""
+  if test "$have_gtk" = yes; then
+    if test -n "$pkg_config"; then
+      if test "$have_gtk2" = yes; then
+        GNOME_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+      else
+        GNOME_DATADIR=`$pkg_config --variable=prefix gtk+`
+      fi
+    else
+      GNOME_DATADIR=`$gtk_config --prefix`
+    fi
+    GNOME_DATADIR="$GNOME_DATADIR/share"
+  fi
 
+  # .desktop files go in different places in Gnome 1.x and Gnome 2.x...
+  if test "$have_gtk2" = yes; then
+    GNOME_PANELDIR='$(GNOME_PANELDIR2)'
+  else
+    GNOME_PANELDIR='$(GNOME_PANELDIR1)'
+  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)
 
-if test "$with_athena" = yes; then
-  have_athena=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], [true],
-                  -lXt -lXmu -lXext -lX11)
+    if test "$have_gtk2" = yes; then
+      GTK_EXTRA_OBJS=""
+    else
+      GTK_EXTRA_OBJS="\$(GTK_EXTRA_OBJS)"
+    fi
   fi
+
 fi
 
-if test "$have_athena" = yes; then
-  AC_DEFINE(HAVE_ATHENA)
-  ATHENA_LIBS="-lXaw $ATHENA_LIBS"
+
+# Check for the Gnome Help Browser.
+#
+if test "$have_gtk" = yes; then
+  AC_CHECK_PROGS(have_gnome_help, yelp gnome-help-browser, no)
+  if test "$have_gnome_help" != no; then
+    have_gnome_help=yes
+  fi
 fi
 
-if test "$have_athena3d" = yes; then
-  ATHENA3D_LIBS="-lXaw3d $ATHENA3D_LIBS"
+
+###############################################################################
+#
+#       Check for -lxml
+#
+###############################################################################
+
+have_xml=no
+with_xml_req=unspecified
+xml_halfassed=no
+AC_ARG_WITH(xml,
+[  --with-xml              The XML toolkit is needed for some parts of
+                          the Gtk interface.  Without it, the configuration
+                          interface will be much less featureful.],
+[with_xml="$withval"; with_xml_req="$withval"],[with_xml=yes])
+
+# if --with-xml=/directory/ was specified, remember that directory so that
+# we can also look for the `xml-config' program in that directory.
+case "$with_xml" in
+  /*)
+    xml_dir="$with_xml"
+    ;;
+  *)
+    xml_dir=""
+    ;;
+esac
+
+HANDLE_X_PATH_ARG(with_xml, --with-xml, XML)
+
+if test "$with_xml" != yes -a "$with_xml" != no ; then
+  echo "error: must be yes or no: --with-xml=$with_xml"
+  exit 1
 fi
 
+if test "$with_xml" = yes; then
+  have_xml=no
+  have_old_xml=no
+
+  # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
+  # look in /foo/bin/ for for xml-config.
+  #
+  xml_path="$PATH"
 
-# 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 ! -z "$gtk_dir"; then
+    # canonicalize slashes.
+    foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+    xml_path="$foo:$xml_path"
   fi
+
+  if test ! -z "$gnome_dir"; then
+    # canonicalize slashes.
+    foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+    xml_path="$foo:$xml_path"
+  fi
+
+  if test -n "$pkg_config" ; then
+    #
+    # the new way...
+    # run pkg-config based tests.
+    #
+    pkgs=""
+    ok="yes"
+
+    # If we have Gtk 2.x, then *only* XML 2.x will work.
+    # If we have Gtk 1.x, or don't have Gtk at all, then
+    # either XML 1.x or 2.x will work.
+
+    # First check for XML 2.x.
+    #
+    pkg_check_version libxml-2.0 2.4.6
+
+    # If that didn't work (we don't have XML 2.x) and we *don't* have
+    # Gtk 2.x, then check to see if we have XML 1.x
+    #
+    if test "$ok" = no -a "$have_gtk2" = no; then
+      ok=yes
+      pkg_check_version libxml 1.0
+    fi
+
+    have_xml="$ok"
+
+    if test "$have_xml" = yes; then
+      AC_CACHE_CHECK([for XML includes], ac_cv_xml_config_cflags,
+                     [ac_cv_xml_config_cflags=`$pkg_config --cflags $pkgs`])
+      AC_CACHE_CHECK([for XML libs], ac_cv_xml_config_libs,
+                     [ac_cv_xml_config_libs=`$pkg_config --libs $pkgs`])
+      ac_xml_config_cflags=$ac_cv_xml_config_cflags
+      ac_xml_config_libs=$ac_cv_xml_config_libs
+    fi
+
+  else
+    #
+    # the old way...
+    # run {xml2,xml}-config based tests.
+    #
+
+    AC_PATH_PROGS(xml_config, xml2-config xml-config,, $xml_path)
+
+    # If we found the xml-config program, run it to get flags.
+    #
+    if test -n "$xml_config" ; then
+      AC_CACHE_CHECK([for XML includes], ac_cv_xml_config_cflags,
+                     [ac_cv_xml_config_cflags=`$xml_config --cflags`])
+      AC_CACHE_CHECK([for XML libs], ac_cv_xml_config_libs,
+                     [ac_cv_xml_config_libs=`$xml_config --libs`])
+      ac_xml_config_cflags=$ac_cv_xml_config_cflags
+      ac_xml_config_libs=$ac_cv_xml_config_libs
+    fi
+
+    ac_save_xml_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $ac_xml_config_cflags"
+
+    # first try <libxml/parser.h> which is the new way...
+    #
+    AC_CHECK_X_HEADER(libxml/xmlIO.h, [have_xml=yes],,
+                      [#include <libxml/parser.h>])
+
+    # if that didn't work, then try just <parser.h> which is the old way...
+    #
+    if test "$have_xml" = no; then
+      AC_CHECK_X_HEADER(xmlIO.h, [have_xml=yes; have_old_xml=yes],,
+                        [#include <parser.h>])
+    fi
+
+    CPPFLAGS="$ac_save_xml_CPPFLAGS"
+  fi
+
+
+  have_zlib=no
+  if test "$have_xml" = yes; then
+    # we have the XML headers; now make sure zlib is around.
+    # yes, it's stupid we have to do this too, but there is
+    # dependency screwage in Gnome.
+    AC_CHECK_X_LIB(z, zlibVersion, [have_zlib=yes])
+    if test "$have_zlib" = no; then
+      xml_halfassed=yes
+      have_xml=no
+    fi
+  fi
+
+  if test "$have_xml" = yes; then
+    # we have the header, now check for the library
+    have_xml=no
+    xml_halfassed=yes
+    AC_CHECK_X_LIB(c, xmlParseChunk,
+                   [have_xml=yes
+                    xml_halfassed=no
+                    XML_LIBS="$ac_xml_config_libs"
+                    AC_DEFINE(HAVE_XML)],
+                   [true],
+                   $ac_xml_config_libs)
+  fi
+
+  if test "$have_xml" = yes; then
+    INCLUDES="$INCLUDES $ac_xml_config_cflags"
+    GTK_LIBS="$GTK_LIBS $ac_xml_config_libs"
+    AC_DEFINE(HAVE_XML)
+    if test "$have_old_xml" = yes; then
+      AC_DEFINE(HAVE_OLD_XML_HEADERS)
+    fi
+  fi
+
 fi
 
 
@@ -1789,6 +2705,7 @@ fi
 have_gl=no
 ac_have_mesa_gl=no
 with_gl_req=unspecified
+gl_halfassed=no
 AC_ARG_WITH(gl,[
 Graphics options:
 
@@ -1803,7 +2720,8 @@ 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.
@@ -1815,7 +2733,7 @@ if test "$with_gl" = yes; then
     #
     AC_CACHE_CHECK([whether GL is really MesaGL], ac_cv_have_mesa_gl,
       [ac_cv_have_mesa_gl=no
-       AC_EGREP_X_HEADER(Mesa, GL/glx.h, [ac_cv_have_mesa_gl=yes])
+       AC_EGREP_X_HEADER(Mesa|MESA, GL/glx.h, [ac_cv_have_mesa_gl=yes])
       ])
     ac_have_mesa_gl=$ac_cv_have_mesa_gl
  
@@ -1841,21 +2759,22 @@ if test "$with_gl" = yes; then
     if test "$ac_have_mesa_gl" = yes ; then
       AC_CHECK_X_LIB(MesaGL, glXCreateContext, 
                      [gl_lib_1="MesaGL"
-                      GL_LIBS="-lMesaGL -lMesaGLU $GL_LIBS"],
-                     [], -lMesaGLU $GL_LIBS -lX11 -lXext -lm)
+                      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 $GL_LIBS"],
-                     [], -lGLU $GL_LIBS -lX11 -lXext -lm)
+                      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
       # linking works -- we can build the GL hacks.
       AC_DEFINE(HAVE_GL)
@@ -1880,6 +2799,32 @@ if test "$with_gl" = yes; then
 #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
 
@@ -1889,10 +2834,12 @@ EOF
          fi
          CPPFLAGS="$CPPFLAGS $X_CFLAGS"
 
-          # M4 sucks!!
+         mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | grep configure:`
+
+         # 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'`
+          mglv=`echo "$mglv" | sed -n \
+             's/^configure: *\([0-9][0-9]*\)  *\([0-9].*\)$/\1.\2/p'`
          changequote([,])
 
          rm -f conftest.$ac_ext
@@ -1903,9 +2850,12 @@ EOF
            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
@@ -1924,28 +2874,6 @@ EOF
     #
     AC_CHECK_X_LIB($gl_lib_1, glBindTexture, [AC_DEFINE(HAVE_GLBINDTEXTURE)],
                    [true], $GL_LIBS -lX11 -lXext -lm)
-
-
-    # Check whether the `xscreensaver' executable should link against GL.
-    # See comments in utils/visual-gl.c for why this is sometimes necessary.
-    #
-    AC_MSG_CHECKING(whether drastic GL measures must be taken)
-    case "$host" in
-      *-sgi*)
-        AC_MSG_RESULT([yes -- hello, SGI.])
-        AC_DEFINE(DAEMON_USE_GL)
-        SAVER_GL_SRCS='$(UTILS_SRC)/visual-gl.c'
-        SAVER_GL_OBJS='$(UTILS_BIN)/visual-gl.o'
-        SAVER_GL_LIBS="$GL_LIBS"
-      ;;
-      *)
-        AC_MSG_RESULT([no -- non-SGI.])
-        SAVER_GL_SRCS=''
-        SAVER_GL_OBJS=''
-        SAVER_GL_LIBS=''
-      ;;
-    esac
-
   fi
 
 elif test "$with_gl" != no; then
@@ -1962,6 +2890,7 @@ fi
 
 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.)],
@@ -1971,31 +2900,65 @@ HANDLE_X_PATH_ARG(with_gle, --with-gle, GLE)
 
 GLE_LIBS=""
 
-if test "$with_gle" = yes; then
+if test "$have_gl" = no ; then
+ true
+elif test "$with_gle" = yes; then
 
-  AC_CHECK_X_HEADER(GL/gutil.h, have_gle=yes, have_gle=no)
-  if test "$have_gle" = yes ; then
-    AC_CHECK_X_HEADER(GL/tube.h, have_gle=yes, have_gle=no)
+  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
 
-#          /usr/local/lib/GL/libgle.a
-#          /usr/local/lib/GL/libmatrix.a
-
   if test "$have_gle" = yes ; then
     have_gle=no
+    gle_halfassed=yes
     AC_CHECK_X_LIB(gle, gleCreateGC, 
-                   [have_gle=yes; GLE_LIBS="-lgle"],
+                   [have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle"],
                    [], $GL_LIBS -lX11 -lXext -lm)
   fi
   if test "$have_gle" = yes ; then
     have_gle=no
-    AC_CHECK_X_LIB(matrix, uview_direction_d, 
-                   [have_gle=yes; GLE_LIBS="$GLE_LIBS -lmatrix"],
-                   [], $GL_LIBS -lX11 -lXext -lm)
+    gle_halfassed=yes
+
+    # sometimes the libmatrix stuff is included in libgle.  look there first.
+#
+# I don't get it.  For some reason, this test passes on SGI, as if
+# uview_direction_d() was in libgle -- but it's not, it's in libmatrix.
+# Yet the link is succeeding.  Why???
+#
+#    AC_CHECK_X_LIB(gle, uview_direction_d, 
+#                   [have_gle=yes; gle_halfassed=no],
+#                   [], $GL_LIBS -lX11 -lXext -lm)
+
+    # 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 "$have_gle" = yes ; then
     AC_DEFINE(HAVE_GLE)
+    if test "$have_gle3" = yes ; then
+      AC_DEFINE(HAVE_GLE3)
+    fi
   fi
 
 elif test "$with_gle" != no; then
@@ -2015,7 +2978,8 @@ fi
 have_xpm=no
 with_xpm_req=unspecified
 AC_ARG_WITH(xpm,
-[  --with-xpm              Include support for XPM files in some demos.],
+[  --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)
@@ -2024,7 +2988,8 @@ 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="-lXpm"],,
+                    [#include <X11/Xlib.h>])
 elif test "$with_xpm" != no; then
   echo "error: must be yes or no: --with-xpm=$with_xpm"
   exit 1
@@ -2039,6 +3004,259 @@ if test "$have_motif" = yes -a "$have_xpm" = yes ; then
   fi
 fi
 
+###############################################################################
+#
+#       Check for -lgdk_pixbuf.
+#
+###############################################################################
+
+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.  (The path here is
+                         ignored if GTK 2.x is being used.)],
+  [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"
+    ;;
+  *)
+    gdk_pixbuf_dir=""
+    ;;
+esac
+
+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 "$with_gdk_pixbuf" = yes; then
+  have_gdk_pixbuf=no
+  have_gdk_pixbuf2=no
+
+  if test -n "$pkg_config" ; then
+    #
+    # the new way...
+    # run pkg-config based tests.
+    #
+    pkgs=''
+    ok="yes"
+
+    # If we have Gtk 2.x, then *only* gdk-pixbuf 2.x will work.
+    # If we have Gtk 1.x, then *only* gdk-pixbuf 1.x will work.
+    # If we don't have Gtk at all, then either will work.
+
+    if test "$have_gtk" = no -o "$have_gtk2" = yes; then
+      #
+      # we don't have Gtk; or we have Gtk 2.x.  Check for pixbuf 2.x.
+      #
+      AC_MSG_RESULT(checking for gdk_pixbuf 2.x with gtk-config based tests...)
+      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"
+      have_gdk_pixbuf2="$ok"
+    fi
+
+    if test "$have_gtk" = no -o "$have_gtk2" = no; then
+      #
+      # we don't have Gtk; or we have Gtk 1.x.
+      # If we don't have pixbuf 2.x, then check for pixbuf 1.x.
+      #
+      if test "$have_gdk_pixbuf2" = no; then
+        pkgs=''
+        ok="yes"
+      AC_MSG_RESULT(checking for gdk_pixbuf 1.x with gtk-config based tests...)
+        pkg_check_version gdk_pixbuf      0.0
+        pkg_check_version gdk_pixbuf_xlib 0.0
+        have_gdk_pixbuf="$ok"
+      fi
+    fi
+
+    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
+  fi
+
+
+  if test "$have_gdk_pixbuf" = no; then
+    #
+    # the old way...
+    # run gdk-pixbuf-config based tests.
+    # note that we can't assume that the existence of "pkg-config" means
+    # that we don't have to look for gdk-pixbuf-config -- in Gnome 1.4,
+    # pkg-config exists, but doesn't know about pixbuf.
+    #
+
+   AC_MSG_RESULT(checking for gdk_pixbuf with gdk-pixbuf-config based tests...)
+
+    # if the user specified --with-gtk=/foo/ or --with-gnome=/foo/ then
+    # look in /foo/bin/ for for gdk-pixbuf-config.
+    #
+    gdk_pixbuf_path="$PATH"
+
+    if test ! -z "$gtk_dir"; then
+      # canonicalize slashes.
+      foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
+      gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+    fi
+
+    if test ! -z "$gnome_dir"; then
+      # canonicalize slashes.
+      foo=`echo "${gnome_dir}/bin" | sed 's@//*@/@g'`
+      gdk_pixbuf_path="$foo:$gdk_pixbuf_path"
+    fi
+
+    AC_PATH_PROGS(gdk_pixbuf_config, gdk-pixbuf-config,, $gdk_pixbuf_path)
+
+    # If we found the gdk-pixbuf-config program, run it to get flags.
+    #
+    if test -n "$gdk_pixbuf_config" ; then
+      AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags,
+                [ac_cv_gdk_pixbuf_config_cflags=`$gdk_pixbuf_config --cflags`])
+      AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs,
+                [ac_cv_gdk_pixbuf_config_libs=`$gdk_pixbuf_config --libs`])
+
+      # note that "gdk-pixbuf-config --libs" produces a link line including
+      # -lgdk_pixbuf, but there's no way to get it to produce one that also
+      # includes -lgdk_pixbuf_xlib.  Since we don't know *exactly* what the
+      # name of the library will be, construct it with sed...
+      # M4 sucks!!
+      changequote(X,Y)
+      ac_cv_gdk_pixbuf_config_libs=`echo $ac_cv_gdk_pixbuf_config_libs | \
+       sed 's@ \(-lgdk_pixbuf\([-_a-zA-Z0-9.]*\)\) @ \1 -lgdk_pixbuf_xlib\2 @'`
+      changequote([,])
+
+      ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags
+      ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs
+    fi
+  fi
+
+  ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags"
+
+  if test "$have_gdk_pixbuf" = no; then
+    #
+    # we appear to have pixbuf; check for headers/libs to be sure.
+    #
+
+    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
+  fi
+
+  CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS"
+
+  if test "$have_gdk_pixbuf" = yes; then
+    # we have the headers, now check for the libraries
+    have_gdk_pixbuf=no
+    gdk_pixbuf_halfassed=yes
+
+    # 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 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
+    have_gdk_pixbuf2=no
+  fi
+fi
+
+
+###############################################################################
+#
+#       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 for pty support for 'phosphor'
+#
+###############################################################################
+
+PTY_LIBS=
+AC_CHECK_HEADERS(pty.h util.h)
+AC_CHECK_X_LIB(util, forkpty,
+               [PTY_LIBS="-lutil"
+                AC_DEFINE(HAVE_FORKPTY)])
+
 
 ###############################################################################
 #
@@ -2049,7 +3267,7 @@ fi
 have_xshm=no
 with_xshm_req=unspecified
 AC_ARG_WITH(xshm-ext,
-[  --with-xshm-ext         Include support for the XSHM extension.],
+[  --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)
@@ -2057,7 +3275,8 @@ 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])
+  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
@@ -2079,10 +3298,12 @@ if test "$with_xshm" = yes; then
   #
   case "$host" in
     *-aix*)
-      have_xshm=no
-      AC_CHECK_X_LIB(XextSam, XShmQueryExtension,
-                     [have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"],
-                     [true], -lX11 -lXext -lm)
+      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
 
@@ -2113,7 +3334,8 @@ 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])
+  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
@@ -2145,202 +3367,131 @@ 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))
+                    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 the SGI Iris Video Library.
-#
-###############################################################################
-
-have_sgivideo=no
-with_sgivideo_req=unspecified
-AC_ARG_WITH(sgivideo,
-[  --with-sgivideo         Include support for SGI's Iris Video Library.],
-  [with_sgivideo="$withval"; with_sgivideo_req="$withval"],
-  [with_sgivideo=yes])
-
-HANDLE_X_PATH_ARG(with_sgivideo, --with-sgivideo, Iris Video)
-
-if test "$with_sgivideo" = yes; then
-  AC_CHECK_X_HEADER(dmedia/vl.h, have_sgivideo=yes)
-  if test "$have_sgivideo" = yes; then
-    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)
-    fi
-  fi
-elif test "$with_sgivideo" != no; then
-  echo "error: must be yes or no: --with-sgivideo=$with_sgivideo"
-  exit 1
-fi
-
-
 ###############################################################################
 #
 #       Check for a program to generate random text.
 #
 #       Zippy is funnier than the idiocy generally spat out by `fortune',
-#       so try to find that, by invoking Emacs and asking it where its 
-#       libexec directory is ("yow" lives in there.)
-#
-#       If that doesn't work, see if fortune, zippy, or yow are on $PATH,
-#       and if so, use them.
+#       so first see if "fortune zippy" works.  Else, use plain "fortune".
 #
-#       If that doesn't work, look in /usr/games, and if it's there, use
-#       the full pathname.
+#       We used to dig around in Emacs to look for the "yow" program, but
+#       most people who have Emacs also have "fortune zippy", so nevermind.
 #
 ###############################################################################
 
-with_zippy_req=""
-AC_ARG_WITH(zippy,[
-  --with-zippy=PROGRAM    Some demos are able to run an external program and
+with_fortune_req=""
+AC_ARG_WITH(fortune,[
+  --with-fortune=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=yes])
+                          resources.)  Default is "/usr/games/fortune".],
+  [with_fortune_req="$withval"; with_fortune="$withval"],[with_fortune=yes])
 
-if test "$with_zippy" = no || test "$with_zippy" = yes ; then
-  with_zippy=""
-  with_zippy_req=""
+if test "$with_fortune" = no || test "$with_fortune" = yes ; then
+  with_fortune=""
+  with_fortune_req=""
 fi
 
-if test -n "$with_zippy_req" ; then
-  ac_cv_zippy_program=""
-  case "$with_zippy_req" in
+if test -n "$with_fortune_req" ; then
+  ac_cv_fortune_program=""
+  case "$with_fortune_req" in
     /*)
-      AC_MSG_CHECKING([for $with_zippy_req])
-      if test -x "$with_zippy_req" ; then
+
+      set dummy $with_fortune_req ; fortune_tmp=$2
+      AC_MSG_CHECKING([for $fortune_tmp])
+      if test -x "$fortune_tmp" ; then
         AC_MSG_RESULT(yes)
       else
         AC_MSG_RESULT(no)
-        with_zippy=""
+        with_fortune=""
       fi
     ;;
     *)
+      set dummy $with_fortune_req ; fortune_tmp=$2
       # don't cache
-      unset ac_cv_path_zip2
-      AC_PATH_PROG(zip2, $with_zippy_req, [])
-      if test "$zip2" = ""; then
-        with_zippy=""
+      unset ac_cv_path_fortune_tmp
+      AC_PATH_PROG(fortune_tmp, $fortune_tmp, [])
+      if test -z "$fortune_tmp" ; then
+        with_fortune=""
       fi
     ;;
   esac
-  ac_cv_zippy_program="$with_zippy"
+  ac_cv_fortune_program="$with_fortune"
 
-elif test -n "$ac_cv_zippy_program"; then
-  AC_MSG_RESULT([checking for zippy... (cached) $ac_cv_zippy_program])
+elif test -n "$ac_cv_fortune_program"; then
+  AC_MSG_RESULT([checking for fortune... (cached) $ac_cv_fortune_program])
 fi
 
-if test ! -n "$ac_cv_zippy_program"; then
+unset ac_cv_path_fortune_tmp
+unset fortune_tmp
 
-  AC_CHECK_PROGS(emacs_exe, emacs)
-  AC_CHECK_PROGS(xemacs_exe, xemacs)
+if test -z "$ac_cv_fortune_program" ; then
 
-  ac_cv_zippy_program=""
-  eargs='-batch -q -nw --eval'
+  # first look for fortune in /usr/games/ (and use absolute path)
+  AC_PATH_PROGS(fortune_tmp, fortune,, "/usr/games")
 
-  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@/$@@'`
-    #
-    # 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
-        AC_MSG_RESULT(no)
-      fi
-    fi
+  # if it's not there, look on $PATH (and don't use absolute path)
+  if test -z "$fortune_tmp" ; then
+     AC_CHECK_PROGS(fortune_tmp, fortune)
   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
-    fi
+  # if we didn't find anything, then just assume /usr/games/
+  if test -z "$fortune_tmp" ; then
+     fortune_tmp="/usr/games/fortune"
   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:$PATH)
-    fi
+  ac_cv_fortune_program="$fortune_tmp"
+
+  # now check to see whether "fortune zippy" works.
+  #
+  fortune_tmp="$fortune_tmp zippy"
+  AC_MSG_CHECKING([for zippy quotes])
+  if ( $fortune_tmp >/dev/null 2>&1 ); then
+    ac_cv_fortune_program="$fortune_tmp"
+    AC_MSG_RESULT($fortune_tmp)
+  else
+    AC_MSG_RESULT(no)
   fi
-fi
 
-if test -z "$ac_cv_zippy_program" ; then
-  ac_cv_zippy_program=fortune
 fi
 
-AC_DEFINE_UNQUOTED(ZIPPY_PROGRAM, "$ac_cv_zippy_program")
+unset ac_cv_path_fortune_tmp
+unset fortune_tmp
+
+AC_DEFINE_UNQUOTED(FORTUNE_PROGRAM, "$ac_cv_fortune_program")
+
+
+###############################################################################
+#
+#       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.
+#
+###############################################################################
+
+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"])
+
+HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks)
+
+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
 
 
 ###############################################################################
@@ -2364,16 +3515,8 @@ if test \! -z "$libdir" ; then
 fi
 
 
-DEMO_MAN="xscreensaver-demo-old.man"
+PREFERRED_DEMO_PROGRAM=''
 ALL_DEMO_PROGRAMS=
-if test "$have_athena" = yes; then
-  PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xaw
-  ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS"
-fi
-if test "$have_athena3d" = yes; then
-  PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xaw3d
-  ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS"
-fi
 if test "$have_motif" = yes; then
   PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xm
   ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS"
@@ -2381,7 +3524,6 @@ fi
 if test "$have_gtk" = yes; then
   PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Gtk
   ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS"
-  DEMO_MAN="xscreensaver-demo.man"
 fi
 
 
@@ -2393,6 +3535,10 @@ 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 "$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)"
@@ -2406,17 +3552,35 @@ else
   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_UTIL_EXES='$(GL_UTIL_EXES)'
   GL_MEN='$(GL_MEN)'
   GL_KLUDGE="${tab}  "
 else
 
 if test "$have_gle" = yes; then
   GLE_EXES='$(GLE_EXES)'
-  GLE_MEN='$(GLE_MEN)'
   GLE_KLUDGE="${tab}   "
 else
   GLE_KLUDGE="-${tab}   "
 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 "$have_gnome_help" = yes; then
+  GNOMEHELP_Y=''
+  GNOMEHELP_N='!    '
+else
+  GNOMEHELP_Y='!    '
+  GNOMEHELP_N=''
+fi
+
+
+# Now that we know whether we have Gnome, we can decide where the XML
+# config files get installed.
+#
+if test -z "$HACK_CONF_DIR" ; then
+  if test -n "$GNOME_DATADIR" ; then
+    HACK_CONF_DIR='${GNOME_DATADIR}/control-center/screensavers'
+  else
+    HACK_CONF_DIR='${prefix}/lib/xscreensaver/config'
+  fi
+fi
+
+
+
+# After computing $HACK_CONF_DIR, make sure $GLADE_DATADIR has a value
+# so that we know where to install the Gtk pixmaps.
+#
+# It should usually be "/usr/share/pixmaps/", but we can't just use
+# "$(prefix)/share/pixmaps" because that would usually result in
+# "/usr/X11R6/share/pixmaps/", which is wrong.  It needs to be the
+# Gnome/Gtk prefix, not the overall prefix.
+#
+if test -n "$GNOME_DATADIR" ; then
+  GLADE_DATADIR='$(GNOME_DATADIR)/xscreensaver'
+elif test "$have_gtk" = yes; then
+  if test -n "$pkg_config"; then
+    if test "$have_gtk2" = yes; then
+      GLADE_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+    else
+      GLADE_DATADIR=`$pkg_config --variable=prefix gtk+`
+    fi
+  else
+    GLADE_DATADIR=`$gtk_config --prefix`
+  fi
+  GLADE_DATADIR="$GLADE_DATADIR/share/xscreensaver"
+else
+  GLADE_DATADIR=''
+fi
+
+
+# Set PO_DATADIR to something sensible.
+#
+AC_MSG_CHECKING([for locale directory])
+if test -n "$GNOME_DATADIR" ; then
+  PO_DATADIR="$GNOME_DATADIR"
+elif test "$have_gtk" = yes; then
+  if test -n "$pkg_config"; then
+    if test "$have_gtk2" = yes; then
+      PO_DATADIR=`$pkg_config --variable=prefix gtk+-2.0`
+    else
+      PO_DATADIR=`$pkg_config --variable=prefix gtk+`
+    fi
+  else
+    PO_DATADIR=`$gtk_config --prefix`
+  fi
+  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=$datadir
+  eval dd=${dd}
+  eval dd=${dd}
+  eval dd=${dd}
+  eval dd=${dd}
+  eval dd=${dd}
+  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;'`
+
 
 ###############################################################################
 #
@@ -2442,40 +3709,55 @@ AC_SUBST(INCLUDES)
 
 AC_SUBST(PREFERRED_DEMO_PROGRAM)
 AC_SUBST(ALL_DEMO_PROGRAMS)
-AC_SUBST(DEMO_MAN)
 AC_SUBST(SAVER_LIBS)
 AC_SUBST(MOTIF_LIBS)
 AC_SUBST(GTK_LIBS)
-AC_SUBST(ATHENA_LIBS)
-AC_SUBST(ATHENA3D_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(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(OBJCC)
+AC_SUBST(EXES_OSX)
+AC_SUBST(SCRIPTS_OSX)
+AC_SUBST(MEN_OSX)
 
 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(GL_UTIL_EXES)
 AC_SUBST(GL_MEN)
 AC_SUBST(GL_KLUDGE)
 AC_SUBST(GLE_EXES)
-AC_SUBST(GLE_MEN)
 AC_SUBST(GLE_KLUDGE)
+AC_SUBST(GNOMEHELP_Y)
+AC_SUBST(GNOMEHELP_N)
 AC_SUBST(HACKDIR)
+AC_SUBST(GNOME_DATADIR)
+AC_SUBST(GLADE_DATADIR)
+AC_SUBST(PO_DATADIR)
+AC_SUBST(GNOME_PANELDIR)
+AC_SUBST(HACK_CONF_DIR)
+AC_SUBST(GTK_EXTRA_OBJS)
 
 APPDEFAULTS=$ac_x_app_defaults
 AC_SUBST(APPDEFAULTS)
@@ -2490,7 +3772,9 @@ AC_OUTPUT(Makefile
           driver/Makefile
           hacks/Makefile
           hacks/glx/Makefile
-          driver/XScreenSaver.ad)
+          po/Makefile.in
+          driver/XScreenSaver.ad
+          driver/xscreensaver.kss)
 
 ###############################################################################
 #
@@ -2516,7 +3800,8 @@ warn() {
   warnpre
   if test "$warning" = long ; then echo '' ; fi
   warning=yes
-  echo "$warn_prefix $@"
+  rest="$@"
+  echo "$warn_prefix $rest"
 }
 
 warnL() {
@@ -2524,11 +3809,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
 }
 
@@ -2573,27 +3860,51 @@ if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then
   warn 'The DPMS extension was requested, but was not found.'
 fi
 
+if test "$with_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
 
+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 -a "$have_athena" = no ; then
-  warnL "None of Motif, Gtk, or Athena widgets seem to be available;"
-  warn2 "the \`xscreensaver-demo' program requires one of these."
+if test "$have_motif" = no -a "$have_gtk" = no; then
 
-elif test "$with_motif_req" = yes -a "$have_motif" = no ; then
-  warnL "Use of Motif was requested, but it wasn't found;"
-  if test "$have_gtk" = yes; then
-    warn2 "Gtk will be used instead."
+  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
-    warn2 "Athena will be used instead."
+    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 "Gtk will be used instead."
+
 elif test "$jurassic_gtk" = yes ; then
 
   pref_gtk=1.2
@@ -2607,35 +3918,72 @@ elif test "$jurassic_gtk" = yes ; then
     warnL "Gtk was found on this system, but it is version $v;"
   fi
 
-  if test "$have_motif" = yes; then
-    which="Motif"
-  else
-    which="Athena"
-  fi
-
-  warn2 "Gtk $pref_gtk or newer is required.  $which will be used instead."
+  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;"
-  if test "$have_motif" = yes; then
-    warn2 "Motif will be used instead."
-  else
-    warn2 "Athena will be used instead."
+  warnL "Use of Gtk was requested, but it wasn't found."
+fi
+
+if test "$gtk2_halfassed" != no ; then
+  warnL "GTK version $gtk2_halfassed was found, but at least one supporting"
+  warn2 "library ($gtk2_halfassed_lib) was not, so GTK 2.x can't be used."
+  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
 
-elif test "$with_athena_req" = yes -a "$have_athena" = no ; then
-  warnL "Use of Athena was requested, but it wasn't found;"
-  if test "$have_gtk" = yes; then
-    warn2 "Gtk will be used instead."
-  else
-    warn2 "Motif will be used instead."
+
+if test "$with_gnome_req" = yes -a "$have_gnome" = no \
+        -a "$have_gtk2" = no; then
+  # don't issue this warning if we have GTK2 -- in that case, the
+  # Gnome-specific code isn't needed.
+  warn  'Use of the Gnome Control Panel was requested, but the necessary'
+  warn2 'headers and/or libraries were not found.'
+fi
+
+if test "$have_gtk" = yes ; then
+  if test "$have_xml" = no ; then
+    if test "$with_xml_req" = yes ; then
+      warn  'Use of the XML library was requested, but the necessary'
+      warn2 'headers and/or libraries were not found.'
+    else
+      warn  'GTK is being used, but the XML library was not found.'
+    fi
+
+    if test "$xml_halfassed" = yes ; then
+
+      if test "$have_zlib" = yes ; then
+        which="XML libraries"
+      else
+        which="\`zlib' library"
+      fi
+
+      echo ''
+      warn2 'More specifically, we found the headers, but not the'
+      warn2 "$which; so either XML is half-installed on this"
+      warn2 "system, or something else went wrong.  The \`config.log'"
+      warn2 'file might contain some clues.'
+    fi
+
+    echo ''
+    warn2 "Without XML, the per-display-mode \`Settings' dialogs"
+    warn2 'will not be available.  Specify the location of the XML'
+    warn2 'library through the --with-xml option to configure.'
   fi
 fi
 
+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!"
@@ -2651,51 +3999,111 @@ if test "$have_motif" = yes -a "$have_lesstif" = yes ; then
   fi
 fi
 
-if test "$have_athena" = yes -a "$have_motif" = no -a "$have_gtk" = no; then
-    warnL "Athena widgets are being used instead of Motif or Gtk."
-    warn2 "The \`xscreensaver-demo' program looks much better"
-    warn2 "with Motif or Gtk.  Wouldn't you rather be using Motif?"
-    warn2 "Motif is shipped by every commercial Unix vendor,"
-    warn2 "and there is a free implementation available as"
-    warn2 "well: see <http://www.lesstif.org/>.  Gtk is shipped"
-    warn2 "with most Linux and BSD distributions."
+
+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_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 -a "$have_xpm" = no; then
+  warnL 'Use of XPM was requested, but it was not found.'
+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_xpm" = no -a "$have_gdk_pixbuf" = no || \
+   test "$gdk_pixbuf_halfassed" = yes; then
+
+  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 "$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 "$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 'could be.  You should consider installing Pixbuf or'
+  warn2 'XPM and re-running configure.  The Pixbuf library is'
+  warn2 'a part of GNOME.  The XPM library comes with most'
+  warn2 'X11 installations; you can also find it at the X11'
+  warn2 'archive sites, such as <http://sunsite.unc.edu/>.'
+  echo  ''
+  warn2 'GDK-Pixbuf is recommended over XPM, as it provides'
+  warn2 '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.0
+  preferred_mesagl=3.4
+  mgv="$ac_mesagl_version_string"
+  pgl="$preferred_mesagl"
 
   if test "$ac_mesagl_version" = unknown; then
     warnL "Unable to determine the MesaGL version number!"
     warn2 "Make sure you are using version $preferred_mesagl or newer."
 
   elif test \! "$ac_mesagl_version" -gt 2006; then
-    warnL "MesaGL version $ac_mesagl_version_string is being used."
-    warn2 "MesaGL versions 2.6 and earlier have a security bug."
-    warn2 "It is strongly recommended that you upgrade to at"
-    warn2 "least version $preferred_mesagl."
+    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
   if test "$with_gl_req" = yes ; then
     warnL 'Use of GL was requested, but it was not found.'
@@ -2705,11 +4113,18 @@ 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/>.'
@@ -2718,21 +4133,39 @@ fi
 
 
 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
-    warnL 'Use of GLE was requested, but it was not found.'
+    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 GLE (GL Extrusion) library is not being used.'
+    noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)'
+    warn2 'library is not.'
   else
-    noteL 'The GLE (GL Extrusion) library was not found.'
+    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 will not be built or installed.'
-  warn2 'You might want to consider installing GLE and re-running'
-  warn2 'configure.  (Remember to delete the config.cache file first.)'
-  warn2 'You can find the GLE library at <http://www.linas.org/gle/>.'
-  warn2 'For general OpenGL info, see <http://www.opengl.org/>.'
+  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
 
 
@@ -2740,13 +4173,9 @@ if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then
   warn 'Use of XReadDisplay was requested, but it was not found.'
 fi
 
-if test "$with_sgivideo_req" = yes -a "$have_sgivideo" = no ; then
-  warn 'Use of the Iris Video Library was requested, but it was 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,"
+if test -n "$with_fortune_req"; then
+  if test "$with_fortune_req" != "$ac_cv_fortune_program" ; then
+    warnL "$with_fortune_req was requested as the Fortune program,"
     warn2 "but was not found.  The default will be used instead."
   fi
 fi
@@ -2779,17 +4208,24 @@ eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
 eval HACKDIR=${HACKDIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${HACK_CONF_DIR}
+eval HACK_CONF_DIR=${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.])
@@ -2803,8 +4239,8 @@ do_dir_warning=no
 
 # 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/'`
+rpmv=`(rpm -qv xscreensaver) 2>/dev/null | \
+      sed -n 's/^xscreensaver-\([0-9][0-9]*[.][0-9][0-9]*\)-.*$/\1/p'`
 changequote([,])
 
 if test \! -z "$rpmv" ; then
@@ -2823,29 +4259,16 @@ if test \! -z "$rpmv" ; then
   echo ""
 
   if test "$rpmbdir" = "$rpmhdir" ; then
-    warn2 "The RPM version was installed in $rpmbdir."
+    warn2 "The RPM version was installed in $rpmbdir/."
   else
-    warn2 "The RPM version was installed in $rpmbdir,"
-    warn2 "with demos in $rpmhdir."
+    warn2 "The RPM version was installed in $rpmbdir/,"
+    warn2 "with demos in $rpmhdir/."
   fi
 
   do_dir_warning=yes
 fi
 
 
-# Warn about egregious GNOME bogosity.
-#
-if (rpm -qv control-center) >&- 2>&- ; then
-  warning=no
-  warnL "The Gnome Control Center seems to be installed."
-  echo  ""
-  warn2 "Note that simply installing this version of xscreensaver"
-  warn2 "will not cause GNOME to know about the newly-added display"
-  warn2 "modes -- GNOME is just lame that way.  Instead of using the"
-  warn2 "Control Center, try using the \`xscreensaver-demo' command."
-fi
-
-
 if test "${bindir}" = "${HACKDIR}" ; then
   do_dir_warning=yes
 fi
@@ -2856,18 +4279,27 @@ 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 (100+ different executables) will"
-  echo "      also be installed in ${HACKDIR}."
+  echo "      The various graphics demos (180+ different executables) will"
+  echo "      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 "      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 will be installed in ${HACK_CONF_DIR}/"
+  echo ''
+fi