changeset 4359:df1f1f49ef70

Automated merge with file:/Sources/xemacs-21.5-checked-out
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 24 Dec 2007 15:04:01 +0100
parents 63c25d1cbecf (current diff) cc293ef846d2 (diff)
children b545430be2eb
files src/ChangeLog tests/reproduce-bugs.el
diffstat 45 files changed, 2037 insertions(+), 768 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Mon Dec 24 15:02:36 2007 +0100
+++ b/.hgignore	Mon Dec 24 15:04:01 2007 +0100
@@ -1,3 +1,47 @@
 (^|/)CVS($|/)
 (^|/)\.hg($|/)
 (^|/)\.hgtags($|/)
+\.o$
+\.elc$
+~$
+\.orig$
+\.rej$
+(^|/)\#[^/]*\#$
+(^|/)\.\#[^/]*$
+info/.*\.info(-[0-9]+)?$
+^GNUmakefile$
+^Installation$
+^Makefile$
+^Makefile\.in$
+^autom4te\.cache
+^config\.(log|status)$
+^lib-src/DOC$
+^lib-src/(GNUmakefile|Makefile(\.in)?)$
+^lib-src/config\.values$
+^lib-src/(b2m|ctags|cvtmail|digest-doc|ellcc|etags|fakemail|gnuclient|gnuserv|hexl|insert-data-in-exec|make-docfile|make-dump-id|make-path|mmencode|movemail|ootags|profile|sorted-doc|wakeup|yow)$
+^lib-src/ellcc\.h$
+^lisp/(auto-autoloads|custom-load|finder-inf)\.el$
+^lisp/mule/(auto-autoloads|custom-load)\.el$
+^lwlib/(GNUmakefile|Makefile(\.in)?)$
+^lwlib/liblw\.a$
+^lwlib/config\.h$
+^modules/auto-autoloads\.el$
+^modules/ldap/(GNUmakefile|Makefile(\.in)?)$
+^modules/ldap/eldap\.ell$
+^modules/ldap/eldap_i\.c$
+^(xemacs|mule)-packages
+^etc/PROBLEMS$
+^src/(.dbxrc|.gdbinit)(\.in)?$ 
+^src/(GNUmakefile|Makefile(\.in)?)$
+^src/NEEDTODUMP$
+^src/config\.h$
+^src/dump-id\.c$
+^src/dump-size$
+^src/paths\.h$
+^src/sheap-adjust\.h$
+^src/temacs$
+^src/xemacs$
+^src/xemacs\.def(\.in)?$
+^src/xemacs\.dmp$
+^src/Emacs\.ad\.h$
+^etc/bundled-packages/.*\.tar\.gz$
--- a/ChangeLog	Mon Dec 24 15:02:36 2007 +0100
+++ b/ChangeLog	Mon Dec 24 15:04:01 2007 +0100
@@ -1,3 +1,26 @@
+2007-12-23  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* Makefile.in.in (mkpkgdir):
+	(check-available-packages):
+	(install-bootstrap-packages):
+	(install-nonmule-packages):
+	(install-all-packages):
+	New targets supporting bundled packages.
+
+	* .hgignore: Ignore tarballs in etc/bundled-packages/.
+
+2007-12-08  Jerry James  <james@xemacs.org>
+
+	* config.guess:
+	* config.sub: Sync with the latest upstream versions.
+
+2007-12-12  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* configure.ac :
+	Check for FcConfigGetRescanInterval, FcConfigSetRescanInterval.
+	* configure :
+	Rebuild.
+
 2007-08-27  Mike Sperber  <mike@xemacs.org>
 
 	* configure.ac: Try to use pkg-config for finding Xft includes and
--- a/Makefile.in.in	Mon Dec 24 15:02:36 2007 +0100
+++ b/Makefile.in.in	Mon Dec 24 15:04:01 2007 +0100
@@ -491,6 +491,48 @@
 #endif
 	  ${sitelispdir}
 
+## Install bundled packages, if present.
+
+package_path = @LATE_PACKAGE_DIRECTORIES@
+pkgsrcdir = ${srcdir}/etc/bundled-packages
+
+## #### Probably we should add a rule for lib-src/make-path here.
+
+check-available-packages:
+	@if test -r ${pkgsrcdir}/bootstrap.tar.gz; \
+	then echo "To install a set of bootstrap packages, type:"; \
+	     echo "  make install-bootstrap-packages"; \
+	fi; \
+	if test -r ${pkgsrcdir}/xemacs-sumo.tar.gz; \
+	then echo "To install the full set of non-mule packages, type:"; \
+	     echo "  make install-nonmule-packages"; \
+	fi; \
+	if test -r ${pkgsrcdir}/xemacs-mule-sumo.tar.gz; \
+	then echo "To install the full set of packages with mule, type:"; \
+	     echo "  make install-all-packages"; \
+	fi;
+
+mkpkgdir: FRC.mkdir ${MAKEPATH}
+	@if test -z ${package_path}; \
+	then echo "not configured --with-late-packages; no place to install."; \
+		exit -1; \
+	elif test -e ${package_path}/xemacs-packages \
+		-o -e ${package_path}/mule-packages; \
+	then echo "${package_path} is installed; won't overwrite packages."; \
+		exit -1; \
+	fi
+	${MAKEPATH} ${package_path};
+
+install-bootstrap-packages: mkpkgdir
+	cd ${package_path}; tar xvzf ${pkgsrcdir}/bootstrap.tar.gz
+
+install-nonmule-packages: mkpkgdir
+	cd ${package_path}; tar xvzf ${pkgsrcdir}/xemacs-sumo.tar.gz
+
+install-all-packages: mkpkgdir
+	cd ${package_path}; tar xvzf ${pkgsrcdir}/xemacs-sumo.tar.gz; \
+	cd ${package_path}; tar xvzf ${pkgsrcdir}/xemacs-mule-sumo.tar.gz
+
 ## Delete all the installed files that the `install' target would
 ## create (but not the noninstalled files such as `make all' would
 ## create).
--- a/config.guess	Mon Dec 24 15:02:36 2007 +0100
+++ b/config.guess	Mon Dec 24 15:04:01 2007 +0100
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
 
-timestamp='2005-02-10'
+timestamp='2007-12-05'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,13 +18,15 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+
 # Originally written by Per Bothner <per@bothner.com>.
 # Please send patches to <config-patches@gnu.org>.  Submit a context
 # diff and a properly formatted ChangeLog entry.
@@ -66,11 +69,11 @@
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
+       echo "$timestamp" ; exit ;;
     --version | -v )
-       echo "$version" ; exit 0 ;;
+       echo "$version" ; exit ;;
     --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
+       echo "$usage"; exit ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -104,7 +107,7 @@
 trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
 trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
 : ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -123,7 +126,7 @@
 	;;
  ,,*)   CC_FOR_BUILD=$CC ;;
  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
+esac ; set_cc_for_build= ;'
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
@@ -158,6 +161,7 @@
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
@@ -196,55 +200,23 @@
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
-	exit 0 ;;
-    amd64:OpenBSD:*:*)
-	echo x86_64-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    cats:OpenBSD:*:*)
-	echo arm-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hp300:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    luna88k:OpenBSD:*:*)
-    	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    macppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvmeppc:OpenBSD:*:*)
-	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sgi:OpenBSD:*:*)
-	echo mips64-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sun3:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
     macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-	exit 0 ;;
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -297,40 +269,43 @@
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit 0 ;;
+	exit ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
 	# of the specific Alpha model?
 	echo alpha-pc-interix
-	exit 0 ;;
+	exit ;;
     21064:Windows_NT:50:3)
 	echo alpha-dec-winnt3.5
-	exit 0 ;;
+	exit ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
-	exit 0;;
+	exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit 0 ;;
+	exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-morphos
-	exit 0 ;;
+	exit ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
-	exit 0 ;;
+	exit ;;
     *:z/VM:*:*)
 	echo s390-ibm-zvmoe
-	exit 0 ;;
+	exit ;;
     *:OS400:*:*)
         echo powerpc-ibm-os400
-	exit 0 ;;
+	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit 0;;
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
-	exit 0;;
+	exit ;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -338,32 +313,32 @@
 	else
 		echo pyramid-pyramid-bsd
 	fi
-	exit 0 ;;
+	exit ;;
     NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
-	exit 0 ;;
+	exit ;;
     DRS?6000:unix:4.0:6*)
 	echo sparc-icl-nx6
-	exit 0 ;;
+	exit ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
 	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
-    i86pc:SunOS:5.*:*)
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
 	    Series*|S4*)
@@ -372,10 +347,10 @@
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit 0 ;;
+	exit ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
@@ -387,10 +362,10 @@
 		echo sparc-sun-sunos${UNAME_RELEASE}
 		;;
 	esac
-	exit 0 ;;
+	exit ;;
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -401,40 +376,40 @@
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
         echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
         echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
-	exit 0 ;;
+	exit ;;
     RISC*:ULTRIX:*:*)
 	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     VAX*:ULTRIX*:*:*)
 	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
 	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -458,32 +433,33 @@
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c \
-	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && exit 0
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
 	echo mips-mips-riscos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
-	exit 0 ;;
+	exit ;;
     Motorola:*:4.3:PL8-*)
 	echo powerpc-harris-powermax
-	exit 0 ;;
+	exit ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
 	echo powerpc-harris-powermax
-	exit 0 ;;
+	exit ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
-	exit 0 ;;
+	exit ;;
     m88k:CX/UX:7*:*)
 	echo m88k-harris-cxux7
-	exit 0 ;;
+	exit ;;
     m88k:*:4*:R4*)
 	echo m88k-motorola-sysv4
-	exit 0 ;;
+	exit ;;
     m88k:*:3*:R3*)
 	echo m88k-motorola-sysv3
-	exit 0 ;;
+	exit ;;
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
         UNAME_PROCESSOR=`/usr/bin/uname -p`
@@ -499,29 +475,29 @@
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit 0 ;;
+ 	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
-	exit 0 ;;
+	exit ;;
     M88*:*:R3*:*)
 	# Delta 88k system running SVR3
 	echo m88k-motorola-sysv3
-	exit 0 ;;
+	exit ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
 	echo m88k-tektronix-sysv3
-	exit 0 ;;
+	exit ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
 	echo m68k-tektronix-bsd
-	exit 0 ;;
+	exit ;;
     *:IRIX*:*:*)
 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit 0 ;;
+	exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
-	exit 0 ;;
+	exit ;;
     ia64:AIX:*:*)
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
@@ -529,7 +505,7 @@
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit 0 ;;
+	exit ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
 		eval $set_cc_for_build
@@ -544,14 +520,18 @@
 			exit(0);
 			}
 EOF
-		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-		echo rs6000-ibm-aix3.2.5
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 		echo rs6000-ibm-aix3.2.4
 	else
 		echo rs6000-ibm-aix3.2
 	fi
-	exit 0 ;;
+	exit ;;
     *:AIX:*:[45])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
@@ -565,28 +545,28 @@
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit 0 ;;
+	exit ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
-	exit 0 ;;
+	exit ;;
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
-	exit 0 ;;
+	exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit 0 ;;                           # report: romp-ibm BSD 4.3
+	exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
-	exit 0 ;;
+	exit ;;
     DPX/2?00:B.O.S.:*:*)
 	echo m68k-bull-sysv3
-	exit 0 ;;
+	exit ;;
     9000/[34]??:4.3bsd:1.*:*)
 	echo m68k-hp-bsd
-	exit 0 ;;
+	exit ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
 	echo m68k-hp-bsd4.4
-	exit 0 ;;
+	exit ;;
     9000/[34678]??:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	case "${UNAME_MACHINE}" in
@@ -648,9 +628,19 @@
 	esac
 	if [ ${HP_ARCH} = "hppa2.0w" ]
 	then
-	    # avoid double evaluation of $set_cc_for_build
-	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -658,11 +648,11 @@
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit 0 ;;
+	exit ;;
     ia64:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	echo ia64-hp-hpux${HPUX_REV}
-	exit 0 ;;
+	exit ;;
     3050*:HI-UX:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -690,161 +680,189 @@
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
-	exit 0 ;;
+	exit ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 	echo hppa1.1-hp-bsd
-	exit 0 ;;
+	exit ;;
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
-	exit 0 ;;
+	exit ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
-	exit 0 ;;
+	exit ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
-	exit 0 ;;
+	exit ;;
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
-	exit 0 ;;
+	exit ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
 	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
 	    echo ${UNAME_MACHINE}-unknown-osf1
 	fi
-	exit 0 ;;
+	exit ;;
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
-	exit 0 ;;
+	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit 0 ;;
+        exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit 0 ;;
+        exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit 0 ;;
+        exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit 0 ;;
+        exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit 0 ;;
+        exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*TS:*:*:*)
 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*T3E:*:*:*)
 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*SV1:*:*:*)
 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     *:UNICOS/mp:*:*)
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit 0 ;;
+        exit ;;
     5000:UNIX_System_V:4.*:*)
         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
         FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
         echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit 0 ;;
+	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sparc*:BSD/OS:*:*)
 	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:BSD/OS:*:*)
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:FreeBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
-	exit 0 ;;
-    i*:MINGW*:*)
+	exit ;;
+    *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
-	exit 0 ;;
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
-	exit 0 ;;
-    x86:Interix*:[34]*)
-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit 0 ;;
+	exit ;;
+    *:Interix*:[3456]*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    EM64T | authenticamd)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
-	exit 0 ;;
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
 	# UNAME_MACHINE based on the output of uname instead of i386?
 	echo i586-pc-interix
-	exit 0 ;;
+	exit ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
-	exit 0 ;;
-    amd64:CYGWIN*:*:*)
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
 	echo x86_64-unknown-cygwin
-	exit 0 ;;
+	exit ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
-	exit 0 ;;
+	exit ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     *:GNU:*:*)
 	# the GNU system
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit 0 ;;
+	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
 	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit 0 ;;
+	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
-	exit 0 ;;
+	exit ;;
     arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     cris:Linux:*:*)
 	echo cris-axis-linux-gnu
-	exit 0 ;;
+	exit ;;
     crisv32:Linux:*:*)
 	echo crisv32-axis-linux-gnu
-	exit 0 ;;
+	exit ;;
     frv:Linux:*:*)
     	echo frv-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     m32r*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     m68*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     mips:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -861,8 +879,12 @@
 	#endif
 	#endif
 EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     mips64:Linux:*:*)
 	eval $set_cc_for_build
@@ -880,15 +902,22 @@
 	#endif
 	#endif
 EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
     ppc:Linux:*:*)
 	echo powerpc-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     ppc64:Linux:*:*)
 	echo powerpc64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -902,7 +931,7 @@
 	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit 0 ;;
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -910,25 +939,31 @@
 	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
 	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
-	exit 0 ;;
+	exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
 	echo hppa64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
-	exit 0 ;;
+	exit ;;
     sh64*:Linux:*:*)
     	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
     x86_64:Linux:*:*)
 	echo x86_64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
 	# first see if it will tell us. cd to the root directory to prevent
@@ -946,15 +981,15 @@
 		;;
 	  a.out-i386-linux)
 		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit 0 ;;
+		exit ;;
 	  coff-i386)
 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit 0 ;;
+		exit ;;
 	  "")
 		# Either a pre-BFD a.out linker (linux-gnuoldld) or
 		# one that does not give us useful --help.
 		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit 0 ;;
+		exit ;;
 	esac
 	# Determine whether the default compiler is a.out or elf
 	eval $set_cc_for_build
@@ -971,7 +1006,7 @@
 	LIBC=gnulibc1
 	# endif
 	#else
-	#ifdef __INTEL_COMPILER
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
 	LIBC=gnu
 	#else
 	LIBC=gnuaout
@@ -981,16 +1016,23 @@
 	LIBC=dietlibc
 	#endif
 EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
-	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^LIBC/{
+		s: ::g
+		p
+	    }'`"
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
 	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
 	# sysname and nodename.
 	echo i386-sequent-sysv4
-	exit 0 ;;
+	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
         # Unixware is an offshoot of SVR4, but it has its own version
         # number series starting with 2...
@@ -998,27 +1040,27 @@
 	# I just have to hope.  -- rms.
         # Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit 0 ;;
+	exit ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
 	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit 0 ;;
+	exit ;;
     i*86:XTS-300:*:STOP)
 	echo ${UNAME_MACHINE}-unknown-stop
-	exit 0 ;;
+	exit ;;
     i*86:atheos:*:*)
 	echo ${UNAME_MACHINE}-unknown-atheos
-	exit 0 ;;
-	i*86:syllable:*:*)
+	exit ;;
+    i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
-	exit 0 ;;
+	exit ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit 0 ;;
+	exit ;;
     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
@@ -1026,15 +1068,16 @@
 	else
 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
-	exit 0 ;;
-    i*86:*:5:[78]*)
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit 0 ;;
+	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1052,73 +1095,73 @@
 	else
 		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
-	exit 0 ;;
+	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
         # the processor, so we play safe by assuming i386.
 	echo i386-pc-msdosdjgpp
-        exit 0 ;;
+        exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
-	exit 0 ;;
+	exit ;;
     paragon:*:*:*)
 	echo i860-intel-osf1
-	exit 0 ;;
+	exit ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
-	exit 0 ;;
+	exit ;;
     mini*:CTIX:SYS*5:*)
 	# "miniframe"
 	echo m68010-convergent-sysv
-	exit 0 ;;
+	exit ;;
     mc68k:UNIX:SYSTEM5:3.51m)
 	echo m68k-convergent-sysv
-	exit 0 ;;
+	exit ;;
     M680?0:D-NIX:5.3:*)
 	echo m68k-diab-dnix
-	exit 0 ;;
+	exit ;;
     M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
+          && { echo i486-ncr-sysv4; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
-	exit 0 ;;
+	exit ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
-	exit 0 ;;
+	exit ;;
     RM*:SINIX-*:*:*)
 	echo mips-sni-sysv4
-	exit 0 ;;
+	exit ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1126,69 +1169,81 @@
 	else
 		echo ns32k-sni-sysv
 	fi
-	exit 0 ;;
+	exit ;;
     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                       # says <Richard.M.Bartel@ccMail.Census.GOV>
         echo i586-unisys-sysv4
-        exit 0 ;;
+        exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
 	echo hppa1.1-stratus-sysv4
-	exit 0 ;;
+	exit ;;
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
 	echo i860-stratus-sysv4
-	exit 0 ;;
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
 	echo hppa1.1-stratus-vos
-	exit 0 ;;
+	exit ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
-	exit 0 ;;
+	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
 	        echo mips-nec-sysv${UNAME_RELEASE}
 	else
 	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit 0 ;;
+        exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
-	exit 0 ;;
+	exit ;;
     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 	echo powerpc-apple-beos
-	exit 0 ;;
+	exit ;;
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
-	exit 0 ;;
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SX-5:SUPER-UX:*:*)
 	echo sx5-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
 	case $UNAME_PROCESSOR in
-	    *86) UNAME_PROCESSOR=i686 ;;
 	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
 	if test "$UNAME_PROCESSOR" = "x86"; then
@@ -1196,25 +1251,25 @@
 		UNAME_MACHINE=pc
 	fi
 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
-	exit 0 ;;
+	exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
-	exit 0 ;;
+	exit ;;
     BS2000:POSIX*:*:*)
 	echo bs2000-siemens-sysv
-	exit 0 ;;
+	exit ;;
     DS/*:UNIX_System_V:*:*)
 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
@@ -1225,41 +1280,47 @@
 	    UNAME_MACHINE="$cputype"
 	fi
 	echo ${UNAME_MACHINE}-unknown-plan9
-	exit 0 ;;
+	exit ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
-	exit 0 ;;
+	exit ;;
     *:TENEX:*:*)
 	echo pdp10-unknown-tenex
-	exit 0 ;;
+	exit ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
-	exit 0 ;;
+	exit ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
 	echo pdp10-xkl-tops20
-	exit 0 ;;
+	exit ;;
     *:TOPS-20:*:*)
 	echo pdp10-unknown-tops20
-	exit 0 ;;
+	exit ;;
     *:ITS:*:*)
 	echo pdp10-unknown-its
-	exit 0 ;;
+	exit ;;
     SEI:*:*:SEIUX)
         echo mips-sei-seiux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
+	exit ;;
     *:*VMS:*:*)
     	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms && exit 0 ;;
-	    I*) echo ia64-dec-vms && exit 0 ;;
-	    V*) echo vax-dec-vms && exit 0 ;;
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
 	esac ;;
     *:XENIX:*:SysV)
 	echo i386-pc-xenix
-	exit 0 ;;
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1291,7 +1352,7 @@
 #endif
 
 #if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix"); exit (0);
+  printf ("arm-acorn-riscix\n"); exit (0);
 #endif
 
 #if defined (hp300) && !defined (hpux)
@@ -1380,11 +1441,12 @@
 }
 EOF
 
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
 
 # Apollos put the system type in the environment.
 
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
 
 # Convex versions that predate uname can use getsysinfo(1)
 
@@ -1393,22 +1455,22 @@
     case `getsysinfo -f cpu_type` in
     c1*)
 	echo c1-convex-bsd
-	exit 0 ;;
+	exit ;;
     c2*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-	exit 0 ;;
+	exit ;;
     c34*)
 	echo c34-convex-bsd
-	exit 0 ;;
+	exit ;;
     c38*)
 	echo c38-convex-bsd
-	exit 0 ;;
+	exit ;;
     c4*)
 	echo c4-convex-bsd
-	exit 0 ;;
+	exit ;;
     esac
 fi
 
@@ -1419,7 +1481,9 @@
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-    ftp://ftp.gnu.org/pub/gnu/config/
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
--- a/config.sub	Mon Dec 24 15:02:36 2007 +0100
+++ b/config.sub	Mon Dec 24 15:04:01 2007 +0100
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
 
-timestamp='2005-02-10'
+timestamp='2007-12-05'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,14 +22,15 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+
 # Please send patches to <config-patches@gnu.org>.  Submit a context
 # diff and a properly formatted ChangeLog entry.
 #
@@ -83,11 +85,11 @@
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
+       echo "$timestamp" ; exit ;;
     --version | -v )
-       echo "$version" ; exit 0 ;;
+       echo "$version" ; exit ;;
     --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
+       echo "$usage"; exit ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -99,7 +101,7 @@
     *local*)
        # First pass through any local machine types.
        echo $1
-       exit 0;;
+       exit ;;
 
     * )
        break ;;
@@ -118,8 +120,9 @@
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -170,6 +173,10 @@
 	-hiux*)
 		os=-hiuxwe2
 		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
 	-sco5)
 		os=-sco3.2v5
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -186,6 +193,10 @@
 		# Don't forget version if it is 3.2v4 or newer.
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
 	-sco*)
 		os=-sco3.2v2
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -230,14 +241,16 @@
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
+	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -246,6 +259,7 @@
 	| mips64vr4100 | mips64vr4100el \
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
 	| mipsisa64 | mipsisa64el \
@@ -254,20 +268,24 @@
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
+	| mt \
 	| msp430 \
+	| nios | nios2 \
 	| ns16k | ns32k \
-	| openrisc | or32 \
+	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
 	| pyramid \
-	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
-	| strongarm \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
 	| v850 | v850e \
 	| we32k \
-	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
 	| z8k)
 		basic_machine=$basic_machine-unknown
 		;;
@@ -278,6 +296,9 @@
 		;;
 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
 		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
 
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
@@ -297,18 +318,18 @@
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
-	| bs2000-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
+	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
 	| m88110-* | m88k-* | maxq-* | mcore-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
@@ -319,6 +340,7 @@
 	| mips64vr4100-* | mips64vr4100el-* \
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
 	| mipsisa64-* | mipsisa64el-* \
@@ -327,27 +349,34 @@
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
+	| mt-* \
 	| msp430-* \
+	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
 	| pyramid-* \
 	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tron-* \
 	| v850-* | v850e-* | vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-	| xstormy16-* | xtensa-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
 	| ymp-* \
 	| z8k-*)
 		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
 	386bsd)
@@ -418,6 +447,14 @@
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
@@ -450,8 +487,8 @@
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16c)
-		basic_machine=cr16c-unknown
+	cr16)
+		basic_machine=cr16-unknown
 		os=-elf
 		;;
 	crds | unos)
@@ -643,6 +680,14 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	m88k-omron*)
 		basic_machine=m88k-omron
 		;;
@@ -658,6 +703,10 @@
 		basic_machine=i386-pc
 		os=-mingw32
 		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -683,6 +732,9 @@
 		basic_machine=i386-pc
 		os=-msdos
 		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
@@ -758,9 +810,8 @@
 		basic_machine=hppa1.1-oki
 		os=-proelf
 		;;
-	or32 | or32-*)
+	openrisc | openrisc-*)
 		basic_machine=or32-unknown
-		os=-coff
 		;;
 	os400)
 		basic_machine=powerpc-ibm
@@ -782,6 +833,14 @@
 		basic_machine=i860-intel
 		os=-osf
 		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	pbd)
 		basic_machine=sparc-tti
 		;;
@@ -791,6 +850,12 @@
 	pc532 | pc532-*)
 		basic_machine=ns32k-pc532
 		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
 		;;
@@ -847,6 +912,10 @@
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
 	rom68k)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -873,6 +942,10 @@
 	sb1el)
 		basic_machine=mipsisa64sb1el-unknown
 		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
 	sei)
 		basic_machine=mips-sei
 		os=-seiux
@@ -884,6 +957,9 @@
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
 	sh64)
 		basic_machine=sh64-unknown
 		;;
@@ -1086,13 +1162,10 @@
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1165,20 +1238,23 @@
 	      | -aos* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* \
 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1196,7 +1272,7 @@
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		;;
 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 		;;
 	-mac*)
@@ -1330,6 +1406,12 @@
 # system, and we'll never get to this point.
 
 case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
 	*-acorn)
 		os=-riscix1.2
 		;;
@@ -1339,9 +1421,9 @@
 	arm*-semi)
 		os=-aout
 		;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
 		os=-tops20
@@ -1367,6 +1449,9 @@
 	m68*-cisco)
 		os=-aout
 		;;
+        mep-*)
+		os=-elf
+		;;
 	mips*-cisco)
 		os=-elf
 		;;
@@ -1385,6 +1470,9 @@
 	*-be)
 		os=-beos
 		;;
+	*-haiku)
+		os=-haiku
+		;;
 	*-ibm)
 		os=-aix
 		;;
@@ -1556,7 +1644,7 @@
 esac
 
 echo $basic_machine$os
-exit 0
+exit
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
--- a/configure	Mon Dec 24 15:02:36 2007 +0100
+++ b/configure	Mon Dec 24 15:04:01 2007 +0100
@@ -1521,7 +1521,7 @@
                           Specify location of last/legacy packages (instead of
                           default location; same as --with-legacy-packages).
   --with-legacy-packages=DIR
-                          Specify location of late/legacy packages (instead of
+                          Specify location of last/legacy packages (instead of
                           default location; same as --with-last-packages).
   --with-package-path=PATH
                           Search path for package directories.
@@ -2842,7 +2842,7 @@
   enableval="$with_legacy_packages"
   withval="$with_legacy_packages"
   cat >>confdefs.h <<\_ACEOF
-#define LATE_PACKAGE_DIRECTORIES_USER_DEFINED 1
+#define LAST_PACKAGE_DIRECTORIES_USER_DEFINED 1
 _ACEOF
 
 fi;
@@ -20123,6 +20123,195 @@
   { echo "Error:" "Unable to find libXft for --with-xft" >&2; exit 1; }
 fi
 
+
+
+for ac_func in FcConfigGetRescanInterval
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in FcConfigSetRescanInterval
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
             with_fontconfig=yes
       cat >>confdefs.h <<\_ACEOF
 #define HAVE_FONTCONFIG 1
--- a/configure.ac	Mon Dec 24 15:02:36 2007 +0100
+++ b/configure.ac	Mon Dec 24 15:04:01 2007 +0100
@@ -666,8 +666,8 @@
 	AS_HELP_STRING([--with-last-packages=DIR],[Specify location of last/legacy packages (instead of default location; same as --with-legacy-packages).]),
 	[AC_DEFINE(LAST_PACKAGE_DIRECTORIES_USER_DEFINED)], [])
 XE_MERGED_ARG([legacy-packages],
-	AS_HELP_STRING([--with-legacy-packages=DIR],[Specify location of late/legacy packages (instead of default location; same as --with-last-packages).]),
-	[AC_DEFINE(LATE_PACKAGE_DIRECTORIES_USER_DEFINED)], [])
+	AS_HELP_STRING([--with-legacy-packages=DIR],[Specify location of last/legacy packages (instead of default location; same as --with-last-packages).]),
+	[AC_DEFINE(LAST_PACKAGE_DIRECTORIES_USER_DEFINED)], [])
 XE_MERGED_ARG([package-path],
 	AS_HELP_STRING([--with-package-path=PATH],[Search path for package directories.]),
 	[AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], [])
@@ -3532,6 +3532,9 @@
           [XE_DIE(["Unable to find libfontconfig for --with-xft"])])
       AC_CHECK_LIB(Xft, XftFontOpen, XE_PREPEND(-lXft, libs_x),
           [XE_DIE(["Unable to find libXft for --with-xft"])])
+
+      AC_CHECK_FUNCS(FcConfigGetRescanInterval)
+      AC_CHECK_FUNCS(FcConfigSetRescanInterval)
       dnl #### detect fontconfig properly!!!!
       with_fontconfig=yes
       AC_DEFINE(HAVE_FONTCONFIG)
--- a/etc/ChangeLog	Mon Dec 24 15:02:36 2007 +0100
+++ b/etc/ChangeLog	Mon Dec 24 15:04:01 2007 +0100
@@ -1,3 +1,8 @@
+2007-12-23  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* bundled-packages/README: Documentation for bundled packages.
+	* bundled-packages/test.sh: Test suite for bundled packages.
+
 2007-11-22  Vin Shelton  <acs@xemacs.org>
 
 	* photos/vin.png:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/bundled-packages/README	Mon Dec 24 15:04:01 2007 +0100
@@ -0,0 +1,68 @@
+Package distributions may be placed in this directory.
+If present and a package-path is configured, packages can be installed
+using the top-level makefile.
+
+To configure the package path, use the --with-late-packages option to
+configure, which specifies the path to the directory containing the
+xemacs-packages and mule-packages hierarchies to install.
+
+To find out if a distribution includes bundled packages, type
+
+    make check-available-packages
+
+There are three Make targets that may be available depending on the package
+sets supplied.
+
+    make install-bootstrap-packages
+        Install a selected set of packages sufficient to support
+        downloading and installing packages via the M-x list-packages
+        interface.  Chose this if you want to be able to install the
+        latest version of each package immediately.
+
+    make install-nomule-packages
+        Install the full distribution of packages that do not require a
+        Mule-enabled XEmacs.  Choose this package if you don't have a
+        Mule-enabled XEmacs and want the convenience of a single-command
+        installation.  You can add or update packages via M-x list-packages
+        at any time.
+
+    make install-all-packages
+        Install the full distribution of packages, including those requiring
+        a Mule-enabled XEmacs.  Choose this package if you have a Mule-
+        enabled XEmacs and want the convenience of a single-command
+        installation.  You can add or update packages via M-x list-packages
+        at any time.
+
+DISTRIBUTOR'S NOTE: you may choose what packages you wish to include in
+bootstrap.tar.gz, but to make list-packages work you need to include at
+least xemacs-base, dired, and efs.  The tarball should unpack directly as
+an xemacs-packages tree (and optionaly, a mule-packages tree.  Also, if
+either of xemacs-sumo.tar.gz or xemacs-mule-sumo.tar.gz is provided, the
+other should be as well.
+
+If packages are not available with the distribution, you can get them at
+
+    ftp://ftp.xemacs.org/pub/xemacs/packages/xemacs-sumo.tar.gz
+    ftp://ftp.xemacs.org/pub/xemacs/packages/xemacs-mule-sumo.tar.gz
+    http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/bootstrap.tar.gz
+
+and place them in the same directory as this file.  You can also make your
+own bootstrap.tar.gz by creating a directory xemacs-packages, then
+untarring the packages of your choice into that directory, and tarring the
+whole thing up with "tar czf bootstrap.tar.gz xemacs-packages".  (If you
+wish to include mule-packages, you should place them in mule-packages as
+a sibling of xemacs-packages.)
+
+This facility currently does not support installations which configure
+the --with-early-packages, --with-late-packages, or --with-last-packages
+options.
+
+This facility currently will not overwrite an existing package
+installation, not even if a whole hierarchy (usually the mule-packages)
+is missing.  In particular, you cannot use this feature to add the
+mule-packages to a package installation which lacks them, even if the
+hierarchy is missing, or the xemacs-packages hierarchy was installed
+this way.  Nor can you "upgrade" a bootstrap installation to a full
+installation.  If you wish to do any of these things you will need to
+remove the existing hierarchies.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/bundled-packages/test.sh	Mon Dec 24 15:04:01 2007 +0100
@@ -0,0 +1,105 @@
+# tests for the bundled packages feature
+
+# usage: sh etc/bundled-packages/tests.sh [TMP_TEST_DIR]
+
+# Always run this script from the top directory of the source tree.
+# You need a mv that supports the -v for verbose flag, and a mkdir that
+# supports the -p flag to make parents.
+# Output from this script is preceded by 4 stars (****).
+
+# This test script is probably more fragile than the build process, but if
+# it runs to completion things are probably OK.
+
+# configure the installation target
+
+if test -z "$1"; then
+ TMP_TEST_DIR=/tmp/test/bundled-packages
+else
+ TMP_TEST_DIR=$1
+fi
+
+srcdir=`pwd`
+blddir=${TMP_TEST_DIR}/build
+pkgdir=${TMP_TEST_DIR}/lib/xemacs
+
+echo "**** srcdir = ${srcdir}"
+echo "**** blddir = ${blddir}"
+echo "**** pkgdir = ${pkgdir}"
+
+if test -e "${pkgdir}"; then
+ echo "**** pkgdir (${pkgdir}) exists; bailing out."
+ exit -1
+fi
+
+# mv existing tarballs out of harm's way and make a fake one
+
+echo "**** Moving existing tarballs to etc/bundled-packages/saved."
+mkdir -p etc/bundled-packages/saved
+cd etc/bundled-packages
+echo "**** 'mv' may error because there are no files to move.  It's harmless."
+mv -v *.tar.gz saved/
+cd ../..
+
+# configure in a temporary directory
+
+if test -e ${blddir}; then
+ echo "**** blddir (${blddir}) exists; bailing out."
+ exit -1
+fi
+mkdir -p ${blddir}
+cd ${blddir}
+echo "**** Running 'configure'.  This takes *several minutes*."
+echo "**** Redirecting configure output to ${blddir}/beta.err."
+${srcdir}/configure >beta.err 2>&1
+
+# test check-available-packages
+
+echo "**** This test should produce no error and no output."
+make check-available-packages
+cd ${srcdir}/etc/bundled-packages
+echo "**** This test should explain how to install bootstrap packages."
+echo "This file pretends to be a bootstrap hierarchy." > xemacs-packages
+tar czf bootstrap.tar.gz xemacs-packages
+rm xemacs-packages
+cd ${blddir}
+make check-available-packages
+echo "**** This test should explain how to install all three."
+cd ${srcdir}/etc/bundled-packages
+echo "This file pretends to be a xemacs-packages hierarchy." > xemacs-packages
+echo "This file pretends to be a mule-packages hierarchy." > mule-packages
+tar czf xemacs-sumo.tar.gz xemacs-packages
+tar czf xemacs-mule-sumo.tar.gz mule-packages
+rm xemacs-packages mule-packages
+cd ${blddir}
+make check-available-packages
+
+# test installation without package path given
+
+echo "**** Make the 'make-path' utility needed by the installation routine."
+make -C lib-src make-path
+echo "**** This test should error because --with-late-packages wasn't given."
+make install-bootstrap-packages
+
+# test installation with package path given
+
+echo "**** Running 'configure'.  This takes *several minutes*."
+echo "**** Redirecting configure output to ${blddir}/beta.err."
+${srcdir}/configure --with-late-packages=${pkgdir} >beta.err 2>&1
+echo "**** Make the 'make-path' utility needed by the installation routine."
+make -C lib-src make-path
+echo "**** Test install-bootstrap-packages."
+make install-bootstrap-packages
+echo "**** The following should list xemacs-packages in the right place."
+ls ${pkgdir}/*
+
+#### no tests below this line ####
+
+# put tarballs back and clean up
+
+cd ${srcdir}/etc/bundled-packages
+rm *.tar.gz
+echo "**** 'mv' may error because there are no files to move.  It's harmless."
+mv -v saved/*.tar.gz ../
+rmdir saved
+rm -rf ${blddir} ${pkgdir}
+exit 0
--- a/lisp/ChangeLog	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/ChangeLog	Mon Dec 24 15:04:01 2007 +0100
@@ -1,3 +1,72 @@
+2007-12-22  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	Factor out lists of operators specially treated by `make-autoload'.
+
+	* autoload.el (autoload-make-autoload-operators): New.
+	(autoload-make-autoload-complex-operators): New.
+	(make-autoload): Use them.
+
+2007-12-18  Mike Sperber  <mike@xemacs.org>
+
+	* autoload.el (process-one-lisp-autoload): Insert <immediate> into
+	the section header for immediate autoloads, to make sure the
+	upstream doesn't think there aren't any autoloads at all.
+
+2007-12-19  Mike Sperber  <mike@xemacs.org>
+
+	* startup.el (ask-about-user-init-file-migration-p): Factored out
+	check.
+	(maybe-migrate-user-init-file):
+	(migrate-user-init-file): Don't do a backup of ~/.emacs anymore.
+	Instead, make only a manual adjustment of the file, if at all,
+	i.e. don't go through customize magic anymore.
+	(unmigrate-user-init-file): Don't use customize to set
+	`load-home-init-file' anymore.
+	(set-load-home-init-file): Add; performs the modification
+	previously done through customize.
+	(unmigrate-user-init-file): Use `set-load-home-init-file' instead
+	of customize.
+	(command-line-1): Only wait for the first event if we're not going
+	to ask about migration.
+
+2007-12-18  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* help.el (describe-function-1):
+	Give details of bindings for commands, taking into account
+	global-window-system-map and global-tty-map when bindings differ
+	compared to the global map. 
+
+2007-12-17  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* subr.el (integer-to-bit-vector): New.
+	* subr.el (bit-vector-to-integer): New.
+	Provide naive implementations using the Lisp reader for these. 
+
+2007-12-14  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* process.el (substitute-env-vars):
+	Merge an example from GNU's docstring. 
+	* process.el (setenv):	
+	Pass nil as the default abbrev table to the #'read-from-minibuffer
+	call, instead of passing the current value of the variable. Bug
+	introduced by an incorrect sync from GNU by Ben; reported by
+	Thomas Mittelstaedt in 47626712.40609@cadenas.de.
+
+	Document the #'set-time-zone-rule call when TZ is set. Push the
+	old value on to the beginning of setenv-history. (Both merged from
+	GNU.) Document that we don't do the coding-system frobbing at this
+	level that GNU does. 
+
+	Provide a commented-out, sample implementation of GNU's
+	#'environment; document why I think we shouldn't include it.
+
+2007-12-11  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* mule/latin.el :
+	Specify tutorial-coding-system using dotted cons notation, since
+	it's not a list. Prevents an error in help-with-tutorial for these
+	languages.
+
 2007-12-09  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* abbrev.el (write-abbrev-file):
--- a/lisp/autoload.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/autoload.el	Mon Dec 24 15:04:01 2007 +0100
@@ -226,6 +226,20 @@
 ;; Parsing the source file text.
 ;; Autoloads in C source differ from those in Lisp source.
 
+;; #### Eventually operators like defclass and defmethod (defined in an
+;; external package, EIEIO) may be factored out.  Don't add operators here
+;; without discussing whether and how to do that on the developers' channel.
+(defvar autoload-make-autoload-operators
+  '(defun define-skeleton defmacro define-derived-mode define-generic-mode
+    easy-mmode-define-minor-mode easy-mmode-define-global-mode
+    define-minor-mode defun* defmacro* defclass defmethod)
+  "`defun'-like operators that use `autoload' to load the library.")
+
+(defvar autoload-make-autoload-complex-operators
+  '(easy-mmode-define-minor-mode easy-mmode-define-global-mode
+    define-minor-mode)
+  "`defun'-like operators to macroexpand before using `autoload'.")
+
 (defun make-autoload (form file)
   "Turn FORM into an autoload or defvar for source file FILE.
 Returns nil if FORM is not a special autoload form (i.e. a function definition
@@ -233,8 +247,7 @@
   (let ((car (car-safe form)) expand)
     (cond
      ;; For complex cases, try again on the macro-expansion.
-     ((and (memq car '(easy-mmode-define-global-mode
-		       easy-mmode-define-minor-mode define-minor-mode))
+     ((and (memq car autoload-make-autoload-complex-operators)
 	   (setq expand (let ((load-file-name file)) (macroexpand form)))
 	   (eq (car expand) 'progn)
 	   (memq :autoload-end expand))
@@ -246,11 +259,7 @@
 		      (cdr expand)))))
 
      ;; For special function-like operators, use the `autoload' function.
-     ((memq car '(defun define-skeleton defmacro define-derived-mode
-		   define-generic-mode easy-mmode-define-minor-mode
-		   easy-mmode-define-global-mode
-		   define-minor-mode defun* defmacro*
-		   defclass defmethod)) ; from the EIEIO package
+     ((memq car autoload-make-autoload-operators)
       (let* ((macrop (memq car '(defmacro defmacro*)))
 	     (name (nth 1 form))
 	     (body (nthcdr (get car 'doc-string-elt) form))
@@ -516,7 +525,8 @@
 	   (let ((begin (point)))
 	     (forward-sexp)
 	     (forward-line 1)
-	     (princ (buffer-substring begin (point)) outbuf)))
+	     (princ (buffer-substring begin (point)) outbuf))
+	   (setq autoloads-done (cons '<immediate> autoloads-done)))
 	  (t
 	   (princ (buffer-substring
 		   (progn
--- a/lisp/help.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/help.el	Mon Dec 24 15:04:01 2007 +0100
@@ -1484,7 +1484,53 @@
 		   (goto-char newp standard-output))
 		 (unless (or (equal doc "")
 			     (eq ?\n (aref doc (1- (length doc)))))
-		   (terpri)))))))))
+		   (terpri)))
+	       (when (commandp function)
+		 (princ "\nInvoked with:\n")
+		 (let ((global-binding
+			(where-is-internal function global-map))
+		       (global-tty-binding 
+			(where-is-internal function global-tty-map))
+		       (global-window-system-binding 
+			(where-is-internal function global-window-system-map)))
+                   (if (or global-binding global-tty-binding
+                           global-window-system-binding)
+                       (if (and (equal global-binding
+                                       global-tty-binding)
+                                (equal global-binding
+                                       global-window-system-binding))
+                           (princ
+                            (substitute-command-keys
+                             (format "\n\\[%s]" function)))
+                         (when (and global-window-system-binding
+                                    (not (equal global-window-system-binding
+                                                global-binding)))
+                           (princ 
+                            (format 
+                             "\n%s\n        -- under window systems\n"
+                             (mapconcat #'key-description
+                                        global-window-system-binding
+                                        ", "))))
+                         (when (and global-tty-binding
+                                    (not (equal global-tty-binding
+                                                global-binding)))
+                           (princ 
+                            (format 
+                             "\n%s\n        -- under TTYs\n"
+                             (mapconcat #'key-description
+                                        global-tty-binding
+                                        ", "))))
+                         (when global-binding
+                           (princ 
+                            (format 
+                             "\n%s\n        -- generally (that is, unless\
+ overridden by TTY- or
+           window-system-specific mappings)\n"
+                             (mapconcat #'key-description
+                                        global-binding
+                                        ", ")))))
+                     (princ (substitute-command-keys
+                             (format "\n\\[%s]" function))))))))))))
 
 ;;; [Obnoxious, whining people who complain very LOUDLY on Usenet
 ;;; are binding this to keys.]
--- a/lisp/mule/latin.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/mule/latin.el	Mon Dec 24 15:04:01 2007 +0100
@@ -907,7 +907,7 @@
        (native-coding-system ,codesys)
        ,@(if locale `((locale . ,locale)))
        ,@(if tutorial `((tutorial . ,tutorial)
-			(tutorial-coding-system ,codesys)))
+			(tutorial-coding-system . ,codesys)))
        ,@(if sample-text `((sample-text . ,sample-text)))
        (input-method . ,(or input-method default-input))
        (documentation . ,(format "\
--- a/lisp/process.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/process.el	Mon Dec 24 15:04:01 2007 +0100
@@ -25,7 +25,7 @@
 ;; Boston, MA 02111-1307, USA.
 
 ;;; Synched up with: FSF 19.30, except for setenv/getenv (synched with FSF
-;;; 21.0.105).
+;;; 21.2.1).
 
 ;;; Authorship:
 
@@ -542,8 +542,10 @@
 `$FOO' where FOO is an environment variable name means to substitute
 the value of that variable.  The variable name should be terminated
 with a character not a letter, digit or underscore; otherwise, enclose
-the entire variable name in braces.  Use `$$' to insert a single
-dollar sign."
+the entire variable name in braces.  For instance, in `ab$cd-x',
+`$cd' is treated as an environment variable.
+
+Use `$$' to insert a single dollar sign."
   (let ((start 0))
     (while (string-match
 	    ;; XEmacs change - FSF use their rx macro to generate this regexp
@@ -575,19 +577,40 @@
 Interactively, the current value (if any) of the variable
 appears at the front of the history list when you type in the new value.
 
-This function works by modifying `process-environment'."
+This function works by modifying `process-environment'.
+
+As a special case, setting variable `TZ' calls `set-time-zone-rule' as
+a side-effect."
   (interactive
    (if current-prefix-arg
        (list (read-envvar-name "Clear environment variable: " 'exact) nil t)
-     (let ((var (read-envvar-name "Set environment variable: " nil)))
+     (let* ((var (read-envvar-name "Set environment variable: " nil))
+            (value (getenv var)))
+       (when value
+         (push value setenv-history))
        ;; Here finally we specify the args to call setenv with.
        (list var (read-from-minibuffer (format "Set %s to value: " var)
 				       nil nil nil 'setenv-history
-				       (getenv var))))))
+                                       ;; XEmacs change; don't specify a
+                                       ;; default. (Nor an abbrev table.)
+                                       )))))
   (if unset 
       (setq value nil)
     (if substitute-env-vars
 	(setq value (substitute-env-vars value))))
+
+  ;; GNU fuck around with coding systems here. We do it at a much lower
+  ;; level; an equivalent of the following code of Handa's would be
+  ;; worthwhile here, though:
+
+; (let ((codings (find-coding-systems-string (concat variable value))))
+;   (unless (or (eq 'undecided (car codings))
+;               (memq (coding-system-base locale-coding-system) codings))
+;     (error "Can't encode `%s=%s' with `locale-coding-system'"
+;            variable (or value "")))))
+
+  ;; But then right now our find-coding-systems analogue is in packages.
+
   (if (string-match "=" variable)
       (error "Environment variable name `%s' contains `='" variable)
     (let ((pattern (concat "\\`" (regexp-quote (concat variable "="))))
@@ -626,6 +649,25 @@
 ;       (message "%s" (if value value "Not set")))
 ;     value))
 
+
+;; GNU have an #'environment function here, as of 2007-12-14. If someone
+;; actually uses it in the wild, this would suffice as an implementation:
+
+; (defun environment (&optional frame) 
+;   "Return a list of environment variables with their values.
+; Each entry in the list is a string of the form NAME=VALUE.
+; 
+; Optional argument FRAME is ignored, for GNU compatibility.
+; 
+; Non-ASCII characters look like Mojibake (that is, they are unreadable.)"
+;   (loop
+;     for entry in process-environment
+;     collect (encode-coding-string entry 'native)))
+; 
+
+;; but we shouldn't encourage that sort of ugliness and needless backwards
+;; incompatibility.
+
 (provide 'env) ;; Yuck.  Formerly the above were in env.el, which did this
 	       ;; provide.
 
--- a/lisp/startup.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/startup.el	Mon Dec 24 15:04:01 2007 +0100
@@ -849,12 +849,16 @@
     (or (find-user-init-directory-init-file init-directory)
 	(find-user-home-directory-init-file home-directory))))
 
+(defun ask-about-user-init-file-migration-p ()
+  "Check whether we want to ask the user if she wants to migrate the init file."
+  (and (not load-home-init-file)
+       (not (find-user-init-directory-init-file user-init-directory))
+       (stringp user-init-file)
+       (file-readable-p user-init-file)))
+
 (defun maybe-migrate-user-init-file ()
   "Ask user if she wants to migrate the init file(s) to new location."
-  (if (and (not load-home-init-file)
-	   (not (find-user-init-directory-init-file user-init-directory))
-	   (stringp user-init-file)
-	   (file-readable-p user-init-file))
+  (if (ask-about-user-init-file-migration-p)
       (if (with-output-to-temp-buffer (help-buffer-name nil)
 	    (progn
 	      (princ "XEmacs recommends that the initialization code in
@@ -881,7 +885,8 @@
 					   user-init-directory
 					   "? "))))
 
-	  (let ((backup (migrate-user-init-file)))
+	  (progn
+	    (migrate-user-init-file)
 	    (with-output-to-temp-buffer (help-buffer-name nil)
 	      (progn
 	      (princ "The initialization code has now been migrated to the ")
@@ -890,46 +895,63 @@
 
 For backwards compatibility with, for example, older versions of XEmacs,
 XEmacs can create a special old-style .emacs file in your home
-directory which will load the relocated initialization code.")
-	      (if backup
-		  (progn
-		    (princ "\nMoreover, a backup of your old .emacs file was created as\n")
-		    (princ backup)
-		    (princ ".\n")))
+directory which will load the relocated initialization code.
+
+NOTE THAT THIS WILL OVERWRITE YOUR EXISTING .emacs FILE!")
 	      (show-temp-buffer-in-current-frame standard-output)
 	      (maybe-create-compatibility-dot-emacs))))
-	(customize-save-variable 'load-home-init-file t))))
+	(set-load-home-init-file user-init-file t))))
 
 (defun maybe-create-compatibility-dot-emacs ()
   "Ask user if she wants to create a .emacs compatibility file."
-  (if (yes-or-no-p-minibuf "Create compatibility .emacs? ")
+  (if (yes-or-no-p-minibuf "Create compatibility .emacs?")
       (create-compatibility-dot-emacs)))
 
 (defun migrate-user-init-file ()
-  "Migrate the init file from the home directory.
-Return the name of backup file, if one was created."
+  "Migrate the init file from the home directory."
   (interactive)
   (if (not (file-exists-p user-init-directory))
       (progn
 	(message "Creating %s directory..." user-init-directory)
 	(make-directory user-init-directory)))
   (message "Migrating custom file...")
-  (let* ((backup (concat user-init-file ".backup"))
-	 (backup-p
-	  (and (not (file-exists-p backup))
-	       (progn
-		 (copy-file user-init-file backup)
-		 t))))
-    (customize-set-value 'load-home-init-file nil)
-    (custom-migrate-custom-file (make-custom-file-name user-init-file
-						       'force-new))
-    (message "Moving init file...")
-    (let ((new-user-init-file (expand-file-name user-init-file-base
-						user-init-directory)))
-      (rename-file user-init-file new-user-init-file)
-      (setq user-init-file new-user-init-file))
-    (message "Migration done.")
-    (and backup-p backup)))
+  (set-load-home-init-file user-init-file nil)
+  (setq custom-file (make-custom-file-name user-init-file 'force-new))
+  (custom-save-all)
+  (message "Copying init file...")
+  (let ((new-user-init-file (expand-file-name user-init-file-base
+					      user-init-directory)))
+    (copy-file user-init-file new-user-init-file)
+    (setq user-init-file new-user-init-file))
+  (message "Migration done."))
+
+(defun set-load-home-init-file (filename val)
+  "Put code in `filename' to set `load-home-init-file' to `val'.
+More precisely, remove the first `setq' form for `load-home-init-file',
+and replace it by (setq load-home-init-file t) if `val' is non-nil."
+  (save-excursion
+    (set-buffer (find-file-noselect filename))
+    (goto-char (point-min))
+    (condition-case nil
+	(block find-existing
+	  (while (not (eobp))
+	    (forward-sexp 1)
+	    (backward-sexp 1)
+	    (let* ((beginning (point))
+		   (sexp (read (current-buffer))))
+	      (if (and (consp sexp)
+		       (consp (cdr sexp))
+		       (eq 'setq (car sexp))
+		       (eq 'load-home-init-file (cadr sexp)))
+		  (progn
+		    (forward-line 1)
+		    (delete-region beginning (point))
+		    (return-from find-existing nil))
+		(forward-sexp 1)))))
+	(error nil)) ; ignore if there are no sexprs in the file
+    (if val
+	(insert "(setq load-home-init-file t) ; don't load init file from ~/.xemacs/init.el\n"))
+    (save-buffer)))
 
 (defun create-compatibility-dot-emacs ()
   "Create .emacs compatibility file for migrated setup."
@@ -965,8 +987,9 @@
     (rename-file user-init-file target-file-name 'ok-if-already-exists)
     (setq user-init-file target-file-name)
     (let ((old-custom-file custom-file))
-      (custom-migrate-custom-file target-file-name)
-      (customize-save-variable 'load-home-init-file t)
+      (setq custom-file target-file-name)
+      (custom-save-all)
+      (set-load-home-init-file user-init-file t)
       (delete-file old-custom-file))))
 
 (defun load-user-init-file ()
@@ -1089,7 +1112,8 @@
 
       ;; Don't clobber a non-scratch buffer if init file
       ;; has selected it.
-      (when (string= (buffer-name) "*scratch*")
+      (when (and (string= (buffer-name) "*scratch*")
+		 (not (ask-about-user-init-file-migration-p)))
 	(unless (or inhibit-startup-message
 		    (input-pending-p))
 	  (let (tmout)
--- a/lisp/subr.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/lisp/subr.el	Mon Dec 24 15:04:01 2007 +0100
@@ -913,6 +913,26 @@
 (define-function 'char-int 'char-to-int)
 (define-function 'int-char 'int-to-char)
 
+;; XEmacs addition.
+(defun integer-to-bit-vector (integer &optional minlength)
+  "Return INTEGER converted to a bit vector.
+Optional argument MINLENGTH gives a minimum length for the returned vector.
+If MINLENGTH is not given, zero high-order bits will be ignored."
+  (check-argument-type #'integerp integer)
+  (setq minlength (or minlength 0))
+  (check-nonnegative-number minlength)
+  (read (format (format "#*%%0%db" minlength) integer)))
+
+;; XEmacs addition.
+(defun bit-vector-to-integer (bit-vector)
+  "Return BIT-VECTOR converted to an integer.
+If bignum support is available, BIT-VECTOR's length is unlimited.
+Otherwise the limit is the number of value bits in an Lisp integer. "
+  (check-argument-type #'bit-vector-p bit-vector)
+  (setq bit-vector (prin1-to-string bit-vector))
+  (aset bit-vector 1 ?b)
+  (read bit-vector))
+
 (defun string-width (string)
   "Return number of columns STRING occupies when displayed.
 With international (Mule) support, uses the charset-columns attribute of
--- a/man/ChangeLog	Mon Dec 24 15:02:36 2007 +0100
+++ b/man/ChangeLog	Mon Dec 24 15:04:01 2007 +0100
@@ -1,3 +1,12 @@
+2007-12-17  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* lispref/strings.texi (Formatting Strings):
+	Document %b for binary output.
+
+2007-12-10  Ville Skyttä  <scop@xemacs.org>
+
+	* internals/internals.texi: Spelling fixes.
+
 2007-12-07  Ville Skyttä  <scop@xemacs.org>
 
 	* beta.texi, emodules.texi, term.texi, termcap.texi, texinfo.texi,
--- a/man/internals/internals.texi	Mon Dec 24 15:02:36 2007 +0100
+++ b/man/internals/internals.texi	Mon Dec 24 15:04:01 2007 +0100
@@ -947,21 +947,21 @@
 @item
 Scrollbars: Chuck Thompson, ??? (Lucid scrollbar)
 @item
-Multi-device/device-independence work (console/device/etc methods): Ben Wing, prototype by chuck thompson
+Multi-device/device-independence work (console/device/etc methods): Ben Wing, prototype by Chuck Thompson
 @item
 Faces: first implementation, Jamie Zawinski; second, chuck; third, Ben Wing
 @item
 Fonts/colors: first implementation, Jamie Zawinski; further work, Ben Wing
 @item
-Toolbars: implementation, chuck, much interface work, Ben Wing
-@item
-Gutters, tabs: andy piper
+Toolbars: implementation, Chuck, much interface work, Ben Wing
+@item
+Gutters, tabs: Andy Piper
 @end itemize
 
 @item Device subsystems
 @itemize @minus
 @item
-X Windows: Jamie Zawinksi, Ben Wing, others
+X Windows: Jamie Zawinski, Ben Wing, others
 @item
 GTK: William Perry, Malcolm Purvis
 @item
@@ -975,7 +975,7 @@
 @item Misc
 @itemize @minus
 @item
-Configure: initial porting from fsf, Chuck Thompson; conversion to autoconf 2, much rewriting, Martin Buchholz
+Configure: initial porting from FSF, Chuck Thompson; conversion to autoconf 2, much rewriting, Martin Buchholz
 @item
 Most initialization-related code: Ben Wing
 @item
@@ -1023,7 +1023,7 @@
 and has attempted to be the "face" of XEmacs on the newsgroups and
 mailing lists.
 @item
-Steve Youngs, Ville Skytta, and now Norbert Koch have taken turns
+Steve Youngs, Ville Skytt䬠and now Norbert Koch have taken turns
 maintaining the packages.
 @item
 Vin Shelton maintains the stable releases.
@@ -1037,7 +1037,7 @@
 @table @asis
 
 @item Jamie Zawinski, Eric Benson, Matthieu Devin, Harlan Sexton
-These were the early creators of Lucid Emacs, the predecessor of Xemacs.
+These were the early creators of Lucid Emacs, the predecessor of XEmacs.
 Jamie Zawinski was the primary maintainer and coder for Lucid Emacs,
 active between early 1991 and June 1994.  He presided over versions 19.0
 through 19.10, and then abruptly left for Netscape.  He wrote the
@@ -1054,44 +1054,44 @@
 Active 1991 to 1993, author of much of the current Lisp object scheme,
 including Lrecords and LC records (added this support in 1993 to allow
 for 28-bit pointers, which had previously been restricted to 26 bits.)
-Moved the minibuffer and abbreve code into Lisp, worked on the keymap
-code and did the initial synching between Xemacs and the first released
+Moved the minibuffer and abbrev code into Lisp, worked on the keymap
+code and did the initial synching between XEmacs and the first released
 version of GNU Emacs version 19 in mid-1993.
 
 @item Martin Buchholz
-Active 1995 to 2001, maintainer of Xemacs late 1999 to ?, author of the
+Active 1995 to 2001, maintainer of XEmacs late 1999 to ?, author of the
 current configure support, mini optimizations to the byte interpreter,
 many improvements to the case changing code and many bug fixes to the
 process and system-specific code, also general spell checking and code
 cleanliness guru.
 
 @item Steve Baur
-Maintainer of Xemacs 1996 to 1999, responsible for many improvements to
-the Xemacs development process, for example, creation of the review
-board and arranging for Xemacs to be placed under CVS.  Author of the
+Maintainer of XEmacs 1996 to 1999, responsible for many improvements to
+the XEmacs development process, for example, creation of the review
+board and arranging for XEmacs to be placed under CVS.  Author of the
 package code.
 
 @item Chuck Thompson
 Active January 1993 to June 1996, author of the current and previous
-versions of the redisplay code and maintainer of Xemacs from mid-1994
-to mid-1996.  Creator of XEMacs.org.  Also wrote the scrollbar code, the
+versions of the redisplay code and maintainer of XEmacs from mid-1994
+to mid-1996.  Creator of xemacs.org.  Also wrote the scrollbar code, the
 original configure support, and prototype versions of the toolbar and
 device code.
 
 @item Ben Wing
 Active April 1993 to April 1996 and February 2000 to present.  Chief
-coder for Xemacs between 1994 and 1996.  Ben Wing was never the
-maintainer of Xemacs, and as a result, is the author of more of the
-Xemacs specific code in Xemacs than anyone else. Author of the mule
+coder for XEmacs between 1994 and 1996.  Ben Wing was never the
+maintainer of XEmacs, and as a result, is the author of more of the
+XEmacs specific code in XEmacs than anyone else. Author of the mule
 support (Extense code), the glis-phonetically spelled-and specifiers
 code most of the toolbars, and device distraction code, the error
 checking code, the Lstream code, the bit vector, char-table, and
 range-table code, much of the current Xt code, much, much of the events
 code (including most of the TTY event code), some of the phase code, and
-numerous other aspects of the code.  Also author of most of the Xemacs
-documentation including the internals manual and the Xemacs editions to
+numerous other aspects of the code.  Also author of most of the XEmacs
+documentation including the internals manual and the XEmacs editions to
 the Lisp reference manual, and responsible for much of the synching
-between Xemacs and GNU Emacs.
+between XEmacs and GNU Emacs.
 
 @item Kyle Jones
 Author of the minimal tag bits support, which allows for 32-bit
@@ -1160,13 +1160,13 @@
 
 @item alloca.c
 Inherited a long time ago from a prerelease version of GNU Emacs 19,
-kept in sync with more recent versions very few changes from Xemacs.
+kept in sync with more recent versions very few changes from XEmacs.
 Most changes consist of converting the code to ANSI C, and fixing up the
-includes at the top of the file to follow Xemacs conventions.
+includes at the top of the file to follow XEmacs conventions.
 
 @item alloca.s
 Inherited almost unchanged from FSF kept in sync up through 19.30
-basically no changes for Xemacs.
+basically no changes for XEmacs.
 @end table
 @end ignore
 
@@ -1275,13 +1275,13 @@
 transmitted/read by emacs (one or the other) correctly.
 The 4410 terminal description that I'm using defines up=M-[A
 (it appears as ^[[A, with the initial ^[ as one character).
-Pressting cntrl-Q up_arrow while in emacs shows me the same thing.
+Pressing Ctrl-Q up_arrow while in emacs shows me the same thing.
 On the vt100 the same thing happens but the terminal file says up=M-A
 (it appears as ^[A).  I've tried every other imaginable up= but get
 the same results.  I've also been unsuccessful writing a macro that
 understands what my keyboard is saying.
 
-Any ideas on how I can get the arrow keys to do somethingt? 
+Any ideas on how I can get the arrow keys to do something? 
 Anything?  Thanks in advance.
 
 --Bruce Burger     AT&T-Information Systems     Freehold, NJ
@@ -1751,7 +1751,7 @@
 these same years.  Steve Baur added the package system in 1997 (?),
 and Olivier Galibert also added the portable dumper support around
 2000.  Martin Buchholz took over from Steve Baur as release manager in
-late 1998 (?), and continued in this position through to eary 2000
+late 1998 (?), and continued in this position through to early 2000
 (?), when Stephen Turnbull took it over.  XEmacs has also been split
 into stable and experimental branches since early 1999, and Vin
 Shelton has been the release manager of the stable branches since the
@@ -4630,7 +4630,7 @@
 Autoconf 2.59 divides the @file{configure} options into those that
 specify features (@samp{--enable}) and those that specify external
 libraries (@samp{--with}).  Many XEmacs options to not fall neatly into
-either of these catagories and so as a matter of policy all options can
+either of these categories and so as a matter of policy all options can
 be specified by either method.
 
 These merged options are declared with the @code{XE_MERGED_ARG} macro.
@@ -4660,7 +4660,7 @@
 @samp{--with-mail-locking=flock}.
 
 Keyword options are defined with an expanded form of
-@samp{XE_MERGED_ARG} called @samp{XE_KEYWORD_ARG}, which taks 5
+@samp{XE_MERGED_ARG} called @samp{XE_KEYWORD_ARG}, which takes 5
 parameters.  The first 4 parameters are the same as original macro with
 the exception that all of these four parameters are @strong{required}.
 The @var{action-if-true} code is run after the argument list has been
@@ -5954,7 +5954,7 @@
 a search-and-replace is done to change type names and such.  Some people
 disagree with such changes, and certainly if done without good reason
 will just lead to headaches.  But it's important to keep the code clean
-and understable, and consistent naming goes a long way towards this.
+and understandable, and consistent naming goes a long way towards this.
 
 An example of the right way to do this was the so-called "great integral
 type renaming".
@@ -11328,7 +11328,7 @@
 the actual multi-byte encoding.
 @end enumerate
 
-  None of the pre-Unciode standard non-modal encodings meet all of these
+  None of the pre-Unicode standard non-modal encodings meet all of these
 conditions.  For example, EUC satisfies only (2) and (3), while
 Shift-JIS and Big5 (not yet described) satisfy only (2). (All non-modal
 encodings must satisfy (2), in order to be unambiguous.)  UTF-8,
@@ -11515,7 +11515,7 @@
 inside of DNS names.
 @end itemize
 
-Thus, we can imagine three levels in the representation of texual data:
+Thus, we can imagine three levels in the representation of textual data:
 
 @example
 series of characters -> series of textual units -> series of bytes
@@ -12095,7 +12095,7 @@
 variable section:
 
 DECLARE_EISTRING (name);
-     Declare a new Eistring and initialize it to the empy string.  This
+     Declare a new Eistring and initialize it to the empty string.  This
      is a standard local variable declaration and can go anywhere in the
      variable declaration section.  NAME itself is declared as an
      Eistring *, and its storage declared on the stack.
--- a/man/lispref/strings.texi	Mon Dec 24 15:02:36 2007 +0100
+++ b/man/lispref/strings.texi	Mon Dec 24 15:04:01 2007 +0100
@@ -715,6 +715,11 @@
 Replace the specification with the base-sixteen representation of an
 integer, using uppercase letters.
 
+@item %b
+@cindex integer to binary
+Replace the specification with the base-two representation of an
+integer.
+
 @item %c
 Replace the specification with the character which is the value given.
 
--- a/src/ChangeLog	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/ChangeLog	Mon Dec 24 15:04:01 2007 +0100
@@ -5,6 +5,117 @@
 	Unify the typed character if possible, following the current value
 	for the unicode precedence list. 
 
+2007-12-24  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* symbols.c (Fintern_soft): 
+	Provide a new optional third argument, DEFAULT, for those who want
+	to check if "nil" is a symbol or not. (More realistically, general
+	code that may get handed "nil" should probably use this argument.)
+
+2007-12-23  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* objects-tty.c (tty_find_charset_font): 
+	* objects-msw.c (mswindows_font_spec_matches_charset_stage_2):
+	* objects-msw.c (mswindows_font_spec_matches_charset_stage_1):
+	* objects-xlike-inc.c (x_font_spec_matches_charset): 
+	* objects-xlike-inc.c (gtk_font_spec_matches_charset):
+	If the charset is not specified when calling the
+	font_spec_matches_charset device method, its value is Qnil, not
+	Qunbound. See
+	http://mid.gmane.org/E1EfbmW-00029r-5G@iwi191.iwi.uni-sb.de and
+	Ben Wing's patch of
+	http://mid.gmane.org/439FA06B.3090007@xemacs.org. 
+
+2007-12-22  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* database.c (Fopen_database):
+	Actually respect the CODESYS argument; don't require EOL
+	autodetection from the coding system, because autodetection mostly
+	fails with reads of small amounts of data. It might be possible
+	with an implicit #'map-database on open, though I don't think
+	that's a great idea.
+	* database.c (print_database):
+	Give the coding system used for text conversion when printing a
+	database object. 
+
+2007-12-20  Jerry James  <james@xemacs.org>
+
+	* sound.c: Fix unused parameter warnings when HAVE_ALSA_SOUND.
+
+2007-12-18  Kenny Chien <Kenny.Chien@morganstanley.com>
+
+	* extw-Xt.c (extw_wait_for_response): Don't use undocumented
+	internal Xt functions, avoiding inconsistent behavior between
+	different Solaris versions.
+
+2007-12-18  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* symbols.c (Fspecial_form_p):
+	Following commentary from Jerry James, don't error if not passed a
+	subr. 
+
+	Flesh out the docstring; give details of what a subr is, what a
+	special form is, and why one should probably not write special
+	forms oneself. 
+
+2007-12-18  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* symbols.c (Fspecial_form_p): New.
+	For the use of advice.el, and perhaps other files; is SUBR a
+	special form?
+
+2007-12-17  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* doprnt.c (emacs_doprnt_1):
+	Add support for formatted printing of both longs and bignums as
+	base 2.
+	* editfns.c (Fformat):
+	Document the new %b escape for #'format. 
+	* lisp.h:
+	Make ulong_to_bit_string available beside long_to_string. 
+	* lread.c:
+	Fix a bug where the integer base was being ignored in certain
+	contexts; thank you Sebastian Freundt. This is necessary for
+	correct behaviour of #'integer-to-bit-vector and
+	#'bit-vector-to-integer, just added to subr.el
+	* print.c (ulong_to_bit_string): New.
+	Analagous to long_to_string, but used all the time when %b is
+	encountered, since we can't pass that to sprintf. 	
+
+2007-12-12  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* config.h.in:
+	Make the results of the checks for 
+	FcConfigGetRescanInterval, FcConfigSetRescanInterval
+	available.
+	* font-mgr.h:
+	If FcConfigSetRescanInterval and FcConfigGetRescanInterval are not
+	available as functions, #define them to map to their old
+	misspelled names. 	
+	* font-mgr.c (Ffc_config_get_rescan_interval):
+	* font-mgr.c (Ffc_config_set_rescan_interval):
+	Use the correct spelling in
+	FcConfigGetRescanInterval, FcConfigSetRescanInterval
+
+2007-12-11  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* glyphs-eimage.c: 
+	Merge Ron Isaacson's patch of
+	3ggprxj7ifh.wl_Ron.Isaacson@morganstanley.com , originally from
+	Gennady Khokhorin. Prevents library incompatibilities on Win32.
+
+2007-12-11  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* fileio.c (Fsubstitute_in_file_name):
+	On encountering non-existent environment variables or incorrect
+	syntax for specifying environment variables (as is routine on
+	Windows) don't error, instead pass the original strings through.
+
+2007-12-05  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* search.c (simple_search): Fix underrun in reverse search.
+	(search_buffer): Clarify decision to use boyer_moore or not.
+
 2007-12-06  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* tests.c (Ftest_data_format_conversion):
--- a/src/config.h.in	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/config.h.in	Mon Dec 24 15:04:01 2007 +0100
@@ -209,6 +209,14 @@
 /* Compile with support for fontconfig? */
 #undef HAVE_FONTCONFIG
 
+/* Was the spelling of FcConfigGetRescanInterval corrected in this
+   fontconfig version? */
+#undef HAVE_FCCONFIGGETRESCANINTERVAL
+
+/* Was the spelling of FcConfigSetRescanInterval corrected in this
+   fontconfig version? */
+#undef HAVE_FCCONFIGSETRESCANINTERVAL
+
 /* Compile with support for Xft? */
 #undef USE_XFT
 /* Per-widget stuff will go away? */
--- a/src/database.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/database.c	Mon Dec 24 15:04:01 2007 +0100
@@ -31,6 +31,7 @@
 
 #include "sysfile.h"
 #include "buffer.h"
+#include "file-coding.h"
 
 #ifndef HAVE_DATABASE
 #error HAVE_DATABASE not defined!!
@@ -181,11 +182,16 @@
 			 3, db->fname, db->funcs->get_type (db),
 			 db->funcs->get_subtype (db));
 
-  write_fmt_string (printcharfun, "%s) 0x%x>",
+  write_fmt_string (printcharfun, "%s) ",
 		    (!DATABASE_LIVE_P (db)    ? "closed"    :
 		     (db->access_ & O_WRONLY) ? "writeonly" :
-		     (db->access_ & O_RDWR)   ? "readwrite" : "readonly"),
-		    db->header.uid);
+		     (db->access_ & O_RDWR)   ? "readwrite" : "readonly"));
+
+  write_fmt_string_lisp (printcharfun, "coding: %s ", 1,
+                         XSYMBOL_NAME (XCODING_SYSTEM_NAME
+                                       (db->coding_system)));
+
+  write_fmt_string (printcharfun, "0x%x>", db->header.uid);
 }
 
 static void
@@ -654,7 +660,7 @@
   if (NILP (codesys))
     codesys = Vdatabase_coding_system;
 
-  codesys = get_coding_system_for_text_file (Vdatabase_coding_system, 1);
+  codesys = get_coding_system_for_text_file (codesys, 0);
 
 #ifdef HAVE_DBM
   if (NILP (type) || EQ (type, Qdbm))
--- a/src/doprnt.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/doprnt.c	Mon Dec 24 15:04:01 2007 +0100
@@ -34,7 +34,7 @@
 #include "lstream.h"
 
 static const char * const valid_flags = "-+ #0";
-static const char * const valid_converters = "dic" "ouxX" "feEgG" "sS"
+static const char * const valid_converters = "dic" "ouxX" "feEgG" "sS" "b"
 #if defined(HAVE_BIGNUM) || defined(HAVE_RATIO)
   "npyY"
 #endif
@@ -43,11 +43,11 @@
 #endif
   ;
 static const char * const int_converters = "dic";
-static const char * const unsigned_int_converters = "ouxX";
+static const char * const unsigned_int_converters = "ouxXb";
 static const char * const double_converters = "feEgG";
 static const char * const string_converters = "sS";
 #if defined(HAVE_BIGNUM) || defined(HAVE_RATIO)
-static const char * const bignum_converters = "npyY";
+static const char * const bignum_converters = "npyY\337";
 #endif
 #ifdef HAVE_BIGFLOAT
 static const char * const bigfloat_converters = "FhHkK";
@@ -665,6 +665,7 @@
 			case 'o': ch = 'p'; break;
 			case 'x': ch = 'y'; break;
 			case 'X': ch = 'Y'; break;
+                        case 'b': ch = '\337'; break;
 			default: /* ch == 'u' */
 			  if (strchr (unsigned_int_converters, ch) &&
 			      ratio_sign (XRATIO_DATA (obj)) < 0)
@@ -684,6 +685,7 @@
 			case 'o': ch = 'p'; break;
 			case 'x': ch = 'y'; break;
 			case 'X': ch = 'Y'; break;
+                        case 'b': ch = '\337'; break;
 			default: /* ch == 'u' */
 			  if (strchr (unsigned_int_converters, ch) &&
 			      bignum_sign (XBIGNUM_DATA (obj)) < 0)
@@ -733,13 +735,21 @@
 #if defined(HAVE_BIGNUM) || defined(HAVE_RATIO)
 	  else if (strchr (bignum_converters, ch))
 	    {
+              int base = 16;
+              
+              if (ch == 'n')
+                base = 10;
+              else if (ch == 'p')
+                base = 8;
+              else if (ch == '\337')
+                base = 2;
+
 #ifdef HAVE_BIGNUM
 	      if (BIGNUMP (arg.obj))
 		{
 		  Ibyte *text_to_print =
 		    (Ibyte *) bignum_to_string (XBIGNUM_DATA (arg.obj),
-						ch == 'n' ? 10 :
-						(ch == 'p' ? 8 : 16));
+						base);
 		  doprnt_2 (stream, text_to_print,
 			    strlen ((const char *) text_to_print),
 			    spec->minwidth, -1, spec->minus_flag,
@@ -751,9 +761,7 @@
 	      if (RATIOP (arg.obj))
 		{
 		  Ibyte *text_to_print =
-		    (Ibyte *) ratio_to_string (XRATIO_DATA (arg.obj),
-					       ch == 'n' ? 10 :
-					       (ch == 'p' ? 8 : 16));
+		    (Ibyte *) ratio_to_string (XRATIO_DATA (arg.obj), base);
 		  doprnt_2 (stream, text_to_print,
 			    strlen ((const char *) text_to_print),
 			    spec->minwidth, -1, spec->minus_flag,
@@ -774,6 +782,15 @@
 	      xfree (text_to_print, Ibyte *);
 	    }
 #endif /* HAVE_BIGFLOAT */
+          else if (ch == 'b')
+            {
+              Ascbyte *text_to_print = alloca_array (char, SIZEOF_LONG * 8 + 1);
+              
+              ulong_to_bit_string (text_to_print, arg.ul);
+              doprnt_2 (stream, (Ibyte *)text_to_print,
+                        qxestrlen ((Ibyte *)text_to_print), 
+                        spec->minwidth, -1, spec->minus_flag, spec->zero_flag);
+            }
 	  else
 	    {
 	      Ascbyte *text_to_print;
--- a/src/editfns.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/editfns.c	Mon Dec 24 15:04:01 2007 +0100
@@ -2155,7 +2155,7 @@
 %s means print all objects as-is, using `princ'.
 %S means print all objects as s-expressions, using `prin1'.
 %d or %i means print as an integer in decimal (%o octal, %x lowercase hex,
-  %X uppercase hex).
+  %X uppercase hex, %b binary).
 %c means print as a single character.
 %f means print as a floating-point number in fixed notation (e.g. 785.200).
 %e or %E means print as a floating-point number in scientific notation
--- a/src/extw-Xt.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/extw-Xt.c	Mon Dec 24 15:04:01 2007 +0100
@@ -37,39 +37,9 @@
 #include <X11/IntrinsicP.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include "compiler.h"
 #include "extw-Xt.h"
 
-/* Yeah, that's portable!
-
-   Why the hell didn't the Xt people just export this function
-   for real? */
-
-#if (XT_REVISION > 5)
-EXTERN_C int
-_XtWaitForSomething (XtAppContext app, _XtBoolean ignoreEvents,
-		     _XtBoolean ignoreTimers, _XtBoolean ignoreInputs,
-		     _XtBoolean ignoreSignals, _XtBoolean block,
-#ifdef XTHREADS
-		     _XtBoolean drop_lock,
-#endif
-		     unsigned long *howlong);
-
-# ifndef XTHREADS
-#  define _XT_WAIT_FOR_SOMETHING(timers,inputs,events,block,howlong,appCtx) \
-          _XtWaitForSomething (appCtx,events,timers,inputs,0,block,howlong)
-# else
-#  define _XT_WAIT_FOR_SOMETHING(timers,inputs,events,block,howlong,appCtx) \
-          _XtWaitForSomething (appCtx,events,timers,inputs,0,block,1,howlong)
-# endif
-#else
-EXTERN_C int
-_XtwaitForSomething (Boolean ignoreTimers, Boolean ignoreInputs,
-		     Boolean ignoreEvents, Boolean block,
-		     unsigned long *howlong, XtAppContext app);
-# define _XT_WAIT_FOR_SOMETHING(timers,inputs,events,block,howlong,appCtx) \
-         _XtwaitForSomething (timers,inputs,events,block,howlong,appCtx)
-#endif
-
 #ifdef DEBUG_WIDGET
 
 static int geom_masks[] = {
@@ -181,60 +151,87 @@
 #endif
 }
 
-typedef struct {
-	Widget w;
-	unsigned long request_num;
-	en_extw_notify type;
+typedef struct
+{
+  Widget w;
+  unsigned long request_num;
+  en_extw_notify type;
 } QueryStruct;
 
 /* check if an event is of the sort we're looking for */
 
 static Bool
-isMine(Display *dpy, XEvent *event, char *arg)
+isMine(XEvent *event, QueryStruct *q)
 {
-	QueryStruct *q = (QueryStruct *) arg;
-	Widget w = q->w;
+  Widget w = q->w;
 
-	if ( (dpy != XtDisplay(w)) || (event->xany.window != XtWindow(w)) ) {
-	    return FALSE;
+  if ( (event->xany.display != XtDisplay(w)) || (event->xany.window != XtWindow(w)) )
+    {
+      return FALSE;
+    }
+  if (event->xany.serial >= q->request_num)
+    {
+      if (event->type == ClientMessage &&
+	  event->xclient.message_type == a_EXTW_NOTIFY &&
+	  event->xclient.data.l[0] == 1 - extw_which_side &&
+	  event->xclient.data.l[1] == (int) q->type)
+	{
+	  return TRUE;
 	}
-	if (event->xany.serial >= q->request_num) {
-	  if (event->type == ClientMessage &&
-	      event->xclient.message_type == a_EXTW_NOTIFY &&
-	      event->xclient.data.l[0] == 1 - extw_which_side &&
-	      (en_extw_notify) event->xclient.data.l[1] == q->type)
-	    return TRUE;
-	}
-	return FALSE;
+    }
+  return FALSE;
+}
+
+void responseTimeOut(XtPointer clientData, XtIntervalId  * UNUSED (id))
+{
+  Bool *expired=(Bool *)clientData;
+  *expired=TRUE;
 }
 
 /* wait for a ClientMessage of the specified type from the other widget, or
-   time-out.  isMine() determines whether an event matches.  Culled from
-   Shell.c. */
+   time-out.  isMine() determines whether an event matches.
+   Took out the call to _XtWaitForSomething and replaced it with public
+   Xt api's.
+*/
 
 Bool
 extw_wait_for_response (Widget w, XEvent *event, unsigned long request_num,
 			en_extw_notify type, unsigned long timeout)
 {
   XtAppContext app = XtWidgetToApplicationContext(w);
+  XtInputMask inputMask;
   QueryStruct q;
+  Bool expired;
+  XtIntervalId id;
 
-  XFlush(XtDisplay(w));
   q.w = w;
   q.request_num = request_num;
   q.type = type;
+  expired=FALSE;
 
-  for(;;)
+  id=XtAppAddTimeOut(app, timeout, responseTimeOut,&expired);
+  while (!expired)
     {
-      /*
-       * look for match event
-       */
-      if (XCheckIfEvent (XtDisplay(w), event, isMine, (char*)&q))
-	return TRUE;
-      if (_XT_WAIT_FOR_SOMETHING (TRUE, TRUE, FALSE, TRUE, &timeout, app)
-	  != -1)
-	continue;
-      if (timeout == 0)
-	return FALSE;
+      inputMask=XtAppPending(app);
+      if (inputMask & XtIMXEvent)
+	{
+	  XtAppNextEvent(app, event);
+	  if (isMine(event,&q))
+	    {
+	      if (!expired) XtRemoveTimeOut(id);
+	      return True;
+	    }
+	  else
+	    {
+	      /* Do Nothing and go back to waiting */
+	    }
+	}
+      if (inputMask & XtIMTimer)
+	{
+	  /* Process the expired timer */
+	  XtAppProcessEvent(app,XtIMTimer);
+	}
     }
+  /* Must have expired */
+  return False;
 }
--- a/src/fileio.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/fileio.c	Mon Dec 24 15:04:01 2007 +0100
@@ -1518,10 +1518,10 @@
   /* This function can GC.  GC checked 2000-07-28 ben. */
   Ibyte *nm;
 
-  Ibyte *s, *p, *o, *x, *endp;
+  Ibyte *s, *p, *o, *x, *endp, *got;
   Ibyte *target = 0;
   int total = 0;
-  int substituted = 0;
+  int substituted = 0, seen_braces;
   Ibyte *xnm;
   Lisp_Object handler;
 
@@ -1576,7 +1576,10 @@
       {
 	p++;
 	if (p == endp)
-	  goto badsubst;
+	  {
+	    /* No substitution, no error. */
+	    break;
+	  }
 	else if (*p == '$')
 	  {
 	    /* "$$" means a single "$" */
@@ -1589,7 +1592,12 @@
 	  {
 	    o = ++p;
 	    while (p != endp && *p != '}') p++;
-	    if (*p != '}') goto missingclose;
+	    if (*p != '}')
+	      {
+		/* No substitution, no error. Keep looking. */
+		p = o;
+		continue;
+	      }
 	    s = p;
 	  }
 	else
@@ -1608,10 +1616,12 @@
 #endif /* WIN32_NATIVE */
 
 	/* Get variable value */
-	o = egetenv ((CIbyte *) target);
-	if (!o) goto badvar;
-	total += qxestrlen (o);
-	substituted = 1;
+	got = egetenv ((CIbyte *) target);
+	if (got)
+	  {
+	    total += qxestrlen (got);
+	    substituted = 1;
+	  }
       }
 
   if (!substituted)
@@ -1629,8 +1639,12 @@
     else
       {
 	p++;
+	seen_braces = 0;
 	if (p == endp)
-	  goto badsubst;
+	  {
+	    *x++ = '$';
+	    break;
+	  }
 	else if (*p == '$')
 	  {
 	    *x++ = *p++;
@@ -1638,9 +1652,16 @@
 	  }
 	else if (*p == '{')
 	  {
+	    seen_braces = 1;
 	    o = ++p;
 	    while (p != endp && *p != '}') p++;
-	    if (*p != '}') goto missingclose;
+	    if (*p != '}')
+	      {
+		/* Don't syntax error, don't substitute */
+		*x++ = '{';
+		p = o;
+		continue;
+	      }
 	    s = p++;
 	  }
 	else
@@ -1659,12 +1680,30 @@
 #endif /* WIN32_NATIVE */
 
 	/* Get variable value */
-	o = egetenv ((CIbyte *) target);
-	if (!o)
-	  goto badvar;
-
-	qxestrcpy (x, o);
-	x += qxestrlen (o);
+	got = egetenv ((CIbyte *) target);
+	if (got)
+	  {
+	    qxestrcpy (x, got);
+	    x += qxestrlen (got);
+	  }
+	else
+	  {
+	    *x++ = '$';
+	    if (seen_braces)
+	      {
+		*x++ = '{';
+                /* Preserve the original case. */
+		qxestrncpy (x, o, s - o);
+		x += s - o;
+		*x++ = '}';
+	      }
+	    else
+	      {
+                /* Preserve the original case. */
+		qxestrncpy (x, o, s - o);
+		x += s - o;
+	      }
+	  }
       }
 
   *x = 0;
@@ -1689,17 +1728,6 @@
 #endif
 
   return make_string (xnm, x - xnm);
-
- badsubst:
-  syntax_error ("Bad format environment-variable substitution", filename);
- missingclose:
-  syntax_error ("Missing \"}\" in environment-variable substitution",
-		filename);
- badvar:
-  syntax_error_2 ("Substituting nonexistent environment variable",
-		  filename, build_intstring (target));
-
-  RETURN_NOT_REACHED (Qnil);
 }
 
 /* A slightly faster and more convenient way to get
--- a/src/font-mgr.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/font-mgr.c	Mon Dec 24 15:04:01 2007 +0100
@@ -898,10 +898,8 @@
 		intern ("fc-config-get-blanks"));
 }
 
-/* The misspelling in the fontconfig function name accurately corresponds to
-   the version of fontconfig.h I had on 2007-04-13. -- sjt */
 DEFUN("fc-config-get-rescan-interval", Ffc_config_get_rescan_interval, 1, 1, 0, /*
- -- Function: int FcConfigGetRescanInverval (FcConfig *config)
+ -- Function: int FcConfigGetRescanInterval (FcConfig *config)
      Returns the interval between automatic checks of the configuration
      (in seconds) specified in 'config'.  The configuration is checked
      during a call to FcFontList when this interval has passed since
@@ -909,13 +907,11 @@
       (config))
 {
   CHECK_FCCONFIG (config);
-  return make_int (FcConfigGetRescanInverval (XFCCONFIG_PTR (config)));
+  return make_int (FcConfigGetRescanInterval (XFCCONFIG_PTR (config)));
 }
 
-/* The misspelling in the fontconfig function name accurately corresponds to
-   the version of fontconfig.h I had on 2007-04-13. -- sjt */
 DEFUN("fc-config-set-rescan-interval", Ffc_config_set_rescan_interval, 2, 2, 0, /*
- -- Function: FcBool FcConfigSetRescanInverval (FcConfig *config, int
+ -- Function: FcBool FcConfigSetRescanInterval (FcConfig *config, int
           rescanInterval)
      Sets the rescan interval; returns FcFalse if an error occurred.
      XEmacs: signal such error, or return nil on success. */
@@ -923,7 +919,7 @@
 {
   CHECK_FCCONFIG (config);
   CHECK_INT (rescan_interval);
-  if (FcConfigSetRescanInverval (XFCCONFIG_PTR (config),
+  if (FcConfigSetRescanInterval (XFCCONFIG_PTR (config),
 				 XINT (rescan_interval)) == FcFalse)
     signal_error (Qio_error, "FcConfigSetRescanInverval barfed",
 		  intern ("fc-config-set-rescan-interval"));
--- a/src/font-mgr.h	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/font-mgr.h	Mon Dec 24 15:04:01 2007 +0100
@@ -90,6 +90,17 @@
 #endif /* FONTCONFIG_EXPOSE_CONFIG */
 
 #ifdef USE_XFT
+
+#ifndef HAVE_FCCONFIGGETRESCANINTERVAL
+/* Older fontconfig versions misspell this function name. */
+#define FcConfigGetRescanInterval FcConfigGetRescanInverval 
+#endif /* */
+
+#ifndef HAVE_FCCONFIGSETRESCANINTERVAL
+/* Older fontconfig versions misspell this function name. */
+#define FcConfigSetRescanInterval FcConfigSetRescanInverval 
+#endif /* */
+
 /*
   The format of a fontname (as returned by fontconfig) is not well-documented,
   But the character repertoire is represented in an ASCII-compatible way.  See
--- a/src/glyphs-eimage.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/glyphs-eimage.c	Mon Dec 24 15:04:01 2007 +0100
@@ -109,6 +109,14 @@
 #define XMD_H
 typedef signed int INT32;
 typedef signed short INT16;
+
+/* And another one... jmorecfg.h defines the 'boolean' type as int,
+   which conflicts with the standard Windows 'boolean' definition as
+   unsigned char. Ref: http://www.asmail.be/msg0054688232.html */
+#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */
+typedef unsigned char boolean;
+#endif
+#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */
 #endif
 
 #include <jpeglib.h>
--- a/src/keymap.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/keymap.c	Mon Dec 24 15:04:01 2007 +0100
@@ -1388,7 +1388,7 @@
 	  DECLARE_EISTRING (temp);
 	  eicpy_raw (temp, name, qxestrlen (name));
 	  eisetch_char (temp, 2, '-');
-	  *keysym = Fintern_soft (eimake_string (temp), Qnil);
+	  *keysym = Fintern_soft (eimake_string (temp), Qnil, Qnil);
 	}
       else if (EQ (*keysym, QLFD))
 	*keysym = QKlinefeed;
--- a/src/lisp.h	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/lisp.h	Mon Dec 24 15:04:01 2007 +0100
@@ -4982,6 +4982,7 @@
 #define DECIMAL_PRINT_SIZE(integral_type) \
 (((2410824 * sizeof (integral_type)) / 1000000) + 3)
 void long_to_string (char *, long);
+void ulong_to_bit_string (char *, unsigned long);
 extern int print_escape_newlines;
 extern MODULE_API int print_readably;
 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object,
@@ -5066,7 +5067,7 @@
 EXFUN (Ffboundp, 1);
 EXFUN (Ffset, 2);
 EXFUN (Fintern, 2);
-EXFUN (Fintern_soft, 2);
+EXFUN (Fintern_soft, 3);
 EXFUN (Fkill_local_variable, 1);
 EXFUN (Fset, 2);
 EXFUN (Fset_default, 2);
--- a/src/lread.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/lread.c	Mon Dec 24 15:04:01 2007 +0100
@@ -2029,7 +2029,7 @@
  overflow:
 #ifdef HAVE_BIGNUM
   {
-    bignum_set_string (scratch_bignum, (const char *) buf, 0);
+    bignum_set_string (scratch_bignum, (const char *) buf, base);
     return make_bignum_bg (scratch_bignum);
   }
 #else
--- a/src/objects-msw.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/objects-msw.c	Mon Dec 24 15:04:01 2007 +0100
@@ -1976,7 +1976,7 @@
   const Ibyte *c;
   Bytecount the_length = length;
 
-  if (UNBOUNDP (charset))
+  if (NILP (charset))
     return 1;
 
   if (!the_nonreloc)
@@ -2038,7 +2038,7 @@
   Bytecount the_length = length;
   int i;
 
-  if (UNBOUNDP (charset))
+  if (NILP (charset))
     return 1;
 
   if (!the_nonreloc)
--- a/src/objects-tty.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/objects-tty.c	Mon Dec 24 15:04:01 2007 +0100
@@ -347,7 +347,7 @@
   fixup_internal_substring (nonreloc, reloc, offset, &length);
   the_nonreloc += offset;
 
-  if (UNBOUNDP (charset))
+  if (NILP (charset))
     return !memchr (the_nonreloc, '/', length);
   the_nonreloc = (const Ibyte *) memchr (the_nonreloc, '/', length);
   if (!the_nonreloc)
@@ -379,7 +379,7 @@
       return Qnil;
     }
 
-  if (UNBOUNDP (charset))
+  if (NILP (charset))
     return font;
 
   return concat3 (font, build_string ("/"),
--- a/src/objects-xlike-inc.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/objects-xlike-inc.c	Mon Dec 24 15:04:01 2007 +0100
@@ -125,7 +125,7 @@
 #endif
 
   /* Hmm, this smells bad. */
-  if (UNBOUNDP (charset))
+  if (NILP (charset))
     return 1;
 
   /* Hack! Short font names don't have the registry in them,
--- a/src/print.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/print.c	Mon Dec 24 15:04:01 2007 +0100
@@ -1269,6 +1269,29 @@
 #undef DIGITS_18
 #undef DIGITS_19
 
+void
+ulong_to_bit_string (char *p, unsigned long number)
+{
+  int i, seen_high_order = 0;;
+  
+  for (i = ((SIZEOF_LONG * 8) - 1); i >= 0; --i)
+    {
+      if (number & (unsigned long)1 << i)
+        {
+          seen_high_order = 1;
+          *p++ = '1';
+        }
+      else
+        {
+          if (seen_high_order)
+            {
+              *p++ = '0';
+            }
+        }
+    }
+  *p = '\0';
+}
+
 static void
 print_vector_internal (const char *start, const char *end,
                        Lisp_Object obj,
--- a/src/search.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/search.c	Mon Dec 24 15:04:01 2007 +0100
@@ -1371,14 +1371,17 @@
 	    boyer_moore_ok = 0;
 	  if (translated != c || inverse != c)
 	    {
-	      /* Keep track of which character set row
-		 contains the characters that need translation.  */
+	      /* Keep track of which charset and character set row
+		 contains the characters that need translation.
+		 Zero out the bits corresponding to the last byte.
+	      */
 	      int charset_base_code = c & ~ICHAR_FIELD3_MASK;
 	      if (charset_base == -1)
 		charset_base = charset_base_code;
 	      else if (charset_base != charset_base_code)
-		/* If two different rows appear, needing translation,
-		   then we cannot use boyer_moore search.  */
+		/* If two different rows appear, needing translation, then
+		   we cannot use boyer_moore search.  See the comment at the
+		   head of boyer_moore(). */
 		boyer_moore_ok = 0;
 	    }
 	  memcpy (pat, tmp_str, new_bytelen);
@@ -1468,43 +1471,51 @@
 	n--;
       }
   else
-    while (n < 0)
-      {
-	while (1)
-	  {
-	    Bytecount this_len = len;
-	    Bytebpos this_pos = pos;
-	    Ibyte *p;
-	    if (pos <= lim)
-	      goto stop;
-	    p = base_pat + len;
-
-	    while (this_len > 0)
-	      {
-		Ichar pat_ch, buf_ch;
-
-		DEC_IBYTEPTR (p);
-		DEC_BYTEBPOS (buf, this_pos);
-		pat_ch = itext_ichar (p);
-		buf_ch = BYTE_BUF_FETCH_CHAR (buf, this_pos);
-
-		buf_ch = TRANSLATE (trt, buf_ch);
-
-		if (buf_ch != pat_ch)
+    {
+      /* If lim < len, then there are too few buffer positions to hold the
+	 pattern between the beginning of the buffer and lim.  Adjust to
+	 ensure pattern fits.  If we don't do this, we can assert in the
+	 DEC_BYTEBPOS below. */
+      if (lim < len)
+	lim = len;
+      while (n < 0)
+	{
+	  while (1)
+	    {
+	      Bytecount this_len = len;
+	      Bytebpos this_pos = pos;
+	      Ibyte *p;
+	      if (pos <= lim)
+		goto stop;
+	      p = base_pat + len;
+
+	      while (this_len > 0)
+		{
+		  Ichar pat_ch, buf_ch;
+
+		  DEC_IBYTEPTR (p);
+		  DEC_BYTEBPOS (buf, this_pos);
+		  pat_ch = itext_ichar (p);
+		  buf_ch = BYTE_BUF_FETCH_CHAR (buf, this_pos);
+
+		  buf_ch = TRANSLATE (trt, buf_ch);
+
+		  if (buf_ch != pat_ch)
+		    break;
+
+		  this_len -= itext_ichar_len (p);
+		}
+	      if (this_len == 0)
+		{
+		  buf_len = pos - this_pos;
+		  pos = this_pos;
 		  break;
-
-		this_len -= itext_ichar_len (p);
-	      }
-	    if (this_len == 0)
-	      {
-		buf_len = pos - this_pos;
-		pos = this_pos;
-		break;
-	      }
-	    DEC_BYTEBPOS (buf, pos);
-	  }
-	n++;
-      }
+		}
+	      DEC_BYTEBPOS (buf, pos);
+	    }
+	  n++;
+	}
+    }
  stop:
   if (n == 0)
     {
--- a/src/sound.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/sound.c	Mon Dec 24 15:04:01 2007 +0100
@@ -64,7 +64,7 @@
 #endif
 
 #if defined(HAVE_NATIVE_SOUND) || defined(HAVE_NAS_SOUND) \
-  || defined(HAVE_ESD_SOUND)
+  || defined(HAVE_ALSA_SOUND) || defined(HAVE_ESD_SOUND)
 #define USED_IF_HAVE_ANY(decl) decl
 #else
 #define USED_IF_HAVE_ANY(decl) UNUSED (decl)
--- a/src/symbols.c	Mon Dec 24 15:02:36 2007 +0100
+++ b/src/symbols.c	Mon Dec 24 15:04:01 2007 +0100
@@ -256,17 +256,17 @@
   return object;
 }
 
-DEFUN ("intern-soft", Fintern_soft, 1, 2, 0, /*
+DEFUN ("intern-soft", Fintern_soft, 1, 3, 0, /*
 Return the canonical symbol named NAME, or nil if none exists.
 NAME may be a string or a symbol.  If it is a symbol, that exact
 symbol is searched for.
 Optional second argument OBARRAY specifies the obarray to use;
 it defaults to the value of the variable `obarray'.
+Optional third argument DEFAULT says what Lisp object to return if there is
+no canonical symbol named NAME, and defaults to nil. 
 */
-       (name, obarray))
+       (name, obarray, default_))
 {
-  /* #### Bug!  (intern-soft "nil") returns nil.  Perhaps we should
-     add a DEFAULT-IF-NOT-FOUND arg, like in get.  */
   Lisp_Object tem;
   Lisp_Object string;
 
@@ -283,7 +283,7 @@
 
   tem = oblookup (obarray, XSTRING_DATA (string), XSTRING_LENGTH (string));
   if (INTP (tem) || (SYMBOLP (name) && !EQ (name, tem)))
-    return Qnil;
+    return default_;
   else
     return tem;
 }
@@ -732,6 +732,26 @@
   return make_string ((const Ibyte *)name, strlen (name));
 }
 
+DEFUN ("special-form-p", Fspecial_form_p, 1, 1, 0, /*
+Return whether SUBR is a special form.
+
+A special form is a built-in function (a subr, that is a function
+implemented in C, not Lisp) which does not necessarily evaluate all its
+arguments.  Much of the basic XEmacs Lisp syntax is implemented by means of
+special forms; examples are `let', `condition-case', `defun', `setq' and so
+on.
+
+If you intend to write a Lisp function that does not necessarily evaluate
+all its arguments, the portable (across emacs variants, and across Lisp
+implementations) way to go about it is to write a macro instead.  See
+`defmacro' and `backquote'.
+*/
+       (subr))
+{
+  subr = indirect_function (subr, 0);
+  return (SUBRP (subr) && XSUBR (subr)->max_args == UNEVALLED) ? Qt : Qnil;
+}
+
 DEFUN ("setplist", Fsetplist, 2, 2, 0, /*
 Set SYMBOL's property list to NEWPLIST, and return NEWPLIST.
 */
@@ -3719,6 +3739,7 @@
   DEFSUBR (Fdefine_function);
   Ffset (intern ("defalias"), intern ("define-function"));
   DEFSUBR (Fsubr_name);
+  DEFSUBR (Fspecial_form_p);
   DEFSUBR (Fsetplist);
   DEFSUBR (Fsymbol_value_in_buffer);
   DEFSUBR (Fsymbol_value_in_console);
--- a/tests/ChangeLog	Mon Dec 24 15:02:36 2007 +0100
+++ b/tests/ChangeLog	Mon Dec 24 15:04:01 2007 +0100
@@ -1,3 +1,39 @@
+2007-12-21  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* reproduce-crashes.el: Renamed from reproduce-bugs.el.  Update to-do.
+
+2007-12-21  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* reproduce-bugs.el:  Reorganize.  Minor cosmetic improvements.
+	Update to-do list.
+	(defbug):  Include status and docstring in value.
+	(bug-hashtable):  Document the table format.
+	(reproduce-bug):  Handle revised table format.  Remove broken
+	autoload cookie.
+	(describe-bug):  New function.  Pop up description of one bug.
+	(list-bugs):  New function.  Pop up brief descriptions of all bugs.
+	(1,2,3,4,5,6,7,8,9,10,11):  (Re)number all bugs.  Move comments to
+	docstrings.
+
+2007-12-11  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* automated/syntax-tests.el:
+	Check that substitute-in-file-name doesn't error when handed
+	non-existing environment variables, passing through the specified
+	string instead. Also check that existing environment variables are
+	correctly substituted. Also check that double slashes in the
+	middle of a path name are treated as re-starting the path. 
+
+2007-12-10  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* reproduce-bugs.el (reproduce-bug): Add bug 10, crash in search.
+
+2007-12-10  Stephen J. Turnbull  <stephen@xemacs.org>
+
+	* reproduce-bugs.el: Add some commentary.
+	Number the two unnumbered bugs.
+	Comment out the keybinding.
+
 2007-12-06  Aidan Kehoe  <kehoea@parhasard.net>
 
 	* automated/mule-tests.el:
--- a/tests/automated/syntax-tests.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/tests/automated/syntax-tests.el	Mon Dec 24 15:04:01 2007 +0100
@@ -205,3 +205,37 @@
     ;; special-case check that point didn't move
     (Assert (= (point) 25))))
 
+(loop
+  with envvar-not-existing = (symbol-name (gensym "whatever"))
+  with envvar-existing = (symbol-name (gensym "whatever"))
+  with envvar-existing-val = (make-string #x10000 ?\xe1)
+  with examples = 
+  (list (list (format "%chome%cwhatever%c%chi-there%c$%s"
+                      directory-sep-char
+                      directory-sep-char
+                      directory-sep-char
+                      directory-sep-char
+                      directory-sep-char
+                      envvar-existing)
+              (format "%chi-there%c%s"
+                      directory-sep-char
+                      directory-sep-char
+                      envvar-existing-val))
+        (if (memq system-type '(windows-nt cygwin32))
+            '("//network-path/c$" "//network-path/c$")
+          '("/network-path/c$" "/network-path/c$"))
+        (list (format "/home/whoever/$%s" envvar-not-existing)
+              (format "/home/whoever/$%s" envvar-not-existing))
+        (list (format "/home/whoever/$%s" envvar-existing)
+              (format "/home/whoever/%s" envvar-existing-val))
+        (list (format "/home/whoever/${%s}" envvar-existing)
+              (format "/home/whoever/%s" envvar-existing-val))
+        (list (format "/home/whoever/${%s}" envvar-not-existing)
+              (format "/home/whoever/${%s}" envvar-not-existing)))
+  initially (progn (setenv envvar-not-existing nil t)
+                   (setenv envvar-existing envvar-existing-val))
+  for (pre post)
+  in examples
+  do 
+  (Assert (string= post (substitute-in-file-name pre))))
+
--- a/tests/automated/test-harness.el	Mon Dec 24 15:02:36 2007 +0100
+++ b/tests/automated/test-harness.el	Mon Dec 24 15:04:01 2007 +0100
@@ -203,7 +203,29 @@
 	`(let ((test-harness-failure-tag "KNOWN BUG")
 	       (test-harness-success-tag "PASS (FAILURE EXPECTED)"))
 	  ,@body))
-    
+
+      (defmacro Known-Bug-Expect-Error (expected-error &rest body)
+	(let ((quoted-body (if (= 1 (length body))
+			       `(quote ,(car body)) `(quote (progn ,@body)))))
+          `(let ((test-harness-failure-tag "KNOWN BUG")
+                 (test-harness-success-tag "PASS (FAILURE EXPECTED)"))
+            (condition-case error-info
+                (progn
+                  (setq trick-optimizer (progn ,@body))
+                  (Print-Pass 
+                   "%S executed successfully, but expected error %S"
+                   ,quoted-body
+                   ',expected-error)
+                  (incf passes))
+              (,expected-error
+               (Print-Failure "%S ==> error %S, as expected"
+                              ,quoted-body ',expected-error)
+               (incf no-error-failures))
+              (error
+               (Print-Failure "%S ==> expected error %S, got error %S instead"
+                              ,quoted-body ',expected-error error-info)
+               (incf wrong-error-failures))))))
+
       (defmacro Implementation-Incomplete-Expect-Failure (&rest body)
 	`(let ((test-harness-failure-tag "IMPLEMENTATION INCOMPLETE")
 	       (test-harness-success-tag "PASS (FAILURE EXPECTED)"))
@@ -337,7 +359,9 @@
 
       ;; #### Perhaps this should override `message' itself, too?
       (defmacro Silence-Message (&rest body)
-	`(flet ((append-message (&rest args) ())) ,@body))
+	`(flet ((append-message (&rest args) ())
+                (clear-message (&rest args) ()))
+          ,@body))
 
       (defmacro Ignore-Ebola (&rest body)
 	`(let ((debug-issue-ebola-notices -42)) ,@body))
--- a/tests/reproduce-bugs.el	Mon Dec 24 15:02:36 2007 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-;;; reproduce-bugs.el --- reproduce bugs in XEmacs;
-
-;; Copyright (C) 1997  Free Software Foundation, Inc.
-;; Copyright (C) 1997  Sun Microsystems, Inc.
-
-;; Keywords: bugs, crash, burn, die, croak, munge
-
-;; This file is part of XEmacs.
-
-;; This file is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; XEmacs is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; see the file COPYING.  If not, write to the Free
-;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-;; 02111-1307, USA.
-
-;;; Synched up with: Not in FSF.
-
-;;; Commentary:
-
-;; Reproduce XEmacs bugs, so that they can get fixed.
-;; Especially, make XEmacs crash.
-;; You may need to use a debug version of XEmacs to reproduce some of these.
-
-;; Several global keybindings are created, each of which exhibits a bug.
-
-;; For XEmacs maintainers and other masochists.
-
-;; It's a bad idea to rely on code in this file continuing to work in
-;; the same way. :-)
-
-;;; Code:
-
-(defvar bug-hashtable (make-hashtable 10))
-
-(defmacro defbug (bug-number &rest body)
-  `(puthash ,bug-number (lambda () ,@body) bug-hashtable))
-
-(put 'defbug 'lisp-indent-function 'defun)
-
-(defconst bug-buffer
-  (save-excursion
-    (set-buffer (get-buffer-create "*Bug*"))
-    (erase-buffer)
-    (current-buffer)))
-
-;;;####autoload
-(defun reproduce-bug (number)
-  "Reproduce XEmacs bugs, so that they can get fixed.
-Especially, make XEmacs crash.
-See reproduce-bugs.el for bug descriptions and bug numbers.
-A debug version of XEmacs may be needed to reproduce some bugs."
-  (interactive "nBug Number: ")
-  (funcall (gethash number bug-hashtable)))
-
-;;; Change this to your preferred key-binding
-
-(global-set-key  [(control ?Z)] 'reproduce-bug)
-
-;;;; Bugs follow:
-
-;;; ------------------------------------------------------------------
-;;; Crash on trace-function
-;;; Fatal error: assertion failed, file src/eval.c, line 1405, abort()
-(defbug 1
-  (trace-function 'record-buffer bug-buffer)
-  (pop-to-buffer bug-buffer))
-
-
-;;; ------------------------------------------------------------------
-;;; Crashes with stack overflow
-;;; Should give error via barf-if-buffer-read-only
-;;; Fatal error: assertion failed, file src/eval.c, line 1874, abort()
-;; This bug has been fixed. -sb
-(defbug 2
-  (switch-to-buffer bug-buffer)
-  ;; The following line should contain a number of eight-bit characters
-  (insert "²èÌÌËè¤Î°ÜÆ°¤Ï¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£º£Å٤ϡ¢²èÌ̤ÎÃæ¤Ç¡¢ÆÃÄê¤Î¾ì")
-  (setq buffer-read-only t)
-  (ignore-errors
-    (encode-coding-region (point-min) (point-max) 'euc-japan))
-  (garbage-collect))
-
-
-;;; ------------------------------------------------------------------
-;;; Crashes in debug version only
-;;; Fatal error: assertion failed, file src/objects.h, line 149,
-;;; RECORD_TYPEP (_obj, lrecord_font_instance) || MARKED_RECORD_P (_obj)
-(defbug 3
-  (let (glyph ext)
-    (make-face 'adobe-symbol-face)
-    (set-face-font
-     'adobe-symbol-face
-     "-adobe-symbol-medium-r-normal--*-140-*-*-p-*-adobe-fontspecific")
-    (setq glyph (make-glyph (list (vector 'string
-					  :data (char-to-string ?\xD3)))))
-    (set-glyph-face glyph 'adobe-symbol-face)
-    (setq ext (make-extent 14 18))
-    (set-extent-property ext 'begin-glyph glyph)))
-
-
-;;; ------------------------------------------------------------------
-;;; (maybe?) crash koi8
-;;; ACCL: Invalid command (c)
-;;; With debugging on, crashes as follows:
-;;; Fatal error: assertion failed, file src/lisp.h, line 1227, INTP (obj)
-(defbug 5
-  ;;(load "cyrillic")
-  ;;(load "cyrillic-hooks")
-  (princ (decode-coding-string "\xe1" 'koi8)))
-
-
-;;; ------------------------------------------------------------------
-;;; Completely Uninterruptible hang in re-search-backward (Was: java-mode)
-(defbug 6
-  (switch-to-buffer bug-buffer)
-  (insert "{
-public static void main(String[] args) throws java.io.IOException
-    {
-    }
-}
-")
-  (goto-char (point-min))
-  (search-forward "{" nil nil 2)
-  (backward-char)
-  (re-search-backward
-   "^\\s(\\|\\(^[ \t]*\\(\\(\\(public\\|protected\\|static\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*[][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][ \t:;.,{}()=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([] \t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[, \t\n\r\f]*\\)+\\)?\\s-*\\)\\s("))
-
-
-;;; ------------------------------------------------------------------
-;;; regexp crash
-;; This doesn't crash for me. -sb
-(defbug 7
-  (string-match "\\(\\s-\\|$\\)" "å"))
-
-  
-;;;; -------------------------------------------------------------------
-;;;; Bugs below this line have been fixed.
-;;;; Keep these for regression testing
-;;;; -------------------------------------------------------------------
-
-
-;;; ------------------------------------------------------------------
-;;; Infinite recursion crash - Segmentation Fault
-(defbug 4
-  (switch-to-buffer bug-buffer)
-  (insert "abcdefg")
-  (setq e (make-extent 1 4))
-  (set-extent-property e 'face 'bold)
-  (set-extent-property e 'duplicable t)
-  (set-extent-property e 'replicating t)
-  (insert (buffer-string))
-  (delete-region 8 9))
-
-(defbug 5
-  (interactive)
-  (with-temp-buffer
-    (insert "abc")
-    (forward-char -1)
-    (subst-char-in-region 1 4 ?b ?\344)
-    (if (not (= (point) 3))
-	(message "Bug!  point should equal 3 but is %d" (point)))))
-
-;;; crash popup frames FIXED
-;;(global-set-key
-;; [(alt meta control f12)]
-;; (lambda ()
-;;   (interactive)
-;;   (let ((f (selected-frame)))
-;;     (make-frame `(popup ,(selected-frame)))
-;;     (make-frame)
-;;     (sit-for 0)
-;;     (delete-frame f)
-;;     (save-buffers-kill-emacs))))
-
-;;; crash on delete-frame-hook - FIXED!
-;;(global-set-key
-;; [(alt meta control f10)]
-;; (lambda ()
-;;   (interactive)
-;;   (setq delete-frame-hook
-;;         (lambda (frame)
-;;           (select-frame frame)
-;;         (kill-buffer (window-buffer (frame-selected-window frame)))))))
-
-;;; reproduce-bugs.el ends here
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproduce-crashes.el	Mon Dec 24 15:04:01 2007 +0100
@@ -0,0 +1,275 @@
+;;; reproduce-bugs.el --- reproduce bugs in XEmacs
+
+;; Copyright (C) 1997  Free Software Foundation, Inc.
+;; Copyright (C) 1997  Sun Microsystems, Inc.
+
+;; Keywords: bugs, crash, burn, die, croak, munge
+
+;; This file is part of XEmacs.
+
+;; This file is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; Synched up with: Not in FSF.
+
+;;; Commentary:
+
+;; Reproduce XEmacs crashes, so that they can get fixed.
+;; A table of bugs is created.  You can list, describe, or reproduce bugs.
+
+;; Non-crash bugs should not be in this file; they should be placed in
+;; an appropriate file in the tests/automated suite.
+;; You may need to use a debug version of XEmacs to reproduce some of these.
+
+;; For XEmacs maintainers and other masochists.
+;; It's a bad idea to rely on code in this file continuing to work in
+;; the same way. :-)
+
+;; #### Bugs < 11 need to be tested and versions where they pass recorded.
+;; #### Fixed bugs should become regression tests, maybe?
+;; #### Non-crashes should be copied (not moved) to tests/automatic.
+;; #### `list-bugs' should optionally sort on status.
+;; #### Bugs that depend on features (eg, Mule) should check for them and
+;;      document them.
+
+;;; Code:
+
+;; UI entry points
+
+(defun reproduce-bug (number)
+  "Reproduce XEmacs bugs, so that they can get fixed.
+Especially, make XEmacs crash.
+See reproduce-bugs.el for bug descriptions and bug numbers.
+A debug version of XEmacs may be needed to reproduce some bugs."
+  (interactive "nBug Number: ")
+  (funcall (nth 0 (gethash number bug-hashtable))))
+
+(defun describe-bug (number &optional show-code)
+  "Describe the bug with index NUMBER in a popup window.
+If optional argument SHOW-CODE is non-nil, also display the reproduction code."
+  (interactive "nBug number: \ncShow code? [y/N] ")
+  (setq show-code (cond ((not (interactive-p)) show-code)
+			((member show-code '(?y ?Y)) t)
+			(t nil)))
+  (with-displaying-temp-buffer (format "Bug %d" number)
+    (let ((bug (gethash number bug-hashtable)))
+      (princ (format "Bug #%d is %s.\n%s\n\n%s"
+		     number
+		     (nth 1 bug)
+		     (nth 2 bug)
+		     (if show-code (pp-to-string (nth 0 bug)) ""))))))
+
+(defun list-bugs ()
+  "List bugs most recent first, each with brief description in a popup window.
+Assumes a maximum of 999 bugs and a minimum of 80 column width window."
+  (interactive)
+  (with-displaying-temp-buffer "*Bug list*"
+    (princ " #    status                      description\n")
+    (let (buglist)
+      (maphash (lambda (number bug)
+		 (push (format "%3d %-9s %s"
+			       number
+			       (nth 1 bug)
+			       (let ((description (nth 2 bug)))
+				 (save-match-data
+				   (string-match "\\(.*\\)\\(\n\\|$\\)"
+						 description)
+				   (match-string 1 description))))
+		       buglist))
+	       bug-hashtable)
+      (setq buglist (sort buglist (lambda (b1 b2) (string< b2 b1))))
+      (while buglist
+	(let ((bug (pop buglist)))
+	  (princ (if (< (length bug) 79) bug (substring bug 0 78)))
+	  (terpri))))))
+
+;; Database and utilities (internal)
+
+(defvar bug-hashtable (make-hashtable 10)
+  "Table of bugs, keyed by bug index number.
+The value is a list (LAMBDA STATUS DOCSTRING), where LAMBDA is a lambda
+expression reproducing the bug, and STATUS and DOCSTRING describe the bug.
+For details, see `defbug'.")
+
+(put 'defbug 'lisp-indent-function 'defun)
+(defmacro defbug (bug-number status docstring &rest body)
+  "Record a bug with key BUG-NUMBER and value (LAMBDA STATUS DOCSTRING).
+LAMBDA is a lambda expression which when called executes BODY.
+BUG-NUMBER is the bug's index number, a positive integer.
+STATUS is the current status of the bug, one of
+  fixed         The bug has been diagnosed and fixed.
+  diagnosed     The bug has been localized but not fixed.
+  current       The bug has been reported and reproduced but cause is unknown.
+  legacy        The bug is undocumented but presumed fixed.
+DOCSTRING should be a string describing the bug, including any relevant
+descriptive information and references to archived mailing list traffic or
+a BTS issue.
+BODY is a sequence of expressions to execute to reproduce the bug."
+  (let ((body (if (stringp docstring) body (cons docstring body)))
+	(docstring (if (stringp docstring) docstring "[docstring omitted]")))
+    `(puthash ,bug-number
+              '((lambda () ,@body) ,status ,docstring)
+              bug-hashtable)))
+
+(defconst bug-buffer
+  (save-excursion
+    (set-buffer (get-buffer-create "*Bug*"))
+    (erase-buffer)
+    (current-buffer)))
+
+
+;;; ------------------------------------------------------------------
+;;;; Bugs follow:
+
+(defbug 11 fixed
+  "Crash in search due to backward movement.
+Need Mule build with error checking in 21.5.28.
+Fatal error: assertion failed,
+file /Users/steve/Software/XEmacs/alioth/xemacs/src/search.c, line 1487,
+(this_pos) > ((Bytebpos) 1) && this_pos <= ((buf)->text->z + 0)
+Reported: <475B104F.2070807@barco.com>
+          <87hcixwkh4.fsf@uwakimon.sk.tsukuba.ac.jp>
+Fixed:    <87hcixwkh4.fsf@uwakimon.sk.tsukuba.ac.jp>"
+  (switch-to-buffer (get-buffer-create "*crash me*"))
+  ;; doozy is the keystroke equivalent of the keyboard macro
+  ;; "IAI" C-b C-b C-s C-x
+  (let ((doozy [;;(control ?x) ?b ?j ?u ?n ?k return
+		?I ?A ?I
+		   (control ?b) (control ?b)
+		   (control ?s) (control ?w)]))
+    (execute-kbd-macro doozy)))
+
+
+(defbug 10 current
+  "Crash on trace-function
+Fatal error: assertion failed, file src/eval.c, line 1405, abort()"
+  (trace-function 'record-buffer bug-buffer)
+  (pop-to-buffer bug-buffer))
+
+
+(defbug 9 current
+  "Crashes with stack overflow
+Should give error via barf-if-buffer-read-only
+Fatal error: assertion failed, file src/eval.c, line 1874, abort()
+This bug has been fixed. -sb"
+  (switch-to-buffer bug-buffer)
+  ;; The following line should contain a number of eight-bit characters
+  (insert "²èÌÌËè¤Î°ÜÆ°¤Ï¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£º£Å٤ϡ¢²èÌ̤ÎÃæ¤Ç¡¢ÆÃÄê¤Î¾ì")
+  (setq buffer-read-only t)
+  (ignore-errors
+    (encode-coding-region (point-min) (point-max) 'euc-japan))
+  (garbage-collect))
+
+
+(defbug 8 current
+  "Crashes in debug version only
+Fatal error: assertion failed, file src/objects.h, line 149,
+RECORD_TYPEP (_obj, lrecord_font_instance) || MARKED_RECORD_P (_obj)"
+  (let (glyph ext)
+    (make-face 'adobe-symbol-face)
+    (set-face-font
+     'adobe-symbol-face
+     "-adobe-symbol-medium-r-normal--*-140-*-*-p-*-adobe-fontspecific")
+    (setq glyph (make-glyph (list (vector 'string
+					  :data (char-to-string ?\xD3)))))
+    (set-glyph-face glyph 'adobe-symbol-face)
+    (setq ext (make-extent 14 18))
+    (set-extent-property ext 'begin-glyph glyph)))
+
+
+(defbug 7 current
+  "(maybe?) crash koi8
+ACCL: Invalid command (c)
+With debugging on, crashes as follows:
+Fatal error: assertion failed, file src/lisp.h, line 1227, INTP (obj)"
+  ;;(load "cyrillic")
+  ;;(load "cyrillic-hooks")
+  (princ (decode-coding-string "\xe1" 'koi8)))
+
+
+(defbug 6 current
+  "regexp crash
+This doesn't crash for me. -sb"
+  (string-match "\\(\\s-\\|$\\)" "å"))
+
+
+(defbug 5 legacy
+  "`subst-char-in-region' moves point."
+  (interactive)
+  (with-temp-buffer
+    (insert "abc")
+    (forward-char -1)
+    (subst-char-in-region 1 4 ?b ?\344)
+    (if (not (= (point) 3))
+	(message "Bug!  point should equal 3 but is %d" (point)))))
+
+
+(defbug 4 legacy
+  "Infinite recursion crash - Segmentation Fault"
+  (switch-to-buffer bug-buffer)
+  (insert "abcdefg")
+  (setq e (make-extent 1 4))
+  (set-extent-property e 'face 'bold)
+  (set-extent-property e 'duplicable t)
+  (set-extent-property e 'replicating t)
+  (insert (buffer-string))
+  (delete-region 8 9))
+
+
+(defbug 3 current
+  "Completely Uninterruptible hang in re-search-backward (Was: java-mode)"
+  (switch-to-buffer bug-buffer)
+  (insert "{
+public static void main(String[] args) throws java.io.IOException
+    {
+    }
+}
+")
+  (goto-char (point-min))
+  (search-forward "{" nil nil 2)
+  (backward-char)
+  (re-search-backward
+   "^\\s(\\|\\(^[ \t]*\\(\\(\\(public\\|protected\\|static\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*[][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][ \t:;.,{}()=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([] \t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[, \t\n\r\f]*\\)+\\)?\\s-*\\)\\s("))
+
+
+(defbug 2 legacy
+  "crash popup frames
+FIXED
+#### This bug is not understood, and may be incomplete.  See source."
+  (lambda ()
+    (let ((f (selected-frame)))
+      (make-frame `(popup ,(selected-frame)))
+      (make-frame)
+      (sit-for 0)
+      (delete-frame f)
+      ;; #### Check whether this is needed.
+      ;; (save-buffers-kill-emacs5)
+      )))
+
+
+(defbug 1 legacy
+  "crash on delete-frame-hook
+FIXED!
+#### This bug is not understood, and seems to be incomplete.  See source."
+  (lambda ()
+    ;; #### Should this be add-hook instead of setq?
+    (setq delete-frame-hook
+	  (lambda (frame)
+	    (select-frame frame)
+	    (kill-buffer (window-buffer (frame-selected-window frame)))
+	    ;; #### Do we need to delete a frame here or something?
+	    ))))
+
+;;; reproduce-bugs.el ends here