guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, master, updated. release_1-9-4-154-ge1


From: Ludovic Courtès
Subject: [Guile-commits] GNU Guile branch, master, updated. release_1-9-4-154-ge17b58c
Date: Tue, 17 Nov 2009 23:04:46 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=e17b58c22e50a515a1c14bd4f93372bf3df75b9a

The branch, master has been updated
       via  e17b58c22e50a515a1c14bd4f93372bf3df75b9a (commit)
       via  13922e3fa9f1d5747dd15ee4cf34447ec8939b7c (commit)
       via  587cd3bfc92734a87b91de04244a92cad5c07215 (commit)
       via  c291b588356f751ec553d3de77996fa75b3a7515 (commit)
       via  c84bdaf6b44ce10fd5c549b8425cb57fb299c599 (commit)
       via  4f02b98d0ed4a314916c69a225d7a45dda3f5f8c (commit)
       via  8bcecbd302912f802026b00fbd15abc93c81860c (commit)
       via  56a3dcd4311d26ef2e9d14ef01021947562c5f17 (commit)
       via  c32b39b9cb69dda94fdd2c3d0f13b4de1b2fd2c9 (commit)
       via  62aea166695302ebcf3c00cd8f0d722af1ff01f9 (commit)
       via  7f991c7d322c9eaf83515de97b61700be8fa7abb (commit)
       via  6bd210e090be6e6ce3fbe65075185676f87b1eac (commit)
       via  f29ded4b67ca5d750863ba24d16456ed8f730d0a (commit)
      from  e614d37577b63766613dac95d76e9f7826b528d9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e17b58c22e50a515a1c14bd4f93372bf3df75b9a
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 23:18:27 2009 +0100

    Bump version number for 1.9.5.
    
    * GUILE-VERSION (GUILE_MICRO_VERSION): Increment.

commit 13922e3fa9f1d5747dd15ee4cf34447ec8939b7c
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 23:31:45 2009 +0100

    Don't use `-Werror' by default.
    
    * configure.ac (GUILE_ERROR_ON_WARNING): Default to "no".
    
    * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable.
    
    * NEWS: Update.

commit 587cd3bfc92734a87b91de04244a92cad5c07215
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 22:48:02 2009 +0100

    Fix copyright headers.
    
    * module/system/vm/debug.scm, module/system/vm/frame.scm,
      module/system/vm/vm.scm: Switch to LGPLv3+.

commit c291b588356f751ec553d3de77996fa75b3a7515
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 23:07:10 2009 +0100

    Fix stylistic issues revealed by "make syntax-check".
    
    * libguile/gc-malloc.c (scm_must_free): Remove unnecessary `if' before
      `free ()'.
    
    * libguile/stime.c (scm_localtime, scm_mktime): Likewise.
    
    * libguile/eval.i.c (ceval): Don't cast the result of alloca(3).
    
    * libguile/i18n.c (SCM_STRING_TO_U32_BUF): Likewise.
    
    * test-suite/standalone/test-unwind.c: Likewise.
    
    * libguile/strings.c (scm_i_deprecated_string_chars): Don't end error
      message in period.

commit c84bdaf6b44ce10fd5c549b8425cb57fb299c599
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 23:07:42 2009 +0100

    Add Gnulib maintainer modules.
    
    * m4/gnulib-cache.m4: Add `announce-gen', `gendocs', `gitlog-to-changelog',
      `gnupload', `gnu-web-doc-update', and `maintainer-makefile'.
    
    * .gnuploadrc, .x-sc_GPL_version, .x-sc_avoid_if_before_free,
      .x-sc_error_message_period, .x-sc_cast_of_alloca_return_value,
      .x-sc_cast_of_argument_to_free, .x-sc_error_message_uppercase,
      .x-sc_error_message_warn_fatal: New files.

commit 4f02b98d0ed4a314916c69a225d7a45dda3f5f8c
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 22:03:13 2009 +0100

    Use Gnulib's `version-etc-fsf' for `--version' and `--help' output.
    
    * m4/gnulib-cache.m4: Add `version-etc-fsf'.  Switch to LGPLv3+.
    
    * GUILE-VERSION (PACKAGE): Change to "GNU Guile".
    
    * Makefile.am (distdir): New variable.
    
    * libguile/script.c (scm_shell_usage): Improve formatting.  Use
      `emit_bug_reporting_address ()'.
      (scm_compile_shell_switches): Use `version_etc ()'.

commit 8bcecbd302912f802026b00fbd15abc93c81860c
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 21:10:41 2009 +0100

    Build the C code with additional GCC warnings.
    
    * configure.ac (POTENTIAL_GCC_CFLAGS): Add
      `-Wdeclaration-after-statement -Wundef -Wswitch-enum'.

commit 56a3dcd4311d26ef2e9d14ef01021947562c5f17
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 23:40:51 2009 +0100

    Remove references to undefined macros.
    
    The intent is to allow compilation with `-Wundef', which in turn should
    make it easier to catch erroneous uses of nonexistent macros.
    
    * libguile/__scm.h: Don't assume `BUILDING_LIBGUILE' is defined.
    
    * libguile/conv-uinteger.i.c (SCM_TO_TYPE_PROTO): Remove unneeded CPP
      conditional on `TYPE_MIN == 0'.
    
    * libguile/fports.c: Check for the definition of `HAVE_CHSIZE' and
      `HAVE_FTRUNCATE', not for their value.
    
    * libguile/ports.c: Likewise.
    
    * libguile/numbers.c (guile_ieee_init): Likewise with `HAVE_DINFINITY'
      and `HAVE_DQNAN'.
    
    * test-suite/standalone/test-conversion.c (ieee_init): Likewise.
    
    * libguile/strings.c: Likewise with `SCM_STRING_LENGTH_HISTOGRAM'.
    
    * libguile/strings.h: Likewise.
    
    * libguile/tags.h: Likewise with `HAVE_INTTYPES_H' and `HAVE_STDINT_H'.
    
    * libguile/threads.c: Likewise with `HAVE_PTHREAD_GET_STACKADDR_NP'.
    
    * libguile/vm-engine.c (VM_NAME): Likewise with `VM_CHECK_IP'.
    
    * libguile/gen-scmconfig.c (main): Use "#ifdef HAVE_", not "#if HAVE_".
    
    * libguile/socket.c (scm_setsockopt): Likewise.

commit c32b39b9cb69dda94fdd2c3d0f13b4de1b2fd2c9
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 22:48:37 2009 +0100

    Remove now unneeded `putenv.c'.
    
    * libguile/Makefile.am (EXTRA_libguile_la_SOURCES): Remove `putenv.c'.
    
    * libguile/putenv.c: Remove.

commit 62aea166695302ebcf3c00cd8f0d722af1ff01f9
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 22:56:29 2009 +0100

    Remove `qt/'.

commit 7f991c7d322c9eaf83515de97b61700be8fa7abb
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 01:26:25 2009 +0100

    Fix C99-style declarations after statements.
    
    * libguile/eval.i.c (ceval): Move declarations before statements.
    
    * libguile/read.c (scm_read_extended_symbol): Likewise.
    
    * libguile/struct.c (scm_make_struct_layout): Likewise.
    
    * libguile/threads.c (fat_mutex_unlock): Likewise.
    
    * libguile/vm-i-system.c (br_if_nargs_ne, br_if_nargs_lt): Likewise.
    
    * libguile/vm.c (make_vm): Likewise.

commit 6bd210e090be6e6ce3fbe65075185676f87b1eac
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 17 00:24:32 2009 +0100

    Remove deprecated guardian code.
    
    * libguile/guardians.c (guardian_apply): Remove `#if ENABLE_DEPRECATED'
      section since it was never compiled in, not even in 1.8.
      (scm_init_guardians): Likewise.

commit f29ded4b67ca5d750863ba24d16456ed8f730d0a
Author: Ludovic Courtès <address@hidden>
Date:   Mon Nov 16 23:40:28 2009 +0100

    Use Gnulib's `warning' module.
    
    * m4/gnulib-cache.m4: Add `warnings'.
    
    * configure.ac: Use `gl_WARN_ADD' to check whether compiler flags are
      supported.
    
    * libguile/Makefile.am (libguile_la_LIBADD): Add $(LTLIBICONV).
      (libguile_la_LDFLAGS): Add $(INET_NTOP_LIB) $(INET_PTON_LIB).

-----------------------------------------------------------------------

Summary of changes:
 .gnuploadrc                             |    1 +
 .x-sc_GPL_version                       |    4 +
 .x-sc_avoid_if_before_free              |    1 +
 .x-sc_cast_of_alloca_return_value       |    1 +
 .x-sc_cast_of_argument_to_free          |    1 +
 .x-sc_error_message_period              |    1 +
 .x-sc_error_message_uppercase           |    6 +
 .x-sc_error_message_warn_fatal          |    1 +
 GNUmakefile                             |  127 ++++
 GUILE-VERSION                           |    4 +-
 Makefile.am                             |    6 +
 NEWS                                    |    4 +
 build-aux/announce-gen                  |  495 +++++++++++++++
 build-aux/gendocs.sh                    |  361 +++++++++++
 build-aux/gitlog-to-changelog           |   17 +-
 build-aux/gnu-web-doc-update            |  115 ++++
 build-aux/gnupload                      |  412 ++++++++++++
 build-aux/useless-if-before-free        |  209 ++++++
 build-aux/vc-list-files                 |  116 ++++
 configure.ac                            |   14 +-
 doc/gendocs_template                    |   96 +++
 lib/Makefile.am                         |  123 ++++-
 lib/getpagesize.c                       |   39 --
 lib/gettext.h                           |  279 ++++++++
 lib/printf-args.c                       |    5 +-
 lib/{netinet_in.in.h => stdarg.in.h}    |   36 +-
 lib/stdlib.in.h                         |   77 ++-
 lib/strftime.c                          |    2 +-
 lib/strftime.h                          |    8 +
 lib/sys_stat.in.h                       |   44 ++-
 lib/unistd.in.h                         |   37 +-
 lib/vasnprintf.c                        |   36 +-
 lib/{mbrlen.c => version-etc-fsf.c}     |   24 +-
 lib/version-etc.c                       |  252 ++++++++
 lib/version-etc.h                       |   78 +++
 libguile/Makefile.am                    |    8 +-
 libguile/__scm.h                        |    4 +-
 libguile/conv-uinteger.i.c              |   10 -
 libguile/eval.i.c                       |    9 +-
 libguile/fports.c                       |    6 +-
 libguile/gc-malloc.c                    |    9 +-
 libguile/gen-scmconfig.c                |    6 +-
 libguile/guardians.c                    |   13 +-
 libguile/i18n.c                         |    2 +-
 libguile/numbers.c                      |    4 +-
 libguile/ports.c                        |    2 +-
 libguile/putenv.c                       |  127 ----
 libguile/read.c                         |    4 +-
 libguile/script.c                       |   26 +-
 libguile/socket.c                       |    8 +-
 libguile/stime.c                        |    9 +-
 libguile/strings.c                      |   26 +-
 libguile/strings.h                      |    2 +-
 libguile/struct.c                       |    3 +-
 libguile/tags.h                         |    7 +-
 libguile/threads.c                      |    5 +-
 libguile/vm-engine.c                    |    2 +-
 libguile/vm-i-system.c                  |    4 +-
 libguile/vm.c                           |    3 +-
 m4/environ.m4                           |    4 +-
 m4/getpagesize.m4                       |   29 -
 m4/gnulib-cache.m4                      |   12 +-
 m4/gnulib-comp.m4                       |   42 ++-
 m4/inet_ntop.m4                         |   17 +-
 m4/inet_pton.m4                         |   16 +-
 m4/readlink.m4                          |    7 +-
 m4/stat.m4                              |   18 +-
 m4/stdarg.m4                            |   67 ++
 m4/stdlib_h.m4                          |    9 +-
 m4/sys_stat_h.m4                        |    8 +-
 m4/unistd_h.m4                          |    7 +-
 m4/version-etc.m4                       |   33 +
 m4/warnings.m4                          |   44 ++
 maint.mk                                |  816 ++++++++++++++++++++++++
 module/system/vm/debug.scm              |   31 +-
 module/system/vm/frame.scm              |   20 +-
 module/system/vm/vm.scm                 |   31 +-
 qt/CHANGES                              |   15 -
 qt/ChangeLog-2008                       |  283 ---------
 qt/INSTALL                              |   81 ---
 qt/Makefile.am                          |   54 --
 qt/Makefile.base                        |  112 ----
 qt/README                               |   89 ---
 qt/README.MISC                          |   56 --
 qt/README.PORT                          |  112 ----
 qt/b.h                                  |   11 -
 qt/config                               |  308 ---------
 qt/copyright.h                          |   12 -
 qt/libqthreads.def                      |   10 -
 qt/md/Makefile.am                       |   30 -
 qt/md/_sparc.s                          |  142 -----
 qt/md/_sparc_b.s                        |  106 ----
 qt/md/arm.h                             |   96 ---
 qt/md/arm.s                             |   34 -
 qt/md/axp.1.Makefile                    |    5 -
 qt/md/axp.2.Makefile                    |    5 -
 qt/md/axp.Makefile                      |    5 -
 qt/md/axp.README                        |   10 -
 qt/md/axp.c                             |  133 ----
 qt/md/axp.h                             |  160 -----
 qt/md/axp.s                             |  160 -----
 qt/md/axp_b.s                           |  111 ----
 qt/md/default.Makefile                  |    6 -
 qt/md/hppa-cnx.Makefile                 |    9 -
 qt/md/hppa.Makefile                     |    9 -
 qt/md/hppa.h                            |  194 ------
 qt/md/hppa.s                            |  237 -------
 qt/md/hppa_b.s                          |  203 ------
 qt/md/i386.README                       |    7 -
 qt/md/i386.asm                          |  112 ----
 qt/md/i386.h                            |  120 ----
 qt/md/i386.s                            |  108 ----
 qt/md/i386_b.s                          |   30 -
 qt/md/ksr1.Makefile                     |    6 -
 qt/md/ksr1.h                            |  164 -----
 qt/md/ksr1.s                            |  424 -------------
 qt/md/ksr1_b.s                          |   49 --
 qt/md/m88k.Makefile                     |    6 -
 qt/md/m88k.c                            |  111 ----
 qt/md/m88k.h                            |  159 -----
 qt/md/m88k.s                            |  132 ----
 qt/md/m88k_b.s                          |  117 ----
 qt/md/mips-irix5.s                      |  182 ------
 qt/md/mips.h                            |  134 ----
 qt/md/mips.s                            |  164 -----
 qt/md/mips_b.s                          |   99 ---
 qt/md/null.c                            |   14 -
 qt/md/solaris.README                    |   19 -
 qt/md/sparc.h                           |  140 ----
 qt/md/sparc.s                           |  142 -----
 qt/md/sparc_b.s                         |  106 ----
 qt/md/vax.h                             |  130 ----
 qt/md/vax.s                             |   69 --
 qt/md/vax_b.s                           |   92 ---
 qt/meas.c                               | 1049 -------------------------------
 qt/qt.c                                 |   48 --
 qt/qt.h.in                              |  186 ------
 qt/stp.c                                |  199 ------
 qt/stp.h                                |   51 --
 qt/time/Makefile.am                     |   24 -
 qt/time/README.time                     |   17 -
 qt/time/assim                           |   42 --
 qt/time/cswap                           |   37 --
 qt/time/go                              |   43 --
 qt/time/init                            |   42 --
 qt/time/prim                            |   41 --
 qt/time/raw                             |   58 --
 test-suite/standalone/test-conversion.c |    4 +-
 test-suite/standalone/test-unwind.c     |    5 +-
 149 files changed, 4098 insertions(+), 7924 deletions(-)
 create mode 100644 .gnuploadrc
 create mode 100644 .x-sc_GPL_version
 create mode 100644 .x-sc_avoid_if_before_free
 create mode 100644 .x-sc_cast_of_alloca_return_value
 create mode 100644 .x-sc_cast_of_argument_to_free
 create mode 100644 .x-sc_error_message_period
 create mode 100644 .x-sc_error_message_uppercase
 create mode 100644 .x-sc_error_message_warn_fatal
 create mode 100644 GNUmakefile
 create mode 100755 build-aux/announce-gen
 create mode 100644 build-aux/gendocs.sh
 create mode 100755 build-aux/gnu-web-doc-update
 create mode 100755 build-aux/gnupload
 create mode 100755 build-aux/useless-if-before-free
 create mode 100755 build-aux/vc-list-files
 create mode 100644 doc/gendocs_template
 delete mode 100644 lib/getpagesize.c
 create mode 100644 lib/gettext.h
 copy lib/{netinet_in.in.h => stdarg.in.h} (61%)
 copy lib/{mbrlen.c => version-etc-fsf.c} (61%)
 create mode 100644 lib/version-etc.c
 create mode 100644 lib/version-etc.h
 delete mode 100644 libguile/putenv.c
 delete mode 100644 m4/getpagesize.m4
 create mode 100644 m4/stdarg.m4
 create mode 100644 m4/version-etc.m4
 create mode 100644 m4/warnings.m4
 create mode 100644 maint.mk
 delete mode 100644 qt/CHANGES
 delete mode 100644 qt/ChangeLog-2008
 delete mode 100644 qt/INSTALL
 delete mode 100644 qt/Makefile.am
 delete mode 100644 qt/Makefile.base
 delete mode 100644 qt/README
 delete mode 100644 qt/README.MISC
 delete mode 100644 qt/README.PORT
 delete mode 100644 qt/b.h
 delete mode 100755 qt/config
 delete mode 100644 qt/copyright.h
 delete mode 100644 qt/libqthreads.def
 delete mode 100644 qt/md/Makefile.am
 delete mode 100644 qt/md/_sparc.s
 delete mode 100644 qt/md/_sparc_b.s
 delete mode 100644 qt/md/arm.h
 delete mode 100644 qt/md/arm.s
 delete mode 100644 qt/md/axp.1.Makefile
 delete mode 100644 qt/md/axp.2.Makefile
 delete mode 100644 qt/md/axp.Makefile
 delete mode 100644 qt/md/axp.README
 delete mode 100644 qt/md/axp.c
 delete mode 100644 qt/md/axp.h
 delete mode 100644 qt/md/axp.s
 delete mode 100644 qt/md/axp_b.s
 delete mode 100644 qt/md/default.Makefile
 delete mode 100644 qt/md/hppa-cnx.Makefile
 delete mode 100644 qt/md/hppa.Makefile
 delete mode 100644 qt/md/hppa.h
 delete mode 100644 qt/md/hppa.s
 delete mode 100644 qt/md/hppa_b.s
 delete mode 100644 qt/md/i386.README
 delete mode 100644 qt/md/i386.asm
 delete mode 100644 qt/md/i386.h
 delete mode 100644 qt/md/i386.s
 delete mode 100644 qt/md/i386_b.s
 delete mode 100644 qt/md/ksr1.Makefile
 delete mode 100644 qt/md/ksr1.h
 delete mode 100644 qt/md/ksr1.s
 delete mode 100644 qt/md/ksr1_b.s
 delete mode 100644 qt/md/m88k.Makefile
 delete mode 100644 qt/md/m88k.c
 delete mode 100644 qt/md/m88k.h
 delete mode 100644 qt/md/m88k.s
 delete mode 100644 qt/md/m88k_b.s
 delete mode 100644 qt/md/mips-irix5.s
 delete mode 100644 qt/md/mips.h
 delete mode 100644 qt/md/mips.s
 delete mode 100644 qt/md/mips_b.s
 delete mode 100644 qt/md/null.README
 delete mode 100644 qt/md/null.c
 delete mode 100644 qt/md/solaris.README
 delete mode 100644 qt/md/sparc.h
 delete mode 100644 qt/md/sparc.s
 delete mode 100644 qt/md/sparc_b.s
 delete mode 100644 qt/md/vax.h
 delete mode 100644 qt/md/vax.s
 delete mode 100644 qt/md/vax_b.s
 delete mode 100644 qt/meas.c
 delete mode 100644 qt/qt.c
 delete mode 100644 qt/qt.h.in
 delete mode 100644 qt/stp.c
 delete mode 100644 qt/stp.h
 delete mode 100644 qt/time/Makefile.am
 delete mode 100644 qt/time/README.time
 delete mode 100755 qt/time/assim
 delete mode 100755 qt/time/cswap
 delete mode 100755 qt/time/go
 delete mode 100755 qt/time/init
 delete mode 100755 qt/time/prim
 delete mode 100755 qt/time/raw

diff --git a/.gnuploadrc b/.gnuploadrc
new file mode 100644
index 0000000..29acf73
--- /dev/null
+++ b/.gnuploadrc
@@ -0,0 +1 @@
+--user address@hidden
diff --git a/.x-sc_GPL_version b/.x-sc_GPL_version
new file mode 100644
index 0000000..38a66f9
--- /dev/null
+++ b/.x-sc_GPL_version
@@ -0,0 +1,4 @@
+^lib/
+^gc-benchmarks/
+^libguile/libgettext.h
+^libguile/mkstemp.c
diff --git a/.x-sc_avoid_if_before_free b/.x-sc_avoid_if_before_free
new file mode 100644
index 0000000..327edd4
--- /dev/null
+++ b/.x-sc_avoid_if_before_free
@@ -0,0 +1 @@
+^lib/
diff --git a/.x-sc_cast_of_alloca_return_value 
b/.x-sc_cast_of_alloca_return_value
new file mode 100644
index 0000000..327edd4
--- /dev/null
+++ b/.x-sc_cast_of_alloca_return_value
@@ -0,0 +1 @@
+^lib/
diff --git a/.x-sc_cast_of_argument_to_free b/.x-sc_cast_of_argument_to_free
new file mode 100644
index 0000000..700a6cd
--- /dev/null
+++ b/.x-sc_cast_of_argument_to_free
@@ -0,0 +1 @@
+^libguile/stime.c
diff --git a/.x-sc_error_message_period b/.x-sc_error_message_period
new file mode 100644
index 0000000..aa64efa
--- /dev/null
+++ b/.x-sc_error_message_period
@@ -0,0 +1 @@
+^gc-benchmarks/
diff --git a/.x-sc_error_message_uppercase b/.x-sc_error_message_uppercase
new file mode 100644
index 0000000..25078a1
--- /dev/null
+++ b/.x-sc_error_message_uppercase
@@ -0,0 +1,6 @@
+^libguile/
+^guile-readline/
+^gc-benchmarks/
+^emacs/
+^NEWS
+^doc/
diff --git a/.x-sc_error_message_warn_fatal b/.x-sc_error_message_warn_fatal
new file mode 100644
index 0000000..f01a512
--- /dev/null
+++ b/.x-sc_error_message_warn_fatal
@@ -0,0 +1 @@
+^module/ice-9/match.scm
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..33eb3aa
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,127 @@
+# Having a separate GNUmakefile lets me `include' the dynamically
+# generated rules created via cfg.mk (package-local configuration)
+# as well as maint.mk (generic maintainer rules).
+# This makefile is used only if you run GNU Make.
+# It is necessary if you want to build targets usually of interest
+# only to the maintainer.
+
+# Copyright (C) 2001, 2003, 2006-2009 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Systems where /bin/sh is not the default shell need this.  The $(shell)
+# command below won't work with e.g. stock DOS/Windows shells.
+ifeq ($(wildcard /bin/s[h]),/bin/sh)
+SHELL = /bin/sh
+else
+# will be used only with the next shell-test line, then overwritten
+# by a configured-in value
+SHELL = sh
+endif
+
+# If the user runs GNU make but has not yet run ./configure,
+# give them a diagnostic.
+_have-Makefile := $(shell test -f Makefile && echo yes)
+ifeq ($(_have-Makefile),yes)
+
+# Make tar archive easier to reproduce.
+export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
+
+# Allow the user to add to this in the Makefile.
+ALL_RECURSIVE_TARGETS =
+
+include Makefile
+
+# Some projects override e.g., _autoreconf here.
+-include $(srcdir)/cfg.mk
+include $(srcdir)/maint.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf
+
+# Ensure that $(VERSION) is up to date for dist-related targets, but not
+# for others: rerunning autoreconf and recompiling everything isn't cheap.
+_have-git-version-gen := \
+  $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
+ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
+  _is-dist-target ?= $(filter-out %clean, \
+    $(filter maintainer-% dist% alpha beta major,$(MAKECMDGOALS)))
+  _is-install-target ?= $(filter-out %check, $(filter 
install%,$(MAKECMDGOALS)))
+  ifneq (,$(_is-dist-target)$(_is-install-target))
+    _curr-ver := $(shell cd $(srcdir) \
+                   && $(_build-aux)/git-version-gen .tarball-version)
+    ifneq ($(_curr-ver),$(VERSION))
+      ifeq ($(_curr-ver),UNKNOWN)
+        $(info WARNING: unable to verify if $(VERSION) is the correct version)
+      else
+        ifneq (,$(_is-install-target))
+          # GNU Coding Standards state that 'make install' should not cause
+          # recompilation after 'make all'.  But as long as changing the 
version
+          # string alters config.h, the cost of having 'make all' always have 
an
+          # up-to-date version is prohibitive.  So, as a compromise, we merely
+          # warn when installing a version string that is out of date; the user
+          # should run 'autoreconf' (or something like 'make distcheck') to
+          # fix the version, 'make all' to propagate it, then 'make install'.
+          $(info WARNING: version string $(VERSION) is out of date;)
+          $(info run '$(MAKE) _version' to fix it)
+        else
+          $(info INFO: running autoreconf for new version string: $(_curr-ver))
+          _dummy := $(shell $(MAKE) $(AM_MAKEFLAGS) _version)
+        endif
+      endif
+    endif
+  endif
+endif
+
+.PHONY: _version
+_version:
+       cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
+
+else
+
+.DEFAULT_GOAL := abort-due-to-no-makefile
+srcdir = .
+
+# The package can override .DEFAULT_GOAL to run actions like autoreconf.
+-include ./cfg.mk
+include ./maint.mk
+
+ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
+$(MAKECMDGOALS): abort-due-to-no-makefile
+endif
+
+abort-due-to-no-makefile:
+       @echo There seems to be no Makefile in this directory.   1>&2
+       @echo "You must run ./configure before running \`make'." 1>&2
+       @exit 1
+
+endif
+
+# Tell version 3.79 and up of GNU make to not build goals in this
+# directory in parallel, in case someone tries to build multiple
+# targets, and one of them can cause a recursive target to be invoked.
+
+# Only set this if Automake doesn't provide it.
+AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
+  $(RECURSIVE_CLEAN_TARGETS:-recursive=) \
+  dist distcheck tags ctags
+
+ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
+.NOTPARALLEL:
+endif
+endif
diff --git a/GUILE-VERSION b/GUILE-VERSION
index 7ec8d74..4f6a9af 100644
--- a/GUILE-VERSION
+++ b/GUILE-VERSION
@@ -2,14 +2,14 @@
 
 GUILE_MAJOR_VERSION=1
 GUILE_MINOR_VERSION=9
-GUILE_MICRO_VERSION=4
+GUILE_MICRO_VERSION=5
 
 GUILE_EFFECTIVE_VERSION=${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}
 GUILE_VERSION=${GUILE_EFFECTIVE_VERSION}.${GUILE_MICRO_VERSION}
 
 # For automake.
 VERSION=${GUILE_VERSION}
-PACKAGE=guile
+PACKAGE="GNU Guile"
 
 # All of the shared lib versioning info.  Right now, for this to work
 # properly, you'll also need to add AC_SUBST calls to the right place
diff --git a/Makefile.am b/Makefile.am
index 80231bb..1ee3e80 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,6 +40,12 @@ ACLOCAL_AMFLAGS = -I m4
 
 DISTCLEANFILES = check-guile.log
 
+# Help Automake choose the right directory name (Automake 1.11 uses
+# `$(PACKAGE)-$(PACKAGE_VERSION)' by default, which is wrong.)
+distdir = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-error-on-warning
+
 dist-hook: gen-ChangeLog
 
 clean-local:
diff --git a/NEWS b/NEWS
index 300f6a8..08dc112 100644
--- a/NEWS
+++ b/NEWS
@@ -149,6 +149,10 @@ procedure. Pass the -Warity-mismatch on the `guile-tools 
compile'
 command line, or add `#:warnings '(arity-mismatch)' to your `compile'
 or `compile-file' invocation.
 
+** Guile is now built without `-Werror' by default
+
+Use the `--enable-error-on-warning' configure option to enable it.
+
 ** And of course, the usual collection of bugfixes
  
 Interested users should see the ChangeLog for more information.
diff --git a/build-aux/announce-gen b/build-aux/announce-gen
new file mode 100755
index 0000000..e6be9f8
--- /dev/null
+++ b/build-aux/announce-gen
@@ -0,0 +1,495 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Generate a release announcement message.
+
+my $VERSION = '2009-10-30 15:59'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2002-2009 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+
+use Getopt::Long;
+use Digest::MD5;
+use Digest::SHA1;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
+my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz');
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try `$ME --help' for more information.\n";
+    }
+  else
+    {
+      my @types = sort keys %valid_release_types;
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS]
+Generate an announcement message.
+
+OPTIONS:
+
+These options must be specified:
+
+   --release-type=TYPE          TYPE must be one of @types
+   --package-name=PACKAGE_NAME
+   --previous-version=VER
+   --current-version=VER
+   --gpg-key-id=ID         The GnuPG ID of the key used to sign the tarballs
+   --url-directory=URL_DIR
+
+The following are optional:
+
+   --news=NEWS_FILE
+   --bootstrap-tools=TOOL_LIST  a comma-separated list of tools, e.g.,
+                                autoconf,automake,bison,gnulib
+   --gnulib-version=VERSION     report VERSION as the gnulib version, where
+                                VERSION is the result of running git describe
+                                in the gnulib source directory.
+                                required if gnulib is in TOOL_LIST.
+   --no-print-checksums         do not emit MD5 or SHA1 checksums
+   --archive-suffix=SUF         add SUF to the list of archive suffixes
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+EOF
+    }
+  exit $exit_code;
+}
+
+
+=item C<%size> = C<sizes (@file)>
+
+Compute the sizes of the C<@file> and return them as a hash.  Return
+C<undef> if one of the computation failed.
+
+=cut
+
+sub sizes (@)
+{
+  my (@file) = @_;
+
+  my $fail = 0;
+  my %res;
+  foreach my $f (@file)
+    {
+      my $cmd = "du --human $f";
+      my $t = `$cmd`;
+      # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
+      $@
+       and (warn "$ME: command failed: `$cmd'\n"), $fail = 1;
+      chomp $t;
+      $t =~ s/^([\d.]+[MkK]).*/${1}B/;
+      $res{$f} = $t;
+    }
+  return $fail ? undef : %res;
+}
+
+=item C<print_locations ($title, address@hidden, \%size, @file)
+
+Print a section C<$title> dedicated to the list of <@file>, which
+sizes are stored in C<%size>, and which are available from the C<@url>.
+
+=cut
+
+sub print_locations (address@hidden@)
+{
+  my ($title, $url, $size, @file) = @_;
+  print "Here are the $title:\n";
+  foreach my $url (@{$url})
+    {
+      for my $file (@file)
+       {
+         print "  $url/$file";
+         print "   (", $$size{$file}, ")"
+           if exists $$size{$file};
+         print "\n";
+       }
+    }
+  print "\n";
+}
+
+=item C<print_checksums (@file)
+
+Print the MD5 and SHA1 signature section for each C<@file>.
+
+=cut
+
+sub print_checksums (@)
+{
+  my (@file) = @_;
+
+  print "Here are the MD5 and SHA1 checksums:\n";
+  print "\n";
+
+  foreach my $meth (qw (md5 sha1))
+    {
+      foreach my $f (@file)
+       {
+         open IN, '<', $f
+           or die "$ME: $f: cannot open for reading: $!\n";
+         binmode IN;
+         my $dig =
+           ($meth eq 'md5'
+            ? Digest::MD5->new->addfile(*IN)->hexdigest
+            : Digest::SHA1->new->addfile(*IN)->hexdigest);
+         close IN;
+         print "$dig  $f\n";
+       }
+    }
+  print "\n";
+}
+
+=item C<print_news_deltas ($news_file, $prev_version, $curr_version)
+
+Print the section of the NEWS file C<$news_file> addressing changes
+between versions C<$prev_version> and C<$curr_version>.
+
+=cut
+
+sub print_news_deltas ($$$)
+{
+  my ($news_file, $prev_version, $curr_version) = @_;
+
+  print "\n$news_file\n\n";
+
+  # Print all lines from $news_file, starting with the first one
+  # that mentions $curr_version up to but not including
+  # the first occurrence of $prev_version.
+  my $in_items;
+
+  my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/;
+
+  open NEWS, '<', $news_file
+    or die "$ME: $news_file: cannot open for reading: $!\n";
+  while (defined (my $line = <NEWS>))
+    {
+      if ( ! $in_items)
+       {
+         # Match lines like these:
+         # * Major changes in release 5.0.1:
+         # * Noteworthy changes in release 6.6 (2006-11-22) [stable]
+         $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o
+           or next;
+         $in_items = 1;
+         print $line;
+       }
+      else
+       {
+         # This regexp must not match version numbers in NEWS items.
+         # For example, they might well say `introduced in 4.5.5',
+         # and we don't want that to match.
+         $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o
+           and last;
+         print $line;
+       }
+    }
+  close NEWS;
+
+  $in_items
+    or die "$ME: $news_file: no matching lines for `$curr_version'\n";
+}
+
+sub print_changelog_deltas ($$)
+{
+  my ($package_name, $prev_version) = @_;
+
+  # Print new ChangeLog entries.
+
+  # First find all CVS-controlled ChangeLog files.
+  use File::Find;
+  my @changelog;
+  find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS'
+                         and push @changelog, $File::Find::name}},
+       '.');
+
+  # If there are no ChangeLog files, we're done.
+  @changelog
+    or return;
+  my %changelog = map {$_ => 1} @changelog;
+
+  # Reorder the list of files so that if there are ChangeLog
+  # files in the specified directories, they're listed first,
+  # in this order:
+  my @dir = qw ( . src lib m4 config doc );
+
+  # A typical @changelog array might look like this:
+  # ./ChangeLog
+  # ./po/ChangeLog
+  # ./m4/ChangeLog
+  # ./lib/ChangeLog
+  # ./doc/ChangeLog
+  # ./config/ChangeLog
+  my @reordered;
+  foreach my $d (@dir)
+    {
+      my $dot_slash = $d eq '.' ? $d : "./$d";
+      my $target = "$dot_slash/ChangeLog";
+      delete $changelog{$target}
+       and push @reordered, $target;
+    }
+
+  # Append any remaining ChangeLog files.
+  push @reordered, sort keys %changelog;
+
+  # Remove leading `./'.
+  @reordered = map { s!^\./!!; $_ } @reordered;
+
+  print "\nChangeLog entries:\n\n";
+  # print join ("\n", @reordered), "\n";
+
+  $prev_version =~ s/\./_/g;
+  my $prev_cvs_tag = "\U$package_name\E-$prev_version";
+
+  my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered";
+  open DIFF, '-|', $cmd
+    or die "$ME: cannot run `$cmd': $!\n";
+  # Print two types of lines, making minor changes:
+  # Lines starting with `+++ ', e.g.,
+  # +++ ChangeLog   22 Feb 2003 16:52:51 -0000      1.247
+  # and those starting with `+'.
+  # Don't print the others.
+  my $prev_printed_line_empty = 1;
+  while (defined (my $line = <DIFF>))
+    {
+      if ($line =~ /^\+\+\+ /)
+       {
+         my $separator = "*"x70 ."\n";
+         $line =~ s///;
+         $line =~ s/\s.*//;
+         $prev_printed_line_empty
+           or print "\n";
+         print $separator, $line, $separator;
+       }
+      elsif ($line =~ /^\+/)
+       {
+         $line =~ s///;
+         print $line;
+         $prev_printed_line_empty = ($line =~ /^$/);
+       }
+    }
+  close DIFF;
+
+  # The exit code should be 1.
+  # Allow in case there are no modified ChangeLog entries.
+  $? == 256 || $? == 128
+    or warn "$ME: warning: `cmd' had unexpected exit code or signal ($?)\n";
+}
+
+sub get_tool_versions ($$)
+{
+  my ($tool_list, $gnulib_version) = @_;
+  @$tool_list
+    or return ();
+
+  my $fail;
+  my @tool_version_pair;
+  foreach my $t (@$tool_list)
+    {
+      if ($t eq 'gnulib')
+       {
+         push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version;
+         next;
+       }
+      # Assume that the last "word" on the first line of
+      # `tool --version` output is the version string.
+      my ($first_line, undef) = split ("\n", `$t --version`);
+      if ($first_line =~ /.* (\d[\w.-]+)$/)
+       {
+         $t = ucfirst $t;
+         push @tool_version_pair, "$t $1";
+       }
+      else
+       {
+         defined $first_line
+           and $first_line = '';
+         warn "$ME: $t: unexpected --version output\n:$first_line";
+         $fail = 1;
+       }
+    }
+
+  $fail
+    and exit 1;
+
+  return @tool_version_pair;
+}
+
+{
+  # Neutralize the locale, so that, for instance, "du" does not
+  # issue "1,2" instead of "1.2", what confuses our regexps.
+  $ENV{LC_ALL} = "C";
+
+  my $release_type;
+  my $package_name;
+  my $prev_version;
+  my $curr_version;
+  my $gpg_key_id;
+  my @url_dir_list;
+  my @news_file;
+  my $bootstrap_tools;
+  my $gnulib_version;
+  my $print_checksums_p = 1;
+
+  GetOptions
+    (
+     'release-type=s'     => \$release_type,
+     'package-name=s'     => \$package_name,
+     'previous-version=s' => \$prev_version,
+     'current-version=s'  => \$curr_version,
+     'gpg-key-id=s'       => \$gpg_key_id,
+     'url-directory=s'    => address@hidden,
+     'news=s'             => address@hidden,
+     'bootstrap-tools=s'  => \$bootstrap_tools,
+     'gnulib-version=s'   => \$gnulib_version,
+     'print-checksums!'   => \$print_checksums_p,
+     'archive-suffix=s'   => address@hidden,
+
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+    ) or usage 1;
+
+  my $fail = 0;
+  # Ensure that sure each required option is specified.
+  $release_type
+    or (warn "$ME: release type not specified\n"), $fail = 1;
+  $package_name
+    or (warn "$ME: package name not specified\n"), $fail = 1;
+  $prev_version
+    or (warn "$ME: previous version string not specified\n"), $fail = 1;
+  $curr_version
+    or (warn "$ME: current version string not specified\n"), $fail = 1;
+  $gpg_key_id
+    or (warn "$ME: GnuPG key ID not specified\n"), $fail = 1;
+  @url_dir_list
+    or (warn "$ME: URL directory name(s) not specified\n"), $fail = 1;
+
+  my @tool_list = split ',', $bootstrap_tools;
+
+  grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version
+    and (warn "$ME: when specifying gnulib as a tool, you must also specify\n"
+       . "--gnulib-version=V, where V is the result of running git describe\n"
+       . "in the gnulib source directory.\n"), $fail = 1;
+
+  exists $valid_release_types{$release_type}
+    or (warn "$ME: `$release_type': invalid release type\n"), $fail = 1;
+
+  @ARGV
+    and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"),
+      $fail = 1;
+  $fail
+    and usage 1;
+
+  my $my_distdir = "$package_name-$curr_version";
+
+  my $xd = "$package_name-$prev_version-$curr_version.xdelta";
+
+  my @candidates = map { "$my_distdir.$_" } @archive_suffixes;
+  my @tarballs = grep {-f $_} @candidates;
+
+  @tarballs
+    or die "$ME: none of " . join(', ', @candidates) . " were found\n";
+  my @sizable = @tarballs;
+  -f $xd
+    and push @sizable, $xd;
+  my %size = sizes (@sizable);
+  %size
+    or exit 1;
+
+  # The markup is escaped as <\# so that when this script is sent by
+  # mail (or part of a diff), Gnus is not triggered.
+  print <<EOF;
+
+Subject: $my_distdir released [$release_type]
+
+<\#secure method=pgpmime mode=sign>
+
+FIXME: put comments here
+
+EOF
+
+  print_locations ("compressed sources", @url_dir_list, %size, @tarballs);
+  -f $xd
+    and print_locations ("xdelta diffs (useful? if so, "
+                        . "please tell address@hidden)",
+                        @url_dir_list, %size, $xd);
+  my @sig_files = map { "$_.sig" } @tarballs;
+  print_locations ("GPG detached signatures[*]", @url_dir_list, %size,
+                  @sig_files);
+
+  $print_checksums_p
+    and print_checksums (@sizable);
+
+  print <<EOF;
+[*] You can use either of the above signature files to verify that
+the corresponding file (without the .sig suffix) is intact.  First,
+be sure to download both the .sig file and the corresponding tarball.
+Then, run a command like this:
+
+  gpg --verify $tarballs[0].sig
+
+If that command fails because you don't have the required public key,
+then run this command to import it:
+
+  gpg --keyserver keys.gnupg.net --recv-keys $gpg_key_id
+
+and rerun the \`gpg --verify' command.
+EOF
+
+  my @tool_versions = get_tool_versions (address@hidden, $gnulib_version);
+  @tool_versions
+    and print "\nThis release was bootstrapped with the following tools:",
+      join ('', map {"\n  $_"} @tool_versions), "\n";
+
+  print_news_deltas ($_, $prev_version, $curr_version)
+    foreach @news_file;
+
+  $release_type eq 'stable'
+    or print_changelog_deltas ($package_name, $prev_version);
+
+  exit 0;
+}
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## mode: perl
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## perl-extra-newline-before-brace: t
+## perl-merge-trailing-else: nil
+## eval: (add-hook 'write-file-hooks 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh
new file mode 100644
index 0000000..992d9fc
--- /dev/null
+++ b/build-aux/gendocs.sh
@@ -0,0 +1,361 @@
+#!/bin/sh
+# gendocs.sh -- generate a GNU manual in many formats.  This script is
+#   mentioned in maintain.texi.  See the help message below for usage details.
+
+scriptversion=2009-09-09.22
+
+# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+#
+# This program 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to address@hidden
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh";
+templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template";
+
+: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${DVIPS="dvips"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2PS="docbook2ps"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+: ${TEXI2HTML="texi2html"}
+unset CDPATH
+unset use_texi2html
+
+version="gendocs.sh $scriptversion
+
+Copyright 2009 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
+See the GNU Maintainers document for a more extensive discussion:
+  http://www.gnu.org/prep/maintain_toc.html
+
+Options:
+  -o OUTDIR   write files into OUTDIR, instead of manual/.
+  --email ADR use ADR as contact in generated web pages.
+  --docbook   convert to DocBook too (xml, txt, html, pdf and ps).
+  --html ARG  pass indicated ARG to makeinfo or texi2html for HTML targets.
+  --texi2html use texi2html to generate HTML targets.
+  --help      display this help and exit successfully.
+  --version   display version information and exit successfully.
+
+Simple example: $prog --email address@hidden emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+  cd PACKAGESOURCE/doc
+  wget \"$scripturl\"
+  wget \"$templateurl\"
+  $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
+to override).  Move all the new files into your web CVS tree, as
+explained in the Web Pages node of maintain.texi.
+
+Please use the --email ADDRESS option to specify your bug-reporting
+address in the generated HTML pages.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file.  It should include the name of the package being
+documented.  manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template.  (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different MANUAL values, specifying a different output
+directory with -o each time.  Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's Texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+You can set the environment variables MAKEINFO, TEXI2DVI, and DVIPS to
+control the programs that get executed, and GENDOCS_TEMPLATE_DIR to
+control where the gendocs_template file is looked for.  (With --docbook,
+the environment variables DOCBOOK2HTML, DOCBOOK2PDF, DOCBOOK2PS, and
+DOCBOOK2TXT are also respected.)
+
+By default, makeinfo is run in the default (English) locale, since
+that's the language of most Texinfo manuals.  If you happen to have a
+non-English manual and non-English web site, see the SETLANG setting
+in the source.
+
+Email bug reports or enhancement requests to address@hidden
+"
+
+calcsize()
+{
+  size=`ls -ksl $1 | awk '{print $1}'`
+  echo $size
+}
+
+MANUAL_TITLE=
+PACKAGE=
address@hidden  # please override with --email
+htmlarg=
+outdir=manual
+
+while test $# -gt 0; do
+  case $1 in
+    --email) shift; EMAIL=$1;;
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    -o) shift; outdir=$1;;
+    --docbook) docbook=yes;;
+    --html) shift; htmlarg=$1;;
+    --texi2html) use_texi2html=1;;
+    -*)
+      echo "$0: Unknown option \`$1'." >&2
+      echo "$0: Try \`--help' for more information." >&2
+      exit 1;;
+    *)
+      if test -z "$PACKAGE"; then
+        PACKAGE=$1
+      elif test -z "$MANUAL_TITLE"; then
+        MANUAL_TITLE=$1
+      else
+        echo "$0: extra non-option argument \`$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+if test -s "$srcdir/$PACKAGE.texinfo"; then
+  srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+  srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+  srcfile=$srcdir/$PACKAGE.txi
+else
+  echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+  exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+  echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+  echo "$0: it is available from $templateurl." >&2
+  exit 1
+fi
+
+case $outdir in
+  /*) dotdot_outdir="$outdir";;
+  *) dotdot_outdir="../$outdir";;
+esac
+
+echo Generating output formats for $srcfile
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
+echo "Generating info files... ($cmd)"
+eval "$cmd"
+mkdir -p $outdir/
+tar czf $outdir/$PACKAGE.info.tar.gz $PACKAGE.info*
+info_tgz_size=`calcsize $outdir/$PACKAGE.info.tar.gz`
+# do not mv the info files, there's no point in having them available
+# separately on the web.
+
+cmd="${TEXI2DVI} \"$srcfile\""
+echo "Generating dvi ... ($cmd)"
+eval "$cmd"
+
+# now, before we compress dvi:
+echo Generating postscript...
+${DVIPS} $PACKAGE -o
+gzip -f -9 $PACKAGE.ps
+ps_gz_size=`calcsize $PACKAGE.ps.gz`
+mv $PACKAGE.ps.gz $outdir/
+
+# compress/finish dvi:
+gzip -f -9 $PACKAGE.dvi
+dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+mv $PACKAGE.dvi.gz $outdir/
+
+cmd="${TEXI2DVI} --pdf \"$srcfile\""
+echo "Generating pdf ... ($cmd)"
+eval "$cmd"
+pdf_size=`calcsize $PACKAGE.pdf`
+mv $PACKAGE.pdf $outdir/
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
+echo "Generating ASCII... ($cmd)"
+eval "$cmd"
+ascii_size=`calcsize $PACKAGE.txt`
+gzip -f -9 -c $PACKAGE.txt >$outdir/$PACKAGE.txt.gz
+ascii_gz_size=`calcsize $outdir/$PACKAGE.txt.gz`
+mv $PACKAGE.txt $outdir/
+
+html_split()
+{
+  opt="--split=$1 $htmlarg --node-files"
+  cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
+  echo "Generating html by $1... ($cmd)"
+  eval "$cmd"
+  split_html_dir=$PACKAGE.html
+  (
+    cd ${split_html_dir} || exit 1
+    ln -sf ${PACKAGE}.html index.html
+    tar -czf $dotdot_outdir/${PACKAGE}.html_$1.tar.gz -- *.html
+  )
+  eval html_$1_tgz_size=`calcsize $outdir/${PACKAGE}.html_$1.tar.gz`
+  rm -f $outdir/html_$1/*.html
+  mkdir -p $outdir/html_$1/
+  mv ${split_html_dir}/*.html $outdir/html_$1/
+  rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+  opt="--no-split --html -o $PACKAGE.html $htmlarg"
+  cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+  echo "Generating monolithic html... ($cmd)"
+  rm -rf $PACKAGE.html  # in case a directory is left over
+  eval "$cmd"
+  html_mono_size=`calcsize $PACKAGE.html`
+  gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
+  html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
+  mv $PACKAGE.html $outdir/
+
+  cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\""
+  echo "Generating html by node... ($cmd)"
+  eval "$cmd"
+  split_html_dir=$PACKAGE.html
+  (
+   cd ${split_html_dir} || exit 1
+   tar -czf $dotdot_outdir/${PACKAGE}.html_node.tar.gz -- *.html
+  )
+  html_node_tgz_size=`calcsize $outdir/${PACKAGE}.html_node.tar.gz`
+  rm -f $outdir/html_node/*.html
+  mkdir -p $outdir/html_node/
+  mv ${split_html_dir}/*.html $outdir/html_node/
+  rmdir ${split_html_dir}
+else
+  cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\""
+  echo "Generating monolithic html... ($cmd)"
+  rm -rf $PACKAGE.html  # in case a directory is left over
+  eval "$cmd"
+  html_mono_size=`calcsize $PACKAGE.html`
+  gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
+  html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
+  mv $PACKAGE.html $outdir/
+
+  html_split node
+  html_split chapter
+  html_split section
+fi
+
+echo Making .tar.gz for sources...
+srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null`
+tar cvzfh $outdir/$PACKAGE.texi.tar.gz $srcfiles
+texi_tgz_size=`calcsize $outdir/$PACKAGE.texi.tar.gz`
+
+if test -n "$docbook"; then
+  cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > 
${srcdir}/$PACKAGE-db.xml"
+  echo "Generating docbook XML... $(cmd)"
+  eval "$cmd"
+  docbook_xml_size=`calcsize $PACKAGE-db.xml`
+  gzip -f -9 -c $PACKAGE-db.xml >$outdir/$PACKAGE-db.xml.gz
+  docbook_xml_gz_size=`calcsize $outdir/$PACKAGE-db.xml.gz`
+  mv $PACKAGE-db.xml $outdir/
+
+  cmd="${DOCBOOK2HTML} -o $split_html_db_dir ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook HTML... ($cmd)"
+  eval "$cmd"
+  split_html_db_dir=html_node_db
+  (
+    cd ${split_html_db_dir} || exit 1
+    tar -czf $dotdot_outdir/${PACKAGE}.html_node_db.tar.gz -- *.html
+  )
+  html_node_db_tgz_size=`calcsize $outdir/${PACKAGE}.html_node_db.tar.gz`
+  rm -f $outdir/html_node_db/*.html
+  mkdir -p $outdir/html_node_db
+  mv ${split_html_db_dir}/*.html $outdir/html_node_db/
+  rmdir ${split_html_db_dir}
+
+  cmd="${DOCBOOK2TXT} ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook ASCII... ($cmd)"
+  eval "$cmd"
+  docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+  mv $PACKAGE-db.txt $outdir/
+
+  cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook PS... $(cmd)"
+  eval "$cmd"
+  gzip -f -9 -c $PACKAGE-db.ps >$outdir/$PACKAGE-db.ps.gz
+  docbook_ps_gz_size=`calcsize $outdir/$PACKAGE-db.ps.gz`
+  mv $PACKAGE-db.ps $outdir/
+
+  cmd="${DOCBOOK2PDF} ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook PDF... ($cmd)"
+  eval "$cmd"
+  docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+  mv $PACKAGE-db.pdf $outdir/
+fi
+
+echo "Writing index file..."
+if test -z "$use_texi2html"; then
+   CONDS="/%%IF  *HTML_SECTION%%/,/%%ENDIF  *HTML_SECTION%%/d;\
+          /%%IF  *HTML_CHAPTER%%/,/%%ENDIF  *HTML_CHAPTER%%/d"
+else
+   CONDS="/%%ENDIF.*%%/d;/%%IF  *HTML_SECTION%%/d;/%%IF  *HTML_CHAPTER%%/d"
+fi
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+   -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+   -e "s!%%EMAIL%%!$EMAIL!g" \
+   -e "s!%%PACKAGE%%!$PACKAGE!g" \
+   -e "s!%%DATE%%!$curdate!g" \
+   -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+   -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+   -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+   -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+   -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+   -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+   -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+   -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+   -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
+   -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+   -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+   -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+   -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+   -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+   -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
+   -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+   -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+   -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+   -e "s,%%SCRIPTURL%%,$scripturl,g" \
+   -e "s!%%SCRIPTNAME%%!$prog!g" \
+   -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >$outdir/index.html
+
+echo "Done, see $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 270b8cf..32f76e8 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -1,10 +1,9 @@
-#!/bin/sh
-# Accommodate systems where /usr/bin/perl is not the right path.
-exec perl -x "$0" "$@"
-#!perl
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
 # Convert git log output to ChangeLog format.
 
-my $VERSION = '2009-06-04 08:53'; # UTC
+my $VERSION = '2009-10-30 13:46'; # UTC
 # The definition above must lie within the first 8 lines in order
 # for the Emacs time-stamp write hook (at end) to update it.
 # If you change this file with Emacs, please let the write hook
@@ -63,6 +62,9 @@ OPTIONS:
 
    --since=DATE convert only the logs since DATE;
                   the default is to convert all log entries.
+   --format=FMT set format string for commit subject and body;
+                  see 'man git-log' for the list of format metacharacters;
+                  the default is '%s%n%b%n'
 
    --help       display this help and exit
    --version    output version information and exit
@@ -99,15 +101,17 @@ sub quoted_cmd(@)
 
 {
   my $since_date = '1970-01-01 UTC';
+  my $format_string = '%s%n%b%n';
   GetOptions
     (
      help => sub { usage 0 },
      version => sub { print "$ME version $VERSION\n"; exit },
      'since=s' => \$since_date,
+     'format=s' => \$format_string,
     ) or usage 1;
 
   my @cmd = (qw (git log --log-size), "--since=$since_date",
-             '--pretty=format:%ct  %an  <%ae>%n%n%s%n%b%n', @ARGV);
+             '--pretty=format:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
   open PIPE, '-|', @cmd
     or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n"
             . "(Is your Git too old?  Version 1.5.1 or later is required.)\n");
@@ -177,6 +181,7 @@ sub quoted_cmd(@)
 }
 
 # Local Variables:
+# mode: perl
 # indent-tabs-mode: nil
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "my $VERSION = '"
diff --git a/build-aux/gnu-web-doc-update b/build-aux/gnu-web-doc-update
new file mode 100755
index 0000000..91902c5
--- /dev/null
+++ b/build-aux/gnu-web-doc-update
@@ -0,0 +1,115 @@
+#!/bin/sh
+# Run this after each non-alpha release, to update the web documentation at
+# http://www.gnu.org/software/$pkg/manual/
+# This script must be run from the top-level directory,
+# assumes you're using git for revision control,
+# and requires a .prev-version file as well as a Makefile,
+# from which it extracts the version number and package name, respectively.
+# Also, it assumes all documentation is in the doc/ sub-directory.
+
+VERSION=2009-07-21.16; # UTC
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Requirements: everything required to bootstrap your package,
+# plus these: git, cvs, cvsu, rsync, mktemp
+
+ME=`basename "$0"`
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+help_version()
+{
+  case $1 in
+    --help) cat <<EOF
+Usage: $ME
+
+Run this script (no options or arguments) after each non-alpha release,
+to update the web documentation at http://www.gnu.org/software/\$pkg/manual/
+Run it from your project's the top-level directory.
+
+Options:
+  --help     print this help, then exit
+  --version  print version number, then exit
+
+Report bugs and patches to <address@hidden>.
+EOF
+      exit ;;
+
+    --version)
+      year=`echo "$VERSION" | sed 's/[^0-9].*//'`
+      cat <<EOF
+$ME $VERSION
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+      exit ;;
+
+  *) die "unrecognized option: $1";;
+  esac
+}
+
+case $# in
+  0) ;;
+  1) help_version $1 ;;
+  *) die "$ME: too many options" ;;
+esac
+
+prev=.prev-version
+version=$(cat $prev) || die "$ME: no $prev file?"
+pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' Makefile) || die "$ME: no Makefile?"
+tmp_branch=web-doc-$version-$$
+
+cleanup()
+{
+  __st=$?;
+  rm -rf "$tmp"
+  git checkout master
+  git branch -d $tmp_branch
+  exit $__st
+}
+trap cleanup 0
+trap 'exit $?' 1 2 13 15
+
+# We must build using sources for which --version reports the
+# just-released version number, not some string like 7.6.18-20761.
+# That version string propagates into all documentation.
+git checkout -b $tmp_branch v$version
+./bootstrap && ./configure && make && make web-manual
+
+tmp=$(mktemp -d --tmpdir=. web-doc-update.XXXXXX) || exit 1
+( cd $tmp \
+    && cvs -d address@hidden:/webcvs/$pkg co $pkg )
+rsync -avP doc/manual/ $tmp/$pkg/manual
+
+(
+  cd $tmp/$pkg/manual
+
+  # Add any new files:
+  cvsu --types='?'|sed s/..// | xargs --no-run-if-empty -- cvs add -ko
+
+  cvs ci -m $version
+)
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "VERSION="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gnupload b/build-aux/gnupload
new file mode 100755
index 0000000..002cee3
--- /dev/null
+++ b/build-aux/gnupload
@@ -0,0 +1,412 @@
+#!/bin/sh
+# Sign files and upload them.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation
+#
+# This program 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 3, or (at your option)
+# any later version.
+#
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Originally written by Alexandre Duret-Lutz <address@hidden>.
+
+set -e
+
+GPG='gpg --batch --no-tty'
+conffile=.gnuploadrc
+to=
+dry_run=false
+symlink_files=
+delete_files=
+delete_symlinks=
+collect_var=
+dbg=
+
+usage="Usage: $0 [OPTIONS]... [COMMAND] FILES... [[COMMAND] FILES...]
+
+Sign all FILES, and upload them to selected destinations, according to
+<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>.
+
+Commands:
+  --delete                 delete FILES from destination
+  --symlink                create symbolic links
+  --rmsymlink              remove symbolic links
+  --                       treat the remaining arguments as files to upload
+
+Options:
+  --help                   print this help text and exit
+  --to DEST                specify one destination for FILES
+                           (multiple --to options are allowed)
+  --user NAME              sign with key NAME
+  --symlink-regex[=EXPR]   use sed script EXPR to compute symbolic link names
+  --dry-run                do nothing, show what would have been done
+  --version                output version information and exit
+
+If --symlink-regex is given without EXPR, then the link target name
+is created by replacing the version information with \`-latest', e.g.:
+
+  foo-1.3.4.tar.gz -> foo-latest.tar.gz
+
+Recognized destinations are:
+  alpha.gnu.org:DIRECTORY
+  savannah.gnu.org:DIRECTORY
+  savannah.nongnu.org:DIRECTORY
+  ftp.gnu.org:DIRECTORY
+                           build directive files and upload files by FTP
+  download.gnu.org.ua:{alpha|ftp}/DIRECTORY
+                           build directive files and upload files by SFTP
+  address@hidden:DIRECTORY    upload files with scp
+
+Options and commands are applied in order.  If the file $conffile exists
+in the current working directory, its contents are prepended to the
+actual command line options.  Use this to keep your defaults.  Comments
+(#) and empty lines in $conffile are allowed.
+
+Examples:
+1. Upload automake-1.8.2b.tar.gz and automake-1.8.2b.tar.bz2 to two sites:
+  gnupload --to sources.redhat.com:~ftp/pub/automake \\
+           --to alpha.gnu.org:automake \\
+           automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2
+
+2. Same as above, but also create symbolic links to automake-latest.tar.*:
+  gnupload --to sources.redhat.com:~ftp/pub/automake \\
+           --to alpha.gnu.org:automake \\
+           --symlink-regex \\
+           automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2
+
+3. Symlink automake-1.8.2b.tar.gz to automake-latest.tar.gz and
+automake-1.8.2b.tar.bz2 to automake-latest.tar.bz2 on both sites:
+
+  gnupload --to sources.redhat.com:~ftp/pub/automake \\
+           --to alpha.gnu.org:automake \\
+           --symlink automake-1.8.2b.tar.gz automake-latest.tar.gz \\
+                     automake-1.8.2b.tar.bz2 automake-latest.tar.bz2
+
+4. Delete automake-1.8.2a.tar.gz and .bz2, remove symlink
+automake-latest.tar.gz and upload automake-1.8.2b.tar.gz:
+
+  gnupload --to sources.redhat.com:~ftp/pub/automake \\
+           --to alpha.gnu.org:automake \\
+           --delete automake-1.8.2a.tar.gz automake-1.8.2a.tar.bz2 \\
+           --rmsymlink automake-latest.tar.gz \\
+           -- \\
+           automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2
+
+Report bugs to <address@hidden>.
+Send patches to <address@hidden>."
+
+# Read local configuration file
+if test -r "$conffile"; then
+  echo "$0: Reading configuration file $conffile"
+  eval set x "`sed 's/#.*$//;/^$/d' \"$conffile\" | tr '\012\015' '  '` 
\"address@hidden""
+  shift
+fi
+
+while test -n "$1"; do
+  case $1 in
+  -*)
+    collect_var=
+    case $1 in
+    --help)
+      echo "$usage"
+      exit $?
+      ;;
+    --to)
+      if test -z "$2"; then
+        echo "$0: Missing argument for --to" 1>&2
+        exit 1
+      else
+        to="$to $2"
+        shift
+      fi
+      ;;
+    --user)
+      if test -z "$2"; then
+        echo "$0: Missing argument for --user" 1>&2
+        exit 1
+      else
+        GPG="$GPG --local-user $2"
+        shift
+      fi
+      ;;
+    --delete)
+      collect_var=delete_files
+      ;;
+    --rmsymlink)
+      collect_var=delete_symlinks
+      ;;
+    --symlink-regex=*)
+      symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
+      ;;
+    --symlink-regex)
+      symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
+      ;;
+    --symlink)
+      collect_var=symlink_files
+      ;;
+    --dry-run|-n)
+      dry_run=:
+      ;;
+    --version)
+      echo "gnupload $scriptversion"
+      exit $?
+      ;;
+    --)
+      shift
+      break
+      ;;
+    -*)
+      echo "$0: Unknown option \`$1', try \`$0 --help'" 1>&2
+      exit 1
+      ;;
+    esac
+    ;;
+  *)
+    if test -z "$collect_var"; then
+      break
+    else
+      eval "$collect_var=\"\$$collect_var $1\""
+    fi
+    ;;
+  esac
+  shift
+done
+
+dprint()
+{
+  echo "Running $*..."
+}
+
+if $dry_run; then
+  dbg=dprint
+fi
+
+if test -z "$to"; then
+  echo "$0: Missing destination sites" >&2
+  exit 1
+fi
+
+if test -n "$symlink_files"; then
+  x=`echo "$symlink_files" | sed 's/[^ ]//g;s/  //g'`
+  if test -n "$x"; then
+    echo "$0: Odd number of symlink arguments" >&2
+    exit 1
+  fi
+fi
+
+if test $# = 0; then
+  if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
+    echo "$0: No file to upload" 1>&2
+    exit 1
+  fi
+else
+  # Make sure all files exist.  We don't want to ask
+  # for the passphrase if the script will fail.
+  for file
+  do
+    if test ! -f $file; then
+      echo "$0: Cannot find \`$file'" 1>&2
+      exit 1
+    elif test -n "$symlink_expr"; then
+      linkname=`echo $file | sed "$symlink_expr"`
+      if test -z "$linkname"; then
+        echo "$0: symlink expression produces empty results" >&2
+        exit 1
+      elif test "$linkname" = $file; then
+        echo "$0: symlink expression does not alter file name" >&2
+        exit 1
+      fi
+    fi
+  done
+fi
+
+# Make sure passphrase is not exported in the environment.
+unset passphrase
+
+# Reset PATH to be sure that echo is a built-in.  We will later use
+# `echo $passphrase' to output the passphrase, so it is important that
+# it is a built-in (third-party programs tend to appear in `ps'
+# listings with their arguments...).
+# Remember this script runs with `set -e', so if echo is not built-in
+# it will exit now.
+PATH=/empty echo -n "Enter GPG passphrase: "
+stty -echo
+read -r passphrase
+stty echo
+echo
+
+if test $# -ne 0; then
+  for file
+  do
+    echo "Signing $file..."
+    rm -f $file.sig
+    echo "$passphrase" | $dbg $GPG --passphrase-fd 0 -ba -o $file.sig $file
+  done
+fi
+
+
+# mkdirective DESTDIR BASE FILE STMT
+# Arguments: See upload, below
+mkdirective ()
+{
+  stmt="$4"
+  if test -n "$3"; then
+    stmt="
+filename: $3$stmt"
+  fi
+
+  cat >${2}.directive<<EOF
+version: 1.1
+directory: $1
+comment: gnupload v. $scriptversion$stmt
+EOF
+  if $dry_run; then
+    echo "File ${2}.directive:"
+    cat ${2}.directive
+    echo "File ${2}.directive:" | sed 's/./-/g'
+  fi
+}
+
+mksymlink ()
+{
+  while test $# -ne 0
+  do
+    echo "symlink: $1 $2"
+    shift
+    shift
+  done
+}
+
+# upload DEST DESTDIR BASE FILE STMT FILES
+# Arguments:
+#  DEST     Destination site;
+#  DESTDIR  Destination directory;
+#  BASE     Base name for the directive file;
+#  FILE     Name of the file to distribute (may be empty);
+#  STMT     Additional statements for the directive file;
+#  FILES    List of files to upload.
+upload ()
+{
+  dest=$1
+  destdir=$2
+  base=$3
+  file=$4
+  stmt=$5
+  files=$6
+
+  rm -f $base.directive $base.directive.asc
+  case $dest in
+    alpha.gnu.org:*)
+      mkdirective "$destdir" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign 
$base.directive
+      $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files 
$base.directive.asc
+      ;;
+    ftp.gnu.org:*)
+      mkdirective "$destdir" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign 
$base.directive
+      $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
+      ;;
+    savannah.gnu.org:*)
+      if test -z "$files"; then
+        echo "$0: warning: standalone directives not applicable for $dest" >&2
+      fi
+      $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
+      ;;
+    savannah.nongnu.org:*)
+      if test -z "$files"; then
+        echo "$0: warning: standalone directives not applicable for $dest" >&2
+      fi
+      $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
+      ;;
+    download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
+      destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
+      destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
+      mkdirective "$destdir_p1" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign 
$base.directive
+      for f in $files $base.directive.asc
+      do
+        echo put $f
+      done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir
+      ;;
+    /*)
+      dest_host=`echo "$dest" | sed 's,:.*,,'`
+      mkdirective "$destdir" "$base" "$file" "$stmt"
+      echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign 
$base.directive
+      $dbg cp $files $base.directive.asc $dest_host
+      ;;
+    *)
+      if test -z "$files"; then
+        echo "$0: warning: standalone directives not applicable for $dest" >&2
+      fi
+      $dbg scp $files $dest
+      ;;
+  esac
+  rm -f $base.directive $base.directive.asc
+}
+
+#####
+# Process any standalone directives
+stmt=
+if test -n "$symlink_files"; then
+  stmt="$stmt
+`mksymlink $symlink_files`"
+fi
+
+for file in $delete_files
+do
+  stmt="$stmt
+archive: $file"
+done
+
+for file in $delete_symlinks
+do
+  stmt="$stmt
+rmsymlink: $file"
+done
+
+if test -n "$stmt"; then
+  for dest in $to
+  do
+    destdir=`echo $dest | sed 's/[^:]*://'`
+    upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
+  done
+fi
+
+# Process actual uploads
+for dest in $to
+do
+  for file
+  do
+    echo "Uploading $file to $dest..."
+    stmt=
+    files="$file $file.sig"
+    destdir=`echo $dest | sed 's/[^:]*://'`
+    if test -n "$symlink_expr"; then
+      linkname=`echo $file | sed "$symlink_expr"`
+      stmt="$stmt
+symlink: $file $linkname
+symlink: $file.sig $linkname.sig"
+    fi
+    upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
+  done
+done
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free
new file mode 100755
index 0000000..793c975
--- /dev/null
+++ b/build-aux/useless-if-before-free
@@ -0,0 +1,209 @@
+eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}'
+  & eval 'exec perl -wST "$0" $argv:q'
+    if 0;
+# Detect instances of "if (p) free (p);".
+# Likewise for "if (p != NULL) free (p);".  And with braces.
+# Also detect "if (NULL != p) free (p);".
+# And with 0 in place of NULL.
+
+my $VERSION = '2009-04-16 15:57'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try `$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] FILE...
+
+Detect any instance in FILE of a useless "if" test before a free call, e.g.,
+"if (p) free (p);".  Any such test may be safely removed without affecting
+the semantics of the C code in FILE.  Use --name=FOO --name=BAR to also
+detect free-like functions named FOO and BAR.
+
+OPTIONS:
+
+   --list       print only the name of each matching FILE (\0-terminated)
+   --name=N     add name N to the list of \`free\'-like functions to detect;
+                  may be repeated
+
+   --help       display this help and exit
+   --version    output version information and exit
+
+Exit status:
+
+  0   one or more matches
+  1   no match
+  2   an error
+
+EXAMPLE:
+
+For example, this command prints all removable "if" tests before "free"
+and "kfree" calls in the linux kernel sources:
+
+    git ls-files -z |xargs -0 $ME --name=kfree
+
+EOF
+    }
+  exit $exit_code;
+}
+
+sub is_NULL ($)
+{
+  my ($expr) = @_;
+  return ($expr eq 'NULL' || $expr eq '0');
+}
+
+{
+  sub EXIT_MATCH {0}
+  sub EXIT_NO_MATCH {1}
+  sub EXIT_ERROR {2}
+  my $err = EXIT_NO_MATCH;
+
+  my $list;
+  my @name = qw(free);
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     list => \$list,
+     'name=s@' => address@hidden,
+    ) or usage 1;
+
+  # Make sure we have the right number of non-option arguments.
+  # Always tell the user why we fail.
+  @ARGV < 1
+    and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
+
+  my $or = join '|', @name;
+  my $regexp = qr/(?:$or)/;
+
+  # Set the input record separator.
+  # Note: this makes it impractical to print line numbers.
+  $/ = '"';
+
+  my $found_match = 0;
+ FILE:
+  foreach my $file (@ARGV)
+    {
+      open FH, '<', $file
+        or (warn "$ME: can't open `$file' for reading: $!\n"),
+          $err = EXIT_ERROR, next;
+      while (defined (my $line = <FH>))
+        {
+          while ($line =~
+              /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
+              #  1          2                  3
+               (?:   \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)|
+                
\s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
+            {
+              my $all = $1;
+              my ($lhs, $rhs) = ($2, $3);
+              my ($free_opnd, $braced_free_opnd) = ($4, $5);
+              my $non_NULL;
+              if (!defined $rhs) { $non_NULL = $lhs }
+              elsif (is_NULL $rhs) { $non_NULL = $lhs }
+              elsif (is_NULL $lhs) { $non_NULL = $rhs }
+              else { next }
+
+              # Compare the non-NULL part of the "if" expression and the
+              # free'd expression, without regard to white space.
+              $non_NULL =~ tr/ \t//d;
+              my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
+              $e2 =~ tr/ \t//d;
+              if ($non_NULL eq $e2)
+                {
+                  $found_match = 1;
+                  $list
+                    and (print "$file\0"), next FILE;
+                  print "$file: $all\n";
+                }
+            }
+        }
+    }
+  continue
+    {
+      close FH;
+    }
+
+  $found_match && $err == EXIT_NO_MATCH
+    and $err = EXIT_MATCH;
+
+  exit $err;
+}
+
+my $foo = <<'EOF';
+# The above is to *find* them.
+# This adjusts them, removing the unnecessary "if (p)" part.
+
+# FIXME: do something like this as an option (doesn't do braces):
+free=xfree
+git grep -l -z "$free *(" \
+  | xargs -0 useless-if-before-free -l --name="$free" \
+  | xargs -0 perl -0x3b -pi -e \
+   
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\))/$2/s'
+
+# Use the following to remove redundant uses of kfree inside braces.
+# Note that -0777 puts perl in slurp-whole-file mode;
+# but we have plenty of memory, these days...
+free=kfree
+git grep -l -z "$free *(" \
+  | xargs -0 useless-if-before-free -l --name="$free" \
+  | xargs -0 perl -0777 -pi -e \
+     
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
+
+Be careful that the result of the above transformation is valid.
+If the matched string is followed by "else", then obviously, it won't be.
+
+When modifying files, refuse to process anything other than a regular file.
+EOF
+
+## Local Variables:
+## mode: perl
+## indent-tabs-mode: nil
+## eval: (add-hook 'write-file-hooks 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files
new file mode 100755
index 0000000..cc716e9
--- /dev/null
+++ b/build-aux/vc-list-files
@@ -0,0 +1,116 @@
+#!/bin/sh
+# List version-controlled file names.
+
+# Print a version string.
+scriptversion=2009-07-21.16; # UTC
+
+# Copyright (C) 2006-2009 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# List the specified version-controlled files.
+# With no argument, list them all.  With a single DIRECTORY argument,
+# list the version-controlled files in that directory.
+
+# If there's an argument, it must be a single, "."-relative directory name.
+# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
+
+postprocess=
+case $1 in
+  --help) cat <<EOF
+Usage: $0 [-C SRCDIR] [DIR]
+
+Output a list of version-controlled files in DIR (default .), relative to
+SRCDIR (default .).  SRCDIR must be the top directory of a checkout.
+
+Options:
+  --help     print this help, then exit
+  --version  print version number, then exit
+  -C SRCDIR  change directory to SRCDIR before generating list
+
+Report bugs and patches to <address@hidden>.
+EOF
+    exit ;;
+
+  --version)
+    year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
+    cat <<EOF
+vc-list-files $scriptversion
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+    exit ;;
+
+  -C)
+    test "$2" = . || postprocess="| sed 's|^|$2/|'"
+    cd "$2" || exit 1
+    shift; shift ;;
+esac
+
+dir=
+case $# in
+  0) ;;
+  1) dir=$1 ;;
+  *) echo "$0: too many arguments" 1>&2
+     echo "Usage: $0 [-C srcdir] [DIR]" 1>&2; exit 1;;
+esac
+
+test "x$dir" = x && dir=.
+
+if test -d .git; then
+  test "x$dir" = x. \
+    && dir= sed_esc= \
+    || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
+  # Ignore git symlinks - either they point into the tree, in which case
+  # we don't need to visit the target twice, or they point somewhere
+  # else (often into a submodule), in which case the content does not
+  # belong to this package.
+  eval exec git ls-tree -r 'HEAD:"$dir"' \
+    \| sed -n '"s/^100[^       ]*./$sed_esc/p"' $postprocess
+elif test -d .hg; then
+  eval exec hg locate '"$dir/*"' $postprocess
+elif test -d .bzr; then
+  test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+  eval exec bzr ls --versioned '"$dir"' $postprocess
+elif test -d CVS; then
+  test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+  if test -x build-aux/cvsu; then
+    eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
+  elif (cvsu --help) >/dev/null 2>&1; then
+    eval cvsu --find --types=AFGM '"$dir"' $postprocess
+  else
+    eval awk -F/ \''{                  \
+       if (!$1 && $3 !~ /^-/) {        \
+         f=FILENAME;                   \
+         if (f ~ /CVS\/Entries$/)      \
+           f = substr(f, 1, length(f)-11); \
+         print f $2;                   \
+       }}'\''                          \
+      `find "$dir" -name Entries -print` /dev/null' $postprocess
+  fi
+else
+  echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
+  exit 1
+fi
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure.ac b/configure.ac
index 2f0ef02..476a73c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,7 +96,7 @@ AC_DEFINE_UNQUOTED([HOST_TYPE], ["$host"],
 #
 #--------------------------------------------------------------------
 
-GUILE_ERROR_ON_WARNING="yes"
+GUILE_ERROR_ON_WARNING="no"
 
 AC_ARG_ENABLE(error-on-warning,
   [  --enable-error-on-warning    treat compile warnings as errors],
@@ -1436,6 +1436,7 @@ AC_ARG_VAR(GUILE_FOR_BUILD,[guile for build system])
 AC_SUBST(GUILE_FOR_BUILD)
                        
 ## If we're using GCC, ask for aggressive warnings.
+GCC_CFLAGS=""
 case "$GCC" in
   yes )
     ## We had -Wstrict-prototypes in here for a bit, but Guile does too
@@ -1443,14 +1444,21 @@ case "$GCC" in
     ## less than exasperating.
     ## -Wpointer-arith was here too, but something changed in gcc/glibc
     ## and it became equally exasperating (gcc 2.95 and/or glibc 2.1.2).
-    GCC_CFLAGS="-Wall -Wmissing-prototypes"
+    POTENTIAL_GCC_CFLAGS="-Wall -Wmissing-prototypes \
+      -Wdeclaration-after-statement -Wundef \
+      -Wswitch-enum"
     # Do this here so we don't screw up any of the tests above that might
     # not be "warning free"
     if test "${GUILE_ERROR_ON_WARNING}" = yes
     then
-       GCC_CFLAGS="${GCC_CFLAGS} -Werror"
+       POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS} -Werror"
        enable_compile_warnings=no
     fi
+
+    for flag in $POTENTIAL_GCC_CFLAGS
+    do
+       gl_WARN_ADD([$flag], [GCC_CFLAGS])
+    done
     ;;
 esac
 
diff --git a/doc/gendocs_template b/doc/gendocs_template
new file mode 100644
index 0000000..ee6a5c5
--- /dev/null
+++ b/doc/gendocs_template
@@ -0,0 +1,96 @@
+<!--#include virtual="/server/header.html" -->
+<title>%%TITLE%% - GNU Project - Free Software Foundation (FSF)</title>
+<!--#include virtual="/server/banner.html" -->
+<h2>%%TITLE%%</h2>
+
+<!-- This document is in XML, and xhtml 1.0 -->
+<!-- Please make sure to properly nest your tags -->
+<!-- and ensure that your final document validates -->
+<!-- consistent with W3C xhtml 1.0 and CSS standards -->
+<!-- See validator.w3.org -->
+
+<address>Free Software Foundation</address>
+<address>last updated %%DATE%%</address>
+
+<p>This manual (%%PACKAGE%%) is available in the following formats:</p>
+
+<ul>
+<li><a href="%%PACKAGE%%.html">HTML
+    (%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li>
+<li><a href="html_node/index.html">HTML</a> - with one web page per
+    node.</li>
+%%IF HTML_SECTION%%
+<li><a href="html_section/index.html">HTML</a> - with one web page per
+    section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="html_chapter/index.html">HTML</a> - with one web page per
+    chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html.gz">HTML compressed
+    (%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on
+    one web page.</li>
+<li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed
+    (%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> -
+    with one web page per node.</li>
+%%IF HTML_SECTION%%
+<li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed
+    (%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> -
+    with one web page per section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed
+    (%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> -
+    with one web page per chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.info.tar.gz">Info document
+    (%%INFO_TGZ_SIZE%%K bytes gzipped tar file)</a>.</li>
+<li><a href="%%PACKAGE%%.txt">ASCII text
+    (%%ASCII_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
+    (%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
+    (%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.ps.gz">PostScript file
+    (%%PS_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.pdf">PDF file
+    (%%PDF_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
+    (%%TEXI_TGZ_SIZE%%K bytes gzipped tar file).</a></li>
+</ul>
+
+<p>You can <a href="http://shop.fsf.org/";>buy printed copies of
+some manuals</a> (among other items) from the Free Software Foundation;
+this helps support FSF activities.</p>
+
+<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%%
+script</a>.)</p>
+
+<!-- If needed, change the copyright block at the bottom. In general, -->
+<!-- all pages on the GNU web server should have the section about    -->
+<!-- verbatim copying.  Please do NOT remove this without talking     -->
+<!-- with the webmasters first. -->
+<!-- Please make sure the copyright date is consistent with the document -->
+<!-- and that it is like this "2001, 2002" not this "2001-2002." -->
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+
+<p>
+Please send FSF &amp; GNU inquiries to
+<a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF.<br />
+Please send broken links and other corrections or suggestions to
+<a href="mailto:%%EMAIL%%";>&lt;%%EMAIL%%&gt;</a>.
+</p>
+
+<p>Copyright &copy; 2009 Free Software Foundation, Inc.</p>
+
+<p>Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.</p>
+
+</div>
+</div>
+</body>
+</html>
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 5ec4cb4..14a6613 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -9,7 +9,7 @@
 # the same distribution terms as the rest of that program.
 #
 # Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl 
--libtool --macro-prefix=gl --no-vc-files alignof alloca-opt autobuild byteswap 
canonicalize-lgpl environ extensions flock fpieee full-read full-write havelib 
iconv_open-utf inet_ntop inet_pton lib-symbol-versions lib-symbol-visibility 
libunistring putenv stdlib strcase strftime striconveh string verify vsnprintf
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib 
--m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl=3 
--libtool --macro-prefix=gl --no-vc-files alignof alloca-opt announce-gen 
autobuild byteswap canonicalize-lgpl environ extensions flock fpieee full-read 
full-write gendocs gitlog-to-changelog gnu-web-doc-update gnupload havelib 
iconv_open-utf inet_ntop inet_pton lib-symbol-versions lib-symbol-visibility 
libunistring maintainer-makefile putenv stdlib strcase strftime striconveh 
string verify version-etc-fsf vsnprintf warnings
 
 AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
 
@@ -62,6 +62,13 @@ EXTRA_DIST += alloca.in.h
 
 ## end   gnulib module alloca-opt
 
+## begin gnulib module announce-gen
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/announce-gen
+
+## end   gnulib module announce-gen
+
 ## begin gnulib module arpa_inet
 
 BUILT_SOURCES += $(ARPA_INET_H)
@@ -267,14 +274,49 @@ libgnu_la_SOURCES += full-write.h full-write.c
 
 ## end   gnulib module full-write
 
-## begin gnulib module getpagesize
+## begin gnulib module gendocs
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh
+
+## end   gnulib module gendocs
+
+## begin gnulib module gettext-h
+
+libgnu_la_SOURCES += gettext.h
+
+## end   gnulib module gettext-h
+
+## begin gnulib module gitlog-to-changelog
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gitlog-to-changelog
 
+## end   gnulib module gitlog-to-changelog
 
-EXTRA_DIST += getpagesize.c
+## begin gnulib module gnu-web-doc-update
 
-EXTRA_libgnu_la_SOURCES += getpagesize.c
 
-## end   gnulib module getpagesize
+EXTRA_DIST += $(top_srcdir)/build-aux/gnu-web-doc-update
+
+## end   gnulib module gnu-web-doc-update
+
+## begin gnulib module gnumakefile
+
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+       test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || :
+
+EXTRA_DIST += $(top_srcdir)/GNUmakefile
+
+## end   gnulib module gnumakefile
+
+## begin gnulib module gnupload
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gnupload
+
+## end   gnulib module gnupload
 
 ## begin gnulib module gperf
 
@@ -464,6 +506,12 @@ EXTRA_libgnu_la_SOURCES += lstat.c
 
 ## end   gnulib module lstat
 
+## begin gnulib module maintainer-makefile
+
+EXTRA_DIST += $(top_srcdir)/maint.mk
+
+## end   gnulib module maintainer-makefile
+
 ## begin gnulib module malloc-posix
 
 
@@ -599,6 +647,27 @@ EXTRA_libgnu_la_SOURCES += stat.c
 
 ## end   gnulib module stat
 
+## begin gnulib module stdarg
+
+BUILT_SOURCES += $(STDARG_H)
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+stdarg.h: stdarg.in.h
+       $(AM_V_GEN)rm -f address@hidden $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+             < $(srcdir)/stdarg.in.h; \
+       } > address@hidden && \
+       mv address@hidden $@
+MOSTLYCLEANFILES += stdarg.h stdarg.h-t
+
+EXTRA_DIST += stdarg.in.h
+
+## end   gnulib module stdarg
+
 ## begin gnulib module stdbool
 
 BUILT_SOURCES += $(STDBOOL_H)
@@ -804,7 +873,9 @@ stdlib.h: stdlib.in.h
              -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
              -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
              -e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMPS''@|$(GNULIB_MKOSTEMPS)|g' \
              -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+             -e 's|@''GNULIB_MKSTEMPS''@|$(GNULIB_MKSTEMPS)|g' \
              -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
              -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
              -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
@@ -823,6 +894,8 @@ stdlib.h: stdlib.in.h
              -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
              -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
              -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+             -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
              -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
              -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
              -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
@@ -839,8 +912,9 @@ stdlib.h: stdlib.in.h
              -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
              -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
              -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+             -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
              -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
-             -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
+             -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
              < $(srcdir)/stdlib.in.h; \
        } > address@hidden && \
@@ -1084,7 +1158,9 @@ sys/stat.h: sys_stat.in.h
              -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
              -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
              -e 's|@''GNULIB_MKDIRAT''@|$(GNULIB_MKDIRAT)|g' \
+             -e 's|@''GNULIB_MKFIFO''@|$(GNULIB_MKFIFO)|g' \
              -e 's|@''GNULIB_MKFIFOAT''@|$(GNULIB_MKFIFOAT)|g' \
+             -e 's|@''GNULIB_MKNOD''@|$(GNULIB_MKNOD)|g' \
              -e 's|@''GNULIB_MKNODAT''@|$(GNULIB_MKNODAT)|g' \
              -e 's|@''GNULIB_STAT''@|$(GNULIB_STAT)|g' \
              -e 's|@''GNULIB_UTIMENSAT''@|$(GNULIB_UTIMENSAT)|g' \
@@ -1094,7 +1170,9 @@ sys/stat.h: sys_stat.in.h
              -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
              -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
              -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+             -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
              -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+             -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
              -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
              -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
              -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
@@ -1102,6 +1180,8 @@ sys/stat.h: sys_stat.in.h
              -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
              -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
              -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+             -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+             -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
              -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
              -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
@@ -1179,6 +1259,7 @@ unistd.h: unistd.in.h
              -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
              -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
              -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
+             -e 's|@''GNULIB_GETGROUPS''@|$(GNULIB_GETGROUPS)|g' \
              -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
              -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
              -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
@@ -1199,6 +1280,7 @@ unistd.h: unistd.in.h
              -e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
              -e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
              -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
+             -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
              -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
              -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
              -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
@@ -1208,9 +1290,11 @@ unistd.h: unistd.in.h
              -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
              -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
              -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+             -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
              -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
              -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
              -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
+             -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
              -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
              -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
              -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
@@ -1231,6 +1315,7 @@ unistd.h: unistd.in.h
              -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
              -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
              -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+             -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
              -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
              -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
              -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
@@ -1298,6 +1383,13 @@ EXTRA_DIST += unitypes.h
 
 ## end   gnulib module unitypes
 
+## begin gnulib module useless-if-before-free
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free
+
+## end   gnulib module useless-if-before-free
+
 ## begin gnulib module vasnprintf
 
 
@@ -1307,12 +1399,31 @@ EXTRA_libgnu_la_SOURCES += asnprintf.c printf-args.c 
printf-parse.c vasnprintf.c
 
 ## end   gnulib module vasnprintf
 
+## begin gnulib module vc-list-files
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files
+
+## end   gnulib module vc-list-files
+
 ## begin gnulib module verify
 
 libgnu_la_SOURCES += verify.h
 
 ## end   gnulib module verify
 
+## begin gnulib module version-etc
+
+libgnu_la_SOURCES += version-etc.h version-etc.c
+
+## end   gnulib module version-etc
+
+## begin gnulib module version-etc-fsf
+
+libgnu_la_SOURCES += version-etc-fsf.c
+
+## end   gnulib module version-etc-fsf
+
 ## begin gnulib module vsnprintf
 
 
diff --git a/lib/getpagesize.c b/lib/getpagesize.c
deleted file mode 100644
index 82238df..0000000
--- a/lib/getpagesize.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* getpagesize emulation for systems where it cannot be done in a C macro.
-
-   Copyright (C) 2007 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU Lesser General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program 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 Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible and Martin Lambers.  */
-
-#include <config.h>
-
-/* Specification. */
-#include <unistd.h>
-
-/* This implementation is only for native Win32 systems.  */
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-
-int
-getpagesize (void)
-{
-  SYSTEM_INFO system_info;
-  GetSystemInfo (&system_info);
-  return system_info.dwPageSize;
-}
-
-#endif
diff --git a/lib/gettext.h b/lib/gettext.h
new file mode 100644
index 0000000..72c8727
--- /dev/null
+++ b/lib/gettext.h
@@ -0,0 +1,279 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009 Free Software 
Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License 
along
+   with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+   the gettext() and ngettext() macros.  This is an alternative to calling
+   textdomain(), and is useful for libraries.  */
+# ifdef DEFAULT_TEXT_DOMAIN
+#  undef gettext
+#  define gettext(Msgid) \
+     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+#  undef ngettext
+#  define ngettext(Msgid1, Msgid2, N) \
+     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+   <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
+   it now, to make later inclusions of <libintl.h> a NOP.  */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+#  include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# undef gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+    ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 \
+     ? ((void) (Msgid2), (const char *) (Msgid1)) \
+     : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
+# undef textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+    ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+    ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file.  */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
+   short and rarely need to change.
+   The letter 'p' stands for 'particular' or 'special'.  */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, 
Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, 
LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, 
Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, 
Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, 
MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, 
MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, 
MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+             const char *msg_ctxt_id, const char *msgid,
+             int category)
+{
+  const char *translation = dcgettext (domain, msg_ctxt_id, category);
+  if (translation == msg_ctxt_id)
+    return msgid;
+  else
+    return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+              const char *msg_ctxt_id, const char *msgid,
+              const char *msgid_plural, unsigned long int n,
+              int category)
+{
+  const char *translation =
+    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+  if (translation == msg_ctxt_id || translation == msgid_plural)
+    return (n == 1 ? msgid : msgid_plural);
+  else
+    return translation;
+}
+
+/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
+   can be arbitrary expressions.  But for string literals these macros are
+   less efficient than those above.  */
+
+#include <string.h>
+
+#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
+   /* || __STDC_VERSION__ >= 199901L */ )
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+                const char *msgctxt, const char *msgid,
+                int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+       free (msg_ctxt_id);
+#endif
+      if (translation != msg_ctxt_id)
+       return translation;
+    }
+  return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+                 const char *msgctxt, const char *msgid,
+                 const char *msgid_plural, unsigned long int n,
+                 int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, 
category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+       free (msg_ctxt_id);
+#endif
+      if (!(translation == msg_ctxt_id || translation == msgid_plural))
+       return translation;
+    }
+  return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/lib/printf-args.c b/lib/printf-args.c
index c31d204..75af607 100644
--- a/lib/printf-args.c
+++ b/lib/printf-args.c
@@ -1,5 +1,6 @@
 /* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002-2003, 2005-2007, 2009 Free Software
+   Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -89,7 +90,7 @@ PRINTF_FETCHARGS (va_list args, arguments *a)
           where wint_t is 'unsigned short'.  */
        ap->a.a_wide_char =
          (sizeof (wint_t) < sizeof (int)
-          ? va_arg (args, int)
+          ? (wint_t) va_arg (args, int)
           : va_arg (args, wint_t));
        break;
 #endif
diff --git a/lib/netinet_in.in.h b/lib/stdarg.in.h
similarity index 61%
copy from lib/netinet_in.in.h
copy to lib/stdarg.in.h
index 8c94f6a..873e6c0 100644
--- a/lib/netinet_in.in.h
+++ b/lib/stdarg.in.h
@@ -1,5 +1,5 @@
-/* Substitute for <netinet/in.h>.
-   Copyright (C) 2007-2008 Free Software Foundation, Inc.
+/* Substitute for and wrapper around <stdarg.h>.
+   Copyright (C) 2008 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -15,33 +15,21 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#ifndef _GL_NETINET_IN_H
+#ifndef _GL_STDARG_H
 
-#if @HAVE_NETINET_IN_H@
-
-# if __GNUC__ >= 3
+#if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
-# endif
-
-/* On many platforms, <netinet/in.h> assumes prior inclusion of
-   <sys/types.h>.  */
-# include <sys/types.h>
-
-/* The include_next requires a split double-inclusion guard.  */
-# @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@
-
 #endif
 
-#ifndef _GL_NETINET_IN_H
-#define _GL_NETINET_IN_H
-
-#if address@hidden@
-
-/* A platform that lacks <netinet/in.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
address@hidden@ @NEXT_STDARG_H@
 
-# include <sys/socket.h>
+#ifndef _GL_STDARG_H
+#define _GL_STDARG_H
 
+#ifndef va_copy
+# define va_copy(a,b) ((a) = (b))
 #endif
 
-#endif /* _GL_NETINET_IN_H */
-#endif /* _GL_NETINET_IN_H */
+#endif /* _GL_STDARG_H */
+#endif /* _GL_STDARG_H */
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index 1ab4c58..61076cb 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -224,6 +224,31 @@ extern int mkostemp (char * /*template*/, int /*flags*/);
      mkostemp (t, f))
 #endif
 
+#if @GNULIB_MKOSTEMPS@
+# if address@hidden@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE before a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+extern int mkostemps (char * /*template*/, int /*suffixlen*/, int /*flags*/);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# define mkostemps(t,s,f)                          \
+    (GL_LINK_WARNING ("mkostemps is unportable - " \
+                      "use gnulib module mkostemps for portability"), \
+     mkostemps (t, s, f))
+#endif
+
 #if @GNULIB_MKSTEMP@
 # if @REPLACE_MKSTEMP@
 /* Create a unique temporary file from TEMPLATE.
@@ -249,6 +274,28 @@ extern int mkstemp (char * /*template*/);
      mkstemp (t))
 #endif
 
+#if @GNULIB_MKSTEMPS@
+# if address@hidden@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE prior to a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+extern int mkstemps (char * /*template*/, int /*suffixlen*/);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# define mkstemps(t,s)                             \
+    (GL_LINK_WARNING ("mkstemps is unportable - " \
+                      "use gnulib module mkstemps for portability"), \
+     mkstemps (t, s))
+#endif
+
 #if @GNULIB_PUTENV@
 # if @REPLACE_PUTENV@
 #  undef putenv
@@ -337,11 +384,21 @@ extern int rpmatch (const char *response);
 #endif
 
 #if @GNULIB_SETENV@
-# if address@hidden@
+# if @REPLACE_SETENV@
+#  undef setenv
+#  define setenv rpl_setenv
+# endif
+# if address@hidden@ || @REPLACE_SETENV@
 /* Set NAME to VALUE in the environment.
    If REPLACE is nonzero, overwrite an existing value.  */
 extern int setenv (const char *name, const char *value, int replace);
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# define setenv(n,v,o)                                                  \
+    (GL_LINK_WARNING ("setenv is unportable - "                         \
+                      "use gnulib module setenv for portability"),      \
+     setenv (n, v, o))
 #endif
 
 #if @GNULIB_STRTOD@
@@ -401,16 +458,20 @@ extern unsigned long long strtoull (const char *string, 
char **endptr, int base)
 #endif
 
 #if @GNULIB_UNSETENV@
-# if @HAVE_UNSETENV@
-#  if @VOID_UNSETENV@
-/* On some systems, unsetenv() returns void.
-   This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4.  */
-#   define unsetenv(name) ((unsetenv)(name), 0)
-#  endif
-# else
+# if @REPLACE_UNSETENV@
+#  undef unsetenv
+#  define unsetenv rpl_unsetenv
+# endif
+# if address@hidden@ || @REPLACE_UNSETENV@
 /* Remove the variable NAME from the environment.  */
 extern int unsetenv (const char *name);
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# define unsetenv(n)                                                    \
+    (GL_LINK_WARNING ("unsetenv is unportable - "                       \
+                      "use gnulib module unsetenv for portability"),    \
+     unsetenv (n))
 #endif
 
 #ifdef __cplusplus
diff --git a/lib/strftime.c b/lib/strftime.c
index 8e7f445..ffccfd8 100644
--- a/lib/strftime.c
+++ b/lib/strftime.c
@@ -27,11 +27,11 @@
 #else
 # include <config.h>
 # if FPRINTFTIME
+#  include "ignore-value.h"
 #  include "fprintftime.h"
 # else
 #  include "strftime.h"
 # endif
-# include "ignore-value.h"
 #endif
 
 #include <ctype.h>
diff --git a/lib/strftime.h b/lib/strftime.h
index fded6d0..27e11af 100644
--- a/lib/strftime.h
+++ b/lib/strftime.h
@@ -17,6 +17,10 @@
 
 #include <time.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Just like strftime, but with two more arguments:
    POSIX requires that strftime use the local timezone information.
    When __UTC is nonzero and tm->tm_zone is NULL or the empty string,
@@ -24,3 +28,7 @@
    %N directive.  */
 size_t nstrftime (char *, size_t, char const *, struct tm const *,
                  int __utc, int __ns);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
index 5dc6428..d178f6e 100644
--- a/lib/sys_stat.in.h
+++ b/lib/sys_stat.in.h
@@ -424,6 +424,23 @@ extern int mkdirat (int fd, char const *file, mode_t mode);
 #endif
 
 
+#if @GNULIB_MKFIFO@
+# if @REPLACE_MKFIFO@
+#  undef mkfifo
+#  define mkfifo rpl_mkfifo
+# endif
+# if address@hidden@ || @REPLACE_MKFIFO@
+int mkfifo (char const *file, mode_t mode);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifo
+# define mkfifo(n,m)                                                    \
+    (GL_LINK_WARNING ("mkfifo is not portable - "                       \
+                      "use gnulib module mkfifo for portability"),      \
+     mkfifo (n, m))
+#endif
+
+
 #if @GNULIB_MKFIFOAT@
 # if address@hidden@
 int mkfifoat (int fd, char const *file, mode_t mode);
@@ -437,6 +454,23 @@ int mkfifoat (int fd, char const *file, mode_t mode);
 #endif
 
 
+#if @GNULIB_MKNOD@
+# if @REPLACE_MKNOD@
+#  undef mknod
+#  define mknod rpl_mknod
+# endif
+# if address@hidden@ || @REPLACE_MKNOD@
+int mknod (char const *file, mode_t mode, dev_t dev);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mknod
+# define mknod(n,m,d)                                                   \
+    (GL_LINK_WARNING ("mknod is not portable - "                        \
+                      "use gnulib module mknod for portability"),       \
+     mknod (n, m, d))
+#endif
+
+
 #if @GNULIB_MKNODAT@
 # if address@hidden@
 int mknodat (int fd, char const *file, mode_t mode, dev_t dev);
@@ -456,7 +490,15 @@ int mknodat (int fd, char const *file, mode_t mode, dev_t 
dev);
    struct stat.  This means that rpl_stat will not be used if the user
    does (stat)(a,b).  Oh well.  */
 #  undef stat
-#  define stat(name, st) rpl_stat (name, st)
+#  ifdef _LARGE_FILES
+    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
+       so we have to replace stat64() instead of stat(). */
+#   define stat stat64
+#   undef stat64
+#   define stat64(name, st) rpl_stat (name, st)
+#  else /* !_LARGE_FILES */
+#   define stat(name, st) rpl_stat (name, st)
+#  endif /* !_LARGE_FILES */
 extern int stat (const char *name, struct stat *buf);
 # endif
 #elif defined GNULIB_POSIXCHECK
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index dc6bb7a..01b81c8 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -126,18 +126,16 @@ extern "C" {
 
 #if @GNULIB_CHOWN@
 # if @REPLACE_CHOWN@
-#  ifndef REPLACE_CHOWN
-#   define REPLACE_CHOWN 1
-#  endif
-#  if REPLACE_CHOWN
+#  undef chown
+#  define chown rpl_chown
+# endif
+# if address@hidden@ || @REPLACE_CHOWN@
 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
    to GID (if GID is not -1).  Follow symbolic links.
    Return 0 if successful, otherwise -1 and errno set.
    See the POSIX:2001 specification
    <http://www.opengroup.org/susv3xsh/chown.html>.  */
-#   define chown rpl_chown
 extern int chown (const char *file, uid_t uid, gid_t gid);
-#  endif
 # endif
 #elif defined GNULIB_POSIXCHECK
 # undef chown
@@ -406,6 +404,28 @@ extern int getdtablesize (void);
 #endif
 
 
+#if @GNULIB_GETGROUPS@
+# if @REPLACE_GETGROUPS@
+#  undef getgroups
+#  define getgroups rpl_getgroups
+# endif
+# if address@hidden@ || @REPLACE_GETGROUPS@
+/* Return the supplemental groups that the current process belongs to.
+   It is unspecified whether the effective group id is in the list.
+   If N is 0, return the group count; otherwise, N describes how many
+   entries are available in GROUPS.  Return -1 and set errno if N is
+   not 0 and not large enough.  Fails with ENOSYS on some systems.  */
+int getgroups (int n, gid_t *groups);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# define getgroups(n,g)                                                 \
+    (GL_LINK_WARNING ("getgroups is unportable - "                      \
+                      "use gnulib module getgroups for portability"),   \
+     getgroups (n, g))
+#endif
+
+
 #if @GNULIB_GETHOSTNAME@
 /* Return the standard host name of the machine.
    WARNING! The host name may or may not be fully qualified.
@@ -545,12 +565,15 @@ extern void endusershell (void);
 
 #if @GNULIB_LCHOWN@
 # if @REPLACE_LCHOWN@
+#  undef lchown
+#  define lchown rpl_lchown
+# endif
+# if address@hidden@ || @REPLACE_LCHOWN@
 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
    to GID (if GID is not -1).  Do not follow symbolic links.
    Return 0 if successful, otherwise -1 and errno set.
    See the POSIX:2001 specification
    <http://www.opengroup.org/susv3xsh/lchown.html>.  */
-#  define lchown rpl_lchown
 extern int lchown (char const *file, uid_t owner, gid_t group);
 # endif
 #elif defined GNULIB_POSIXCHECK
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
index da43901..6495c7c 100644
--- a/lib/vasnprintf.c
+++ b/lib/vasnprintf.c
@@ -2375,16 +2375,16 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
                      characters = 0;
                      while (precision > 0)
                        {
-                         char buf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                         char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
                          int count;
 
                          if (*arg_end == 0)
                            /* Found the terminating null wide character.  */
                            break;
 #  if HAVE_WCRTOMB
-                         count = wcrtomb (buf, *arg_end, &state);
+                         count = wcrtomb (cbuf, *arg_end, &state);
 #  else
-                         count = wctomb (buf, *arg_end);
+                         count = wctomb (cbuf, *arg_end);
 #  endif
                          if (count < 0)
                            {
@@ -2420,16 +2420,16 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
                      characters = 0;
                      for (;;)
                        {
-                         char buf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                         char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
                          int count;
 
                          if (*arg_end == 0)
                            /* Found the terminating null wide character.  */
                            break;
 #  if HAVE_WCRTOMB
-                         count = wcrtomb (buf, *arg_end, &state);
+                         count = wcrtomb (cbuf, *arg_end, &state);
 #  else
-                         count = wctomb (buf, *arg_end);
+                         count = wctomb (cbuf, *arg_end);
 #  endif
                          if (count < 0)
                            {
@@ -2470,20 +2470,20 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
 #   endif
                    for (remaining = characters; remaining > 0; )
                      {
-                       char buf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                       char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
                        int count;
 
                        if (*arg == 0)
                          abort ();
 #   if HAVE_WCRTOMB
-                       count = wcrtomb (buf, *arg, &state);
+                       count = wcrtomb (cbuf, *arg, &state);
 #   else
-                       count = wctomb (buf, *arg);
+                       count = wctomb (cbuf, *arg);
 #   endif
                        if (count <= 0)
                          /* Inconsistency.  */
                          abort ();
-                       memcpy (tmpptr, buf, count);
+                       memcpy (tmpptr, cbuf, count);
                        tmpptr += count;
                        arg++;
                        remaining -= count;
@@ -2552,20 +2552,20 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
                      ENSURE_ALLOCATION (xsum (length, characters));
                      for (remaining = characters; remaining > 0; )
                        {
-                         char buf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                         char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
                          int count;
 
                          if (*arg == 0)
                            abort ();
 #   if HAVE_WCRTOMB
-                         count = wcrtomb (buf, *arg, &state);
+                         count = wcrtomb (cbuf, *arg, &state);
 #   else
-                         count = wctomb (buf, *arg);
+                         count = wctomb (cbuf, *arg);
 #   endif
                          if (count <= 0)
                            /* Inconsistency.  */
                            abort ();
-                         memcpy (result + length, buf, count);
+                         memcpy (result + length, cbuf, count);
                          length += count;
                          arg++;
                          remaining -= count;
@@ -2581,21 +2581,21 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
 #   endif
                      while (arg < arg_end)
                        {
-                         char buf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                         char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
                          int count;
 
                          if (*arg == 0)
                            abort ();
 #   if HAVE_WCRTOMB
-                         count = wcrtomb (buf, *arg, &state);
+                         count = wcrtomb (cbuf, *arg, &state);
 #   else
-                         count = wctomb (buf, *arg);
+                         count = wctomb (cbuf, *arg);
 #   endif
                          if (count <= 0)
                            /* Inconsistency.  */
                            abort ();
                          ENSURE_ALLOCATION (xsum (length, count));
-                         memcpy (result + length, buf, count);
+                         memcpy (result + length, cbuf, count);
                          length += count;
                          arg++;
                        }
diff --git a/lib/mbrlen.c b/lib/version-etc-fsf.c
similarity index 61%
copy from lib/mbrlen.c
copy to lib/version-etc-fsf.c
index 94c66d6..efbb37e 100644
--- a/lib/mbrlen.c
+++ b/lib/version-etc-fsf.c
@@ -1,6 +1,5 @@
-/* Recognize multibyte character.
-   Copyright (C) 1999-2000, 2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <address@hidden>, 2008.
+/* Variable with FSF copyright information, for version-etc.
+   Copyright (C) 1999-2006 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
@@ -15,18 +14,17 @@
    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+/* Written by Jim Meyering. */
+
 #include <config.h>
 
 /* Specification.  */
-#include <wchar.h>
-
+#include "version-etc.h"
 
-static mbstate_t internal_state;
+/* Default copyright goes to the FSF. */
 
-size_t
-mbrlen (const char *s, size_t n, mbstate_t *ps)
-{
-  if (ps == NULL)
-    ps = &internal_state;
-  return mbrtowc (NULL, s, n, ps);
-}
+const char version_etc_copyright[] =
+  /* Do *not* mark this string for translation.  %s is a copyright
+     symbol suitable for this locale, and %d is the copyright
+     year.  */
+  "Copyright %s %d Free Software Foundation, Inc.";
diff --git a/lib/version-etc.c b/lib/version-etc.c
new file mode 100644
index 0000000..4f9de48
--- /dev/null
+++ b/lib/version-etc.c
@@ -0,0 +1,252 @@
+/* Print --version and bug-reporting information in a consistent format.
+   Copyright (C) 1999-2009 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification.  */
+#include "version-etc.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+enum { COPYRIGHT_YEAR = 2009 };
+
+/* The three functions below display the --version information the
+   standard way.
+
+   If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The functions differ in the way they are passed author names. */
+
+/* Display the --version information the standard way.
+
+   Author names are given in the array AUTHORS. N_AUTHORS is the
+   number of elements in the array. */
+void
+version_etc_arn (FILE *stream,
+                const char *command_name, const char *package,
+                const char *version,
+                const char * const * authors, size_t n_authors)
+{
+  if (command_name)
+    fprintf (stream, "%s (%s) %s\n", command_name, package, version);
+  else
+    fprintf (stream, "%s %s\n", package, version);
+
+#ifdef PACKAGE_PACKAGER
+# ifdef PACKAGE_PACKAGER_VERSION
+  fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER,
+          PACKAGE_PACKAGER_VERSION);
+# else
+  fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER);
+# endif
+#endif
+
+  /* TRANSLATORS: Translate "(C)" to the copyright symbol
+     (C-in-a-circle), if this symbol is available in the user's
+     locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
+  fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR);
+
+  fputs (_("\
+\n\
+License GPLv3+: GNU GPL version 3 or later 
<http://gnu.org/licenses/gpl.html>.\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n\
+\n\
+"),
+        stream);
+
+  switch (n_authors)
+    {
+    case 0:
+      /* The caller must provide at least one author name.  */
+      abort ();
+    case 1:
+      /* TRANSLATORS: %s denotes an author name.  */
+      fprintf (stream, _("Written by %s.\n"), authors[0]);
+      break;
+    case 2:
+      /* TRANSLATORS: Each %s denotes an author name.  */
+      fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]);
+      break;
+    case 3:
+      /* TRANSLATORS: Each %s denotes an author name.  */
+      fprintf (stream, _("Written by %s, %s, and %s.\n"),
+              authors[0], authors[1], authors[2]);
+      break;
+    case 4:
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"),
+              authors[0], authors[1], authors[2], authors[3]);
+      break;
+    case 5:
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"),
+              authors[0], authors[1], authors[2], authors[3], authors[4]);
+      break;
+    case 6:
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
+              authors[0], authors[1], authors[2], authors[3], authors[4],
+              authors[5]);
+      break;
+    case 7:
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
+              authors[0], authors[1], authors[2], authors[3], authors[4],
+              authors[5], authors[6]);
+      break;
+    case 8:
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5], authors[6], authors[7]);
+      break;
+    case 9:
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
+              authors[0], authors[1], authors[2], authors[3], authors[4],
+              authors[5], authors[6], authors[7], authors[8]);
+      break;
+    default:
+      /* 10 or more authors.  Use an abbreviation, since the human reader
+        will probably not want to read the entire list anyway.  */
+      /* TRANSLATORS: Each %s denotes an author name.
+        You can use line breaks, estimating that each author name occupies
+        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5], authors[6], authors[7], authors[8]);
+      break;
+    }
+}
+
+/* Display the --version information the standard way.  See the initial
+   comment to this module, for more information.
+
+   Author names are given in the NULL-terminated array AUTHORS. */
+void
+version_etc_ar (FILE *stream,
+               const char *command_name, const char *package,
+               const char *version, const char * const * authors)
+{
+  size_t n_authors;
+
+  for (n_authors = 0; authors[n_authors]; n_authors++)
+    ;
+  version_etc_arn (stream, command_name, package, version, authors, n_authors);
+}
+
+/* Display the --version information the standard way.  See the initial
+   comment to this module, for more information.
+
+   Author names are given in the NULL-terminated va_list AUTHORS. */
+void
+version_etc_va (FILE *stream,
+               const char *command_name, const char *package,
+               const char *version, va_list authors)
+{
+  size_t n_authors;
+  const char *authtab[10];
+
+  for (n_authors = 0;
+       n_authors < 10
+        && (authtab[n_authors] = va_arg (authors, const char *)) != NULL;
+       n_authors++)
+    ;
+  version_etc_arn (stream, command_name, package, version,
+                  authtab, n_authors);
+}
+
+
+/* Display the --version information the standard way.
+
+   If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The authors names are passed as separate arguments, with an additional
+   NULL argument at the end.  */
+void
+version_etc (FILE *stream,
+            const char *command_name, const char *package,
+            const char *version, /* const char *author1, ...*/ ...)
+{
+  va_list authors;
+
+  va_start (authors, version);
+  version_etc_va (stream, command_name, package, version, authors);
+  va_end (authors);
+}
+
+void
+emit_bug_reporting_address (void)
+{
+  /* TRANSLATORS: The placeholder indicates the bug-reporting address
+     for this package.  Please add _another line_ saying
+     "Report translation bugs to <...>\n" with the address for translation
+     bugs (typically your translation team's web or email address).  */
+  printf (_("\nReport bugs to: %s\n"), PACKAGE_BUGREPORT);
+#ifdef PACKAGE_PACKAGER_BUG_REPORTS
+  printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER,
+         PACKAGE_PACKAGER_BUG_REPORTS);
+#endif
+#ifdef PACKAGE_URL
+  printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+#else
+  printf (_("%s home page: <http://www.gnu.org/software/%s/>\n"),
+         PACKAGE_NAME, PACKAGE);
+#endif
+  fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"),
+        stdout);
+}
diff --git a/lib/version-etc.h b/lib/version-etc.h
new file mode 100644
index 0000000..bd427b0
--- /dev/null
+++ b/lib/version-etc.h
@@ -0,0 +1,78 @@
+/* Print --version and bug-reporting information in a consistent format.
+   Copyright (C) 1999, 2003, 2005, 2009 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering. */
+
+#ifndef VERSION_ETC_H
+# define VERSION_ETC_H 1
+
+# include <stdarg.h>
+# include <stdio.h>
+
+/* The `sentinel' attribute was added in gcc 4.0.  */
+#ifndef ATTRIBUTE_SENTINEL
+# if 4 <= __GNUC__
+#  define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
+# else
+#  define ATTRIBUTE_SENTINEL /* empty */
+# endif
+#endif
+
+extern const char version_etc_copyright[];
+
+/* The three functions below display the --version information in the
+   standard way: command and package names, package version, followed
+   by a short GPLv3+ notice and a list of up to 10 author names.
+
+   If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The functions differ in the way they are passed author names: */
+
+/* N_AUTHORS names are supplied in array AUTHORS.  */
+extern void version_etc_arn (FILE *stream,
+                            const char *command_name, const char *package,
+                            const char *version,
+                            const char * const * authors, size_t n_authors);
+
+/* Names are passed in the NULL-terminated array AUTHORS.  */
+extern void version_etc_ar (FILE *stream,
+                           const char *command_name, const char *package,
+                           const char *version, const char * const * authors);
+
+/* Names are passed in the NULL-terminated va_list.  */
+extern void version_etc_va (FILE *stream,
+                           const char *command_name, const char *package,
+                           const char *version, va_list authors);
+
+/* Names are passed as separate arguments, with an additional
+   NULL argument at the end.  */
+extern void version_etc (FILE *stream,
+                        const char *command_name, const char *package,
+                        const char *version,
+                        /* const char *author1, ..., NULL */ ...)
+  ATTRIBUTE_SENTINEL;
+
+/* Display the usual `Report bugs to' stanza */
+extern void emit_bug_reporting_address (void);
+
+#endif /* VERSION_ETC_H */
diff --git a/libguile/Makefile.am b/libguile/Makefile.am
index d83cc7c..80a6245 100644
--- a/libguile/Makefile.am
+++ b/libguile/Makefile.am
@@ -398,7 +398,7 @@ BUILT_SOURCES = cpp_err_symbols.c cpp_sig_symbols.c 
libpath.h \
     $(DOT_I_FILES) $(DOT_X_FILES) $(EXTRA_DOT_X_FILES)
 
 EXTRA_libguile_la_SOURCES = _scm.h             \
-    memmove.c putenv.c strerror.c              \
+    memmove.c strerror.c                       \
     dynl.c regex-posix.c                       \
     filesys.c posix.c net_db.c socket.c                \
     debug-malloc.c mkstemp.c                   \
@@ -426,9 +426,11 @@ noinst_HEADERS = conv-integer.i.c conv-uinteger.i.c        
        \
 noinst_HEADERS += vm-engine.c vm-i-system.c vm-i-scheme.c vm-i-loader.c
 
 libguile_la_DEPENDENCIES = @LIBLOBJS@
-libguile_la_LIBADD = @LIBLOBJS@ $(gnulib_library) $(LTLIBGMP) $(LTLIBUNISTRING)
+libguile_la_LIBADD =                           \
+  @LIBLOBJS@ $(gnulib_library) $(LTLIBGMP)     \
+  $(LTLIBUNISTRING) $(LTLIBICONV)
 libguile_la_LDFLAGS =                                                  \
-  @LTLIBINTL@                                                          \
+  @LTLIBINTL@ $(INET_NTOP_LIB) $(INET_PTON_LIB)                                
\
   -version-info 
@LIBGUILE_INTERFACE_CURRENT@:@LIBGUILE_INTERFACE_REVISION@:@LIBGUILE_INTERFACE_AGE@
    \
   -export-dynamic -no-undefined                                                
\
   $(GNU_LD_FLAGS)
diff --git a/libguile/__scm.h b/libguile/__scm.h
index 8bb1b1a..c6cbe3f 100644
--- a/libguile/__scm.h
+++ b/libguile/__scm.h
@@ -175,9 +175,9 @@
 /* SCM_API is a macro prepended to all function and data definitions
    which should be exported from libguile. */
 
-#if BUILDING_LIBGUILE && HAVE_VISIBILITY
+#if defined BUILDING_LIBGUILE && defined HAVE_VISIBILITY
 # define SCM_API extern __attribute__((__visibility__("default")))
-#elif BUILDING_LIBGUILE && defined _MSC_VER
+#elif defined BUILDING_LIBGUILE && defined _MSC_VER
 # define SCM_API __declspec(dllexport) extern
 #elif defined _MSC_VER
 # define SCM_API __declspec(dllimport) extern
diff --git a/libguile/conv-uinteger.i.c b/libguile/conv-uinteger.i.c
index 52f49f7..d6b969c 100644
--- a/libguile/conv-uinteger.i.c
+++ b/libguile/conv-uinteger.i.c
@@ -54,13 +54,8 @@ SCM_TO_TYPE_PROTO (SCM val)
              return n;
 #else
 
-#if TYPE_MIN == 0 
-              if (n <= TYPE_MAX)
-                return n;
-#else /* TYPE_MIN != 0 */
               if (n >= TYPE_MIN && n <= TYPE_MAX)
                 return n;
-#endif /* TYPE_MIN != 0 */
               else
                 goto out_of_range;
 
@@ -83,13 +78,8 @@ SCM_TO_TYPE_PROTO (SCM val)
          
          mpz_export (&n, &count, 1, sizeof (TYPE), 0, 0, SCM_I_BIG_MPZ (val));
 
-#if TYPE_MIN == 0
-         if (n <= TYPE_MAX)
-           return n;
-#else /* TYPE_MIN != 0 */
          if (n >= TYPE_MIN && n <= TYPE_MAX)
            return n;
-#endif /* TYPE_MIN != 0 */
           else
             goto out_of_range;
 
diff --git a/libguile/eval.i.c b/libguile/eval.i.c
index ccb6126..a28a25a 100644
--- a/libguile/eval.i.c
+++ b/libguile/eval.i.c
@@ -221,8 +221,7 @@ CEVAL (SCM x, SCM env)
    *
    * Even frames are eval frames, odd frames are apply frames.
    */
-  debug.vect = (scm_t_debug_info *) alloca (scm_debug_eframe_size
-                                           * sizeof (scm_t_debug_info));
+  debug.vect = alloca (scm_debug_eframe_size * sizeof (scm_t_debug_info));
   debug.info = debug.vect;
   debug_info_end = debug.vect + scm_debug_eframe_size;
   scm_i_set_last_debug_frame (&debug);
@@ -883,9 +882,11 @@ dispatch:
 #ifdef DEVAL
            if (scm_check_memoize_p && SCM_TRAPS_P)
              {
+               SCM arg1, retval;
+
                SCM_CLEAR_TRACED_FRAME (debug);
-               SCM arg1 = scm_make_debugobj (&debug);
-               SCM retval = SCM_BOOL_T;
+               arg1 = scm_make_debugobj (&debug);
+               retval = SCM_BOOL_T;
                SCM_TRAPS_P = 0;
                retval = scm_call_4 (SCM_MEMOIZE_HDLR,
                                     scm_sym_memoize_symbol,
diff --git a/libguile/fports.c b/libguile/fports.c
index 12b7918..3e911f2 100644
--- a/libguile/fports.c
+++ b/libguile/fports.c
@@ -69,10 +69,10 @@
    gnulib ftruncate.c has code using fcntl F_CHSIZE and F_FREESP, which
    might be possibilities if we've got other systems without ftruncate.  */
 
-#if HAVE_CHSIZE && ! HAVE_FTRUNCATE
+#if defined HAVE_CHSIZE && ! defined HAVE_FTRUNCATE
 # define ftruncate(fd, size) chsize (fd, size)
-#undef HAVE_FTRUNCATE
-#define HAVE_FTRUNCATE 1
+# undef HAVE_FTRUNCATE
+# define HAVE_FTRUNCATE 1
 #endif
 
 #if SIZEOF_OFF_T == SIZEOF_INT
diff --git a/libguile/gc-malloc.c b/libguile/gc-malloc.c
index 669f789..9f6c376 100644
--- a/libguile/gc-malloc.c
+++ b/libguile/gc-malloc.c
@@ -322,13 +322,8 @@ scm_must_free (void *obj)
 #ifdef GUILE_DEBUG_MALLOC
   scm_malloc_unregister (obj);
 #endif
-  if (obj)
-    free (obj);
-  else
-    {
-      fprintf (stderr,"freeing NULL pointer");
-      abort ();
-    }
+
+  free (obj);
 }
 #undef FUNC_NAME
 
diff --git a/libguile/gen-scmconfig.c b/libguile/gen-scmconfig.c
index bc0c2df..f9fff6e 100644
--- a/libguile/gen-scmconfig.c
+++ b/libguile/gen-scmconfig.c
@@ -169,10 +169,10 @@ main (int argc, char *argv[])
 #ifdef STDC_HEADERS
   pf ("#define SCM_HAVE_STDC_HEADERS 1 /* 0 or 1 */\n");
   pf ("#include <stdlib.h>\n");
-# if HAVE_SYS_TYPES_H
+# ifdef HAVE_SYS_TYPES_H
   pf ("#include <sys/types.h>\n");
 # endif
-# if HAVE_SYS_STDTYPES_H
+# ifdef HAVE_SYS_STDTYPES_H
   pf ("#include <sys/stdtypes.h>\n");
 # endif
   pf ("#include <stddef.h>\n");
@@ -411,7 +411,7 @@ main (int argc, char *argv[])
   else
     pf ("/* #undef SCM_HAVE_THREAD_STORAGE_CLASS */\n");
 
-#if USE_DLL_IMPORT
+#ifdef USE_DLL_IMPORT
   pf ("\n");
   pf ("/* Define some additional CPP macros on Win32 platforms. */\n");
   pf ("# define __REGEX_IMPORT__ 1\n");
diff --git a/libguile/guardians.c b/libguile/guardians.c
index 51aa433..b85ec02 100644
--- a/libguile/guardians.c
+++ b/libguile/guardians.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,1999,2000,2001, 2006, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 1998,1999,2000,2001, 2006, 2008, 2009 Free Software 
Foundation, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -279,13 +279,6 @@ scm_i_get_one_zombie (SCM guardian)
 static SCM
 guardian_apply (SCM guardian, SCM obj, SCM throw_p)
 {
-#if ENABLE_DEPRECATED
-  if (!SCM_UNBNDP (throw_p))
-    scm_c_issue_deprecation_warning
-      ("Using the 'throw?' argument of a guardian is deprecated "
-       "and ineffective.");
-#endif
-
   if (!SCM_UNBNDP (obj))
     {
       scm_i_guard (guardian, obj);
@@ -362,11 +355,7 @@ scm_init_guardians ()
   tc16_guardian = scm_make_smob_type ("guardian", 0);
 
   scm_set_smob_print (tc16_guardian, guardian_print);
-#if ENABLE_DEPRECATED
-  scm_set_smob_apply (tc16_guardian, guardian_apply, 0, 2, 0);
-#else
   scm_set_smob_apply (tc16_guardian, guardian_apply, 0, 1, 0);
-#endif
 
 #include "libguile/guardians.x"
 }
diff --git a/libguile/i18n.c b/libguile/i18n.c
index 7deb395..5c1e4b5 100644
--- a/libguile/i18n.c
+++ b/libguile/i18n.c
@@ -735,7 +735,7 @@ SCM_DEFINE (scm_locale_p, "locale?", 1, 0, 0,
          const char *buf = scm_i_string_chars (s1);                    \
                                                                        \
          len = scm_i_string_length (s1);                               \
-         c_s1 = (scm_t_wchar *) alloca (sizeof (scm_t_wchar) * (len + 1)); \
+         c_s1 = alloca (sizeof (scm_t_wchar) * (len + 1));             \
                                                                        \
          for (i = 0; i < len; i ++)                                    \
            c_s1[i] = (unsigned char ) buf[i];                          \
diff --git a/libguile/numbers.c b/libguile/numbers.c
index 20fda02..15c49c0 100644
--- a/libguile/numbers.c
+++ b/libguile/numbers.c
@@ -619,7 +619,7 @@ guile_ieee_init (void)
      before trying to use it.  (But in practice we believe this is not a
      problem on any system guile is likely to target.)  */
   guile_Inf = INFINITY;
-#elif HAVE_DINFINITY
+#elif defined HAVE_DINFINITY
   /* OSF */
   extern unsigned int DINFINITY[2];
   guile_Inf = (*((double *) (DINFINITY)));
@@ -642,7 +642,7 @@ guile_ieee_init (void)
 #ifdef NAN
   /* C99 NAN, when available */
   guile_NaN = NAN;
-#elif HAVE_DQNAN
+#elif defined HAVE_DQNAN
   {
     /* OSF */
     extern unsigned int DQNAN[2];
diff --git a/libguile/ports.c b/libguile/ports.c
index e71ee0a..1fd6f63 100644
--- a/libguile/ports.c
+++ b/libguile/ports.c
@@ -80,7 +80,7 @@
    gnulib ftruncate.c has code using fcntl F_CHSIZE and F_FREESP, which
    might be possibilities if we've got other systems without ftruncate.  */
 
-#if HAVE_CHSIZE && ! HAVE_FTRUNCATE
+#if defined HAVE_CHSIZE && ! defined HAVE_FTRUNCATE
 #define ftruncate(fd, size) chsize (fd, size)
 #undef HAVE_FTRUNCATE
 #define HAVE_FTRUNCATE 1
diff --git a/libguile/putenv.c b/libguile/putenv.c
deleted file mode 100644
index cdc05dd..0000000
--- a/libguile/putenv.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright (C) 1991, 2000, 2001, 2004, 2005, 2006 Free Software Foundation, 
Inc.
-
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 3 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "libguile/scmconfig.h"
-
-#include <sys/types.h>
-#include <errno.h>
-
-/* Don't include stdlib.h for non-GNU C libraries because some of them
-   contain conflicting prototypes for getopt.
-   This needs to come after some library #include
-   to get __GNU_LIBRARY__ defined.  */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#else
-char *malloc ();
-#endif /* GNU C library.  */
-
-#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
-#include <string.h>
-#else
-#include <strings.h>
-#ifndef strchr
-#define strchr index
-#endif
-#ifndef memcpy
-#define memcpy(d, s, n) bcopy((s), (d), (n))
-#endif
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_CRT_EXTERNS_H
-#include <crt_externs.h>  /* for Darwin _NSGetEnviron */
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-extern char **environ;
-
-/* On Apple Darwin in a shared library there's no "environ" to access
-   directly, instead the address of that variable must be obtained with
-   _NSGetEnviron().  */
-#if HAVE__NSGETENVIRON && defined (PIC)
-#define environ (*_NSGetEnviron())
-#endif
-
-/* Put STRING, which is of the form "NAME=VALUE", in the environment.  */
-int
-putenv (const char *string)
-{
-  char *name_end = strchr (string, '=');
-  register size_t size;
-  register char **ep;
-
-  if (name_end == NULL)
-    {
-      /* Remove the variable from the environment.  */
-      size = strlen (string);
-      for (ep = environ; *ep != NULL; ++ep)
-       if (!strncmp (*ep, string, size) && (*ep)[size] == '=')
-         {
-           while (ep[1] != NULL)
-             {
-               ep[0] = ep[1];
-               ++ep;
-             }
-           *ep = NULL;
-           return 0;
-         }
-    }
-
-  size = 0;
-  for (ep = environ; *ep != NULL; ++ep)
-    if (!strncmp (*ep, string, name_end - string) &&
-       (*ep)[name_end - string] == '=')
-      break;
-    else
-      ++size;
-
-  if (*ep == NULL)
-    {
-      static char **last_environ = NULL;
-      char **new_environ = (char **) scm_malloc ((size + 2) * sizeof (char *));
-      memcpy ((char *) new_environ, (char *) environ, size * sizeof (char *));
-      new_environ[size] = (char *) string;
-      new_environ[size + 1] = NULL;
-      if (last_environ != NULL)
-       free ((char *) last_environ);
-      last_environ = new_environ;
-      environ = new_environ;
-    }
-  else
-    *ep = (char *) string;
-
-  return 0;
-}
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/read.c b/libguile/read.c
index 775612a..a81189f 100644
--- a/libguile/read.c
+++ b/libguile/read.c
@@ -1088,8 +1088,10 @@ scm_read_extended_symbol (scm_t_wchar chr, SCM port)
 
       if (len >= scm_i_string_length (buf) - 2)
        {
+         SCM addy;
+
          scm_i_string_stop_writing ();
-         SCM addy = scm_i_make_string (1024, NULL);
+         addy = scm_i_make_string (1024, NULL);
          buf = scm_string_append (scm_list_2 (buf, addy));
          len = 0;
          buf = scm_i_string_start_writing (buf);
diff --git a/libguile/script.c b/libguile/script.c
index 8c4e8ef..89ff7a0 100644
--- a/libguile/script.c
+++ b/libguile/script.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 
2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 
2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
  * as published by the Free Software Foundation; either version 3 of
@@ -26,6 +26,8 @@
 #include <errno.h>
 #include <ctype.h>
 
+#include <version-etc.h>
+
 #include "libguile/_scm.h"
 #include "libguile/eval.h"
 #include "libguile/feature.h"
@@ -358,13 +360,13 @@ scm_shell_usage (int fatal, char *message)
   if (message)
     fprintf (fp, "%s\n", message);
 
-  fprintf (fp, 
-           "Usage: %s OPTION ...\n"
+  fprintf (fp,
+           "Usage: %s [OPTION]... [FILE]...\n"
            "Evaluate Scheme code, interactively or from a script.\n"
            "\n"
            "  [-s] FILE      load Scheme source code from FILE, and exit\n"
            "  -c EXPR        evalute Scheme expression EXPR, and exit\n"
-           "  --             stop scanning arguments; run interactively\n"
+           "  --             stop scanning arguments; run interactively\n\n"
            "The above switches stop argument processing, and pass all\n"
            "remaining arguments as the value of (command-line).\n"
            "If FILE begins with `-' the -s switch is mandatory.\n"
@@ -388,11 +390,11 @@ scm_shell_usage (int fatal, char *message)
           "                 which is a list of numbers like \"2,13,14\"\n"
            "  -h, --help     display this help and exit\n"
            "  -v, --version  display version information and exit\n"
-          "  \\              read arguments from following script lines\n"
-           "\n"
-          "Please report bugs to address@hidden",
+          "  \\              read arguments from following script lines\n",
            scm_usage_name);
 
+  emit_bug_reporting_address ();
+
   if (fatal)
     exit (fatal);
 }
@@ -656,13 +658,9 @@ scm_compile_shell_switches (int argc, char **argv)
               || ! strcmp (argv[i], "--version"))
        {
          /* Print version number.  */
-         printf ("Guile %s\n"
-                 "Copyright (c) 1995, 1996, 1997, 2000, 2001, 2002, 2003, 
2004, 2005, 2006, 2007, 2008 Free Software Foundation\n"
-                 "Guile may be distributed under the terms of the GNU General 
Public Licence;\n"
-                 "certain other uses are permitted as well.  For details, see 
the file\n"
-                 "`COPYING', which is included in the Guile distribution.\n"
-                 "There is no warranty, to the extent permitted by law.\n",
-                 scm_to_locale_string (scm_version ()));
+         version_etc (stdout, scm_usage_name, PACKAGE_NAME, PACKAGE_VERSION,
+                      /* XXX: Use gettext for the string below.  */
+                      "the Guile developers", NULL);
          exit (0);
        }
 
diff --git a/libguile/socket.c b/libguile/socket.c
index cd31319..092f6eb 100644
--- a/libguile/socket.c
+++ b/libguile/socket.c
@@ -624,7 +624,7 @@ SCM_DEFINE (scm_setsockopt, "setsockopt", 4, 0, 0,
   struct linger opt_linger;
 #endif
 
-#if HAVE_STRUCT_IP_MREQ
+#ifdef HAVE_STRUCT_IP_MREQ
   struct ip_mreq opt_mreq;
 #endif
 
@@ -678,7 +678,7 @@ SCM_DEFINE (scm_setsockopt, "setsockopt", 4, 0, 0,
          }
     }
 
-#if HAVE_STRUCT_IP_MREQ
+#ifdef HAVE_STRUCT_IP_MREQ
   if (ilevel == IPPROTO_IP &&
       (ioptname == IP_ADD_MEMBERSHIP || ioptname == IP_DROP_MEMBERSHIP))
     {
@@ -760,7 +760,7 @@ scm_fill_sockaddr (int fam, SCM address, SCM *args, int 
which_arg,
        *args = SCM_CDR (*args);
        soka = (struct sockaddr_in *) scm_malloc (sizeof (struct sockaddr_in));
 
-#if HAVE_STRUCT_SOCKADDR_SIN_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_SIN_LEN
        soka->sin_len = sizeof (struct sockaddr_in);
 #endif
        soka->sin_family = AF_INET;
@@ -794,7 +794,7 @@ scm_fill_sockaddr (int fam, SCM address, SCM *args, int 
which_arg,
          }
        soka = (struct sockaddr_in6 *) scm_malloc (sizeof (struct 
sockaddr_in6));
 
-#if HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
        soka->sin6_len = sizeof (struct sockaddr_in6);
 #endif
        soka->sin6_family = AF_INET6;
diff --git a/libguile/stime.c b/libguile/stime.c
index 54022c2..07dedf3 100644
--- a/libguile/stime.c
+++ b/libguile/stime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2005, 2006, 
2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2005, 2006, 
2007, 2008, 2009 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -423,8 +423,8 @@ SCM_DEFINE (scm_localtime, "localtime", 1, 1, 0,
 
   result = filltime (&lt, zoff, zname);
   SCM_CRITICAL_SECTION_END;
-  if (zname)
-    free (zname);
+
+  free (zname);
   return result;
 }
 #undef FUNC_NAME
@@ -581,8 +581,7 @@ SCM_DEFINE (scm_mktime, "mktime", 1, 1, 0,
 
   result = scm_cons (scm_from_long (itime),
                     filltime (&lt, zoff, zname));
-  if (zname)
-    free (zname);
+  free (zname);
 
   scm_dynwind_end ();
   return result;
diff --git a/libguile/strings.c b/libguile/strings.c
index 21295ad..0ea50fd 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -96,7 +96,7 @@
     }                                                                  \
   while (0)
 
-#if SCM_STRING_LENGTH_HISTOGRAM
+#ifdef SCM_STRING_LENGTH_HISTOGRAM
 static size_t lenhist[1001];
 #endif
 
@@ -114,7 +114,7 @@ make_stringbuf (size_t len)
 
   SCM buf;
 
-#if SCM_STRING_LENGTH_HISTOGRAM
+#ifdef SCM_STRING_LENGTH_HISTOGRAM
   if (len < 1000)
     lenhist[len]++;
   else
@@ -140,7 +140,7 @@ make_wide_stringbuf (size_t len)
   SCM buf;
   size_t raw_len;
 
-#if SCM_STRING_LENGTH_HISTOGRAM
+#ifdef SCM_STRING_LENGTH_HISTOGRAM
   if (len < 1000)
     lenhist[len]++;
   else
@@ -972,7 +972,7 @@ SCM_DEFINE (scm_sys_symbol_dump, "%symbol-dump", 1, 0, 0, 
(SCM sym),
 }
 #undef FUNC_NAME
 
-#if SCM_STRING_LENGTH_HISTOGRAM
+#ifdef SCM_STRING_LENGTH_HISTOGRAM
 
 SCM_DEFINE (scm_sys_stringbuf_hist, "%stringbuf-hist", 0, 0, 0, (void), "")
 #define FUNC_NAME s_scm_sys_stringbuf_hist
@@ -1040,9 +1040,11 @@ SCM_DEFINE (scm_string, "string", 0, 0, 1,
 
   if (wide == 0)
     {
+      char *buf;
+
       result = scm_i_make_string (len, NULL);
       result = scm_i_string_start_writing (result);
-      char *buf = scm_i_string_writable_chars (result);
+      buf = scm_i_string_writable_chars (result);
       while (len > 0 && scm_is_pair (rest))
         {
           SCM elt = SCM_CAR (rest);
@@ -1055,9 +1057,11 @@ SCM_DEFINE (scm_string, "string", 0, 0, 1,
     }
   else
     {
+      scm_t_wchar *buf;
+
       result = scm_i_make_wide_string (len, NULL);
       result = scm_i_string_start_writing (result);
-      scm_t_wchar *buf = scm_i_string_writable_wide_chars (result);
+      buf = scm_i_string_writable_wide_chars (result);
       while (len > 0 && scm_is_pair (rest))
         {
           SCM elt = SCM_CAR (rest);
@@ -1829,8 +1833,8 @@ scm_i_deprecated_string_chars (SCM str)
      null-terminated.
   */
   if (IS_SH_STRING (str))
-    scm_misc_error (NULL, 
-                   "SCM_STRING_CHARS does not work with shared substrings.",
+    scm_misc_error (NULL,
+                   "SCM_STRING_CHARS does not work with shared substrings",
                    SCM_EOL);
 
   /* We explicitly test for read-only strings to produce a better
@@ -1838,10 +1842,10 @@ scm_i_deprecated_string_chars (SCM str)
   */
 
   if (IS_RO_STRING (str))
-    scm_misc_error (NULL, 
-                   "SCM_STRING_CHARS does not work with read-only strings.",
+    scm_misc_error (NULL,
+                   "SCM_STRING_CHARS does not work with read-only strings",
                    SCM_EOL);
-    
+
   /* The following is still wrong, of course...
    */
   str = scm_i_string_start_writing (str);
diff --git a/libguile/strings.h b/libguile/strings.h
index 4e5f700..601bd9c 100644
--- a/libguile/strings.h
+++ b/libguile/strings.h
@@ -198,7 +198,7 @@ SCM_INTERNAL void scm_i_get_substring_spec (size_t len,
 
 SCM_API SCM scm_sys_string_dump (SCM);
 SCM_API SCM scm_sys_symbol_dump (SCM);
-#if SCM_STRING_LENGTH_HISTOGRAM
+#ifdef SCM_STRING_LENGTH_HISTOGRAM
 SCM_API SCM scm_sys_stringbuf_hist (void);
 #endif
 
diff --git a/libguile/struct.c b/libguile/struct.c
index 33be8ad..f202d66 100644
--- a/libguile/struct.c
+++ b/libguile/struct.c
@@ -63,9 +63,10 @@ SCM_DEFINE (scm_make_struct_layout, "make-struct-layout", 1, 
0, 0,
 #define FUNC_NAME s_scm_make_struct_layout
 {
   SCM new_sym;
-  SCM_VALIDATE_STRING (1, fields);
   scm_t_wchar c;
 
+  SCM_VALIDATE_STRING (1, fields);
+
   { /* scope */
     size_t len;
     int x;
diff --git a/libguile/tags.h b/libguile/tags.h
index 4a68f9c..c8cd621 100644
--- a/libguile/tags.h
+++ b/libguile/tags.h
@@ -31,10 +31,13 @@
 /* picks up scmconfig.h too */
 #include "libguile/__scm.h"
 
-#if HAVE_INTTYPES_H
+/* FIXME: We shouldn't rely on `HAVE_*' macros here since it's a public
+   header.  */
+
+#ifdef HAVE_INTTYPES_H
 # include <inttypes.h>  /* for INTPTR_MAX and friends */
 #else
-# if HAVE_STDINT_H
+# ifdef HAVE_STDINT_H
 #  include <stdint.h>   /* for INTPTR_MAX and friends */
 # endif
 #endif
diff --git a/libguile/threads.c b/libguile/threads.c
index 2ca4f15..1527e01 100644
--- a/libguile/threads.c
+++ b/libguile/threads.c
@@ -661,7 +661,7 @@ get_thread_stack_base ()
     }
 }
 
-#elif HAVE_PTHREAD_GET_STACKADDR_NP
+#elif defined HAVE_PTHREAD_GET_STACKADDR_NP
 /* This method for MacOS X.
    It'd be nice if there was some documentation on pthread_get_stackaddr_np,
    but as of 2006 there's nothing obvious at apple.com.  */
@@ -1373,6 +1373,7 @@ static int
 fat_mutex_unlock (SCM mutex, SCM cond,
                  const scm_t_timespec *waittime, int relock)
 {
+  SCM owner;
   fat_mutex *m = SCM_MUTEX_DATA (mutex);
   fat_cond *c = NULL;
   scm_i_thread *t = SCM_I_CURRENT_THREAD;
@@ -1380,7 +1381,7 @@ fat_mutex_unlock (SCM mutex, SCM cond,
 
   scm_i_scm_pthread_mutex_lock (&m->lock);
 
-  SCM owner = m->owner;
+  owner = m->owner;
 
   if (!scm_is_eq (owner, scm_current_thread ()))
     {
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 5d8f655..aaa8884 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -243,7 +243,7 @@ VM_NAME (struct scm_vm *vp, SCM program, SCM *argv, int 
nargs)
     err_msg  = scm_from_locale_string ("VM: Bad wide string length: ~S");
     goto vm_error;
 
-#if VM_CHECK_IP
+#ifdef VM_CHECK_IP
   vm_error_invalid_address:
     err_msg  = scm_from_locale_string ("VM: Invalid program address");
     finish_args = SCM_EOL;
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 2057719..a85bd99 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -513,9 +513,9 @@ VM_DEFINE_INSTRUCTION (40, br_if_not_null, 
"br-if-not-null", 3, 0, 0)
 VM_DEFINE_INSTRUCTION (41, br_if_nargs_ne, "br-if-nargs-ne", 5, 0, 0)
 {
   scm_t_ptrdiff n;
+  scm_t_int32 offset;
   n = FETCH () << 8;
   n += FETCH ();
-  scm_t_int32 offset;
   FETCH_OFFSET (offset);
   if (sp - (fp - 1) != n)
     ip += offset;
@@ -525,9 +525,9 @@ VM_DEFINE_INSTRUCTION (41, br_if_nargs_ne, 
"br-if-nargs-ne", 5, 0, 0)
 VM_DEFINE_INSTRUCTION (42, br_if_nargs_lt, "br-if-nargs-lt", 5, 0, 0)
 {
   scm_t_ptrdiff n;
+  scm_t_int32 offset;
   n = FETCH () << 8;
   n += FETCH ();
-  scm_t_int32 offset;
   FETCH_OFFSET (offset);
   if (sp - (fp - 1) < n)
     ip += offset;
diff --git a/libguile/vm.c b/libguile/vm.c
index 1c5efd2..e37d25e 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -298,11 +298,12 @@ make_vm (void)
 #define FUNC_NAME "make_vm"
 {
   int i;
+  struct scm_vm *vp;
 
   if (!scm_tc16_vm)
     return SCM_BOOL_F; /* not booted yet */
 
-  struct scm_vm *vp = scm_gc_malloc (sizeof (struct scm_vm), "vm");
+  vp = scm_gc_malloc (sizeof (struct scm_vm), "vm");
 
   vp->stack_size  = VM_DEFAULT_STACK_SIZE;
 
diff --git a/m4/environ.m4 b/m4/environ.m4
index b17bb60..1803820 100644
--- a/m4/environ.m4
+++ b/m4/environ.m4
@@ -1,10 +1,10 @@
-# environ.m4 serial 2
+# environ.m4 serial 3
 dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-AC_DEFUN([gl_ENVIRON],
+AC_DEFUN_ONCE([gl_ENVIRON],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   dnl Persuade glibc <unistd.h> to declare environ.
diff --git a/m4/getpagesize.m4 b/m4/getpagesize.m4
deleted file mode 100644
index 0d07a3a..0000000
--- a/m4/getpagesize.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-# getpagesize.m4 serial 7
-dnl Copyright (C) 2002, 2004-2005, 2007 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FUNC_GETPAGESIZE],
-[
-  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_CHECK_FUNCS([getpagesize])
-  if test $ac_cv_func_getpagesize = no; then
-    HAVE_GETPAGESIZE=0
-    AC_CHECK_HEADERS([OS.h])
-    if test $ac_cv_header_OS_h = yes; then
-      HAVE_OS_H=1
-    fi
-    AC_CHECK_HEADERS([sys/param.h])
-    if test $ac_cv_header_sys_param_h = yes; then
-      HAVE_SYS_PARAM_H=1
-    fi
-  fi
-  case "$host_os" in
-    mingw*)
-      REPLACE_GETPAGESIZE=1
-      AC_LIBOBJ([getpagesize])
-      ;;
-  esac
-])
diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4
index 0d3fda9..ea13933 100644
--- a/m4/gnulib-cache.m4
+++ b/m4/gnulib-cache.m4
@@ -15,13 +15,14 @@
 
 
 # Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 
--doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl --libtool 
--macro-prefix=gl --no-vc-files alignof alloca-opt autobuild byteswap 
canonicalize-lgpl environ extensions flock fpieee full-read full-write havelib 
iconv_open-utf inet_ntop inet_pton lib-symbol-versions lib-symbol-visibility 
libunistring putenv stdlib strcase strftime striconveh string verify vsnprintf
+#   gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 
--doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl=3 --libtool 
--macro-prefix=gl --no-vc-files alignof alloca-opt announce-gen autobuild 
byteswap canonicalize-lgpl environ extensions flock fpieee full-read full-write 
gendocs gitlog-to-changelog gnu-web-doc-update gnupload havelib iconv_open-utf 
inet_ntop inet_pton lib-symbol-versions lib-symbol-visibility libunistring 
maintainer-makefile putenv stdlib strcase strftime striconveh string verify 
version-etc-fsf vsnprintf warnings
 
 # Specification in the form of a few gnulib-tool.m4 macro invocations:
 gl_LOCAL_DIR([])
 gl_MODULES([
   alignof
   alloca-opt
+  announce-gen
   autobuild
   byteswap
   canonicalize-lgpl
@@ -31,6 +32,10 @@ gl_MODULES([
   fpieee
   full-read
   full-write
+  gendocs
+  gitlog-to-changelog
+  gnu-web-doc-update
+  gnupload
   havelib
   iconv_open-utf
   inet_ntop
@@ -38,6 +43,7 @@ gl_MODULES([
   lib-symbol-versions
   lib-symbol-visibility
   libunistring
+  maintainer-makefile
   putenv
   stdlib
   strcase
@@ -45,7 +51,9 @@ gl_MODULES([
   striconveh
   string
   verify
+  version-etc-fsf
   vsnprintf
+  warnings
 ])
 gl_AVOID([])
 gl_SOURCE_BASE([lib])
@@ -54,7 +62,7 @@ gl_PO_BASE([])
 gl_DOC_BASE([doc])
 gl_TESTS_BASE([tests])
 gl_LIB([libgnu])
-gl_LGPL
+gl_LGPL([3])
 gl_MAKEFILE_NAME([])
 gl_LIBTOOL
 gl_MACRO_PREFIX([gl])
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index cb13d81..1e6e0a2 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -29,6 +29,11 @@ AC_DEFUN([gl_EARLY],
   AB_INIT
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   AC_REQUIRE([gl_FP_IEEE])
+  dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode
+  dnl for the builtin va_copy to work.  With Autoconf 2.60 or later,
+  dnl AC_PROG_CC_STDC arranges for this.  With older Autoconf AC_PROG_CC_STDC
+  dnl shouldn't hurt, though installers are on their own to set c99 mode.
+  AC_REQUIRE([AC_PROG_CC_STDC])
 ])
 
 # This macro should be invoked from ./configure.ac, in the section
@@ -58,8 +63,18 @@ AC_DEFUN([gl_INIT],
   gl_FLOAT_H
   gl_FUNC_FLOCK
   gl_HEADER_SYS_FILE_MODULE_INDICATOR([flock])
-  gl_FUNC_GETPAGESIZE
-  gl_UNISTD_MODULE_INDICATOR([getpagesize])
+  AC_SUBST([LIBINTL])
+  AC_SUBST([LTLIBINTL])
+  # Autoconf 2.61a.99 and earlier don't support linking a file only
+  # in VPATH builds.  But since GNUmakefile is for maintainer use
+  # only, it does not matter if we skip the link with older autoconf.
+  # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+  # builds, so use a shell variable to bypass this.
+  GNUmakefile=GNUmakefile
+  m4_if(m4_version_compare([2.61a.100],
+       m4_defn([m4_PACKAGE_VERSION])), [1], [],
+        [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [],
+       [GNUmakefile=$GNUmakefile])])
   AM_ICONV
   gl_ICONV_H
   gl_FUNC_ICONV_OPEN
@@ -103,6 +118,7 @@ AC_DEFUN([gl_INIT],
   gt_TYPE_SSIZE_T
   gl_FUNC_STAT
   gl_SYS_STAT_MODULE_INDICATOR([stat])
+  gl_STDARG_H
   AM_STDBOOL_H
   gl_STDDEF_H
   gl_STDINT_H
@@ -130,8 +146,10 @@ AC_DEFUN([gl_INIT],
   gl_MODULE_INDICATOR([unistr/u8-mbtoucr])
   gl_MODULE_INDICATOR([unistr/u8-uctomb])
   gl_FUNC_VASNPRINTF
+  gl_VERSION_ETC
   gl_FUNC_VSNPRINTF
   gl_STDIO_MODULE_INDICATOR([vsnprintf])
+  AC_SUBST([WARN_CFLAGS])
   gl_WCHAR_H
   gl_FUNC_WRITE
   gl_UNISTD_MODULE_INDICATOR([write])
@@ -264,8 +282,16 @@ AC_DEFUN([gltests_LIBSOURCES], [
 # This macro records the list of files which have been installed by
 # gnulib-tool and may be removed by future gnulib-tool invocations.
 AC_DEFUN([gl_FILE_LIST], [
+  build-aux/announce-gen
   build-aux/config.rpath
+  build-aux/gendocs.sh
+  build-aux/gitlog-to-changelog
+  build-aux/gnu-web-doc-update
+  build-aux/gnupload
   build-aux/link-warning.h
+  build-aux/useless-if-before-free
+  build-aux/vc-list-files
+  doc/gendocs_template
   lib/alignof.h
   lib/alloca.in.h
   lib/arpa_inet.in.h
@@ -287,7 +313,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/full-read.h
   lib/full-write.c
   lib/full-write.h
-  lib/getpagesize.c
+  lib/gettext.h
   lib/iconv.c
   lib/iconv.in.h
   lib/iconv_close.c
@@ -328,6 +354,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/safe-write.h
   lib/size_max.h
   lib/stat.c
+  lib/stdarg.in.h
   lib/stdbool.in.h
   lib/stddef.in.h
   lib/stdint.in.h
@@ -362,6 +389,9 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/vasnprintf.c
   lib/vasnprintf.h
   lib/verify.h
+  lib/version-etc-fsf.c
+  lib/version-etc.c
+  lib/version-etc.h
   lib/vsnprintf.c
   lib/wchar.in.h
   lib/write.c
@@ -383,7 +413,6 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/float_h.m4
   m4/flock.m4
   m4/fpieee.m4
-  m4/getpagesize.m4
   m4/glibc21.m4
   m4/gnulib-common.m4
   m4/iconv.m4
@@ -427,6 +456,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/sockpfaf.m4
   m4/ssize_t.m4
   m4/stat.m4
+  m4/stdarg.m4
   m4/stdbool.m4
   m4/stddef_h.m4
   m4/stdint.m4
@@ -445,11 +475,15 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/tm_gmtoff.m4
   m4/unistd_h.m4
   m4/vasnprintf.m4
+  m4/version-etc.m4
   m4/visibility.m4
   m4/vsnprintf.m4
+  m4/warnings.m4
   m4/wchar.m4
   m4/wchar_t.m4
   m4/wint_t.m4
   m4/write.m4
   m4/xsize.m4
+  top/GNUmakefile
+  top/maint.mk
 ])
diff --git a/m4/inet_ntop.m4 b/m4/inet_ntop.m4
index 2bbdca1..2a8ff20 100644
--- a/m4/inet_ntop.m4
+++ b/m4/inet_ntop.m4
@@ -1,4 +1,4 @@
-# inet_ntop.m4 serial 9
+# inet_ntop.m4 serial 11
 dnl Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -11,17 +11,18 @@ AC_DEFUN([gl_INET_NTOP],
 
   gl_REPLACE_ARPA_INET_H
 
-  dnl The AC_SEARCH_LIBS call is a hack to persuade the Solaris 8 linker to
-  dnl find inet_ntop.
-  dnl
-  dnl It is the responsibility of gl_INET_NTOP's caller to arrange for
-  dnl -lnsl if it is needed.  Normally -lnsl is not needed on Solaris 8,
-  dnl since inet_ntop is needed only by getaddrinfo, and getaddrinfo
-  dnl isn't built on Solaris 8.
+  dnl Most platforms that provide inet_ntop define it in libc.
+  dnl Solaris 8..10 provide inet_ntop in libnsl instead.
   gl_save_LIBS=$LIBS
   AC_SEARCH_LIBS([inet_ntop], [nsl], [],
     [AC_REPLACE_FUNCS([inet_ntop])])
   LIBS=$gl_save_LIBS
+  INET_NTOP_LIB=
+  if test "$ac_cv_search_inet_ntop" != "no" &&
+     test "$ac_cv_search_inet_ntop" != "none required"; then
+    INET_NTOP_LIB="$ac_cv_search_inet_ntop"
+  fi
+  AC_SUBST([INET_NTOP_LIB])
 
   gl_PREREQ_INET_NTOP
 ])
diff --git a/m4/inet_pton.m4 b/m4/inet_pton.m4
index e0ec432..e890b9b 100644
--- a/m4/inet_pton.m4
+++ b/m4/inet_pton.m4
@@ -1,4 +1,4 @@
-# inet_pton.m4 serial 7
+# inet_pton.m4 serial 9
 dnl Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -11,7 +11,19 @@ AC_DEFUN([gl_INET_PTON],
 
   gl_REPLACE_ARPA_INET_H
 
-  AC_REPLACE_FUNCS([inet_pton])
+  dnl Most platforms that provide inet_pton define it in libc.
+  dnl Solaris 8..10 provide inet_pton in libnsl instead.
+  gl_save_LIBS=$LIBS
+  AC_SEARCH_LIBS([inet_pton], [nsl], [],
+    [AC_REPLACE_FUNCS([inet_pton])])
+  LIBS=$gl_save_LIBS
+  INET_PTON_LIB=
+  if test "$ac_cv_search_inet_pton" != "no" &&
+     test "$ac_cv_search_inet_pton" != "none required"; then
+    INET_PTON_LIB="$ac_cv_search_inet_pton"
+  fi
+  AC_SUBST([INET_PTON_LIB])
+
   gl_PREREQ_INET_PTON
 ])
 
diff --git a/m4/readlink.m4 b/m4/readlink.m4
index fa7c2dd..e61c1a1 100644
--- a/m4/readlink.m4
+++ b/m4/readlink.m4
@@ -1,4 +1,4 @@
-# readlink.m4 serial 7
+# readlink.m4 serial 8
 dnl Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -21,15 +21,18 @@ AC_DEFUN([gl_FUNC_READLINK],
       /* Cause compilation failure if original declaration has wrong type.  */
       ssize_t readlink (const char *, char *, size_t);]])],
          [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])])
+    dnl Solaris 9 ignores trailing slash.
+    dnl FreeBSD 7.2 dereferences only one level of links with trailing slash.
     AC_CACHE_CHECK([whether readlink handles trailing slash correctly],
       [gl_cv_func_readlink_works],
       [# We have readlink, so assume ln -s works.
        ln -s conftest.no-such conftest.link
+       ln -s conftest.link conftest.lnk2
        AC_RUN_IFELSE(
          [AC_LANG_PROGRAM(
            [[#include <unistd.h>
 ]], [[char buf[20];
-      return readlink ("conftest.link/", buf, sizeof buf) != -1;]])],
+      return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])],
          [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no],
          [gl_cv_func_readlink_works="guessing no"])
       rm -f conftest.link])
diff --git a/m4/stat.m4 b/m4/stat.m4
index 0a10de1..ce6933b 100644
--- a/m4/stat.m4
+++ b/m4/stat.m4
@@ -1,4 +1,4 @@
-# serial 2
+# serial 3
 
 # Copyright (C) 2009 Free Software Foundation, Inc.
 #
@@ -11,6 +11,7 @@ AC_DEFUN([gl_FUNC_STAT],
   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_REQUIRE([gl_AC_DOS])
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([lstat])
   dnl mingw is the only known platform where stat(".") and stat("./") differ
   AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
       [gl_cv_func_stat_dir_slash],
@@ -24,15 +25,26 @@ AC_DEFUN([gl_FUNC_STAT],
             *) gl_cv_func_stat_dir_slash="guessing yes";;
           esac])])
   dnl Solaris 9 mistakenly succeeds on stat("file/")
+  dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/")
   AC_CACHE_CHECK([whether stat handles trailing slashes on files],
       [gl_cv_func_stat_file_slash],
       [touch conftest.tmp
+       # Assume that if we have lstat, we can also check symlinks.
+       if test $ac_cv_func_lstat = yes; then
+         ln -s conftest.tmp conftest.lnk
+       fi
        AC_RUN_IFELSE(
          [AC_LANG_PROGRAM(
            [[#include <sys/stat.h>
-]], [[struct stat st; return !stat ("conftest.tmp/", &st);]])],
+]], [[struct stat st;
+      if (!stat ("conftest.tmp/", &st)) return 1;
+#if HAVE_LSTAT
+      if (!stat ("conftest.lnk/", &st)) return 2;
+#endif
+           ]])],
          [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
-         [gl_cv_func_stat_file_slash="guessing no"])])
+         [gl_cv_func_stat_file_slash="guessing no"])
+       rm -f conftest.tmp conftest.lnk])
   case $gl_cv_func_stat_dir_slash in
     *no) REPLACE_STAT=1
       AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
diff --git a/m4/stdarg.m4 b/m4/stdarg.m4
new file mode 100644
index 0000000..a9ada4f
--- /dev/null
+++ b/m4/stdarg.m4
@@ -0,0 +1,67 @@
+# stdarg.m4 serial 3
+dnl Copyright (C) 2006, 2008-2009 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Provide a working va_copy in combination with <stdarg.h>.
+
+AC_DEFUN([gl_STDARG_H],
+[
+  STDARG_H='';                AC_SUBST([STDARG_H])
+  NEXT_STDARG_H='<stdarg.h>'; AC_SUBST([NEXT_STDARG_H])
+  AC_MSG_CHECKING([for va_copy])
+  AC_CACHE_VAL([gl_cv_func_va_copy], [
+    AC_TRY_COMPILE([#include <stdarg.h>], [
+#ifndef va_copy
+void (*func) (va_list, va_list) = va_copy;
+#endif
+],
+      [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no])])
+  AC_MSG_RESULT([$gl_cv_func_va_copy])
+  if test $gl_cv_func_va_copy = no; then
+    dnl Provide a substitute.
+    dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5
+    dnl with some versions of the /usr/vac/bin/cc compiler. It has an 
<stdarg.h>
+    dnl which does '#undef va_copy', leading to a missing va_copy symbol. For
+    dnl this platform, we use an <stdarg.h> substitute. But we cannot use this
+    dnl approach on other platforms, because <stdarg.h> often defines only
+    dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do
+    dnl not work in this situation.
+    AC_EGREP_CPP([vaccine],
+      [#if defined _AIX && !defined __GNUC__
+        AIX vaccine
+       #endif
+      ], [gl_aixcc=yes], [gl_aixcc=no])
+    if test $gl_aixcc = yes; then
+      dnl Provide a substitute <stdarg.h> file.
+      STDARG_H=stdarg.h
+      gl_CHECK_NEXT_HEADERS([stdarg.h])
+      dnl Fallback for the case when <stdarg.h> contains only macro 
definitions.
+      if test "$gl_cv_next_stdarg_h" = '""'; then
+        gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
+        NEXT_STDARG_H="$gl_cv_next_stdarg_h"
+      fi
+    else
+      dnl Provide a substitute in <config.h>, either __va_copy or as a simple
+      dnl assignment.
+      gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
+        AC_TRY_COMPILE([#include <stdarg.h>], [
+#ifndef __va_copy
+error, bail out
+#endif
+],
+          [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])])
+      if test $gl_cv_func___va_copy = yes; then
+        AC_DEFINE([va_copy], [__va_copy],
+          [Define as a macro for copying va_list variables.])
+      else
+        AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed.  */
+#define gl_va_copy(a,b) ((a) = (b))])
+        AC_DEFINE([va_copy], [gl_va_copy],
+          [Define as a macro for copying va_list variables.])
+      fi
+    fi
+  fi
+])
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
index 42d551d..10e010e 100644
--- a/m4/stdlib_h.m4
+++ b/m4/stdlib_h.m4
@@ -1,4 +1,4 @@
-# stdlib_h.m4 serial 20
+# stdlib_h.m4 serial 21
 dnl Copyright (C) 2007-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -41,7 +41,9 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   GNULIB_MALLOC_POSIX=0;  AC_SUBST([GNULIB_MALLOC_POSIX])
   GNULIB_MKDTEMP=0;       AC_SUBST([GNULIB_MKDTEMP])
   GNULIB_MKOSTEMP=0;      AC_SUBST([GNULIB_MKOSTEMP])
+  GNULIB_MKOSTEMPS=0;     AC_SUBST([GNULIB_MKOSTEMPS])
   GNULIB_MKSTEMP=0;       AC_SUBST([GNULIB_MKSTEMP])
+  GNULIB_MKSTEMPS=0;      AC_SUBST([GNULIB_MKSTEMPS])
   GNULIB_PUTENV=0;        AC_SUBST([GNULIB_PUTENV])
   GNULIB_RANDOM_R=0;      AC_SUBST([GNULIB_RANDOM_R])
   GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
@@ -61,6 +63,8 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   HAVE_MALLOC_POSIX=1;       AC_SUBST([HAVE_MALLOC_POSIX])
   HAVE_MKDTEMP=1;            AC_SUBST([HAVE_MKDTEMP])
   HAVE_MKOSTEMP=1;           AC_SUBST([HAVE_MKOSTEMP])
+  HAVE_MKOSTEMPS=1;          AC_SUBST([HAVE_MKOSTEMPS])
+  HAVE_MKSTEMPS=1;           AC_SUBST([HAVE_MKSTEMPS])
   HAVE_RANDOM_R=1;           AC_SUBST([HAVE_RANDOM_R])
   HAVE_REALLOC_POSIX=1;      AC_SUBST([HAVE_REALLOC_POSIX])
   HAVE_REALPATH=1;           AC_SUBST([HAVE_REALPATH])
@@ -76,6 +80,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   REPLACE_MKSTEMP=0;         AC_SUBST([REPLACE_MKSTEMP])
   REPLACE_PUTENV=0;          AC_SUBST([REPLACE_PUTENV])
   REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
+  REPLACE_SETENV=0;          AC_SUBST([REPLACE_SETENV])
   REPLACE_STRTOD=0;          AC_SUBST([REPLACE_STRTOD])
-  VOID_UNSETENV=0;           AC_SUBST([VOID_UNSETENV])
+  REPLACE_UNSETENV=0;        AC_SUBST([REPLACE_UNSETENV])
 ])
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
index 1edf548..838cf48 100644
--- a/m4/sys_stat_h.m4
+++ b/m4/sys_stat_h.m4
@@ -1,4 +1,4 @@
-# sys_stat_h.m4 serial 19   -*- Autoconf -*-
+# sys_stat_h.m4 serial 21   -*- Autoconf -*-
 dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -45,7 +45,9 @@ AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
   GNULIB_LCHMOD=0;      AC_SUBST([GNULIB_LCHMOD])
   GNULIB_LSTAT=0;       AC_SUBST([GNULIB_LSTAT])
   GNULIB_MKDIRAT=0;     AC_SUBST([GNULIB_MKDIRAT])
+  GNULIB_MKFIFO=0;      AC_SUBST([GNULIB_MKFIFO])
   GNULIB_MKFIFOAT=0;    AC_SUBST([GNULIB_MKFIFOAT])
+  GNULIB_MKNOD=0;       AC_SUBST([GNULIB_MKNOD])
   GNULIB_MKNODAT=0;     AC_SUBST([GNULIB_MKNODAT])
   GNULIB_STAT=0;        AC_SUBST([GNULIB_STAT])
   GNULIB_UTIMENSAT=0;   AC_SUBST([GNULIB_UTIMENSAT])
@@ -56,7 +58,9 @@ AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
   HAVE_LCHMOD=1;        AC_SUBST([HAVE_LCHMOD])
   HAVE_LSTAT=1;         AC_SUBST([HAVE_LSTAT])
   HAVE_MKDIRAT=1;       AC_SUBST([HAVE_MKDIRAT])
+  HAVE_MKFIFO=1;        AC_SUBST([HAVE_MKFIFO])
   HAVE_MKFIFOAT=1;      AC_SUBST([HAVE_MKFIFOAT])
+  HAVE_MKNOD=1;         AC_SUBST([HAVE_MKNOD])
   HAVE_MKNODAT=1;       AC_SUBST([HAVE_MKNODAT])
   HAVE_UTIMENSAT=1;     AC_SUBST([HAVE_UTIMENSAT])
   REPLACE_FSTAT=0;      AC_SUBST([REPLACE_FSTAT])
@@ -64,6 +68,8 @@ AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
   REPLACE_FUTIMENS=0;   AC_SUBST([REPLACE_FUTIMENS])
   REPLACE_LSTAT=0;      AC_SUBST([REPLACE_LSTAT])
   REPLACE_MKDIR=0;      AC_SUBST([REPLACE_MKDIR])
+  REPLACE_MKFIFO=0;     AC_SUBST([REPLACE_MKFIFO])
+  REPLACE_MKNOD=0;      AC_SUBST([REPLACE_MKNOD])
   REPLACE_STAT=0;       AC_SUBST([REPLACE_STAT])
   REPLACE_UTIMENSAT=0;  AC_SUBST([REPLACE_UTIMENSAT])
 ])
diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4
index 5aa39ae..88e60a0 100644
--- a/m4/unistd_h.m4
+++ b/m4/unistd_h.m4
@@ -1,4 +1,4 @@
-# unistd_h.m4 serial 31
+# unistd_h.m4 serial 34
 dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -46,6 +46,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   GNULIB_GETCWD=0;           AC_SUBST([GNULIB_GETCWD])
   GNULIB_GETDOMAINNAME=0;    AC_SUBST([GNULIB_GETDOMAINNAME])
   GNULIB_GETDTABLESIZE=0;    AC_SUBST([GNULIB_GETDTABLESIZE])
+  GNULIB_GETGROUPS=0;        AC_SUBST([GNULIB_GETGROUPS])
   GNULIB_GETHOSTNAME=0;      AC_SUBST([GNULIB_GETHOSTNAME])
   GNULIB_GETLOGIN_R=0;       AC_SUBST([GNULIB_GETLOGIN_R])
   GNULIB_GETPAGESIZE=0;      AC_SUBST([GNULIB_GETPAGESIZE])
@@ -67,6 +68,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   GNULIB_UNLINKAT=0;         AC_SUBST([GNULIB_UNLINKAT])
   GNULIB_WRITE=0;            AC_SUBST([GNULIB_WRITE])
   dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_CHOWN=1;           AC_SUBST([HAVE_CHOWN])
   HAVE_DUP2=1;            AC_SUBST([HAVE_DUP2])
   HAVE_DUP3=1;            AC_SUBST([HAVE_DUP3])
   HAVE_EUIDACCESS=1;      AC_SUBST([HAVE_EUIDACCESS])
@@ -76,9 +78,11 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   HAVE_FTRUNCATE=1;       AC_SUBST([HAVE_FTRUNCATE])
   HAVE_GETDOMAINNAME=1;   AC_SUBST([HAVE_GETDOMAINNAME])
   HAVE_GETDTABLESIZE=1;   AC_SUBST([HAVE_GETDTABLESIZE])
+  HAVE_GETGROUPS=1;       AC_SUBST([HAVE_GETGROUPS])
   HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
   HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
   HAVE_GETUSERSHELL=1;    AC_SUBST([HAVE_GETUSERSHELL])
+  HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
   HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
   HAVE_LINKAT=1;          AC_SUBST([HAVE_LINKAT])
   HAVE_PIPE2=1;           AC_SUBST([HAVE_PIPE2])
@@ -99,6 +103,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   REPLACE_FCHDIR=0;       AC_SUBST([REPLACE_FCHDIR])
   REPLACE_FCHOWNAT=0;     AC_SUBST([REPLACE_FCHOWNAT])
   REPLACE_GETCWD=0;       AC_SUBST([REPLACE_GETCWD])
+  REPLACE_GETGROUPS=0;    AC_SUBST([REPLACE_GETGROUPS])
   REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])
   REPLACE_LCHOWN=0;       AC_SUBST([REPLACE_LCHOWN])
   REPLACE_LINK=0;         AC_SUBST([REPLACE_LINK])
diff --git a/m4/version-etc.m4 b/m4/version-etc.m4
new file mode 100644
index 0000000..14d6eb6
--- /dev/null
+++ b/m4/version-etc.m4
@@ -0,0 +1,33 @@
+# version-etc.m4 serial 1
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl $1 - configure flag and define name
+dnl $2 - human readable description
+m4_define([gl_VERSION_ETC_FLAG],
+[dnl
+  AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])],
+    [dnl
+      case $withval in
+       yes|no) ;;
+       *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;;
+      esac
+    ])
+])
+
+AC_DEFUN([gl_VERSION_ETC],
+[dnl
+  gl_VERSION_ETC_FLAG([packager],
+                     [String identifying the packager of this software])
+  gl_VERSION_ETC_FLAG([packager-version],
+                     [Packager-specific version information])
+  gl_VERSION_ETC_FLAG([packager-bug-reports],
+                     [Packager info for bug reports (URL/e-mail/...)])
+  if test "X$with_packager" = "X" && \
+     test "X$with_packager_version$with_packager_bug_reports" != "X"
+  then
+    AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require 
--with-packager])
+  fi
+])
diff --git a/m4/warnings.m4 b/m4/warnings.m4
new file mode 100644
index 0000000..c32cf4e
--- /dev/null
+++ b/m4/warnings.m4
@@ -0,0 +1,44 @@
+# warnings.m4 serial 2
+dnl Copyright (C) 2008 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
+# ----------------------------------------------------
+# Provide the functionality of AS_VAR_IF if Autoconf does not have it.
+m4_ifdef([AS_VAR_IF],
+[m4_copy([AS_VAR_IF], [gl_AS_VAR_IF])],
+[m4_define([gl_AS_VAR_IF],
+[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+
+# gl_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
+[m4_define([gl_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+# gl_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS])
+# ------------------------------------------------
+# Adds parameter to WARN_CFLAGS if the compiler supports it.  For example,
+# gl_WARN_ADD([-Wparentheses]).
+AC_DEFUN([gl_WARN_ADD],
+[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_$1])dnl
+AC_CACHE_CHECK([whether compiler handles $1], [gl_Warn], [
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} $1"
+  AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])],
+                    [AS_VAR_SET([gl_Warn], [yes])],
+                   [AS_VAR_SET([gl_Warn], [no])])
+  CPPFLAGS="$save_CPPFLAGS"
+])
+AS_VAR_PUSHDEF([gl_Flags], m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]))dnl
+gl_AS_VAR_IF([gl_Warn], [yes], [gl_AS_VAR_APPEND([gl_Flags], [" $1"])])
+AS_VAR_POPDEF([gl_Flags])dnl
+AS_VAR_POPDEF([gl_Warn])dnl
+m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl
+])
diff --git a/maint.mk b/maint.mk
new file mode 100644
index 0000000..34d66e1
--- /dev/null
+++ b/maint.mk
@@ -0,0 +1,816 @@
+# -*-Makefile-*-
+# This Makefile fragment tries to be general-purpose enough to be
+# used by many projects via the gnulib maintainer-makefile module.
+
+## Copyright (C) 2001-2009 Free Software Foundation, Inc.
+##
+## This program 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 3 of the License, or
+## (at your option) any later version.
+##
+## This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This is reported not to work with make-3.79.1
+# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+ME := maint.mk
+
+# Override this in cfg.mk if you use a non-standard build-aux directory.
+build_aux ?= $(srcdir)/build-aux
+
+# Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
+gzip_rsyncable := \
+  $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo 
--rsyncable)
+GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
+
+# cfg.mk must define the gpg_key_ID used by this package.
+GIT = git
+VC = $(GIT)
+VC-tag = git tag -s -m '$(VERSION)' -u '$(gpg_key_ID)'
+
+VC_LIST = $(build_aux)/vc-list-files -C $(srcdir)
+
+VC_LIST_EXCEPT = \
+  $(VC_LIST) | if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \
+              else grep -Ev "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi
+
+ifeq ($(origin prev_version_file), undefined)
+  prev_version_file = $(srcdir)/.prev-version
+endif
+
+PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null)
+VERSION_REGEXP = $(subst .,\.,$(VERSION))
+PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION))
+
+ifeq ($(VC),$(GIT))
+this-vc-tag = v$(VERSION)
+this-vc-tag-regexp = v$(VERSION_REGEXP)
+else
+tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+tag-this-version = $(subst .,_,$(VERSION))
+this-vc-tag = $(tag-package)-$(tag-this-version)
+this-vc-tag-regexp = $(this-vc-tag)
+endif
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Old releases are stored here.
+release_archive_dir ?= ../release
+
+# Prevent programs like 'sort' from considering distinct strings to be equal.
+# Doing it here saves us from having to set LC_ALL elsewhere in this file.
+export LC_ALL = C
+
+## --------------- ##
+## Sanity checks.  ##
+## --------------- ##
+
+_cfg_mk := $(shell test -f $(srcdir)/cfg.mk && echo '$(srcdir)/cfg.mk')
+
+# Collect the names of rules starting with `sc_'.
+syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' 
\
+                       $(srcdir)/$(ME) $(_cfg_mk)))
+.PHONY: $(syntax-check-rules)
+
+local-checks-available = \
+  $(syntax-check-rules)
+.PHONY: $(local-checks-available)
+
+# Arrange to print the name of each syntax-checking rule just before running 
it.
+$(syntax-check-rules): %: %.m
+$(patsubst %, %.m, $(syntax-check-rules)):
+       @echo $(patsubst sc_%.m, %, $@)
+
+local-check := $(filter-out $(local-checks-to-skip), $(local-checks-available))
+
+syntax-check: $(local-check)
+#      @grep -nE '#  *include <(limits|std(def|arg|bool))\.h>'         \
+#          $$(find -type f -name '*.[chly]') &&                        \
+#        { echo '$(ME): found conditional include' 1>&2;               \
+#          exit 1; } || :
+
+#      grep -nE '^#  *include <(string|stdlib)\.h>'                    \
+#          $(srcdir)/{lib,src}/*.[chy] &&                              \
+#        { echo '$(ME): FIXME' 1>&2;                                   \
+#          exit 1; } || :
+# FIXME: don't allow `#include .strings\.h' anywhere
+
+# By default, _prohibit_regexp does not ignore case.
+export ignore_case =
+_ignore_case = $$(test -n "$$ignore_case" && echo -i || :)
+
+# There are many rules below that prohibit constructs in this package.
+# If the offending construct can be matched with a grep-E-style regexp,
+# use this macro.  The shell variables "re" and "msg" must be defined.
+define _prohibit_regexp
+  dummy=; : so we do not need a semicolon before each use;             \
+  test "x$$re" != x || { echo '$(ME): re not defined' 1>&2; exit 1; }; \
+  test "x$$msg" != x || { echo '$(ME): msg not defined' 1>&2; exit 1; };\
+  grep $(_ignore_case) -nE "$$re" $$($(VC_LIST_EXCEPT)) &&             \
+    { echo '$(ME): '"$$msg" 1>&2; exit 1; } || :
+endef
+
+sc_avoid_if_before_free:
+       @$(build_aux)/useless-if-before-free                            \
+               $(useless_free_options)                                 \
+           $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) &&   \
+         { echo '$(ME): found useless "if" before "free" above' 1>&2;  \
+           exit 1; } || :
+
+sc_cast_of_argument_to_free:
+       @re='\<free *\( *\(' msg='don'\''t cast free argument'          \
+         $(_prohibit_regexp)
+
+sc_cast_of_x_alloc_return_value:
+       @re='\*\) *x(m|c|re)alloc\>'                                    \
+       msg='don'\''t cast x*alloc return value'                        \
+         $(_prohibit_regexp)
+
+sc_cast_of_alloca_return_value:
+       @re='\*\) *alloca\>' msg='don'\''t cast alloca return value'    \
+         $(_prohibit_regexp)
+
+sc_space_tab:
+       @re='[ ]        ' msg='found SPACE-TAB sequence; remove the SPACE' \
+         $(_prohibit_regexp)
+
+# Don't use *scanf or the old ato* functions in `real' code.
+# They provide no error checking mechanism.
+# Instead, use strto* functions.
+sc_prohibit_atoi_atof:
+       @re='\<([fs]?scanf|ato([filq]|ll)) *\('                         \
+       msg='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \
+         $(_prohibit_regexp)
+
+# Use STREQ rather than comparing strcmp == 0, or != 0.
+sc_prohibit_strcmp:
+       @grep -nE '! *str''cmp *\(|\<str''cmp *\([^)]+\) *=='           \
+           $$($(VC_LIST_EXCEPT))                                       \
+         | grep -vE ':# *define STREQ\(' &&                            \
+         { echo '$(ME): use STREQ in place of the above uses of str''cmp' \
+               1>&2; exit 1; } || :
+
+# Pass EXIT_*, not number, to usage, exit, and error (when exiting)
+sc_prohibit_magic_number_exit:
+       @re='\<(usage|exit) ?\([0-9]|\<error ?\([1-9][0-9]*,'           \
+       msg='use EXIT_* values rather than magic number'                \
+         $(_prohibit_regexp)
+
+# Using EXIT_SUCCESS as the first argument to error is misleading,
+# since when that parameter is 0, error does not exit.  Use `0' instead.
+sc_error_exit_success:
+       @grep -nE 'error \(EXIT_SUCCESS,'                               \
+           $$($(VC_LIST_EXCEPT) | grep -E '\.[chly]$$') &&             \
+         { echo '$(ME): found error (EXIT_SUCCESS' 1>&2; exit 1; } || :
+
+# `FATAL:' should be fully upper-cased in error messages
+# `WARNING:' should be fully upper-cased, or fully lower-cased
+sc_error_message_warn_fatal:
+       @grep -nEA2 '[^rp]error \(' $$($(VC_LIST_EXCEPT))               \
+           | grep -E '"Warning|"Fatal|"fatal' &&                       \
+         { echo '$(ME): use FATAL, WARNING or warning' 1>&2;           \
+           exit 1; } || :
+
+# Error messages should not start with a capital letter
+sc_error_message_uppercase:
+       @grep -nEA2 '[^rp]error \(' $$($(VC_LIST_EXCEPT))               \
+           | grep -E '"[A-Z]'                                          \
+           | grep -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' &&           \
+         { echo '$(ME): found capitalized error message' 1>&2;         \
+           exit 1; } || :
+
+# Error messages should not end with a period
+sc_error_message_period:
+       @grep -nEA2 '[^rp]error \(' $$($(VC_LIST_EXCEPT))               \
+           | grep -E '[^."]\."' &&                                     \
+         { echo '$(ME): found error message ending in period' 1>&2;    \
+           exit 1; } || :
+
+sc_file_system:
+       @re=file''system ignore_case=1                                  \
+       msg='found use of "file''system"; spell it "file system"'       \
+         $(_prohibit_regexp)
+
+# Don't use cpp tests of this symbol.  All code assumes config.h is included.
+sc_prohibit_have_config_h:
+       @grep -n '^# *if.*HAVE''_CONFIG_H' $$($(VC_LIST_EXCEPT)) &&     \
+         { echo '$(ME): found use of HAVE''_CONFIG_H; remove'          \
+               1>&2; exit 1; } || :
+
+# Nearly all .c files must include <config.h>.  However, we also permit this
+# via inclusion of a package-specific header, if cfg.mk specified one.
+# config_h_header must be suitable for grep -E.
+config_h_header ?= <config\.h>
+sc_require_config_h:
+       @if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then       \
+         grep -EL '^# *include $(config_h_header)'                     \
+               $$($(VC_LIST_EXCEPT) | grep '\.c$$')                    \
+             | grep . &&                                               \
+         { echo '$(ME): the above files do not include <config.h>'     \
+               1>&2; exit 1; } || :;                                   \
+       else :;                                                         \
+       fi
+
+# You must include <config.h> before including any other header file.
+# This can possibly be via a package-specific header, if given by cfg.mk.
+sc_require_config_h_first:
+       @if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then       \
+         fail=0;                                                       \
+         for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do             \
+           grep '^# *include\>' $$i | sed 1q                           \
+               | grep -E '^# *include $(config_h_header)' > /dev/null  \
+             || { echo $$i; fail=1; };                                 \
+         done;                                                         \
+         test $$fail = 1 &&                                            \
+           { echo '$(ME): the above files include some other header'   \
+               'before <config.h>' 1>&2; exit 1; } || :;               \
+       else :;                                                         \
+       fi
+
+sc_prohibit_HAVE_MBRTOWC:
+       @re='\bHAVE_MBRTOWC\b' msg="do not use $$re; it is always defined" \
+         $(_prohibit_regexp)
+
+# To use this "command" macro, you must first define two shell variables:
+# h: the header, enclosed in <> or ""
+# re: a regular expression that matches IFF something provided by $h is used.
+define _header_without_use
+  dummy=; : so we do not need a semicolon before each use;             \
+  h_esc=`echo "$$h"|sed 's/\./\\\\./g'`;                               \
+  if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then             \
+    files=$$(grep -l '^# *include '"$$h_esc"                           \
+            $$($(VC_LIST_EXCEPT) | grep '\.c$$')) &&                   \
+    grep -LE "$$re" $$files | grep . &&                                        
\
+      { echo "$(ME): the above files include $$h but don't use it"     \
+       1>&2; exit 1; } || :;                                           \
+  else :;                                                              \
+  fi
+endef
+
+# Prohibit the inclusion of assert.h without an actual use of assert.
+sc_prohibit_assert_without_use:
+       @h='<assert.h>' re='\<assert *\(' $(_header_without_use)
+
+# Prohibit the inclusion of close-stream.h without an actual use.
+sc_prohibit_close_stream_without_use:
+       @h='"close-stream.h"' re='\<close_stream *\(' $(_header_without_use)
+
+# Prohibit the inclusion of getopt.h without an actual use.
+sc_prohibit_getopt_without_use:
+       @h='<getopt.h>' re='\<getopt(_long)? *\(' $(_header_without_use)
+
+# Don't include quotearg.h unless you use one of its functions.
+sc_prohibit_quotearg_without_use:
+       @h='"quotearg.h"' re='\<quotearg(_[^ ]+)? *\(' $(_header_without_use)
+
+# Don't include quote.h unless you use one of its functions.
+sc_prohibit_quote_without_use:
+       @h='"quote.h"' re='\<quote(_n)? *\(' $(_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_long_options_without_use:
+       @h='"long-options.h"' re='\<parse_long_options *\(' \
+         $(_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_inttostr_without_use:
+       @h='"inttostr.h"' re='\<(off|[iu]max|uint)tostr *\(' \
+         $(_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_error_without_use:
+       @h='"error.h"' \
+       re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? 
*\('\
+         $(_header_without_use)
+
+# Don't include xalloc.h unless you use one of its functions.
+# Consider these symbols:
+# perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__';
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) \(/ and print $1' 
lib/xalloc.h
+# Divide into two sets on case, and filter each through this:
+# | sort | perl -MRegexp::Assemble -le \
+#  'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 
's/\?://g'
+# Note this was produced by the above:
+# _xa1 = x(alloc_(oversized|die)|([cz]|2?re)alloc|m(alloc|emdup)|strdup)
+# But we can do better:
+_xa1 = x(alloc_(oversized|die)|([cmz]|2?re)alloc|(mem|str)dup)
+_xa2 = X([CZ]|N?M)ALLOC
+sc_prohibit_xalloc_without_use:
+       @h='"xalloc.h"' \
+       re='\<($(_xa1)|$(_xa2)) *\('\
+         $(_header_without_use)
+
+sc_prohibit_safe_read_without_use:
+       @h='"safe-read.h"' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \
+         $(_header_without_use)
+
+sc_prohibit_argmatch_without_use:
+       @h='"argmatch.h"' \
+       
re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<argmatch(_exit_fn|_(in)?valid)
 *\()' \
+         $(_header_without_use)
+
+sc_prohibit_canonicalize_without_use:
+       @h='"canonicalize.h"' \
+       
re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode)' \
+         $(_header_without_use)
+
+sc_prohibit_root_dev_ino_without_use:
+       @h='"root-dev-ino.h"' \
+       re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \
+         $(_header_without_use)
+
+sc_prohibit_openat_without_use:
+       @h='"openat.h"' \
+       
re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat)\>'
 \
+         $(_header_without_use)
+
+# Prohibit the inclusion of c-ctype.h without an actual use.
+ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
+|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
+sc_prohibit_c_ctype_without_use:
+       @h='[<"]c-ctype.h[">]' re='\<c_($(ctype_re)) *\(' $(_header_without_use)
+
+_empty =
+_sp = $(_empty) $(_empty)
+# The following list was generated by running:
+# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \
+#   | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt
+_sig_functions = \
+  bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \
+  sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \
+  siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \
+  sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo
+_sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions)))
+# The following were extracted from "man signal.h" manually.
+_sig_types_and_consts =                                                        
\
+  MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK          \
+  SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL           \
+  SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE   \
+  SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \
+  sigstack sigval stack_t ucontext_t
+# generated via this:
+# perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70
+_sig_names =                                                           \
+  SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT     \
+  SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL      \
+  SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \
+  SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR     \
+  SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS  \
+  SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1       \
+  SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW      \
+  SIGXCPU SIGXFSZ
+_sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) 
$(_sig_types_and_consts)))
+
+# Prohibit the inclusion of signal.h without an actual use.
+sc_prohibit_signal_without_use:
+       @h='<signal.h>'                                                 \
+       re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>'          \
+         $(_header_without_use)
+
+sc_obsolete_symbols:
+       @re='\<(HAVE''_FCNTL_H|O''_NDELAY)\>'                           \
+       msg='do not use HAVE''_FCNTL_H or O'_NDELAY                     \
+         $(_prohibit_regexp)
+
+# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
+
+# Each nonempty ChangeLog line must start with a year number, or a TAB.
+sc_changelog:
+       @if $(VC_LIST_EXCEPT) | grep -l '^ChangeLog$$' >/dev/null; then \
+         grep -n '^[^12        ]'                                      \
+           $$($(VC_LIST_EXCEPT) | grep '^ChangeLog$$') &&              \
+         { echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2;  \
+           exit 1; } || :;                                             \
+       fi
+
+# Ensure that each .c file containing a "main" function also
+# calls set_program_name.
+sc_program_name:
+       @if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then       \
+         files=$$(grep -l '^main *(' $$($(VC_LIST_EXCEPT) | grep '\.c$$')); \
+         grep -LE 'set_program_name *\(m?argv\[0\]\);' $$files         \
+             | grep . &&                                               \
+         { echo '$(ME): the above files do not call set_program_name'  \
+               1>&2; exit 1; } || :;                                   \
+       else :;                                                         \
+       fi
+
+# Require that the final line of each test-lib.sh-using test be this one:
+# Exit $fail
+# Note: this test requires GNU grep's --label= option.
+Exit_witness_file ?= tests/test-lib.sh
+Exit_base := $(notdir $(Exit_witness_file))
+sc_require_test_exit_idiom:
+       @if test -f $(srcdir)/$(Exit_witness_file); then                \
+         die=0;                                                        \
+         for i in $$(grep -l -F 'srcdir/$(Exit_base)'                  \
+               $$($(VC_LIST) tests)); do                               \
+           tail -n1 $$i | grep '^Exit .' > /dev/null                   \
+             && : || { die=1; echo $$i; }                              \
+         done;                                                         \
+         test $$die = 1 &&                                             \
+           { echo 1>&2 '$(ME): the final line in each of the above is not:'; \
+             echo 1>&2 'Exit something';                               \
+             exit 1; } || :;                                           \
+       fi
+
+sc_the_the:
+       @re='\<the ''the\>'                                             \
+       ignore_case=1 msg='found use of "the ''the";'                   \
+         $(_prohibit_regexp)
+
+sc_trailing_blank:
+       @re='[   ]$$'                                                   \
+       msg='found trailing blank(s)'                                   \
+         $(_prohibit_regexp)
+
+# Match lines like the following, but where there is only one space
+# between the options and the description:
+#   -D, --all-repeated[=delimit-method]  print all duplicate lines\n
+longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)?
+sc_two_space_separator_in_usage:
+       @grep -nE '^   *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$'         \
+           $$($(VC_LIST_EXCEPT)) &&                                    \
+         { echo "$(ME): help2man requires at least two spaces between"; \
+           echo "$(ME): an option and its description";                \
+               1>&2; exit 1; } || :
+
+# Look for diagnostics that aren't marked for translation.
+# This won't find any for which error's format string is on a separate line.
+sc_unmarked_diagnostics:
+       @grep -nE                                                       \
+           '\<error \([^"]*"[^"]*[a-z]{3}' $$($(VC_LIST_EXCEPT))       \
+         | grep -v '_''(' &&                                           \
+         { echo '$(ME): found unmarked diagnostic(s)' 1>&2;            \
+           exit 1; } || :
+
+# Avoid useless parentheses like those in this example:
+# #if defined (SYMBOL) || defined (SYM2)
+sc_useless_cpp_parens:
+       @grep -n '^# *if .*defined *(' $$($(VC_LIST_EXCEPT)) &&         \
+         { echo '$(ME): found useless parentheses in cpp directive'    \
+               1>&2; exit 1; } || :
+
+# Require the latest GPL.
+sc_GPL_version:
+       @re='either ''version [^3]' msg='GPL vN, N!=3'                  \
+         $(_prohibit_regexp)
+
+cvs_keywords = \
+  Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State
+
+sc_prohibit_cvs_keyword:
+       @re='\$$($(cvs_keywords))\$$'                                   \
+           msg='do not use CVS keyword expansion'                      \
+         $(_prohibit_regexp)
+
+# Make sure we don't use st_blocks.  Use ST_NBLOCKS instead.
+# This is a bit of a kludge, since it prevents use of the string
+# even in comments, but for now it does the job with no false positives.
+sc_prohibit_stat_st_blocks:
+       @re='[.>]st_blocks' msg='do not use st_blocks; use ST_NBLOCKS'  \
+         $(_prohibit_regexp)
+
+# Make sure we don't define any S_IS* macros in src/*.c files.
+# They're already defined via gnulib's sys/stat.h replacement.
+sc_prohibit_S_IS_definition:
+       @re='^ *# *define  *S_IS'                                       \
+       msg='do not define S_IS* macros; include <sys/stat.h>'          \
+         $(_prohibit_regexp)
+
+# Each program that uses proper_name_utf8 must link with
+# one of the ICONV libraries.
+sc_proper_name_utf8_requires_ICONV:
+       @progs=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\
+       if test "x$$progs" != x; then                                   \
+         fail=0;                                                       \
+         for p in $$progs; do                                          \
+           dir=$$(dirname "$$p");                                      \
+           base=$$(basename "$$p" .c);                                 \
+           grep "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \
+             || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
+         done;                                                         \
+         test $$fail = 1 &&                                            \
+           { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \
+             exit 1; } || :;                                           \
+       fi
+
+# Warn about "c0nst struct Foo const foo[]",
+# but not about "char const *const foo" or "#define const const".
+sc_redundant_const:
+       @re='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b'                \
+       msg='redundant "const" in declarations'                         \
+         $(_prohibit_regexp)
+
+sc_const_long_option:
+       @grep '^ *static.*struct option ' $$($(VC_LIST_EXCEPT))         \
+         | grep -Ev 'const struct option|struct option const' && {     \
+             echo 1>&2 '$(ME): add "const" to the above declarations'; \
+             exit 1; } || :
+
+NEWS_hash =                                                            \
+  $$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p'             \
+       $(srcdir)/NEWS                                                  \
+     | grep -v '^Copyright .*Free Software'                            \
+     | md5sum -                                                                
\
+     | sed 's/ .*//')
+
+# Ensure that we don't accidentally insert an entry into an old NEWS block.
+sc_immutable_NEWS:
+       @if test -f $(srcdir)/NEWS; then                                \
+         test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : ||              \
+           { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \
+       fi
+
+# Update the hash stored above.  Do this after each release and
+# for any corrections to old entries.
+update-NEWS-hash: NEWS
+       perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \
+         $(srcdir)/cfg.mk
+
+# Ensure that we use only the standard $(VAR) notation,
+# not @...@ in Makefile.am, now that we can rely on automake
+# to emit a definition for each substituted variable.
+# We use perl rather than "grep -nE ..." to exempt a single
+# use of an @address@hidden variable name in src/Makefile.am.
+sc_makefile_check:
+       @perl -ne '/address@hidden@/ && !/^cu_install_program =/'       \
+         -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}'    \
+           $$($(VC_LIST_EXCEPT) | grep -E '(^|/)Makefile\.am$$')       \
+         && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-date-check: NEWS
+       today=`date +%Y-%m-%d`;                                         \
+       if head $(srcdir)/NEWS | grep '^\*.* $(VERSION_REGEXP) ('$$today')' \
+           >/dev/null; then                                            \
+         :;                                                            \
+       else                                                            \
+         echo "version or today's date is not in NEWS" 1>&2;           \
+         exit 1;                                                       \
+       fi
+
+sc_makefile_TAB_only_indentation:
+       @grep -nE '^    [ ]{8}'                                         \
+           $$($(VC_LIST_EXCEPT) | grep -E 'akefile|\.mk$$')            \
+         && { echo '$(ME): found TAB-8-space indentation' 1>&2;        \
+              exit 1; } || :
+
+sc_m4_quote_check:
+       @grep -nE '(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]'              \
+           $$($(VC_LIST_EXCEPT) | grep -E '(^configure\.ac|\.m4)$$')   \
+         && { echo '$(ME): quote the first arg to AC_DEF*' 1>&2;       \
+              exit 1; } || :
+
+fix_po_file_diag = \
+'you have changed the set of files with translatable diagnostics;\n\
+apply the above patch\n'
+
+# Verify that all source files using _() are listed in po/POTFILES.in.
+po_file = po/POTFILES.in
+sc_po_check:
+       @if test -f $(po_file); then                                    \
+         grep -E -v '^(#|$$)' $(po_file)                               \
+           | grep -v '^src/false\.c$$' | sort > address@hidden;                
        \
+         files=;                                                       \
+         for file in $$($(VC_LIST_EXCEPT)) lib/*.[ch]; do              \
+           test -r $$file || continue;                                 \
+           case $$file in                                              \
+             *.m4|*.mk) continue ;;                                    \
+             *.?|*.??) ;;                                              \
+             *) continue;;                                             \
+           esac;                                                       \
+           case $$file in                                              \
+           *.[ch])                                                     \
+             base=`expr " $$file" : ' \(.*\)\..'`;                     \
+             { test -f $$base.l || test -f $$base.y; } && continue;;   \
+           esac;                                                       \
+           files="$$files $$file";                                     \
+         done;                                                         \
+         grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files          \
+           | sort -u > address@hidden;                                         
\
+         diff -u -L $(po_file) -L $(po_file) address@hidden address@hidden     
                \
+           || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; };   \
+         rm -f address@hidden address@hidden;                                  
        \
+       fi
+
+# Sometimes it is useful to change the PATH environment variable
+# in Makefiles.  When doing so, it's better not to use the Unix-centric
+# path separator of `:', but rather the automake-provided `$(PATH_SEPARATOR)'.
+msg = '$(ME): Do not use `:'\'' above; use $$(PATH_SEPARATOR) instead'
+sc_makefile_path_separator_check:
+       @grep -nE 'PATH[=].*:'                                          \
+           $$($(VC_LIST_EXCEPT) | grep -E 'akefile|\.mk$$')            \
+         && { echo $(msg) 1>&2; exit 1; } || :
+
+# Check that `make alpha' will not fail at the end of the process.
+writable-files:
+       if test -d $(release_archive_dir); then :; else                 \
+         for file in $(distdir).tar.gz                                 \
+                     $(release_archive_dir)/$(distdir).tar.gz; do      \
+           test -e $$file || continue;                                 \
+           test -w $$file                                              \
+             || { echo ERROR: $$file is not writable; fail=1; };       \
+         done;                                                         \
+         test "$$fail" && exit 1 || : ;                                \
+       fi
+
+v_etc_file = lib/version-etc.c
+sample-test = tests/sample-test
+texi = doc/$(PACKAGE).texi
+# Make sure that the copyright date in $(v_etc_file) is up to date.
+# Do the same for the $(sample-test) and the main doc/.texi file.
+sc_copyright_check:
+       @if test -f $(v_etc_file); then                                 \
+         grep 'enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' $(v_etc_file) \
+           >/dev/null                                                  \
+         || { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
+              exit 1; };                                               \
+       fi
+       @if test -f $(sample-test); then                                \
+         grep '# Copyright (C) '$$(date +%Y)' Free' $(sample-test)     \
+           >/dev/null                                                  \
+         || { echo 'out of date copyright in $(sample-test); update it' 1>&2; \
+              exit 1; };                                               \
+       fi
+       @if test -f $(texi); then                                       \
+         grep 'Copyright @copyright{} .*'$$(date +%Y)' Free' $(texi)   \
+           >/dev/null                                                  \
+         || { echo 'out of date copyright in $(texi); update it' 1>&2; \
+              exit 1; };                                               \
+       fi
+
+vc-diff-check:
+       (unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
+       if test -s vc-diffs; then                               \
+         cat vc-diffs;                                         \
+         echo "Some files are locally modified:" 1>&2;         \
+         exit 1;                                               \
+       else                                                    \
+         rm vc-diffs;                                          \
+       fi
+
+# Use this to make sure we don't run these programs when building
+# from a virgin tgz file, below.
+null_AM_MAKEFLAGS = \
+  ACLOCAL=false \
+  AUTOCONF=false \
+  AUTOMAKE=false \
+  AUTOHEADER=false \
+  MAKEINFO=false
+
+built_programs = $$(cd src && MAKEFLAGS= $(MAKE) -s built_programs.list)
+
+rel-files = $(DIST_ARCHIVES)
+
+gnulib_dir ?= $(srcdir)/gnulib
+gnulib-version = $$(cd $(gnulib_dir) && git describe)
+bootstrap-tools ?= autoconf,automake,gnulib
+
+announcement: NEWS ChangeLog $(rel-files)
+       @$(build_aux)/announce-gen                                      \
+           --release-type=$(RELEASE_TYPE)                              \
+           --package=$(PACKAGE)                                        \
+           --prev=$(PREV_VERSION)                                      \
+           --curr=$(VERSION)                                           \
+           --gpg-key-id=$(gpg_key_ID)                                  \
+           --news=NEWS                                                 \
+           --bootstrap-tools=$(bootstrap-tools)                        \
+           --gnulib-version=$(gnulib-version)                          \
+           --no-print-checksums                                        \
+           $(addprefix --url-dir=, $(url_dir_list))
+
+## ---------------- ##
+## Updating files.  ##
+## ---------------- ##
+
+ftp-gnu = ftp://ftp.gnu.org/gnu
+www-gnu = http://www.gnu.org
+
+emit_upload_commands:
+       @echo =====================================
+       @echo =====================================
+       @echo "$(build_aux)/gnupload $(GNUPLOADFLAGS) \\"
+       @echo "    --to $(gnu_rel_host):$(PACKAGE) \\"
+       @echo "  $(rel-files)"
+       @echo '# send the /tmp/announcement e-mail'
+       @echo =====================================
+       @echo =====================================
+
+noteworthy = * Noteworthy changes in release ?.? (????-??-??) [?]
+define emit-commit-log
+  printf '%s\n' 'post-release administrivia' '' \
+    '* NEWS: Add header line for next release.' \
+    '* .prev-version: Record previous version.' \
+    '* cfg.mk (old_NEWS_hash): Auto-update.'
+endef
+
+.PHONY: no-submodule-changes
+no-submodule-changes:
+       if test -d $(srcdir)/.git; then                                 \
+         diff=$$(cd $(srcdir) && git submodule -q foreach              \
+                 git diff-index --name-only HEAD)                      \
+           || exit 1;                                                  \
+         case $$diff in '') ;;                                         \
+           *) echo '$(ME): submodule files are locally modified:';     \
+               echo "$$diff"; exit 1;; esac;                           \
+       else                                                            \
+         : ;                                                           \
+       fi
+
+.PHONY: alpha beta stable
+ALL_RECURSIVE_TARGETS += alpha beta stable
+alpha beta stable: $(local-check) writable-files no-submodule-changes
+       test $@ = stable                                                \
+         && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$'         \
+              || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
+         || :
+       $(MAKE) vc-diff-check
+       $(MAKE) news-date-check
+       $(MAKE) distcheck
+       $(MAKE) dist XZ_OPT=-9ev
+       $(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir)
+       if test -d $(release_archive_dir); then                 \
+         ln $(rel-files) $(release_archive_dir);               \
+         chmod a-w $(rel-files);                               \
+       fi
+       $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
+       echo $(VERSION) > $(prev_version_file)
+       $(MAKE) update-NEWS-hash
+       perl -pi -e '$$. == 3 and print "$(noteworthy)\n\n\n"' NEWS
+       $(emit-commit-log) > .ci-msg
+       $(VC) commit -F .ci-msg -a
+
+.PHONY: web-manual
+web-manual:
+       @test -z "$(manual_title)" \
+         && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
+       @cd '$(srcdir)/doc'; \
+         $(SHELL) ../build-aux/gendocs.sh -o '$(abs_builddir)/doc/manual' \
+            --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
+           "$(PACKAGE_NAME) - $(manual_title)"
+       @echo " *** Upload the doc/manual directory to web-cvs."
+
+# Code Coverage
+
+init-coverage:
+       $(MAKE) $(AM_MAKEFLAGS) clean
+       lcov --directory . --zerocounters
+
+COVERAGE_CCOPTS ?= "-g --coverage"
+COVERAGE_OUT ?= doc/coverage
+
+build-coverage:
+       $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) 
CXXFLAGS=$(COVERAGE_CCOPTS)
+       $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) 
CXXFLAGS=$(COVERAGE_CCOPTS) check
+       mkdir -p $(COVERAGE_OUT)
+       lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \
+               --capture
+
+gen-coverage:
+       genhtml --output-directory $(COVERAGE_OUT) \
+               $(COVERAGE_OUT)/$(PACKAGE).info \
+               --highlight --frames --legend \
+               --title "$(PACKAGE_NAME)"
+
+coverage: init-coverage build-coverage gen-coverage
+
+# Update gettext files.
+PACKAGE ?= $(shell basename $(PWD))
+PO_DOMAIN ?= $(PACKAGE)
+POURL = http://translationproject.org/latest/$(PO_DOMAIN)/
+PODIR ?= po
+refresh-po:
+       rm -f $(PODIR)/*.po && \
+       echo "$(ME): getting translations into po (please ignore the robots.txt 
ERROR 404)..." && \
+       wget --no-verbose --directory-prefix $(PODIR) --no-directories 
--recursive --level 1 --accept .po --accept .po.1 $(POURL) && \
+       echo 'address@hidden' > $(PODIR)/LINGUAS && \
+       echo 'address@hidden' >> $(PODIR)/LINGUAS && \
+       ls $(PODIR)/*.po | sed 's/\.po//' | sed 's,$(PODIR)/,,' | sort >> 
$(PODIR)/LINGUAS
+
+INDENT_SOURCES ?= $(C_SOURCES)
+.PHONY: indent
+indent:
+       indent $(INDENT_SOURCES)
+
+# If you want to set UPDATE_COPYRIGHT_* environment variables,
+# put the assignments in this variable.
+update-copyright-env ?=
+
+# Run this rule once per year (usually early in January)
+# to update all FSF copyright year lists in your project.
+# If you have an additional project-specific rule,
+# add it in cfg.mk along with a line 'update-copyright: prereq'.
+# By default, exclude all variants of COPYING; you can also
+# add exemptions (such as ChangeLog..* for rotated change logs)
+# in the file .x-update-copyright.
+.PHONY: update-copyright
+update-copyright:
+       grep -l -w Copyright                                             \
+         $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
+         | $(update-copyright-env) xargs $(build_aux)/$@
diff --git a/module/system/vm/debug.scm b/module/system/vm/debug.scm
index 7401112..04e3d64 100644
--- a/module/system/vm/debug.scm
+++ b/module/system/vm/debug.scm
@@ -1,21 +1,20 @@
 ;;; Guile VM debugging facilities
 
-;; Copyright (C) 2001 Free Software Foundation, Inc.
-
-;; This program 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.
-;; 
-;; This program 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 this program; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;;; Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+;;;
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 3 of the License, or (at your option) any later version.
+;;;
+;;; This library 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
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this library; if not, write to the Free Software
+;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
USA
 
 ;;; Code:
 
diff --git a/module/system/vm/frame.scm b/module/system/vm/frame.scm
index ace7d59..628a0ed 100644
--- a/module/system/vm/frame.scm
+++ b/module/system/vm/frame.scm
@@ -2,19 +2,19 @@
 
 ;;; Copyright (C) 2001, 2005, 2009 Free Software Foundation, Inc.
 ;;;
-;;; This program 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 of the License, or
-;;; (at your option) any later version.
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 3 of the License, or (at your option) any later version.
 ;;;
-;;; This program is distributed in the hope that it will be useful,
+;;; This library 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.
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; Lesser General Public License for more details.
 ;;;
-;;; 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this library; if not, write to the Free Software
+;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
USA
 
 ;;; Code:
 
diff --git a/module/system/vm/vm.scm b/module/system/vm/vm.scm
index 48dc4f2..6881703 100644
--- a/module/system/vm/vm.scm
+++ b/module/system/vm/vm.scm
@@ -1,21 +1,20 @@
 ;;; Guile VM core
 
-;; Copyright (C) 2001 Free Software Foundation, Inc.
-
-;; This program 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.
-;; 
-;; This program 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 this program; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;;; Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+;;;
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 3 of the License, or (at your option) any later version.
+;;;
+;;; This library 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
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this library; if not, write to the Free Software
+;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 
USA
 
 ;;; Code:
 
diff --git a/qt/CHANGES b/qt/CHANGES
deleted file mode 100644
index 1b74921..0000000
--- a/qt/CHANGES
+++ /dev/null
@@ -1,15 +0,0 @@
-QuickThreads 002: Changes since QuickThreads 001.
-
- - Now can be used by C++ programs.
- - Now *really* works with stacks that grow up.
- - Supports AXP OSF 2.x cc's varargs.
- - Supports HP Precision (HP-PA) on workstations and Convex.
- - Supports assemblers for Intel iX86 ith only '//'-style comments.
- - Supports Silicon Graphics Irix 5.x with dynamic linking.
- - Supports System V and Solaris 2.x with no `_' on compiler-generated
-   identifiers; *some* platforms only.
-
-Note: not all "./config" arguments are compatible with QT 001.
-
-
-QuickThreads 001: Base version.
diff --git a/qt/ChangeLog-2008 b/qt/ChangeLog-2008
deleted file mode 100644
index bc9c1b9..0000000
--- a/qt/ChangeLog-2008
+++ /dev/null
@@ -1,283 +0,0 @@
-2003-04-13  Rob Browning  <address@hidden>
-
-       * md/axp.s '.file 2 "axp.s"' -> '.file 2 "axp.s".
-       (qt_vstart): .end qt_vstart, not qt_start.  Thanks to Falk
-       Hueffner.
-
-2002-08-24  Marius Vollmer  <address@hidden>
-
-       * md/Makefile.am (EXTRA_DIST): Added arm.h and arm.s.
-
-2002-07-17  Marius Vollmer  <address@hidden>
-
-       * arm.s, arm.h: New. 
-
-2002-02-24  Rob Browning  <address@hidden>
-
-       * Makefile.am (libqthreads_la_LDFLAGS): use @address@hidden
-
-2001-11-21  Gary Houston  <address@hidden>
-
-       * Makefile.am (OMIT_DEPENDENCIES): removed, since it seems to be
-       obsolete.  autogen.sh says:
-       invalid unused variable name: `OMIT_DEPENDENCIES'
-
-2001-11-04  Stefan Jahn  <address@hidden>
-
-       * md/Makefile.am (EXTRA_DIST): Added `i386.asm'.
-
-       * md/i386.asm: New file.  Contains the Intel syntax version for
-       nasm/tasm/masm of the file `i386.s'.
-
-       * qt.h.in: Definition of QT_API, QT_IMPORT and QT_EXPORT.
-       Prefixed each symbols which is meant to go into a DLL.
-
-       * Makefile.am (libqthreads_la_LDFLAGS):  Put `-no-undefined' 
-       into LDFLAGS to support linkers which do not allow unresolved 
-       symbols inside shared libraries.
-       (EXTRA_DIST): Add `libqthreads.def', which is an export file 
-       definition for M$-Windows.  It defines exported symbols.  This is
-       necessary because the M$VC linker does not know how to export
-       assembler symbols into a DLL.
-
-2001-08-25  Marius Vollmer  <address@hidden>
-
-       * Makefile.am, md/Makefile.am, time/Makefile.am:
-       (AUTOMAKE_OPTIONS): Change "foreign" to "gnu".
-
-2001-08-15  Rob Browning  <address@hidden>
-
-       * Makefile.am (libqthreads_la_LDFLAGS): use libtool interface version
-       variables.
-
-2000-06-12  Mikael Djurfeldt  <address@hidden>
-
-       * Makefile.am (OMIT_DEPENDENCIES): Defined to contain the list of
-       machine specific headers.  This is necessary, otherwise automake
-       will include a dependency specific for the machine on which the
-       distribution archive was built.
-
-2000-04-21  Mikael Djurfeldt  <address@hidden>
-
-       * *.*: Change includes so that they always use the "prefixes"
-       libguile/, qt/, guile-readline/, or libltdl/.
-
-       * Makefile.am (DEFS): Added.  automake adds -I options to DEFS,
-       and we don't want that.
-       (INCLUDES): Removed all -I options except for the root source
-       directory and the root build directory.
-       
-1999-10-05  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Deleted from CVS
-       repository.  Run the autogen.sh script to create generated files
-       like this one.
-
-1999-09-11  Jim Blandy  <address@hidden>
-
-       * time/Makefile.in: Regenerated.
-       * md/Makefile.in: Regenerated.
-       * Makefile.in: Regenerated.
-
-1999-04-17  Jim Blandy  <address@hidden>
-
-       * Makefile.in, time/Makefile.in: Regenerated.
-
-1998-10-16  Jim Blandy  <address@hidden>
-
-       * md/i386.s: Remove nested comment starter, to quiet warnings.
-
-       * Makefile.am (.s.lo): Supply our own rule here, which passes
-       qthread_asflags through.  See today's change to ../qthreads.m4.
-       * Makefile.in, qt/Makefile.in, time/Makefile.in: Regenerated.
-
-1998-10-03  Jim Blandy  <address@hidden>
-
-       * Makefile.in: Regenerated with a patched automake, to get
-       dependency generation right when using EGCS.
-
-1998-09-29  Jim Blandy  <address@hidden>
-
-       * stp.h (stp_create): Doc fix.
-
-1998-07-30  Jim Blandy  <address@hidden>
-
-       * qt.h.in (qt_null, qt_error): Add prototypes for these.
-
-1998-07-29  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated using
-       the last public version of automake, not the hacked Cygnus
-       version.
-
-1998-07-28  Jim Blandy  <address@hidden>
-
-       * time/Makefile.in, md/Makefile.in, Makefile.in: Regenerated,
-       after removing Totoro kludge.
-
-1998-07-26  Jim Blandy  <address@hidden>
-
-       Use libtool, and the thread configuration mechanism.
-       * Makefile.am (lib_LTLIBRARIES, EXTRA_LTLIBRARIES,
-       libqthreads_la_SOURCES, libqthreads_la_LIBADD): These replace
-       lib_LIBRARIES, EXTRA_LIBRARIES, libqthreads_a_SOURCES,
-       libqthreads_a_LIBADD.  Use the variables set by the new config
-       system.
-       (libqthreads_la_DEPENDENCIES): New var.
-       (libqthreads_la_LDFLAGS): Add -rpath; automake claims it can't set
-       it itself, but I don't completely understand why.
-       (qtmds.o, qtmdc.o): Rules removed.  Use implicit build rules.
-       (qtmds.s, qtmdc.c, qtdmdb.s): Rules added, to make symlinks to the
-       appropriate files in the source tree.
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated.
-
-1998-04-15  Mikael Djurfeldt  <address@hidden>
-
-       * qt.h.in: Declare return type of qt_abort as void.
-
-1997-12-02  Tim Pierce  <address@hidden>
-
-       * md/axp.s (qt_vstart): Typo fixes, thanks to Alexander Jolk.
-
-Sat Oct 25 02:54:11 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.am: Call the library libqthreads.a, not libqt.a.  The
-       old name conflicts with the Qt user interface toolkit.
-       * Makefile.in: Regenerated.
-
-Mon Sep 29 23:54:28 1997  Jim Blandy  <address@hidden>
-
-       * time/Makefile.in: Regenerated with automake 1.2c.
-
-       * md/Makefile.in: Regenerated with automake 1.2c.
-
-       * Makefile.in: Regenerated with automake 1.2c.
-
-Sat Sep 27 23:14:13 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated with
-       automake 1.2a.
-
-Thu Aug 28 23:49:19 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated.
-
-Wed Aug 27 17:43:38 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated, so
-       it uses "tar", not "gtar".
-
-       * config: Use the QuickThreads assembler fragment with Irix
-       dynamic linking support for Irix 6 as well as Irix 5.  Thanks to
-       Jesse Glick.
-
-Wed Jul 23 20:32:42 1997  Mikael Djurfeldt  <address@hidden>
-
-       * md/axp.s, md/axp_b.s: Changed comments from C-style to # to
-       please the alpha assembler.
-
-Sun Jun 22 18:44:11 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated after
-       timestamp change; see ../ChangeLog.
-
-Wed Jun 11 00:33:10 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated after
-       xtra_PLUGIN_guile_libs change in ../configure.in.
-
-Tue May 13 16:40:06 1997  Jim Blandy  <address@hidden>
-
-       * Makefile.in: Regenerated, using automake-1.1p.
-
-Sun Apr 27 18:00:06 1997  Jim Blandy  <address@hidden>
-
-       * aclocal.m4: Removed; unnecessary, given changes of Apr 24.
-
-Thu Apr 24 01:37:49 1997  Jim Blandy  <address@hidden>
-
-       Get 'make dist' to work again.
-       * Makefile.am (EXTRA_DIST): Remove PLUGIN files.
-       * Makefile.in: Regenerated, like the secret sachets of seven
-       sultry sailors.
-
-       Changes for reduced Guile distribution: one configure script,
-       no plugins.
-       * configure.in, configure: Removed.
-       * Makefile.in, md/Makefile.in, time/Makefile.in: Regenerated.
-
-Tue Apr 15 17:46:54 1997  Jim Blandy  <address@hidden>
-
-       * PLUGIN/OPT: Don't mention "threads", because that causes
-       "threads" to appear in the list of directories to be configured.
-       Just say enough to get qt to appear in the list.  I don't think qt
-       needs to be built before or after anything else in particular...
-
-Mon Feb 24 21:47:16 1997  Mikael Djurfeldt  <address@hidden>
-
-       * configure.in: Added AM_MAINTAINER_MODE
-
-Sun Feb  9 15:20:59 1997  Mikael Djurfeldt  <address@hidden>
-
-       * configure.in: Added changequote(,) before the host case (since
-       we use [ and ] in a pattern).
-       * configure: Regenerated.
-
-Fri Feb  7 18:00:07 1997  Jim Blandy  <address@hidden>
-
-       * configure.in: Recognize i686 as an okay processor too.
-       * configure: Regenerated.
-
-Mon Dec  9 17:55:59 1996  Jim Blandy  <address@hidden>
-
-       We need to name the object files produced from the
-       machine-dependent C and assembler files qtmds.o and qtmdc.o, but
-       using -c and -o together on the cc command line isn't portable.
-       * configure.in: Generate the names of the .o files here, and
-       substitute them into Makefile.
-       * Makefile.am (qtmds.o, qtmdc.o): Let CC name them what it wants,
-       and then rename them when it's done.
-       (configure, Makefile.in): Regenerated.
-
-Sat Nov 30 23:59:06 1996  Tom Tromey  <address@hidden>
-
-       * PLUGIN/greet: Removed.
-       * Makefile.am, md/Makefile.am, time/Makefile.am, aclocal.m4: New
-       files.
-       * configure.in: Updated for Automake.
-
-Sun Nov 10 17:40:47 1996  Jim Blandy  <address@hidden>
-
-       * configure.in, Makefile.in: The 'install' and 'uninstall'
-       Makefile targets should be affected by whether or not we have a
-       port to the current target architecture too, not just the 'all'
-       target.
-
-Wed Oct  9 19:40:13 1996  Jim Blandy  <address@hidden>
-
-       * configure.in: If we don't have a port to the current machine,
-       just arrange for 'make all' to do nothing.  Don't abort
-       configuration.  We need a fully configured directory tree in order
-       to make distributions and the like.
-
-       * Makefile.in (distfiles): Update for the new directory structure.
-       (plugin_distfiles, md_distfiles, time_distfiles): New variables.
-       (dist-dir): New target; use all the above to build a subtree of a
-       distribution.
-       (manifest): Target deleted.
-
-Tue Oct  1 02:06:19 1996  Mikael Djurfeldt  <address@hidden>
-
-       * configure.in: Solaris 2 should use sparc.s.
-       *Older* systems use _sparc.s
-
-Fri Mar 29 11:50:20 1996  Anthony Green  <address@hidden>
-
-       * configure: Rebuilt
-       * Makefile.in, configure.in: Fixed installation.
-
-Fri Mar 22 16:20:27 1996  Anthony Green  (address@hidden)
-
-       * all files: installed qt-002 package. Autoconfiscated.
-
-
diff --git a/qt/INSTALL b/qt/INSTALL
deleted file mode 100644
index 5b20f5d..0000000
--- a/qt/INSTALL
+++ /dev/null
@@ -1,81 +0,0 @@
-Installation of the `QuickThreads' threads-building toolkit.
-
-* Notice
-
-QuickThreads -- Threads-building toolkit.
-Copyright (c) 1993 by David Keppel
-
-Permission to use, copy, modify and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice and this notice
-appear in all copies.  This software is provided as a
-proof-of-concept and for demonstration purposes; there is no
-representation about the suitability of this software for any
-purpose.
-
-
-* Configuration
-
-Configure with
-
-       ./config *machtype*
-
-where "*machtype*" is one of the supported target machines.  As of
-October 1994, the supported machines (targets) are:
-
-       axp --  All Digital Equipment Corporation AXP (DEC Alpha)
-               processors, compile with GNU CC
-       axp-osf1 -- AXP running OSF 1.x
-       axp-osf2 -- AXP running OSF 2.x
-       hppa -- HP's PA-RISC 1.1 processor
-       hppa-cnx-spp -- Convex SPP (PA-RISC 1.1 processor)
-       iX86 -- 80386, 80486, and 80586-compatible processors
-               See notes below for OS/2.
-       iX86-ss -- 'iX86 for assemblers that use slash-slash ('//')
-               comments.
-       ksr1 -- All KSR processors
-       m88k -- All members of the Motorola 88000 family
-       mips -- MIPS R2000 and R3000 processors
-       mips-irix5 -- Irix 5.xx (use `mips' for Irix 4.xx)
-       sparc-os1 -- V8-compliant SPARC processors using compilers
-               that prefix labels (e.g. "foo" appears as "_foo")
-               Includes Solaris 1 (SunOS 4.X).
-       sparc-os2 -- V8-compliant SPARC processors using compilers
-               that do not prefix labels.  Includes Solaris 2.
-       vax --  All VAX processors
-
-In addition, the target `clean' will deconfigure QuickThreads.
-
-Note that a given machine target may not work on all instances of that
-machine because e.g., the assembler syntax varies from machine to
-machine.
-
-Note also that additions to a processor family may require a new
-target.  So, for example, the `vax' target might not work for all
-future VAX processors if, say, new VAX processors are introduced and
-they use separate floating-point registers.
-
-For OS/2, change `ranlib' to `ar -s', `configure' to `configure.cmd'
-(or was that `config' to `config.cmd'?), and replace the soft links
-(`ln -s') with plain copies.
-
-
-* Build
-
-To build the QuickThreads library, first configure (see above) then
-type `make libqt.a' in the top-level directory.
-
-To build the demonstration threads package, SimpleThreads, type
-`make libstp.a' in the top-level directory.
-
-To build an executable ``stress-test'' and measurement program, type
-`make run' in the top-level directory.  Run `time/raw' to run the
-stress tests.
-
-
-* Installation
-
-Build the QuickThreads library (see above) and then copy `libqt.a' to
-the installation library directory (e.g., /usr/local/lib) and `qt.h'
-and `qtmd.h' to the installation include directory (e.g.,
-/usr/local/include).
diff --git a/qt/Makefile.am b/qt/Makefile.am
deleted file mode 100644
index 8a15fb6..0000000
--- a/qt/Makefile.am
+++ /dev/null
@@ -1,54 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-##
-##     Copyright (C) 1998, 2000, 2006 Free Software Foundation, Inc.
-##
-##   This file is part of GUILE.
-##   
-##   GUILE is free software; you can redistribute it and/or modify it
-##   under the terms of the GNU Lesser General Public License as
-##   published by the Free Software Foundation; either version 3, or
-##   (at your option) any later version.
-##
-##   GUILE 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 Lesser General Public License for more details.
-##
-##   You should have received a copy of the GNU Lesser General Public
-##   License along with GUILE; see the file COPYING.LESSER.  If not,
-##   write to the Free Software Foundation, Inc., 51 Franklin Street,
-##   Fifth Floor, Boston, MA 02110-1301 USA
-
-AUTOMAKE_OPTIONS = gnu
-
-## subdirs are for making distributions only.
-SUBDIRS = md time
-
-lib_LTLIBRARIES = @QTHREAD_LTLIBS@
-EXTRA_LTLIBRARIES = libqthreads.la
-
-## Prevent automake from adding extra -I options
-DEFS = @DEFS@
-INCLUDES = -I.. -I$(srcdir)/..
-
-libqthreads_la_SOURCES = qt.c copyright.h
-libqthreads_la_LIBADD = qtmds.lo qtmdc.lo
-libqthreads_la_DEPENDENCIES = qtmds.lo qtmdc.lo
-libqthreads_la_LDFLAGS = -rpath $(libdir) -export-dynamic -no-undefined \
-  -version-info @LIBQTHREADS_INTERFACE@ 
-
-# Seems to be obsolete - autogen.sh is giving:
-# invalid unused variable name: `OMIT_DEPENDENCIES'
-#OMIT_DEPENDENCIES = axp.h hppa.h i386.h ksr.h m88k.h mips.h sparc.h vax.h
-
-.s.lo:
-       $(LIBTOOL) --mode=compile $(COMPILE) $(qthread_asflags) -c $<
-qtmds.s:
-       ${LN_S} ${srcdir}/${qtmds_s} qtmds.s
-qtmdc.c:
-       ${LN_S} ${srcdir}/${qtmdc_c} qtmdc.c
-qtdmdb.s:
-       ${LN_S} ${srcdir}/${qtdmdb_s} qtdmdb.s
-
-EXTRA_DIST = CHANGES README.MISC README.PORT b.h meas.c stp.c stp.h \
-       Makefile.base config libqthreads.def
diff --git a/qt/Makefile.base b/qt/Makefile.base
deleted file mode 100644
index 73a082f..0000000
--- a/qt/Makefile.base
+++ /dev/null
@@ -1,112 +0,0 @@
-.SUFFIXES: .c .o .s .E
-
-#
-# Need to include from the current directory because "qt.h"
-# will include <qtmd.h>.
-#
-CFLAGS       = -I. -g
-
-#
-# Fix this to be something meaningful for your system.
-#
-DEST         = /dev/null
-
-DOC          = users.tout
-
-EXTHDRS              = /usr/include/stdio.h
-
-HDRS         = qt.h \
-               qtmd.h \
-               stp.h
-
-LDFLAGS              = $(CFLAGS)
-
-EXTLIBS       =
-
-LIBS         = libstp.a libqt.a
-
-LINKER       = $(CC)
-
-MAKEFILE      = Makefile
-
-M            = Makefile configuration
-
-OBJS         = qtmdb.o \
-               meas.o
-
-QTOBJS       = qt.o qtmds.o qtmdc.o
-
-STPOBJS              = stp.o
-
-PR           = -Pps
-
-PRINT        = pr
-
-PROGRAM              = run
-
-SRCS         = meas.c \
-               qt.c \
-               qtmdc.c \
-               qtmds.s \
-               qtmdb.s
-
-TMP_INIT      =        tmp.init
-TMP_SWAP      =        tmp.swap
-
-.DEFAULT:
-               co -q $@
-
-.c.E:          force
-               $(CC) $(CFLAGS) -E $*.c > $*.E
-
-all:           libqt.a libstp.a $(PROGRAM) $(M)
-
-libqt.a:       $(QTOBJS) $(M)
-               ar crv libqt.a $(QTOBJS)
-               ranlib libqt.a
-
-libstp.a:      $(STPOBJS) $(M)
-               ar crv libstp.a $(STPOBJS)
-               ranlib libstp.a
-
-$(PROGRAM):     $(OBJS) $(LIBS) $(M)
-               @echo "Loading $(PROGRAM) ... "
-#              ld -o $(PROGRAM) /lib/crt0.o $(OBJS) -lc
-               $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) $(EXTLIBS) -o $(PROGRAM)
-               @echo "done"
-
-clean:
-               rm -f $(OBJS) $(PROGRAM) $(TMP_INIT) $(TMP_SWAP) $(DOC)
-               rm -f libqt.a libstp.a
-               rm -f $(QTOBJS) $(STPOBJS)
-
-depend:;       @mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
-
-doc:           users.ms raw
-               time/assim < raw | grep "^init" | sed 's/^init //' > $(TMP_INIT)
-               time/assim < raw | grep "^swap" | sed 's/^swap //' > $(TMP_SWAP)
-               soelim users.ms | tbl $(PR) | troff -t $(PR) -ms > $(DOC)
-
-index:;                @ctags -wx $(HDRS) $(SRCS)
-
-print:;                @$(PRINT) $(HDRS) $(SRCS)
-
-program:        $(PROGRAM)
-
-tags:           $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
-
-update:                $(DEST)/$(PROGRAM)
-
-$(DEST)/$(PROGRAM): $(SRCS) $(LIBS) $(HDRS) $(EXTHDRS)
-               @make -f $(MAKEFILE) DEST=$(DEST) install
-
-QT_H =         qt.h $(QTMD_H)
-QTMD_H =       qtmd.h
-
-###
-qtmdb.o: $(M) qtmdb.s b.h
-meas.o: $(M) meas.c /usr/include/stdio.h $(QT_H) b.h stp.h
-qt.o: $(M) qt.c $(QT_H)
-stp.o: $(M) stp.c stp.h $(QT_H)
-qtmds.o: $(M) qtmds.s
-qtmdc.o: $(M) qtmdc.c $(QT_H)
diff --git a/qt/README b/qt/README
deleted file mode 100644
index b014b91..0000000
--- a/qt/README
+++ /dev/null
@@ -1,89 +0,0 @@
-This is a source code distribution for QuickThreads.  QuickThreads is a
-toolkit for building threads packages; it is described in detail in the
-University of Washington CS&E Technical report #93-05-06, available via
-anonymous ftp from `ftp.cs.washington.edu' (128.95.1.4, as of Oct. '94)
-in `tr/1993/05/UW-CSE-93-05-06.PS.Z'.
-
-This distribution shows basic ideas in QuickThreads and elaborates with
-example implementations for a gaggle of machines.  As of October those
-machines included:
-
-       80386 faimly
-       88000 faimily
-       DEC AXP (Alpha) family
-       HP-PA family
-       KSR
-       MIPS family
-       SPARC V8 family
-       VAX family
-
-Configuration, build, and installation are described in INSTALL.
-
-Be aware: that there is no varargs code for the KSR.
-
-The HP-PA port was designed to work with both HP workstations
-and Convex SPP computers. It was generously provided by Uwe Reder
-<address@hidden>. It is part of the ELiTE
-(Erlangen Lightweight Thread Environment) project directed by 
-Frank Bellosa <address@hidden> at the Operating 
-Systems Department of the University of Erlangen (Germany).
-
-Other contributors include: Weihaw Chuang, Richard O'Keefe,
-Laurent Perron, John Polstra, Shinji Suzuki, Assar Westerlund,
-thanks also to Peter Buhr and Dirk Grunwald.
-
-
-Here is a brief summary:
-
-QuickThreads is a toolkit for building threads packages.  It is my hope
-that you'll find it easier to use QuickThreads normally than to take it
-and modify the raw cswap code to fit your application.  The idea behind
-QuickThreads is that it should make it easy for you to write & retarget
-threads packages.  If you want the routine `t_create' to create threads
-and `t_block' to suspend threads, you write them using the QuickThreads
-`primitive' operations `QT_SP', `QT_INIT', and `QT_BLOCK', that perform
-machine-dependent initialization and blocking, plus code you supply for
-performing the portable operatons.  For example, you might write:
-
-       t_create (func, arg)
-       {
-         stk = malloc (STKSIZE);
-         stackbase = QT_SP (stk, STKSIZE);
-         sp = QT_INIT (stakcbase, func, arg);
-         qput (runq, sp);
-       }
-
-Threads block by doing something like:
-
-       t_block()
-       {
-         sp_next = qget (runq);
-         QT_BLOCK (helper, runq, sp_next);
-         // wake up again here
-       }
-
-       // called by QT_BLOCK after the old thread has blocked,
-       // puts the old thread on the queue `onq'.
-       helper (sp_old, onq)
-       {
-         qput (onq, sp_old);
-       }
-
-(Of course) it's actually a bit more complex than that, but the general
-idea is that you write portable code to allocate stacks and enqueue and
-dequeue threads.  Than, to get your threads package up and running on a
-different machine, you just reconfigure QuickThreads and recompile, and
-that's it.
-
-The QuickThreads `distribution' includes a sample threads package (look
-at stp.{c,h}) that is written in terms of QuickThreads operations.  The
-TR mentioned above explains the simple threads package in detail.
-
-
-
-If you do use QuickThreads, I'd like to hear both about what worked for
-you and what didn't work, problems you had, insights gleaned, etc.
-
-Let me know what you think.
-
-David Keppel <address@hidden>
diff --git a/qt/README.MISC b/qt/README.MISC
deleted file mode 100644
index d10e487..0000000
--- a/qt/README.MISC
+++ /dev/null
@@ -1,56 +0,0 @@
-Here's some machine-specific informatin for various systems:
-
-m88k on g88.sim
-
-       .g88init:
-               echo (gdb) target sim\n
-               target sim
-               echo (gdb) ecatch all\n
-               ecatch all
-               echo (gdb) break exit\n
-               break exit
-       % vi Makefile           // set CC and AS
-       % setenv MEERKAT /projects/cer/meerkat
-       % set path=($MEERKAT/bin $path)
-       % make run
-       % g88.sim run
-       (g88) run run N         // where `N' is the test number
-
-
-m88k on meerkats, cross compile as above (make run)
-
-       Run w/ g88:
-       %g88 run
-       (g88) source /homes/rivers/robertb/.gdbinit
-       (g88) me
-       which does
-       (g88) set $firstchars=6
-       (g88) set $resetonattach=1
-       (g88) attach /dev/pp0
-       then download
-       (g88) dl
-       and run with
-       (g88) continue
-
-       Really the way to run it is:
-       (g88) source
-       (g88) me
-       (g88) win
-       (g88) dead 1
-       (g88) dead 2
-       (g88) dead 3
-       (g88) dl
-       (g88) cont
-
-       To rerun
-       (g88) init
-       (g88) dl
-
-       To run simulated meerkat:
-       (g88) att sim
-       <<then use normal commands>>
-
-       On 4.5 g88:
-       (g88) target sim memsize
-       instead of attatch
-       (g88) ecatch all        # catch exception before becomes error
diff --git a/qt/README.PORT b/qt/README.PORT
deleted file mode 100644
index d563009..0000000
--- a/qt/README.PORT
+++ /dev/null
@@ -1,112 +0,0 @@
-Date: Tue, 11 Jan 94 13:23:11 -0800
-From: "address@hidden" <address@hidden>
-
->[What's needed to get `qt' on an i860-based machine?]
-
-Almost certainly "some assembly required" (pun accepted).
-
-To write a cswap port, you need to understand the context switching
-model.  Turn to figure 2 in the QT TR.  Here's about what the assembly
-code looks like to implement that:
-
-       qt_cswap:
-               adjust stack pointer
-               save callee-save registers on to old's stack
-               argument register <- old sp
-               sp <- new sp
-               (*helper)(args...)
-               restore callee-save registers from new's stack
-               unadjust stack pointer
-               return
-
-Once more in slow motion:
-
-       - `old' thread calls context switch routine (new, a0, a1, h)
-       - cswap routine saves registers that have useful values
-       - cswap routine switches to new stack
-       - cswap routine calls helper function (*h)(old, a0, a1)
-       - when helper returns, cswap routine restores registers
-         that were saved the last time `new' was suspended
-       - cswap routine returns to whatever `new' routine called the
-         context switch routine
-
-There's a few tricks here.  First, how do you start a thread running
-for the very first time?  Answer is: fake some stuff on the stack
-so it *looks* like it was called from the middle of some routine.
-When the new thread is restarted, it is treated like any other
-thread.  It just so happens that it's never really run before, but
-you can't tell that because the saved state makes it look like like
-it's been run.  The return pc is set to point at a little stub of
-assembly code that loads up registers with the right values and
-then calls `only'.
-
-Second, I advise you to forget about varargs routines (at least
-until you get single-arg routines up and running).
-
-Third, on most machines `qt_abort' is the same as `qt_cswap' except
-that it need not save any callee-save registers.
-
-Fourth, `qt_cswap' needs to save and restore any floating-point
-registers that are callee-save (see your processor handbook).  On
-some machines, *no* floating-point registers are callee-save, so
-`qt_cswap' is exactly the same as the integer-only cswap routine.
-
-I suggest staring at the MIPS code for a few minutes.  It's "mostly"
-generic RISC code, so it gets a lot of the flavor across without
-getting too bogged down in little nitty details.
-
-
-
-Now for a bit more detail:  The stack is laid out to hold callee-save
-registers.  On many machines, I implemented fp cswap as save fp
-regs, call integer cswap, and when integer cswap returns (when the
-thread wakes up again), restore fp regs.
-
-For thread startup, I figure out some callee-save registers that
-I use to hold parameters to the startup routine (`only').  When
-the thread is being started it doesn't have any saved registers
-that need to be restored, but I go ahead and let the integer context
-switch routine restore some registers then "return" to the stub
-code.  The stub code then copies the "callee save" registers to
-argument registers and calls the startup routine.  That keeps the
-stub code pretty darn simple.
-
-For each machine I need to know the machine's procedure calling
-convention before I write a port.  I figure out how many callee-save
-registers are there and allocate enough stack space for those
-registers.  I also figure out how parameters are passed, since I
-will need to call the helper function.  On most RISC machines, I
-just need to put the old sp in the 0'th arg register and then call
-indirect through the 3rd arg register; the 1st and 2nd arg registers
-are already set up correctly.  Likewise, I don't touch the return
-value register between the helper's return and the context switch
-routine's return.
-
-I have a bunch of macros set up to do the stack initialization.
-The easiest way to debug this stuff is to go ahead and write a C
-routine to do stack initialization.  Once you're happy with it you
-can turn it in to a macro.
-
-In general there's a lot of ugly macros, but most of them do simple
-things like return constants, etc.  Any time you're looking at it
-and it looks confusing you just need to remember "this is actually
-simple code, the only tricky thing is calling the helper between
-the stack switch and the new thread's register restore."
-
-
-You will almost certainly need to write the assembly code fragment
-that starts a thread.  You might be able to do a lot of the context
-switch code with `setjmp' and `longjmp', if they *happen* to have
-the "right" implementation.  But getting all the details right (the
-helper can return a value to the new thread's cswap routine caller)
-is probaby trickier than writing code that does the minimum and
-thus doesn't have any extra instructions (or generality) to cause
-problems.
-
-I don't know of any ports besides those included with the source
-code distribution.   If you send me a port I will hapily add it to
-the distribution.
-
-Let me know as you have questions and/or comments.
-
-       ;-D on  ( Now *that*'s a switch... )  Pardo
diff --git a/qt/b.h b/qt/b.h
deleted file mode 100644
index 862e78b..0000000
--- a/qt/b.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef B_H
-#define B_H    "$Header: 
/home/ludo/src/guile.cvs/gitification/guile-cvs/guile/guile-core/qt/b.h,v 1.1 
1996-10-01 03:27:25 mdj Exp $"
-
-#include "copyright.h"
-
-extern void b_call_reg (int n);
-extern void b_call_imm (int n);
-extern void b_add (int n);
-extern void b_load (int n);
-
-#endif /* ndef B_H */
diff --git a/qt/config b/qt/config
deleted file mode 100755
index e5b9505..0000000
--- a/qt/config
+++ /dev/null
@@ -1,308 +0,0 @@
-#! /bin/sh -x
-
-rm -f Makefile Makefile.md README.md qtmd.h qtmdb.s qtmdc.c qtmds.s 
configuration
-
-case $1 in
-       axp*)
-               : "DEC AXP"
-               case $1 in
-                       axp-osf1*)
-                               : "Compile using /bin/cc under OSF 1.x."
-                               ln -s md/axp.1.Makefile Makefile.md
-                               ;;
-                       axp-osf2*)
-                               : "Compile using /bin/cc under OSF 2.x."
-                               ln -s md/axp.1.Makefile Makefile.md
-                               ;;
-                       *)
-                               : "Compile using GNU CC."
-                               ln -s md/axp.Makefile Makefile.md
-                               ;;
-               esac
-
-               ln -s md/axp.h qtmd.h
-               ln -s md/axp.c qtmdc.c
-               ln -s md/axp.s qtmds.s
-               ln -s md/axp_b.s qtmdb.s
-               ln -s md/axp.README README.md
-               iter_init=1000000000
-               iter_runone=10000000
-               iter_blockint=10000000
-               iter_blockfloat=10000000
-               iter_vainit0=10000000
-               iter_vainit2=10000000
-               iter_vainit4=10000000
-               iter_vainit8=10000000
-               iter_vastart0=10000000
-               iter_vastart2=10000000
-               iter_vastart4=10000000
-               iter_vastart8=10000000
-               iter_bench_call_reg=10000000
-               iter_bench_call_imm=10000000
-               iter_bench_add=100000000
-               iter_bench_load=100000000
-               ;;
-
-       hppa*)
-               : "HP's PA-RISC 1.1 processors."
-
-               case $1 in
-                       hppa-cnx-spp*)
-                               : "Convex SPP (PA-RISC 1.1 processors)."
-                               ln -s md/hppa-cnx.Makefile Makefile.md
-                               ;;
-                       *)
-                               ln -s md/hppa.Makefile Makefile.md
-                               ;;
-               esac
-
-               ln -s md/hppa.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               ln -s md/hppa.s qtmds.s
-               ln -s md/hppa_b.s qtmdb.s
-               iter_init=10000000
-               iter_runone=1000000
-               iter_blockint=1000000
-               iter_blockfloat=1000000
-               iter_vainit0=1000000
-               iter_vainit2=1000000
-               iter_vainit4=1000000
-               iter_vainit8=1000000
-               iter_vastart0=1000000
-               iter_vastart2=1000000
-               iter_vastart4=1000000
-               iter_vastart8=1000000
-               iter_bench_call_reg=10000000
-               iter_bench_call_imm=10000000
-               iter_bench_add=100000000
-               iter_bench_load=100000000
-               ;;
-
-       iX86*)
-               case $1 in
-                       iX86-ss*)
-                               : "Assemlber comments '//'"
-                               sed 's/\/\*/\/\//' < md/i386.s > qtmds.s
-                               sed 's/\/\*/\/\//' < md/i386_b.s > qtmdb.s
-                               ;;
-                               
-                       *)
-                               ln -s md/i386.s qtmds.s
-                               ln -s md/i386_b.s qtmdb.s
-                               ;;
-               esac
-               : "Intel 80386 and compatibles (not '286...)"
-               ln -s md/default.Makefile Makefile.md
-               ln -s md/i386.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               ln -s md/i386.README README.md
-               iter_init=10000000
-               iter_runone=1000000
-               iter_blockint=1000000
-               iter_blockfloat=1000000
-               iter_vainit0=1000000
-               iter_vainit2=1000000
-               iter_vainit4=1000000
-               iter_vainit8=1000000
-               iter_vastart0=1000000
-               iter_vastart2=1000000
-               iter_vastart4=1000000
-               iter_vastart8=1000000
-               iter_bench_call_reg=1000000
-               iter_bench_call_imm=1000000
-               iter_bench_add=100000000
-               iter_bench_load=10000000
-               ;;
-
-       m68k)
-               : "Motorola 68000 family -- incomplete!"
-               ln -s md/default.Makefile Makefile.md
-               ln -s md/m68k.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               ln -s md/m68k.s qtmds.s
-               ln -s md/m68k_b.s qtmdb.s
-               ln -s md/null.README README.md
-               ;;
-
-       m88k)
-               : "Motorola 88000 family"
-               ln -s md/m88k.Makefile Makefile.md
-               ln -s md/m88k.h qtmd.h
-               ln -s md/m88k.c qtmdc.c
-               ln -s md/m88k.s qtmds.s
-               ln -s md/m88k_b.s qtmdb.s
-               ln -s md/null.README README.md
-               iter_init=1000000
-               iter_runone=100000
-               iter_blockint=100000
-               iter_blockfloat=100000
-               iter_vainit0=100000
-               iter_vainit2=100000
-               iter_vainit4=100000
-               iter_vainit8=100000
-               iter_vastart0=100000
-               iter_vastart2=100000
-               iter_vastart4=100000
-               iter_vastart8=100000
-               iter_bench_call_reg=100000000
-               iter_bench_call_imm=100000000
-               iter_bench_add=1000000000
-               iter_bench_load=100000000
-               ;;
-
-       mips*)
-               : "MIPS R2000 and R3000."
-
-               case $1 in
-                       mips-irix[56]*)
-                               : "Silicon Graphics Irix with dynamic linking"
-                               : "Use mips for irix4."
-                               ln -s md/mips-irix5.s qtmds.s
-                               ;;
-                       *)
-                               ln -s md/mips.s qtmds.s
-                               ;;
-               esac
-
-               ln -s md/default.Makefile Makefile.md
-               ln -s md/mips.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               ln -s md/mips_b.s qtmdb.s
-               ln -s md/null.README README.md
-               iter_init=10000000
-               iter_runone=10000000
-               iter_blockint=10000000
-               iter_blockfloat=10000000
-               iter_vainit0=1000000
-               iter_vainit2=1000000
-               iter_vainit4=1000000
-               iter_vainit8=1000000
-               iter_vastart0=1000000
-               iter_vastart2=1000000
-               iter_vastart4=1000000
-               iter_vastart8=1000000
-               iter_bench_call_reg=100000000
-               iter_bench_call_imm=100000000
-               iter_bench_add=1000000000
-               iter_bench_load=100000000
-               ;;
-
-       sparc*)
-               : "SPARC processors"
-               case $1 in
-                       sparc-os2*)
-                               sed 's/_qt_/qt_/' md/sparc.s > qtmds.s
-                               sed 's/_b_/b_/' md/sparc_b.s > qtmdb.s
-                               ln -s md/solaris.README README.md
-                               ;;
-                       *)
-                               ln -s md/sparc.s qtmds.s
-                               ln -s md/sparc_b.s qtmdb.s
-                               ln -s md/null.README README.md
-                               ;;
-               esac
-
-               ln -s md/default.Makefile Makefile.md
-               ln -s md/sparc.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               iter_init=10000000
-               iter_runone=1000000
-               iter_blockint=1000000
-               iter_blockfloat=1000000
-               iter_vainit0=1000000
-               iter_vainit2=1000000
-               iter_vainit4=1000000
-               iter_vainit8=1000000
-               iter_vastart0=1000000
-               iter_vastart2=1000000
-               iter_vastart4=1000000
-               iter_vastart8=1000000
-               iter_bench_call_reg=10000000
-               iter_bench_call_imm=10000000
-               iter_bench_add=100000000
-               iter_bench_load=100000000
-               ;;
-
-       vax*)
-               : "DEC VAX processors."
-               ln -s md/default.Makefile Makefile.md
-               ln -s md/vax.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               ln -s md/vax.s qtmds.s
-               ln -s md/vax_b.s qtmdb.s
-               ln -s md/null.README README.md
-               iter_init=1000000
-               iter_runone=100000
-               iter_blockint=100000
-               iter_blockfloat=100000
-               iter_vainit0=100000
-               iter_vainit2=100000
-               iter_vainit4=100000
-               iter_vainit8=100000
-               iter_vastart0=100000
-               iter_vastart2=100000
-               iter_vastart4=100000
-               iter_vastart8=100000
-               iter_bench_call_reg=10000000
-               iter_bench_call_imm=10000000
-               iter_bench_add=10000000
-               iter_bench_load=1000000
-               ;;
-
-       ksr1)
-               : "Kendall Square Research model KSR-1."
-               : "Varargs is not currently supported."
-               ln -s md/ksr1.Makefile Makefile.md
-               ln -s md/ksr1.h qtmd.h
-               ln -s md/null.c qtmdc.c
-               ln -s md/ksr1.s qtmds.s
-               ln -s md/ksr1_b.s qtmdb.s
-               ln -s md/null.README README.md
-               iter_init=1000000
-               iter_runone=100000
-               iter_blockint=100000
-               iter_blockfloat=100000
-               iter_vainit0=100000
-               iter_vainit2=100000
-               iter_vainit4=100000
-               iter_vainit8=100000
-               iter_vastart0=100000
-               iter_vastart2=100000
-               iter_vastart4=100000
-               iter_vastart8=100000
-               iter_bench_call_reg=10000000
-               iter_bench_call_imm=10000000
-               iter_bench_add=10000000
-               iter_bench_load=1000000
-               ;;
-
-       clean)
-               : Deconfigure
-               exit 0
-               ;;
-
-       *)
-               echo "Unknown configuration"
-               exit 1
-               ;;
-esac
-
-cat Makefile.md Makefile.base > Makefile
-
-echo set config_machine=$1 >> configuration
-echo set config_init=$iter_init >> configuration
-echo set config_runone=$iter_runone >> configuration
-echo set config_blockint=$iter_blockint >> configuration
-echo set config_blockfloat=$iter_blockfloat >> configuration
-echo set config_vainit0=$iter_vainit0 >> configuration
-echo set config_vainit2=$iter_vainit2 >> configuration
-echo set config_vainit4=$iter_vainit4 >> configuration
-echo set config_vainit8=$iter_vainit8 >> configuration
-echo set config_vastart0=$iter_vastart0 >> configuration
-echo set config_vastart2=$iter_vastart2 >> configuration
-echo set config_vastart4=$iter_vastart4 >> configuration
-echo set config_vastart8=$iter_vastart8 >> configuration
-echo set config_bcall_reg=$iter_bench_call_reg >> configuration
-echo set config_bcall_imm=$iter_bench_call_imm >> configuration
-echo set config_b_add=$iter_bench_add >> configuration
-echo set config_b_load=$iter_bench_load >> configuration
diff --git a/qt/copyright.h b/qt/copyright.h
deleted file mode 100644
index 8a2361f..0000000
--- a/qt/copyright.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
diff --git a/qt/libqthreads.def b/qt/libqthreads.def
deleted file mode 100644
index c7cfcd5..0000000
--- a/qt/libqthreads.def
+++ /dev/null
@@ -1,10 +0,0 @@
-LIBRARY                        libqthreads
-DESCRIPTION            "libqthreads: QuickThreads Library"
-EXPORTS
-       qt_abort
-       qt_block
-       qt_blocki
-       qt_error
-       qt_null
-       qt_vargs
-       qt_vstart
diff --git a/qt/md/Makefile.am b/qt/md/Makefile.am
deleted file mode 100644
index e5b29e9..0000000
--- a/qt/md/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-##
-##     Copyright (C) 1998, 2002, 2006 Free Software Foundation, Inc.
-##
-##   This file is part of GUILE.
-##   
-##   GUILE is free software; you can redistribute it and/or modify it
-##   under the terms of the GNU Lesser General Public License as
-##   published by the Free Software Foundation; either version 3, or
-##   (at your option) any later version.
-##
-##   GUILE 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 Lesser General Public License for more details.
-##
-##   You should have received a copy of the GNU Lesser General Public
-##   License along with GUILE; see the file COPYING.LESSER.  If not,
-##   write to the Free Software Foundation, Inc., 51 Franklin Street,
-##   Fifth Floor, Boston, MA 02110-1301 USA
-
-AUTOMAKE_OPTIONS = gnu
-
-EXTRA_DIST = _sparc.s _sparc_b.s axp.1.Makefile axp.2.Makefile \
-axp.Makefile axp.README axp.c axp.h axp.s axp_b.s default.Makefile \
-hppa-cnx.Makefile hppa.Makefile hppa.h hppa.s hppa_b.s i386.README \
-i386.h i386.s i386_b.s ksr1.Makefile ksr1.h ksr1.s ksr1_b.s \
-m88k.Makefile m88k.c m88k.h m88k.s m88k_b.s mips-irix5.s mips.h mips.s \
-mips_b.s null.README null.c solaris.README sparc.h sparc.s sparc_b.s \
-vax.h vax.s vax_b.s i386.asm arm.h arm.s
diff --git a/qt/md/_sparc.s b/qt/md/_sparc.s
deleted file mode 100644
index 1d8adc7..0000000
--- a/qt/md/_sparc.s
+++ /dev/null
@@ -1,142 +0,0 @@
-/* sparc.s -- assembly support for the `qt' thread building kit. */
-
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-/* #include <machine/trap.h> */
-
-       .text
-       .align 4
-       .global _qt_blocki
-       .global _qt_block
-       .global _qt_abort
-       .global _qt_start
-       .global _qt_vstart
-
-/* Register assignment:
-// %o0:        incoming `helper' function to call after cswap
-//     also used as outgoing sp of old thread (qt_t *)
-// %o1, %o2:
-//     parameters to `helper' function called after cswap
-// %o3:        sp of new thread
-// %o5: tmp used to save old thread sp, while using %o0
-//     to call `helper' f() after cswap.
-//
-//
-// Aborting a thread is easy if there are no cached register window
-// frames: just switch to the new stack and away we go.  If there are
-// cached register window frames they must all be written back to the
-// old stack before we move to the new stack.  If we fail to do the
-// writeback then the old stack memory can be written with register
-// window contents e.g., after the stack memory has been freed and
-// reused.  
-//
-// If you don't believe this, try setting the frame pointer to zero
-// once we're on the new stack.  This will not affect correctnes
-// otherwise because the frame pointer will eventually get reloaded w/
-// the new thread's frame pointer.  But it will be zero briefly before
-// the reload.  You will eventually (100,000 cswaps later on a small
-// SPARC machine that I tried) get an illegal instruction trap  from
-// the kernel trying to flush a cached window to location 0x0.
-//
-// Solution: flush windows before switching stacks, which invalidates
-// all the other register windows.  We could do the trap
-// conditionally: if we're in the lowest frame of a thread, the fp is
-// zero already so we know there's nothing cached.  But we expect most
-// aborts will be done from a first function that does a `save', so we
-// will rarely save anything and always pay the cost of testing to see
-// if we should flush.
-//
-// All floating-point registers are caller-save, so this routine
-// doesn't need to do anything to save and restore them.
-//
-// `qt_block' and `qt_blocki' return the same value as the value
-// returned by the helper function.  We get this ``for free''
-// since we don't touch the return value register between the
-// return from the helper function and return from qt_block{,i}.
-*/
-
-_qt_block:
-_qt_blocki:
-       sub %sp, 8, %sp         /* Allocate save area for return pc. */
-       st %o7, [%sp+64]        /* Save return pc. */
-_qt_abort:
-       ta 0x03                 /* Save locals and ins. */
-       mov %sp, %o5            /* Remember old sp w/o chng ins/locals. */
-       sub %o3, 64, %sp        /* Allocate kwsa, switch stacks. */
-       call %o0, 0             /* Call `helper' routine. */
-       mov %o5, %o0            /* Pass old thread to qt_after_t() */
-                               /* .. along w/ args in %o1 & %o2. */
-
-       /* Restore callee-save regs.  The kwsa
-       // is on this stack, so offset all
-       // loads by sizeof(kwsa), 64 bytes.
-       */
-       ldd [%sp+ 0+64], %l0
-       ldd [%sp+ 8+64], %l2
-       ldd [%sp+16+64], %l4
-       ldd [%sp+24+64], %l6
-       ldd [%sp+32+64], %i0
-       ldd [%sp+40+64], %i2
-       ldd [%sp+48+64], %i4
-       ldd [%sp+56+64], %i6
-       ld [%sp+64+64], %o7     /* Restore return pc. */
-
-       retl                    /* Return to address in %o7. */
-       add %sp, 72, %sp        /* Deallocate kwsa, ret pc area. */
-
-
-/* The function calling conventions say there has to be a 1-word area
-// in the caller's stack to hold a pointer to space for aggregate
-// return values.  It also says there should be a 6-word area to hold
-// %o0..%o5 if the callee wants to save them (why?  I don't know...)
-// Round up to 8 words to maintain alignment.
-//
-// Parameter values were stored in callee-save regs and are moved to
-// the parameter registers.
-*/
-_qt_start:
-       mov %i1, %o0            /* `pu': Set up args to `only'. */
-       mov %i2, %o1            /* `pt'. */
-       mov %i4, %o2            /* `userf'. */
-       call %i5, 0             /* Call client function. */
-       sub %sp, 32, %sp        /* Allocate 6-word callee space. */
-
-       call _qt_error, 0       /* `only' erroniously returned. */
-       nop
-
-
-/* Same comments as `_qt_start' about allocating rounded-up 7-word
-// save areas. */
-
-_qt_vstart:
-       sub %sp, 32, %sp        /* Allocate 7-word callee space. */
-       call %i5, 0             /* call `startup'. */
-       mov %i2, %o0            /* .. with argument `pt'. */
-
-       add %sp, 32, %sp        /* Use 7-word space in varargs. */
-       ld [%sp+ 4+64], %o0     /* Load arg0 ... */
-       ld [%sp+ 8+64], %o1
-       ld [%sp+12+64], %o2
-       ld [%sp+16+64], %o3
-       ld [%sp+20+64], %o4
-       call %i4, 0             /* Call `userf'. */
-       ld [%sp+24+64], %o5
-
-                               /* Use 6-word space in varargs. */
-       mov %o0, %o1            /* Pass return value from userf */
-       call %i3, 0             /* .. when call `cleanup. */
-       mov %i2, %o0            /* .. along with argument `pt'. */
-
-       call _qt_error, 0       /* `cleanup' erroniously returned. */
-       nop
diff --git a/qt/md/_sparc_b.s b/qt/md/_sparc_b.s
deleted file mode 100644
index cd26672..0000000
--- a/qt/md/_sparc_b.s
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .globl _b_call_reg
-       .globl _b_call_imm
-       .globl _b_add
-       .globl _b_load
-
-_b_null:
-       retl
-       nop
-
-_b_call_reg:
-       sethi %hi(_b_null),%o4
-       or %o4,%lo(_b_null),%o4
-       add %o7,%g0, %o3
-L0:
-       call %o4
-       nop
-       call %o4
-       nop
-       call %o4
-       nop
-       call %o4
-       nop
-       call %o4
-       nop
-
-       subcc %o0,1,%o0
-       bg L0
-       nop
-       add %o3,%g0, %o7
-       retl
-       nop
-
-_b_call_imm:
-       sethi %hi(_b_null),%o4
-       or %o4,%lo(_b_null),%o4
-       add %o7,%g0, %o3
-L1:
-       call _b_null
-       call _b_null
-       call _b_null
-       call _b_null
-       call _b_null
-
-       subcc %o0,1,%o0
-       bg L0
-       nop
-       add %o3,%g0, %o7
-       retl
-       nop
-
-
-_b_add:
-       add %o0,%g0,%o1
-       add %o0,%g0,%o2
-       add %o0,%g0,%o3
-       add %o0,%g0,%o4
-L2:
-       sub %o0,5,%o0
-       sub %o1,5,%o1
-       sub %o2,5,%o2
-       sub %o3,5,%o3
-       sub %o4,5,%o4
-
-       subcc %o0,5,%o0
-       sub %o1,5,%o1
-       sub %o2,5,%o2
-       sub %o3,5,%o3
-       sub %o4,5,%o4
-
-       bg L2
-       nop
-       retl
-       nop
-
-
-_b_load:
-       ld [%sp+ 0], %g0
-L3:
-       ld [%sp+ 4],%g0
-       ld [%sp+ 8],%g0
-       ld [%sp+12],%g0
-       ld [%sp+16],%g0
-       ld [%sp+20],%g0
-       ld [%sp+24],%g0
-       ld [%sp+28],%g0
-       ld [%sp+32],%g0
-       ld [%sp+36],%g0
-
-       subcc %o0,10,%o0
-       bg L3
-       ld [%sp+ 0],%g0
-       retl
-       nop
diff --git a/qt/md/arm.h b/qt/md/arm.h
deleted file mode 100644
index 016cbb8..0000000
--- a/qt/md/arm.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- * Copyright (c) 2002 by Marius Vollmer
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_ARM_H
-#define QT_ARM_H
-
-typedef unsigned long qt_word_t;
-
-#define QT_GROW_DOWN
-
-/* Stack layout on the ARM:
-
-   Callee-save registers are: r4-r11 (f4-f7)
-   Also save r14, link register, and restore as pc.
-
-   +---
-   | lr/pc
-   | r11
-   | r10
-   | r9
-   | r8
-   | r7
-   | r6
-   | r5
-   | r4      <- sp of a suspended thread
-   +---
-
-   Startup:
-
-   +---
-   | only
-   | user
-   | argt
-   | argu    <- sp on entry to qt_start
-   +---
-   | pc      == qt_start
-   | r11
-   | r10
-   | r9
-   | r8
-   | r7
-   | r6
-   | r5
-   | r4
-   +---
-
-*/
-
-/* Stack must be word aligned. */
-#define QT_STKALIGN    (4)     /* Doubleword aligned. */
-
-/* How much space is allocated to hold all the crud for
-   initialization: r4-r11, r14, and the four args for qt_start. */
-
-#define QT_STKBASE     ((9+4)*4)
-
-
-/* Offsets of various registers, in words, relative to final value of SP. */
-#define QT_LR           8
-#define QT_11           7
-#define QT_10           6
-#define QT_9            5
-#define QT_8            4
-#define QT_7            3
-#define QT_6            2
-#define QT_5            1
-#define QT_4            0
-
-
-/* When a never-before-run thread is restored, the return pc points
-   to a fragment of code that starts the thread running.  For
-   non-vargs functions, it just calls the client's `only' function.
- */
-
-extern void qt_start(void);
-#define QT_ARGS_MD(sp) (QT_SPUT (sp, QT_LR, qt_start))
-
-
-/* The *index* (positive offset) of where to put each value. */
-#define QT_ONLY_INDEX  (12)
-#define QT_USER_INDEX  (11)
-#define QT_ARGT_INDEX  (10)
-#define QT_ARGU_INDEX  (9)
-
-#endif /* ndef QT_ARM_H */
diff --git a/qt/md/arm.s b/qt/md/arm.s
deleted file mode 100644
index cd322a3..0000000
--- a/qt/md/arm.s
+++ /dev/null
@@ -1,34 +0,0 @@
-       .text
-       .align  2
-       .global qt_abort
-       .global qt_block
-               .global qt_blocki
-
-       # r0:   helper
-       # r1:   arg1
-       # r2:   arg2
-       # r3:   new_sp
-qt_abort:
-qt_block:
-qt_blocki:
-       stmfd   sp!, {r4-r11,lr}
-       mov     ip, r0
-       mov     r0, sp
-       mov     sp, r3
-       mov     lr, pc
-       mov     pc, ip
-       ldmfd   sp!, {r4-r11,pc}
-
-
-       .global qt_start
-       .global qt_error
-       .type   qt_start,function
-qt_start:
-       ldr     r0, [sp]
-       ldr     r1, [sp, #4]
-       ldr     r2, [sp, #8]
-        ldr     lr, qt_error_loc
-       ldr     pc, [sp, #12]
-
-qt_error_loc:
-       .word qt_error
diff --git a/qt/md/axp.1.Makefile b/qt/md/axp.1.Makefile
deleted file mode 100644
index 86ccd8f..0000000
--- a/qt/md/axp.1.Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#
-# Compiling for the DEC AXP (alpha) with GNU CC or version 1.x of OSF.
-#
-CC           = cc -std1 -D__AXP__ -D__OSF1__
diff --git a/qt/md/axp.2.Makefile b/qt/md/axp.2.Makefile
deleted file mode 100644
index 268636f..0000000
--- a/qt/md/axp.2.Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#
-# Compiling for the DEC AXP (alpha) with GNU CC or version 2.x of OSF.
-#
-CC           = cc -std1 -D__AXP__ -D__OSF2__
diff --git a/qt/md/axp.Makefile b/qt/md/axp.Makefile
deleted file mode 100644
index 4e6d74d..0000000
--- a/qt/md/axp.Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#
-# GNU CC
-#
-CC           = gcc -D__AXP__
diff --git a/qt/md/axp.README b/qt/md/axp.README
deleted file mode 100644
index b6a705c..0000000
--- a/qt/md/axp.README
+++ /dev/null
@@ -1,10 +0,0 @@
-The handling of varargs is platform-dependent.  Assar Westerlund
-stared at the problem for a while and deduces the following table:
-
-vers / compiler         cc              gcc
-----------------------------------------------------------------------
-1.3                     a0, offset      __base, __offset
-2.0                     _a0, _offset    __base, __offset
-
-The current code should handle both cc and gcc versions, provided
-you configure for the correct compiler.
diff --git a/qt/md/axp.c b/qt/md/axp.c
deleted file mode 100644
index 26c15c0..0000000
--- a/qt/md/axp.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#include <stdarg.h>
-#include "qt.h"
-
-
-/* Varargs is harder on the AXP.  Parameters are saved on the stack as
-   something like (stack grows down to low memory; low at bottom of
-   picture):
-
-       |  :
-       | arg6
-       +---
-       | iarg5
-       |  :
-       | iarg3         <-- va_list._a0 + va_list._offset
-       |  :
-       | iarg0         <-- va_list._a0
-       +---
-       | farg5
-       |  :
-       | farg0
-       +---
-
-   When some of the arguments have known type, there is no need to
-   save all of them in the struct.  So, for example, if the routine is
-   called
-
-       zork (int a0, float a1, int a2, ...)
-       {
-         va_list ap;
-         va_start (ap, a2);
-         qt_vargs (... &ap ...);
-       }
-
-   then offset is set to 3 * 8 (8 === sizeof machine word) = 24.
-
-   What this means for us is that the user's routine needs to be
-   called with an arg list where some of the words in the `any type'
-   parameter list have to be split and moved up in to the int/fp
-   region.
-
-   Ways in which this can fail:
-    - The user might not know the size of the pushed arguments anyway.
-    - Structures have funny promotion rules.
-    - Probably lots of other things.
-
-   All in all, we never promised varargs would work reliably. */
-
-
-
-#define QT_VADJ(sp)    (((char *)sp) - QT_VSTKBASE)
-
-#define QT_VARGS_MD0(sp, vabytes) \
-   ((qt_t *)(((char *)(sp)) - 6*2*8 - QT_STKROUNDUP(vabytes)))
-
-extern void qt_vstart(void);
-#define QT_VARGS_MD1(sp)       (QT_SPUT (sp, QT_R26, qt_vstart))
-
-
-/* Different machines use different implementations for varargs.
-   Unfortunately, the code below ``looks in to'' the varargs
-   structure, `va_list', and thus depends on the conventions.
-   The following #defines try to deal with it but don't catch
-   everything. */
-
-#ifdef __GNUC__
-#define _a0            __base
-#define _offset                __offset
-#else
-#ifdef __OSF1__
-#define _a0            a0
-#define _offset                offset
-#endif
-#endif /* def __GNUC__ */
-
-
-  struct qt_t *
-qt_vargs (struct qt_t *qsp, int nbytes, struct va_list *vargs,
-         void *pt, qt_function_t *startup,
-         qt_function_t *vuserf, qt_function_t *cleanup)
-{
-  va_list ap;
-  int i;
-  int max;             /* Maximum *words* of args to copy. */
-  int tmove;           /* *Words* of args moved typed->typed. */
-  qt_word_t *sp;
-
-  ap = *(va_list *)vargs;
-  qsp = QT_VARGS_MD0 (qsp, nbytes);
-  sp = (qt_word_t *)qsp;
-
-  tmove = 6 - ap._offset/sizeof(qt_word_t);
-
-  /* Copy from one typed area to the other. */
-  for (i=0; i<tmove; ++i) {
-    /* Integer args: */
-    sp[i+6] = ((qt_word_t *)(ap._a0 + ap._offset))[i];
-    /* Fp args: */
-    sp[i] = ((qt_word_t *)(ap._a0 + ap._offset))[i-6];
-  }
-
-  max = nbytes/sizeof(qt_word_t);
-
-  /* Copy from the untyped area to the typed area.  Split each arg.
-     in to integer and floating-point save areas. */
-  for (; i<6 && i<max; ++i) {
-    sp[i] = sp[i+6] = ((qt_word_t *)(ap._a0 + ap._offset))[i];
-  }
-
-  /* Copy from the untyped area to the other untyped area. */
-  for (; i<max; ++i) {
-    sp[i+6] = ((qt_word_t *)(ap._a0 + ap._offset))[i];
-  }
-
-  QT_VARGS_MD1 (QT_VADJ(sp));
-  QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt);
-  QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup);
-  QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf);
-  QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup);
-  return ((qt_t *)QT_VADJ(sp));
-}
diff --git a/qt/md/axp.h b/qt/md/axp.h
deleted file mode 100644
index ff951a0..0000000
--- a/qt/md/axp.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_AXP_H
-#define QT_AXP_H
-
-#define QT_GROW_DOWN
-
-typedef unsigned long qt_word_t;
-
-
-/* Stack layout on the Alpha:
-
-   Integer:
-
-     Caller-save: r0..r8, r22..r25, r27..r29
-     argument/caller-save: r16..r21
-     callee-save: r9..r15
-     return pc *callee-save*: r26
-     stack pointer: r30
-     zero: r31
-
-   Floating-point:
-
-     Caller-save: f0..f1, f10..f15
-     argument/caller-save: f16..f21, f22..f30
-     callee-save: f2..f9
-     zero: f31
-
-   Non-varargs:
-
-   +---
-   | padding
-   | f9
-   | f8
-   | f7
-   | f6
-   | f5
-   | f4
-   | f3
-   | f2
-   | r26
-   +---
-   | padding
-   | r29
-   | r15
-   | r14
-   | r13
-   | r12       on startup === `only'
-   | r11       on startup === `userf'
-   | r10       on startup === `qt'
-   | r9                on startup === `qu'
-   | r26       on startup === qt_start         <--- qt.sp
-   +---
-
-   Conventions for varargs startup:
-
-   |  :
-   | arg6
-   | iarg5
-   |  :
-   | iarg0
-   | farg5
-   |  :
-   | farg0
-   +---
-   | padding
-   | r29
-   | r15
-   | r14
-   | r13
-   | r12       on startup === `startup'
-   | r11       on startup === `vuserf'
-   | r10       on startup === `cleanup'
-   | r9                on startup === `qt'
-   | r26       on startup === qt_vstart        <--- qt.sp
-   +---
-
-   Note: this is a pretty cheap/sleazy way to get things going,
-   but ``there must be a better way.''  For instance, some varargs
-   parameters could be loaded in to integer registers, or the return
-   address could be stored on top of the stack. */
-
-
-/* Stack must be 16-byte aligned. */
-#define QT_STKALIGN    (16)
-
-/* How much space is allocated to hold all the crud for
-   initialization: 7 registers times 8 bytes/register. */
-
-#define QT_STKBASE     (10 * 8)
-#define QT_VSTKBASE    QT_STKBASE
-
-
-/* Offsets of various registers. */
-#define QT_R26 0
-#define QT_R9  1
-#define QT_R10 2
-#define QT_R11 3
-#define QT_R12 4
-
-
-/* When a never-before-run thread is restored, the return pc points
-   to a fragment of code that starts the thread running.  For
-   non-vargs functions, it just calls the client's `only' function.
-   For varargs functions, it calls the startup, user, and cleanup
-   functions.
-
-   The varargs startup routine always reads 12 8-byte arguments from
-   the stack.  If fewer argumets were pushed, the startup routine
-   would read off the top of the stack.  To prevent errors we always
-   allocate enough space.  When there are fewer args, the preallocated
-   words are simply wasted. */
-
-extern void qt_start(void);
-#define QT_ARGS_MD(sp) (QT_SPUT (sp, QT_R26, qt_start))
-
-
-/* The AXP uses a struct for `va_list', so pass a pointer to the
-   struct.  This may break some uses of `QT_VARGS', but then we never
-   claimed it was totally portable. */
-
-typedef void (qt_function_t)(void);
-
-struct qt_t;
-struct va_list;
-extern struct qt_t *qt_vargs (struct qt_t *sp, int nbytes,
-                             struct va_list *vargs, void *pt,
-                             qt_function_t *startup,
-                             qt_function_t *vuserf,
-                             qt_function_t *cleanup);
-
-#define QT_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \
-  (qt_vargs (sp, nbytes, (struct va_list *)(&(vargs)), pt, \
-            (qt_function_t *) startup, (qt_function_t *)vuserf, \
-            (qt_function_t *)cleanup));
-
-
-/* The *index* (positive offset) of where to put each value. */
-#define QT_ONLY_INDEX  (QT_R12)
-#define QT_USER_INDEX  (QT_R11)
-#define QT_ARGT_INDEX  (QT_R10)
-#define QT_ARGU_INDEX  (QT_R9)
-
-#define QT_VCLEANUP_INDEX      (QT_R10)
-#define QT_VUSERF_INDEX                (QT_R11)
-#define QT_VSTARTUP_INDEX      (QT_R12)
-#define QT_VARGT_INDEX         (QT_R9)
-
-#endif /* ndef QT_AXP_H */
diff --git a/qt/md/axp.s b/qt/md/axp.s
deleted file mode 100644
index 11dd159..0000000
--- a/qt/md/axp.s
+++ /dev/null
@@ -1,160 +0,0 @@
-       #
-       # QuickThreads -- Threads-building toolkit.
-       # Copyright (c) 1993 by David Keppel
-       #
-       # Permission to use, copy, modify and distribute this software and
-       # its documentation for any purpose and without fee is hereby
-       # granted, provided that the above copyright notice and this notice
-       # appear in all copies.  This software is provided as a
-       # proof-of-concept and for demonstration purposes# there is no
-       # representation about the suitability of this software for any
-       # purpose.
-       #
-
-       # axp.s -- assembly support.
-
-       .text
-       .align 4
-       .file "axp.s"
-
-       .globl qt_block
-       .globl qt_blocki
-       .globl qt_abort
-       .globl qt_start
-       .globl qt_vstart
-
-       #
-       # $16: ptr to function to call once curr is suspended
-       #       and control is on r19's stack.
-       # $17: 1'th arg to (*$16)(...).
-       # $18: 2'th arg to (*$16)(...).
-       # $19: sp of thread to resume.
-       #
-       # The helper routine returns a value that is passed on as the
-       # return value from the blocking routine.  Since we don't
-       # touch r0 between the helper's return and the end of
-       # function, we get this behavior for free.
-       #
-
-       .ent qt_blocki
-qt_blocki:
-       subq $30,80, $30        # Allocate save area.
-       stq $26, 0($30)         # Save registers.
-       stq  $9, 8($30)
-       stq $10,16($30)
-       stq $11,24($30)
-       stq $12,32($30)
-       stq $13,40($30)
-       stq $14,48($30)
-       stq $15,56($30)
-       stq $29,64($30)
-       .end qt_blocki
-       .ent qt_abort
-qt_abort:
-       addq $16,$31, $27       # Put argument function in PV.
-       addq $30,$31, $16       # Save stack ptr in outgoing arg.
-       addq $19,$31, $30       # Set new stack pointer.
-       jsr $26,($27),0         # Call helper function.
-
-       ldq $26, 0($30)         # Restore registers.
-       ldq  $9, 8($30)
-       ldq $10,16($30)
-       ldq $11,24($30)
-       ldq $12,32($30)
-       ldq $13,40($30)
-       ldq $14,48($30)
-       ldq $15,56($30)
-       ldq $29,64($30)
-
-       addq $30,80, $30        # Deallocate save area.
-       ret $31,($26),1         # Return, predict===RET.
-       .end qt_abort
-
-
-       #
-       # Non-varargs thread startup.
-       #
-       .ent qt_start
-qt_start:
-       addq $9,$31,  $16       # Load up `qu'.
-       addq $10,$31, $17       # ... user function's `pt'.
-       addq $11,$31, $18       # ... user function's `userf'.
-       addq $12,$31, $27       # ... set procedure value to `only'.
-       jsr $26,($27),0         # Call `only'.
-
-       jsr $26,qt_error        # `only' erroniously returned.
-       .end qt_start
-
-
-       .ent qt_vstart
-qt_vstart:
-       # Call startup function.
-       addq $9,$31, $16        # Arg0 to `startup'.
-       addq $12,$31, $27       # Set procedure value.
-       jsr $26,($27),0         # Call `startup'.
-
-       # Call user function.
-       ldt $f16, 0($30)        # Load fp arg regs.
-       ldt $f17, 8($30)
-       ldt $f18,16($30)
-       ldt $f19,24($30)
-       ldt $f20,32($30)
-       ldt $f21,40($30)
-       ldq $16,48($30)         # And integer arg regs.
-       ldq $17,56($30)
-       ldq $18,64($30)
-       ldq $19,72($30)
-       ldq $20,80($30)
-       ldq $21,88($30)
-       addq $30,96, $30                # Pop 6*2*8 saved arg regs.
-       addq $11,$31, $27       # Set procedure value.
-       jsr $26,($27),0         # Call `vuserf'.
-
-       # Call cleanup.
-       addq $9,$31, $16        # Arg0 to `cleanup'.
-       addq $0,$31, $17        # Users's return value is arg1.
-       addq $10,$31, $27       # Set procedure value.
-       jsr $26,($27),0         # Call `cleanup'.
-
-       jsr $26,qt_error        # Cleanup erroniously returned.
-       .end qt_vstart
-
-
-       #
-       # Save calle-save floating-point regs $f2..$f9.
-       # Also save return pc from whomever called us.
-       #
-       # Return value from `qt_block' is the same as the return from
-       # `qt_blocki'.  We get that for free since we don't touch $0
-       # between the return from `qt_blocki' and the return from
-       # `qt_block'.
-       #
-       .ent qt_block
-qt_block:
-       subq $30,80, $30        # Allocate a save space.
-       stq $26, 0($30)         # Save registers.
-       stt $f2, 8($30)
-       stt $f3,16($30)
-       stt $f4,24($30)
-       stt $f5,32($30)
-       stt $f6,40($30)
-       stt $f7,48($30)
-       stt $f8,56($30)
-       stt $f9,64($30)
-
-       jsr $26,qt_blocki       # Call helper.
-                               # .. who will also restore $gp.
-
-       ldq $26, 0($30)         # restore registers.
-       ldt $f2, 8($30)
-       ldt $f3,16($30)
-       ldt $f4,24($30)
-       ldt $f5,32($30)
-       ldt $f6,40($30)
-       ldt $f7,48($30)
-       ldt $f8,56($30)
-       ldt $f9,64($30)
-
-       addq $30,80, $30        # Deallcate save space.
-       ret $31,($26),1         # Return, predict===RET.
-       .end qt_block
diff --git a/qt/md/axp_b.s b/qt/md/axp_b.s
deleted file mode 100644
index 82194d5..0000000
--- a/qt/md/axp_b.s
+++ /dev/null
@@ -1,111 +0,0 @@
-       #
-       # QuickThreads -- Threads-building toolkit.
-       # Copyright (c) 1993 by David Keppel
-       #
-       # Permission to use, copy, modify and distribute this software and
-       # its documentation for any purpose and without fee is hereby
-       # granted, provided that the above copyright notice and this notice
-       # appear in all copies.  This software is provided as a
-       # proof-of-concept and for demonstration purposes; there is no
-       # representation about the suitability of this software for any
-       # purpose.
-       #
-
-       .text
-       .globl b_call_reg
-       .globl b_call_imm
-       .globl b_add
-       .globl b_load
-
-       .ent b_null
-b_null:
-       ret $31,($18),1
-       .end b_null
-
-       .ent b_call_reg
-b_call_reg:
-       lda $27,b_null
-$L0:
-       jsr $18,($27)
-       jsr $18,($27)
-       jsr $18,($27)
-       jsr $18,($27)
-       jsr $18,($27)
-
-       jsr $18,($27)
-       jsr $18,($27)
-       jsr $18,($27)
-       jsr $18,($27)
-       jsr $18,($27)
-
-       subq $16,1,$16
-       bgt $16,$L0
-
-       ret $31,($26),1
-       .end
-
-
-       .ent b_call_imm
-b_call_imm:
-$L1:
-       jsr $18,b_null
-       jsr $18,b_null
-       jsr $18,b_null
-       jsr $18,b_null
-       jsr $18,b_null
-
-       jsr $18,b_null
-       jsr $18,b_null
-       jsr $18,b_null
-       jsr $18,b_null
-       jsr $18,b_null
-
-       subq $16,1,$16
-       bgt $16,$L1
-
-       ret $31,($26),1
-       .end
-
-
-       .ent b_add
-b_add:
-$L2:
-       addq $31,$31,$31
-       addq $31,$31,$31
-       addq $31,$31,$31
-       addq $31,$31,$31
-       addq $31,$31,$31
-
-       addq $31,$31,$31
-       addq $31,$31,$31
-       addq $31,$31,$31
-       addq $31,$31,$31
-       addq $31,$31,$31
-
-       subq $16,1,$16
-       bgt $16,$L2
-
-       ret $31,($26),1
-       .end
-
-
-       .ent b_load
-b_load:
-$L3:
-       ldq $31,0($30)
-       ldq $31,8($30)
-       ldq $31,16($30)
-       ldq $31,24($30)
-       ldq $31,32($30)
-
-       ldq $31,0($30)
-       ldq $31,8($30)
-       ldq $31,16($30)
-       ldq $31,24($30)
-       ldq $31,32($30)
-
-       subq $16,1,$16
-       bgt $16,$L3
-
-       ret $31,($26),1
-       .end
diff --git a/qt/md/default.Makefile b/qt/md/default.Makefile
deleted file mode 100644
index e240ca2..0000000
--- a/qt/md/default.Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#
-# `Normal' configuration.
-#
-CC           = gcc -ansi -Wall -pedantic
-
diff --git a/qt/md/hppa-cnx.Makefile b/qt/md/hppa-cnx.Makefile
deleted file mode 100644
index bff257d..0000000
--- a/qt/md/hppa-cnx.Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file (cnx_spp.Makefile) is part of the port of QuickThreads for
-# PA-RISC 1.1 architecture on a Convex SPP.  This file is a machine dependent
-# makefile for QuickThreads.  It was written in 1994 by Uwe Reder
-# (address@hidden') for the Operating Systems
-# Department (IMMD4) at the University of Erlangen/Nuernberg Germany.
-
-# `Normal' configuration.
-
-CC = /usr/convex/bin/cc
diff --git a/qt/md/hppa.Makefile b/qt/md/hppa.Makefile
deleted file mode 100644
index a15e28c..0000000
--- a/qt/md/hppa.Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file (pa-risc.Makefile) is part of the port of QuickThreads for
-# PA-RISC 1.1 architecture.  This file is a machine dependent makefile
-# for QuickThreads.  It was written in 1994 by Uwe Reder
-# (address@hidden') for the Operating Systems
-# Department (IMMD4) at the University of Erlangen/Nuernberg Germany.
-
-# `Normal' configuration.
-
-CC = cc -Aa
diff --git a/qt/md/hppa.h b/qt/md/hppa.h
deleted file mode 100644
index 0df98de..0000000
--- a/qt/md/hppa.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-/*
- * This file (pa-risc.h) is part of the port of QuickThreads for the
- * PA-RISC 1.1 architecture.  This file is a machine dependent header
- * file.  It was written in 1994 by Uwe Reder
- * (address@hidden') for the Operating Systems
- * Department (IMMD4) at the University of Erlangen/Nuernberg Germany.
- */
-
-
-#ifndef QT_PA_RISC_H
-#define QT_PA_RISC_H
-
-#include <qt.h>
-
-/* size of an integer-register (32 bit) */
-typedef unsigned long qt_word_t;
-
-/* PA-RISC's stack grows up */
-#define QT_GROW_UP
-
-/* Stack layout on PA-RISC according to PA-RISC Procedure Calling Conventions:
-
-    Callee-save registers are: gr3-gr18, fr12-fr21.
-    Also save gr2, return pointer.
-
-    +---
-    | fr12          Each floating register is a double word (8 bytes).
-    | fr13          Floating registers are only saved if `qt_block' is
-    | fr14          called, in which case it saves the floating-point
-    | fr15          registers then calls `qt_blocki' to save the integer
-    | fr16         registers.
-    | fr17
-    | fr18
-    | fr19
-    | fr20
-    | fr21
-    | <arg word 3>  fixed arguments (must be allocated; may remain unused)
-    | <arg word 2>
-    | <arg word 1>
-    | <arg word 0>
-    | <LPT>         frame marker
-    | <LPT'>
-    | <RP'>
-    | <Current RP>
-    | <Static Link>
-    | <Clean Up>
-    | <RP''>
-    | <Previous SP>
-    +---
-    | gr3           word each (4 bytes)
-    | gr4
-    | gr5
-    | gr6
-    | gr7
-    | gr8
-    | gr9
-    | gr10
-    | gr11
-    | gr12
-    | gr13
-    | gr14
-    | gr15
-    | gr16
-    | gr17
-    | gr18
-    | <16 bytes filled in (sp has to be 64-bytes aligned)>
-    | <arg word 3>  fixed arguments (must be allocated; may remain unused)
-    | <arg word 2>
-    | <arg word 1>
-    | <arg word 0>
-    | <LPT>         frame marker
-    | <LPT'>
-    | <RP'>
-    | <Current RP>
-    | <Static Link>
-    | <Clean Up>
-    | <RP''>
-    | <Previous SP>
-    +---            <--- sp
-*/
-
-/* When a never-before-run thread is restored, the return pc points
-   to a fragment of code that starts the thread running.  For
-   non-vargs functions, it just calls the client's `only' function.
-   For varargs functions, it calls the startup, user, and cleanup
-   functions. */
-
-/* Note: Procedue Labels on PA-RISC
-
-   <--2--><-------28---------><1-><1->
-   -----------------------------------
-   | SID |    Adress Part    | L | X |
-   -----------------------------------
-
-   On HP-UX the L field is used to flag wheather the procedure
-   label (plabel) is a pointer to an LT entry or to the entry point
-   of the procedure (PA-RISC Procedure Calling Conventions Reference
-   Manual, 5.3.2 Procedure Labels and Dynamic Calls). */
-
-#define QT_PA_RISC_READ_PLABEL(plabel) \
-    ( (((int)plabel) & 2) ? \
-        ( (*((int *)(((int)plabel) & 0xfffffffc)))) : ((int)plabel) )
-
-/* Stack must be 64 bytes aligned. */
-#define QT_STKALIGN (64)
-
-/* Internal helper for putting stuff on stack (negative index!). */
-#define QT_SPUT(top, at, val)   \
-    (((qt_word_t *)(top))[-(at)] = (qt_word_t)(val))
-
-/* Offsets of various registers which are modified on the stack.
-   rp (return-pointer) has to be stored in the frame-marker-area
-   of the "older" stack-segment. */
-
-#define QT_crp  (12+4+16+5)
-#define QT_15   (12+4+4)
-#define QT_16   (12+4+3)
-#define QT_17   (12+4+2)
-#define QT_18   (12+4+1)
-
-
-/** This stuff is for NON-VARARGS. **/
-
-/* Stack looks like this (2 stack frames):
-
-    <--- 64-bytes aligned --><------- 64-bytes aligned ------------>
-   |                        ||                                      |
-    <--16--><------48-------><----16*4-----><--16-><------48------->
-   ||      |                ||             |      |                ||
-   ||filler|arg|frame-marker||register-save|filler|arg|frame-marker||
-   ------------------------------------------------------------------
- */
-
-#define QT_STKBASE  (16+48+(16*sizeof(qt_word_t))+16+48)
-
-/* The index, relative to sp, of where to put each value. */
-#define QT_ONLY_INDEX   (QT_15)
-#define QT_USER_INDEX   (QT_16)
-#define QT_ARGT_INDEX   (QT_17)
-#define QT_ARGU_INDEX   (QT_18)
-
-extern void qt_start(void);
-#define QT_ARGS_MD(sp)  \
-    (QT_SPUT (sp, QT_crp, QT_PA_RISC_READ_PLABEL(qt_start)))
-
-
-/** This is for VARARGS. **/
-
-#define QT_VARGS_DEFAULT
-
-/* Stack looks like this (2 stack frames):
-
-    <------ 64-bytes aligned -------><--------- 64-bytes aligned ---------->
-   |                                ||                                      |
-    <---?--><--?---><16><----32-----><----16*4-----><-16--><16><----32----->
-   ||      |       |   |            ||             |      |   |            ||
-   ||filler|varargs|arg|frame-marker||register-save|filler|arg|frame-marker||
-   --------------------------------------------------------------------------
- */
-
-/* Sp is moved to the end of the first stack frame. */
-#define QT_VARGS_MD0(sp, vasize) \
-    ((qt_t *)(((char *)sp) + QT_STKROUNDUP(vasize + 4*4 + 32)))
-
-/* To reach the arguments from the end of the first stack frame use 32
-   as a negative adjustment. */
-#define QT_VARGS_ADJUST(sp)    ((qt_t *)(((char *)sp) - 32))
-
-/* Offset to reach the end of the second stack frame. */
-#define QT_VSTKBASE    ((16*sizeof(qt_word_t)) + 16 + 4*4 + 32)
-
-extern void qt_vstart(void);
-#define QT_VARGS_MD1(sp) \
-    (QT_SPUT (sp, QT_crp, QT_PA_RISC_READ_PLABEL(qt_vstart)))
-
-#define QT_VARGT_INDEX      (QT_15)
-#define QT_VSTARTUP_INDEX   (QT_16)
-#define QT_VUSERF_INDEX     (QT_17)
-#define QT_VCLEANUP_INDEX   (QT_18)
-
-#endif /* ndef QT_PA_RISC_H */
diff --git a/qt/md/hppa.s b/qt/md/hppa.s
deleted file mode 100644
index 84d8e87..0000000
--- a/qt/md/hppa.s
+++ /dev/null
@@ -1,237 +0,0 @@
-; pa-risc.s -- assembly support.
-
-; QuickThreads -- Threads-building toolkit.
-; Copyright (c) 1993 by David Keppel
-;
-; Permission to use, copy, modify and distribute this software and
-; its documentation for any purpose and without fee is hereby
-; granted, provided that the above copyright notice and this notice
-; appear in all copies.  This software is provided as a
-; proof-of-concept and for demonstration purposes; there is no
-; representation about the suitability of this software for any
-; purpose.
-
-; This file (pa-risc.s) is part of the port of QuickThreads for
-; PA-RISC 1.1 architecture.  This file implements context switches
-; and thread startup.  It was written in 1994 by Uwe Reder
-; (address@hidden') for the Operating
-; Systems Department (IMMD4) at the University of Erlangen/Nuernberg
-; Germany.
-
-
-; Callee saves general registers gr3..gr18,
-;              floating-point registers fr12..fr21.
-
-            .CODE
-
-            .IMPORT $$dyncall, MILLICODE
-            .IMPORT qt_error, CODE
-
-            .EXPORT qt_blocki, ENTRY
-            .EXPORT qt_block, ENTRY
-            .EXPORT qt_abort, ENTRY
-            .EXPORT qt_start, ENTRY
-            .EXPORT qt_vstart, ENTRY
-
-
-; arg0: ptr to function (helper) to call once curr is suspended
-;       and control is on arg3's stack.
-; arg1: 1'th arg to *arg0.
-; arg2: 2'th arg to *arg0.
-; arg3: sp of new thread.
-
-qt_blocki
-            .PROC
-            .CALLINFO   CALLER, FRAME=0, SAVE_RP, ENTRY_GR=18
-            .ENTRY
-
-            stw         %rp,-20(%sp)    ; save rp to old frame-marker
-
-            stwm        %r3,128(%sp)    ; save callee-saves general registers
-            stw         %r4,-124(%sp)
-            stw         %r5,-120(%sp)
-            stw         %r6,-116(%sp)
-            stw         %r7,-112(%sp)
-            stw         %r8,-108(%sp)
-            stw         %r9,-104(%sp)
-            stw         %r10,-100(%sp)
-            stw         %r11,-96(%sp)
-            stw         %r12,-92(%sp)
-            stw         %r13,-88(%sp)
-            stw         %r14,-84(%sp)
-            stw         %r15,-80(%sp)
-            stw         %r16,-76(%sp)
-            stw         %r17,-72(%sp)
-            stw         %r18,-68(%sp)
-
-qt_abort
-            copy        %arg0,%r22      ; helper to be called by $$dyncall
-            copy        %sp,%arg0       ; pass current sp as arg0 to helper
-            copy        %arg3,%sp       ; set new sp
-
-            .CALL
-            bl          $$dyncall,%mrp  ; call helper
-            copy        %mrp,%rp
-
-            ldw         -68(%sp),%r18   ; restore general registers
-            ldw         -72(%sp),%r17
-            ldw         -76(%sp),%r16
-            ldw         -80(%sp),%r15
-            ldw         -84(%sp),%r14
-            ldw         -88(%sp),%r13
-            ldw         -92(%sp),%r12
-            ldw         -96(%sp),%r11
-            ldw         -100(%sp),%r10
-            ldw         -104(%sp),%r9
-            ldw         -108(%sp),%r8
-            ldw         -112(%sp),%r7
-            ldw         -116(%sp),%r6
-            ldw         -120(%sp),%r5
-            ldw         -124(%sp),%r4
-
-            ldw         -148(%sp),%rp   ; restore return-pointer
-
-            bv          %r0(%rp)        ; return to caller
-            ldwm        -128(%sp),%r3
-
-            .EXIT
-            .PROCEND
-
-
-qt_block
-            .PROC
-            .CALLINFO   CALLER, FRAME=0, SAVE_RP, ENTRY_FR=21
-            .ENTRY
-
-            stw         %rp,-20(%sp)    ; save rp to old frame-marker
-
-            fstds,ma    %fr12,8(%sp)    ; save callee-saves float registers
-            fstds,ma    %fr13,8(%sp)
-            fstds,ma    %fr14,8(%sp)
-            fstds,ma    %fr15,8(%sp)
-            fstds,ma    %fr16,8(%sp)
-            fstds,ma    %fr17,8(%sp)
-            fstds,ma    %fr18,8(%sp)
-            fstds,ma    %fr19,8(%sp)
-            fstds,ma    %fr20,8(%sp)
-            fstds,ma    %fr21,8(%sp)
-
-            .CALL
-            bl          qt_blocki,%rp
-            ldo         48(%sp),%sp
-
-            ldo         -48(%sp),%sp
-
-            fldds,mb    -8(%sp),%fr21   ; restore callee-saves float registers
-            fldds,mb    -8(%sp),%fr20
-            fldds,mb    -8(%sp),%fr19
-            fldds,mb    -8(%sp),%fr18
-            fldds,mb    -8(%sp),%fr17
-            fldds,mb    -8(%sp),%fr16
-            fldds,mb    -8(%sp),%fr15
-            fldds,mb    -8(%sp),%fr14
-            fldds,mb    -8(%sp),%fr13
-
-            ldw         -28(%sp),%rp    ; restore return-pointer
-            
-            bv          %r0(%rp)        ; return to caller.
-            fldds,mb    -8(%sp),%fr12
-            
-            .EXIT
-            .PROCEND
-
-
-qt_start
-            .PROC
-            .CALLINFO   CALLER, FRAME=0
-            .ENTRY
-
-            copy        %r18,%arg0      ; set user arg `pu'.
-            copy        %r17,%arg1      ; ... user function pt.
-            copy        %r16,%arg2      ; ... user function userf.
-                                        ; %r22 is a caller-saves register
-            copy        %r15,%r22       ; function to be called by $$dyncall
-
-            .CALL                       ; in=%r22
-            bl          $$dyncall,%mrp  ; call `only'.
-            copy        %mrp,%rp
-            
-            bl,n        qt_error,%r0    ; `only' erroniously returned.
-
-            .EXIT
-            .PROCEND
-
-
-; Varargs
-;
-; First, call `startup' with the `pt' argument.
-;
-; Next, call the user's function with all arguments.
-; We don't know whether arguments are integers, 32-bit floating-points or
-; even 64-bit floating-points, so we reload all the registers, possibly
-; with garbage arguments.  The thread creator provided non-garbage for
-; the arguments that the callee actually uses, so the callee never gets
-; garbage.
-;
-;            -48    -44    -40    -36    -32
-;             | arg3 | arg2 | arg1 | arg0 |
-;             -----------------------------
-; integers:     arg3   arg2   arg1   arg0
-; 32-bit fps:  farg3  farg2  farg1  farg0
-; 64-bit fps:  <---farg3-->  <---farg1-->
-;
-; Finally, call `cleanup' with the `pt' argument and with the return value
-; from the user's function.  It is an error for `cleanup' to return.
-
-qt_vstart
-            .PROC
-            .CALLINFO   CALLER, FRAME=0
-            .ENTRY
-
-            ; Because the startup function may damage the fixed arguments
-            ; on the stack (PA-RISC Procedure Calling Conventions Reference
-            ; Manual, 2.4 Fixed Arguments Area), we allocate a seperate
-            ; stack frame for it.
-            ldo         64(%sp),%sp
-
-            ; call: void startup(void *pt)
-
-            copy        %r15,%arg0      ; `pt' is arg0 to `startup'.
-            copy        %r16,%r22
-            .CALL
-            bl          $$dyncall,%mrp  ; Call `startup'.
-            copy        %mrp,%rp
-
-            ldo         -64(%sp),%sp
-
-            ; call: void *qt_vuserf_t(...)
-
-            ldw         -36(%sp),%arg0  ; Load args to integer registers.
-            ldw         -40(%sp),%arg1
-            ldw         -44(%sp),%arg2
-            ldw         -48(%sp),%arg3
-            ; Index of fld[w|d]s only ranges from -16 to 15, so we
-            ; take r22 to be our new base register.
-            ldo         -32(%sp),%r22
-            fldws       -4(%r22),%farg0 ; Load args to floating-point 
registers.
-            fldds       -8(%r22),%farg1
-            fldws       -12(%r22),%farg2
-            fldds       -16(%r22),%farg3
-            copy        %r17,%r22
-            .CALL
-            bl          $$dyncall,%mrp  ; Call `userf'.
-            copy        %mrp,%rp
-
-            ; call: void cleanup(void *pt, void *vuserf_return)
-
-            copy        %r15,%arg0      ; `pt' is arg0 to `cleanup'.
-            copy        %ret0,%arg1     ; Return-value is arg1 to `cleanup'.
-            copy        %r18,%r22
-            .CALL
-            bl          $$dyncall,%mrp  ; Call `cleanup'.
-            copy        %mrp,%rp
-
-            bl,n        qt_error,%r0
-
-            .EXIT
-            .PROCEND
diff --git a/qt/md/hppa_b.s b/qt/md/hppa_b.s
deleted file mode 100644
index 1b1e826..0000000
--- a/qt/md/hppa_b.s
+++ /dev/null
@@ -1,203 +0,0 @@
-; QuickThreads -- Threads-building toolkit.
-; Copyright (c) 1993 by David Keppel
-
-; Permission to use, copy, modify and distribute this software and
-; its documentation for any purpose and without fee is hereby
-; granted, provided that the above copyright notice and this notice
-; appear in all copies.  This software is provided as a
-; proof-of-concept and for demonstration purposes; there is no
-; representation about the suitability of this software for any
-; purpose.
-
-; This file (pa-risc_b.s) is part of the port of QuickThreads for
-; PA-RISC 1.1 architecture.  It contains assembly-level support for
-; raw processor performance measurement.  It was written in 1994 by
-; Uwe Reder (address@hidden')
-; for the Operating Systems Department (IMMD4) at the
-; University of Erlangen/Nuernberg Germany.
-
-
-; Note that the number of instructions in the measurement-loops, differ
-; from implementation to implementation. I took eight instructions in a loop
-; for every test (execute eight instructions and loop to the start).
-
-            .CODE
-
-            .IMPORT $global$,DATA
-            .IMPORT $$dyncall,MILLICODE
-            .EXPORT b_call_reg
-            .EXPORT b_call_imm
-            .EXPORT b_add
-            .EXPORT b_load
-
-; Just do nothing, only return to caller. This procedure is called by
-; `b_call_reg' and `b_call_imm'.
-
-b_null
-            .PROC
-            .CALLINFO   NO_CALLS, FRAME=0
-            .ENTRY
-
-            bv,n        %r0(%rp)        ; just return
-
-            .EXIT
-            .PROCEND
-
-; Call the procedure `b_null' with function pointer in a register.
-
-b_call_reg
-            .PROC
-            .CALLINFO   CALLER, FRAME=0
-            .ENTRY
-    
-            stwm        %r3,64(%sp)     ; store r3 (may be used by caller)
-            stw         %rp,-20(%sp)    ; save return-pointer to frame-marker
-
-            addil       LR'to_call-$global$,%r27
-            ldw         RR'to_call-$global$(%r1),%r3
-
-_loop0
-            copy        %r3,%r22        ; copy the procedure label to r22, ...
-            .CALL                       ; ...this is the input to $$dyncall
-            bl          $$dyncall,%mrp  ; call $$dyncall (millicode function)
-            copy        %mrp,%rp        ; remember the return-pointer
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            copy        %r3,%r22
-            .CALL
-            bl          $$dyncall,%mrp
-            copy        %mrp,%rp
-
-            addibf,<=   -8,%arg0,_loop0 ; decrement counter by 8 and loop
-            nop
-
-            ldw         -20(%sp),%rp    ; restore return-pointer
-            bv          %r0(%rp)        ; return to caller
-            ldwm        -64(%sp),%r3    ; resore r3 and remove stack frame
-
-            .EXIT
-            .PROCEND
-
-; Call the procedure `b_null' immediate.
-
-b_call_imm
-            .PROC
-            .CALLINFO   CALLER, FRAME=0, SAVE_RP
-            .ENTRY
-
-            ldo         64(%sp),%sp     ; caller needs a stack-frame
-            stw         %rp,-20(%sp)    ; save return-pointer to frame-marker
-
-_loop1
-            bl          b_null,%rp      ; call `b_null' immediate (8 times)
-            nop 
-            bl          b_null,%rp
-            nop
-            bl          b_null,%rp
-            nop
-            bl          b_null,%rp
-            nop
-            bl          b_null,%rp
-            nop
-            bl          b_null,%rp
-            nop
-            bl          b_null,%rp
-            nop
-            bl          b_null,%rp
-            nop
-
-            addibf,<=   -8,%arg0,_loop1 ; decrement counter by 8 and loop
-            nop
-            
-            ldw         -20(%sp),%rp    ; restore return-pointer
-            bv          %r0(%rp)        ; return to caller
-            ldo         -64(%sp),%sp    ; remove stack-frame
-
-            .EXIT
-            .PROCEND
-
-; Copy register-to-register.
-; On PA-RISC this is implemented with an `or'.
-; The `or' is hidden by a pseudo-operation called `copy'.
-
-b_add
-            .PROC
-            .CALLINFO   NO_CALLS, FRAME=0
-            .ENTRY
-
-_loop2
-            copy        %r19,%r20       ; copy register-to-register
-            copy        %r20,%r21       ; use caller-saves registers
-            copy        %r21,%r22
-            copy        %r22,%r21
-            copy        %r21,%r20
-            copy        %r20,%r19
-            copy        %r19,%r20
-            copy        %r20,%r21
-
-            addibf,<=   -8,%arg0,_loop2 ; decrement counter by 8 and loop
-            nop
-
-            bv,n        %r0(%rp)
-
-            .EXIT
-            .PROCEND
-
-; Load memory to a register.
-
-b_load
-            .PROC
-            .CALLINFO   NO_CALLS, FRAME=0
-            .ENTRY
-
-_loop3
-            ldw         -4(%sp),%r22    ; load data from frame-marker
-            ldw         -8(%sp),%r22    ; use a caller-saves register
-            ldw         -12(%sp),%r22
-            ldw         -16(%sp),%r22
-            ldw         -20(%sp),%r22
-            ldw         -24(%sp),%r22
-            ldw         -28(%sp),%r22
-            ldw         -32(%sp),%r22
-
-            addibf,<=   -8,%arg0,_loop3 ; decrement counter by 8 and loop
-            nop
-
-            bv,n        %r0(%rp)
-
-            .EXIT
-            .PROCEND
-
-
-            .ALIGN 8
-to_call
-            .WORD       b_null
diff --git a/qt/md/i386.README b/qt/md/i386.README
deleted file mode 100644
index 8ffb921..0000000
--- a/qt/md/i386.README
+++ /dev/null
@@ -1,7 +0,0 @@
-Note that some machines want labels to have leading underscores,
-while others (e.g. System V) do not.  Thus, several labels appear
-duplicated except for the leading underscore, e.g.
-
-       _qt_cswap:
-       qt_cswap:
-
diff --git a/qt/md/i386.asm b/qt/md/i386.asm
deleted file mode 100644
index 3638cc1..0000000
--- a/qt/md/i386.asm
+++ /dev/null
@@ -1,112 +0,0 @@
-;; i386.asm -- assembly support.
-
-;;
-;; QuickThreads -- Threads-building toolkit.
-;; Copyright (c) 2001, 2006 Free Software Foundation, Inc.
-;;
-;; Permission to use, copy, modify and distribute this software and
-;; its documentation for any purpose and without fee is hereby
-;; granted, provided that the above copyright notice and this notice
-;; appear in all copies.  This software is provided as a
-;; proof-of-concept and for demonstration purposes; there is no
-;; representation about the suitability of this software for any
-;; purpose.
-
-;; NOTE: double-labeled `_name' and `name' for System V compatability.
-;; NOTE: Comment lines start like this one, or with '//' ONLY.  Sorry!
-
-;; Callee-save: %esi, %edi, %ebx, %ebp
-;; Caller-save: %eax, %ecx
-;; Can't tell: %edx (seems to work w/o saving it.)
-;;
-;; Assignment:
-;;
-;; See ``i386.h'' for the somewhat unconventional stack layout. 
-
-
-       .386p
-       .model flat
-       .code
-
-       public _qt_abort
-       public qt_abort
-       public _qt_block
-       public qt_block
-       public _qt_blocki
-       public qt_blocki
-
-;; These all have the type signature
-;;
-;;     void *blocking (helper, arg0, arg1, new)
-;;
-;; On procedure entry, the helper is at 4(sp), args at 8(sp) and
-;; 12(sp) and the new thread's sp at 16(sp).  It *appears* that the
-;; calling convention for the 8X86 requires the caller to save all
-;; floating-point registers, this makes our life easy. 
-
-;; Halt the currently-running thread.  Save it's callee-save regs on
-;; to the stack, 32 bytes.  Switch to the new stack (next == 16+32(sp))
-;; and call the user function (f == 4+32(sp) with arguments: old sp
-;; arg1 (8+32(sp)) and arg2 (12+32(sp)).  When the user function is
-;; done, restore the new thread's state and return.
-;;
-;; `qt_abort' is (currently) an alias for `qt_block' because most of
-;; the work is shared.  We could save the insns up to `qt_common' by
-;; replicating, but w/o replicating we need an inital subtract (to
-;; offset the stack as if it had been a qt_block) and then a jump
-;; to qt_common.  For the cost of a jump, we might as well just do
-;; all the work.
-;;
-;; The helper function (4(sp)) can return a void* that is returned
-;; by the call to `qt_blockk{,i}'.  Since we don't touch %eax in
-;; between, we get that ``for free''.
-
-_qt_abort:
-qt_abort:
-_qt_block:
-qt_block:
-_qt_blocki:
-qt_blocki:
-       push ebp                ; Save callee-save, sp-=4.
-       push esi                ; Save callee-save, sp-=4.
-       push edi                ; Save callee-save, sp-=4.
-       push ebx                ; Save callee-save, sp-=4.
-       mov eax, esp            ; Remember old stack pointer.
-
-qt_common:
-       mov esp, [esp+32]       ; Move to new thread.
-       push [eax+28]           ; Push arg 2.
-       push [eax+24]           ; Push arg 1.
-       push eax                ; Push arg 0.
-       mov ebx, [eax+20]       ; Get function to call.
-       call ebx                ; Call f.
-       add esp, 12             ; Pop args.
-
-       pop ebx                 ; Restore callee-save, sp+=4.
-       pop edi                 ; Restore callee-save, sp+=4.
-       pop esi                 ; Restore callee-save, sp+=4.
-       pop ebp                 ; Restore callee-save, sp+=4.
-       ret                     ; Resume the stopped function.
-       hlt
-
-
-;; Start a varargs thread.
-
-       public _qt_vstart
-       public qt_vstart
-
-_qt_vstart:
-qt_vstart:
-       push edi                ; Push `pt' arg to `startup'.
-       call ebp                ; Call `startup'.
-       pop eax                 ; Clean up the stack.
-
-       call ebx                ; Call the user's function.
-
-       push eax                ; Push return from user's.
-       push edi                ; Push `pt' arg to `cleanup'.
-       call esi                ; Call `cleanup'.
-
-       hlt                     ; `cleanup' never returns.
-
-       end
diff --git a/qt/md/i386.h b/qt/md/i386.h
deleted file mode 100644
index d7feba0..0000000
--- a/qt/md/i386.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_386_H
-#define QT_386_H
-
-typedef unsigned long qt_word_t;
-
-/* Thread's initial stack layout on the i386:
-
-   non-varargs:
-
-   +---
-   | arg[2]    === `userf' on startup
-   | arg[1]    === `pt' on startup
-   | arg[0]    === `pu' on startup
-   +---
-   | ret pc === qt_error
-   +---
-   | ret pc    === `only' on startup
-   +---
-   | %ebp
-   | %esi
-   | %edi
-   | %ebx                              <--- qt_t.sp
-   +---
-
-   When a non-varargs thread is started, it ``returns'' directly to
-   the client's `only' function.
-
-   varargs:
-
-   +---
-   | arg[n-1]
-   | ..
-   | arg[0]
-   +---
-   | ret pc    === `qt_vstart'
-   +---
-   | %ebp      === `startup'
-   | %esi      === `cleanup'
-   | %edi      === `pt'
-   | %ebx      === `vuserf'            <--- qt_t.sp
-   +---
-
-   When a varargs thread is started, it ``returns'' to the `qt_vstart'
-   startup code.  The startup code calls the appropriate functions. */
-
-
-/* What to do to start a varargs thread running. */
-QT_API void qt_vstart (void);
-
-
-/* Hold 4 saved regs plus two return pcs (qt_error, qt_start) plus
-   three args. */
-#define QT_STKBASE     (9 * 4)
-
-/* Hold 4 saved regs plus one return pc (qt_vstart). */
-#define QT_VSTKBASE    (5 * 4)
-
-
-/* Stack must be 4-byte aligned. */
-#define QT_STKALIGN    (4)
-
-
-/* Where to place various arguments. */
-#define QT_ONLY_INDEX  (QT_PC)
-#define QT_USER_INDEX  (QT_ARG2)
-#define QT_ARGT_INDEX  (QT_ARG1)
-#define QT_ARGU_INDEX  (QT_ARG0)
-
-#define QT_VSTARTUP_INDEX      (QT_EBP)
-#define QT_VUSERF_INDEX                (QT_EBX)
-#define QT_VCLEANUP_INDEX      (QT_ESI)
-#define QT_VARGT_INDEX         (QT_EDI)
-
-
-#define QT_EBX 0
-#define QT_EDI 1
-#define QT_ESI 2
-#define QT_EBP 3
-#define QT_PC  4
-/* The following are defined only for non-varargs. */
-#define QT_RPC 5
-#define QT_ARG0        6
-#define QT_ARG1        7
-#define QT_ARG2        8
-
-
-/* Stack grows down.  The top of the stack is the first thing to
-   pop off (preincrement, postdecrement). */
-#define QT_GROW_DOWN
-
-QT_API void qt_error (void);
-
-/* Push on the error return address. */
-#define QT_ARGS_MD(sto) \
-  (QT_SPUT (sto, QT_RPC, qt_error))
-
-
-/* When varargs are pushed, allocate space for all the args. */
-#define QT_VARGS_MD0(sto, nbytes) \
-  ((qt_t *)(((char *)(sto)) - QT_STKROUNDUP(nbytes)))
-
-#define QT_VARGS_MD1(sto) \
-  (QT_SPUT (sto, QT_PC, qt_vstart))
-
-#define QT_VARGS_DEFAULT
-
-#endif /* QT_386_H */
diff --git a/qt/md/i386.s b/qt/md/i386.s
deleted file mode 100644
index 2872639..0000000
--- a/qt/md/i386.s
+++ /dev/null
@@ -1,108 +0,0 @@
-/* i386.s -- assembly support. */
-
-/*
-// QuickThreads -- Threads-building toolkit.
-// Copyright (c) 1993 by David Keppel
-//
-// Permission to use, copy, modify and distribute this software and
-// its documentation for any purpose and without fee is hereby
-// granted, provided that the above copyright notice and this notice
-// appear in all copies.  This software is provided as a
-// proof-of-concept and for demonstration purposes; there is no
-// representation about the suitability of this software for any
-// purpose. */
-
-/* NOTE: double-labeled `_name' and `name' for System V compatability.  */
-/* NOTE: Comment lines start like this one, or with '//' ONLY.  Sorry! */
-
-/* Callee-save: %esi, %edi, %ebx, %ebp
-// Caller-save: %eax, %ecx
-// Can't tell: %edx (seems to work w/o saving it.)
-//
-// Assignment:
-//
-// See ``i386.h'' for the somewhat unconventional stack layout.  */
-
-
-       .text
-       .align 2
-
-       .globl _qt_abort
-       .globl qt_abort
-       .globl _qt_block
-       .globl qt_block
-       .globl _qt_blocki
-       .globl qt_blocki
-
-/* These all have the type signature
-//
-//     void *blocking (helper, arg0, arg1, new)
-//
-// On procedure entry, the helper is at 4(sp), args at 8(sp) and
-// 12(sp) and the new thread's sp at 16(sp).  It *appears* that the
-// calling convention for the 8X86 requires the caller to save all
-// floating-point registers, this makes our life easy.  */
-
-/* Halt the currently-running thread.  Save it's callee-save regs on
-// to the stack, 32 bytes.  Switch to the new stack (next == 16+32(sp))
-// and call the user function (f == 4+32(sp) with arguments: old sp
-// arg1 (8+32(sp)) and arg2 (12+32(sp)).  When the user function is
-// done, restore the new thread's state and return.
-//
-// `qt_abort' is (currently) an alias for `qt_block' because most of
-// the work is shared.  We could save the insns up to `qt_common' by
-// replicating, but w/o replicating we need an inital subtract (to
-// offset the stack as if it had been a qt_block) and then a jump
-// to qt_common.  For the cost of a jump, we might as well just do
-// all the work.
-//
-// The helper function (4(sp)) can return a void* that is returned
-// by the call to `qt_blockk{,i}'.  Since we don't touch %eax in
-// between, we get that ``for free''.  */
-
-_qt_abort:
-qt_abort:
-_qt_block:
-qt_block:
-_qt_blocki:
-qt_blocki:
-       pushl %ebp              /* Save callee-save, sp-=4. */
-       pushl %esi              /* Save callee-save, sp-=4. */
-       pushl %edi              /* Save callee-save, sp-=4. */
-       pushl %ebx              /* Save callee-save, sp-=4. */
-       movl %esp, %eax         /* Remember old stack pointer. */
-
-qt_common:
-       movl 32(%esp), %esp     /* Move to new thread. */
-       pushl 28(%eax)          /* Push arg 2. */
-       pushl 24(%eax)          /* Push arg 1. */
-       pushl %eax              /* Push arg 0. */
-       movl 20(%eax), %ebx     /* Get function to call. */
-       call *%ebx              /* Call f. */
-       addl $12, %esp          /* Pop args. */
-
-       popl %ebx               /* Restore callee-save, sp+=4. */
-       popl %edi               /* Restore callee-save, sp+=4. */
-       popl %esi               /* Restore callee-save, sp+=4. */
-       popl %ebp               /* Restore callee-save, sp+=4. */
-       ret                     /* Resume the stopped function. */
-       hlt
-
-
-/* Start a varargs thread. */
-
-       .globl _qt_vstart
-       .globl qt_vstart
-_qt_vstart:
-qt_vstart:
-       pushl %edi              /* Push `pt' arg to `startup'. */
-       call *%ebp              /* Call `startup'. */
-       popl %eax               /* Clean up the stack. */
-
-       call *%ebx              /* Call the user's function. */
-
-       pushl %eax              /* Push return from user's. */
-       pushl %edi              /* Push `pt' arg to `cleanup'. */
-       call *%esi              /* Call `cleanup'. */
-
-       hlt                     /* `cleanup' never returns. */
diff --git a/qt/md/i386_b.s b/qt/md/i386_b.s
deleted file mode 100644
index 32129a5..0000000
--- a/qt/md/i386_b.s
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-// QuickThreads -- Threads-building toolkit.
-// Copyright (c) 1993 by David Keppel
-//
-// Permission to use, copy, modify and distribute this software and
-// its documentation for any purpose and without fee is hereby
-// granted, provided that the above copyright notice and this notice
-// appear in all copies.  This software is provided as a
-// proof-of-concept and for demonstration purposes; there is no
-// representation about the suitability of this software for any
-// purpose.  */
-
-       .globl _b_call_reg
-       .globl b_call_reg
-       .globl _b_call_imm
-       .globl b_call_imm
-       .globl _b_add
-       .globl b_add
-       .globl _b_load
-       .globl b_load
-
-_b_call_reg:
-b_call_reg:
-_b_call_imm:
-b_call_imm:
-_b_add:
-b_add:
-_b_load:
-b_load:
-       hlt
diff --git a/qt/md/ksr1.Makefile b/qt/md/ksr1.Makefile
deleted file mode 100644
index aa19583..0000000
--- a/qt/md/ksr1.Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#
-# KSR1 configuration.
-#
-CC           = cc -ansi
-
diff --git a/qt/md/ksr1.h b/qt/md/ksr1.h
deleted file mode 100644
index 83537a3..0000000
--- a/qt/md/ksr1.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_KSR1_H
-#define QT_KSR1_H
-
-/* 
-   Stack layout:
-
-   Registers are saved in strictly low to high order, FPU regs first 
-   (only if qt_block is called), CEU regs second, IPU regs next, with no
-   padding between the groups.
-
-   Callee-save:  f16..f63; c15..c30; i12..i30.
-   Args passed in i2..i5.
-
-   Note: c31 is a private data pointer.  It is not changed on thread
-   swaps with the assumption that it represents per-processor rather
-   than per-thread state.
-
-   Note: i31 is an instruction count register that is updated by the
-   context switch routines.  Like c31, it is not changed on context
-   switches.
-
-   This is what we want on startup:
-
-
-   +------             <-- BOS: Bottom of stack (grows down)
-   | 80 (128 - 48) bytes of padding to a 128-byte boundary
-   +---
-   | only
-   | userf
-   | t
-   | u
-   | qt_start$TXT
-   | (empty)           <-- qt.sp
-   +------             <-- (BOS - 128)
-
-   This is why we want this on startup:
-   
-   A thread begins running when the restore procedure switches thread stacks
-   and pops a return address off of the top of the new stack (see below
-   for the reason why we explicitly store qt_start$TXT).  The
-   block procedure pushes two jump addresses on a thread's stack before
-   it switches stacks.  The first is the return address for the block
-   procedure, and the second is a restore address.  The return address
-   is used to jump back to the thread that has been switched to;  the
-   restore address is a jump within the block code to restore the registers.
-   Normally, this is just a jump to the next address.  However, on thread
-   startup, this is a jump to qt_start$TXT.  (The block procedure stores
-   the restore address at an offset of 8 bytes from the top of the stack,
-   which is also the offset at which qt_start$TXT is stored on the stacks
-   of new threads.  Hence, when the block procedure switches to a new
-   thread stack, it will initially jump to qt_start$TXT; thereafter,
-   it jumps to the restore code.)
-
-   qt_start$TXT, after it has read the initial data on the new thread's
-   stack and placed it in registers, pops the initial stack frame
-   and gives the thread the entire stack to use for execution.
-
-   The KSR runtime system has an unusual treatment of pointers to
-   functions.  From C, taking the `name' of a function yields a
-   pointer to a _constant block_ and *not* the address of the
-   function.  The zero'th entry in the constant block is a pointer to
-   the function.
-
-   We have to be careful: the restore procedure expects a return
-   address on the top of the stack (pointed to by qt.sp).  This is not
-   a problem when restoring a thread that has run before, since the
-   block routine would have stored the return address on top of the
-   stack.  However, when ``faking up'' a thread start (bootstrapping a
-   thread stack frame), the top of the stack needs to contain a
-   pointer to the code that will start the thread running.
-
-   The pointer to the startup code is *not* `qt_start'.  It is the
-   word *pointed to* by `qt_start'.  Thus, we dereference `qt_start',
-   see QT_ARGS_MD below.
-
-   On varargs startup (still unimplemented):
-
-   | padding to 128 byte boundary
-   | varargs           <-- padded to a 128-byte-boundary
-   +---
-   | caller's frame, 16 bytes
-   | 80 bytes of padding (frame padded to a 128-byte boundary)
-   +---
-   | cleanup
-   | vuserf
-   | startup
-   | t
-   +---
-   | qt_start          <-- qt.sp
-   +---
-
-   Of a suspended thread:
-
-   +---
-   | caller's frame, 16 bytes
-   | fpu registers 47 regs * 8 bytes/reg 376 bytes
-   | ceu registers 16 regs * 8 bytes/reg 128 bytes
-   | ipu registers 19 regs * 8 bytes/reg 152 bytes
-   |  :
-   | 80 bytes of padding
-   |  :
-   | qt_restore                <-- qt.sp
-   +---
-
-   */
-
-
-#define QT_STKALIGN    128
-#define QT_GROW_DOWN
-typedef unsigned long qt_word_t;
-
-#define QT_STKBASE     QT_STKALIGN
-#define QT_VSTKBASE    QT_STKBASE
-
-extern void qt_start(void);
-/*
- * See the discussion above for what indexing into a procedure ptr 
- * does for us (it's lovely, though, isn't it?).
- *
- * This assumes that the address of a procedure's code is the
- * first word in a procedure's constant block.  That's how the manual
- * says it will be arranged.
- */
-#define QT_ARGS_MD(sp) (QT_SPUT (sp, 1, ((qt_word_t *)qt_start)[0]))
-
-/* 
- * The *index* (positive offset) of where to put each value.
- * See the picture of the stack above that explains the offsets.
- */
-#define QT_ONLY_INDEX  (5)
-#define QT_USER_INDEX  (4)
-#define QT_ARGT_INDEX  (3)
-#define QT_ARGU_INDEX  (2)
-
-#define QT_VARGS_DEFAULT
-#define QT_VARGS(sp, nb, vargs, pt, startup, vuserf, cleanup) \
-      (qt_vargs (sp, nbytes, &vargs, pt, startup, vuserf, cleanup))
-
-
-#define QT_VARGS_MD0(sp, vabytes) \
-  ((qt_t *)(((char *)(sp)) - 4*8 - QT_STKROUNDUP(vabytes)))
-
-extern void qt_vstart(void);
-#define QT_VARGS_MD1(sp)       (QT_SPUT (sp, 0, ((qt_word_t *)qt_vstart)[0]))
-
-#define QT_VCLEANUP_INDEX      (4)
-#define QT_VUSERF_INDEX                (3)
-#define QT_VSTARTUP_INDEX      (2)
-#define QT_VARGT_INDEX         (1)
-
-#endif /* def QT_KSR1_H */
diff --git a/qt/md/ksr1.s b/qt/md/ksr1.s
deleted file mode 100644
index d4d51a0..0000000
--- a/qt/md/ksr1.s
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .file   "ksr1.s"
-       .def    .debug; .endef
-
-       .align 128
-       .globl qt_blocki
-       .globl qt_blocki$TXT
-       .globl qt_block
-       .globl qt_block$TXT
-       .globl qt_start$TXT
-        .globl qt_start
-       .globl qt_abort$TXT
-       .globl qt_abort
-       .globl qt_vstart
-       .globl qt_vstart$TXT
-
-#
-# KSR convention: on procedure calls, load both the procedure address
-# and a pointer to a constant block.  The address of function `f' is
-# `f$TXT', and the constant block address is `f'.  The constant block
-# has several reserved values:
-#
-#      8 bytes fpu register save mask
-#      4 bytes ipu register save mask
-#      4 bytes ceu register save mask
-#   f:  f$TXT
-#      ... whatever you want ... (not quite...read on)
-#
-# Note, by the way, that a pointer to a function is passed as a
-# pointer to the constant area, and the constant area has the text
-# address.
-#
-
-#
-# Procedures that do not return structures prefix their code with
-#
-# proc$TXT:
-#   finop; cxnop
-#   finop; cxnop
-#   <proc code>
-#
-# Calls to those procedures branch to a 16 byte offset (4 instrs) in
-# to the procedure to skip those instructions.
-#
-# Procedures that return structures use a different code prefix:
-#
-# proc$TXT:
-#   finop; beq.qt %rc, %rc, 24         # return value entry
-#   finop; cxnop
-#   finop; movi8 0, %rc                        # no return value entry
-#   <proc code>
-#
-# Calls that want the returned structure branch directly to the
-# procedure address.  Callers that don't want (or aren't expecting) a
-# return value branche 16 bytes in to the procedure, which will zero
-# %rc, telling the called procedure not to return a structure.
-#
-
-#
-# On entry:
-#   %i2 -- control block of helper function to run
-#          (dereference to get helper)
-#   %i3 -- a1
-#   %i4 -- a2
-#   %i5 -- sp of new to run
-#
-
-        .data
-       .half 0x0, 0x0, 0x7ffff000, 0x7fff8000
-qt_blocki:
-qt_abort:
-       .word qt_blocki$TXT
-       .word qt_restore$TXT
-
-       .text
-qt_abort$TXT:
-qt_blocki$TXT:
-       finop                   ; cxnop                 # entry prefix
-       finop                   ; cxnop                 # entry prefix
-       add8.ntr 75,%i31,%i31   ; movi8 512,%c5         # ICR; stk adjust
-       finop                   ; ssub8.ntr 0,%sp,%c5,%sp
-       finop                   ; st8 %fp,504(%sp)      # Save caller's fp
-       finop                   ; st8 %cp,496(%sp)      # Save caller's cp
-       finop                   ; ld8 8(%c10),%c5       # ld qt_restore$TXT
-       finop                   ; st8 %c14,0(%sp)       # Save special ret addr
-       finop                   ; mov8_8 %c10, %cp      # Our cp
-       finop                   ; sadd8.ntr 0,%sp,%c5,%fp # Our frame ptr
-       finop                   ; st8 %c5,8(%sp)        # st qt_restore$TXT
-#
-# CEU registers %c15-%c24, %c26-%c30 (%c14 we restore later)
-#
-       finop                   ; st8  %c15,456(%sp)
-       finop                   ; st8  %c16,448(%sp)
-       finop                   ; st8  %c17,440(%sp)
-       finop                   ; st8  %c18,432(%sp)
-       finop                   ; st8  %c19,424(%sp)
-       finop                   ; st8  %c20,416(%sp)
-       finop                   ; st8  %c21,408(%sp)
-       finop                   ; st8  %c22,400(%sp)
-       finop                   ; st8  %c23,392(%sp)
-       finop                   ; st8  %c24,384(%sp)
-#
-# %c25 is the Enclosing Frame Pointer (EFP) -- since C doesn't
-# use nested procedures, we ignore it (leaving a gap, though)
-#
-       finop                   ; st8 %c26,368(%sp)
-       finop                   ; st8 %c27,360(%sp)
-       finop                   ; st8 %c28,352(%sp)
-       finop                   ; st8 %c29,344(%sp)
-       finop                   ; st8 %c30,336(%sp)
-#
-# IPU registers %i12-%i30
-# 
-       finop                   ; st8 %i12,328(%sp)
-       finop                   ; st8 %i13,320(%sp)
-       finop                   ; st8 %i14,312(%sp)
-       finop                   ; st8 %i15,304(%sp)
-# (gap to get alignment for st64)
-# -- Doesn't work on version 1.1.3 of the OS
-#      finop                   ; st64 %i16,256(%sp)
-
-       finop                   ; st8 %i16,256(%sp)
-       finop                   ; st8 %i17,248(%sp)
-       finop                   ; st8 %i18,240(%sp)
-       finop                   ; st8 %i19,232(%sp)
-       finop                   ; st8 %i20,224(%sp)
-       finop                   ; st8 %i21,216(%sp)
-       finop                   ; st8 %i22,208(%sp)
-       finop                   ; st8 %i23,200(%sp)
-       finop                   ; st8 %i24,192(%sp)
-       finop                   ; st8 %i25,184(%sp)
-       finop                   ; st8 %i26,176(%sp)
-       finop                   ; st8 %i27,168(%sp)
-       finop                   ; st8 %i28,160(%sp)
-       finop                   ; st8 %i29,152(%sp)
-       finop                   ; st8 %i30,144(%sp)
-#
-# FPU already saved, or saving not necessary
-#
-
-#
-# Switch to the stack passed in as fourth argument to the block
-# routine (%i5) and call the helper routine passed in as the first
-# argument (%i2).  Note that the address of the helper's constant
-# block is passed in, so we must derefence it to get the helper's text
-# address.
-#
-       finop                   ; movb8_8 %i2,%c10      # helper's ConstBlock
-       finop                   ; cxnop                 # Delay slot, fill w/
-       finop                   ; cxnop                 # .. 2 st8 from above
-       finop                   ; ld8 0(%c10),%c4       # load addr of helper
-       finop                   ; movb8_8 %sp, %i2      # 1st arg to helper
-                                                       # is this stack; other
-                                                       # args remain in regs
-       finop                   ; movb8_8 %i5,%sp       # switch stacks
-       finop                   ; jsr %c14,16(%c4)      # call helper
-       movi8 3, %i0            ; movi8 0,%c8           # nargs brain dmg
-       finop                   ; cxnop 
-       finop                   ; cxnop 
-#
-# Here is where behavior differs for threads being restored and threads
-# being started.  Blocked threads have a pointer to qt_restore$TXT on
-# the top of their stacks; manufactured stacks have a pointer to qt_start$TXT
-# on the top of their stacks.  With this setup, starting threads
-# skip the (unecessary) restore operations.
-#
-# We jump to an offset of 16 to either (1) skip past the two noop pairs
-# at the start of qt_start$TXT, or (2) skip past the two noop pairs
-# after qt_restore$TXT.
-#
-       finop                   ; ld8 8(%sp),%c4
-       finop                   ; cxnop
-       finop                   ; cxnop
-       finop                   ; jmp 16(%c4)
-qt_restore$TXT:
-       finop                   ; cxnop
-       finop                   ; cxnop
-#
-# Point of Restore:
-#
-# The helper funtion will return here.  Any result it has placed in
-# a return register (most likely %i0) will not get overwritten below
-# and will consequently be the return value of the blocking routine.
-#
-
-#
-# CEU registers %c15-%c24, %c26-%c30 (%c14 we restore later)
-#
-       finop                   ; ld8  456(%sp),%c15
-       finop                   ; ld8  448(%sp),%c16
-       finop                   ; ld8  440(%sp),%c17
-       finop                   ; ld8  432(%sp),%c18
-       finop                   ; ld8  424(%sp),%c19
-       finop                   ; ld8  416(%sp),%c20
-       finop                   ; ld8  408(%sp),%c21
-       finop                   ; ld8  400(%sp),%c22
-       finop                   ; ld8  392(%sp),%c23
-       finop                   ; ld8  384(%sp),%c24
-#
-# %c25 is the Enclosing Frame Pointer (EFP) -- since C doesn't
-# use nested procedures, we ignore it (leaving a gap, though)
-#
-       finop                   ; ld8 368(%sp),%c26
-       finop                   ; ld8 360(%sp),%c27
-       finop                   ; ld8 352(%sp),%c28
-       finop                   ; ld8 344(%sp),%c29
-       finop                   ; ld8 336(%sp),%c30
-#
-# IPU registers %i12-%i30
-# 
-       finop                   ; ld8 328(%sp),%i12
-       finop                   ; ld8 320(%sp),%i13
-       finop                   ; ld8 312(%sp),%i14
-       finop                   ; ld8 304(%sp),%i15
-# (gap to get alignment for ld64)
-# -- Doesn't work on version 1.1.3 of the OS
-#      finop                   ; ld64 256(%sp),%i16
-
-       finop                   ; ld8 256(%sp),%i16
-       finop                   ; ld8 248(%sp),%i17
-       finop                   ; ld8 240(%sp),%i18
-       finop                   ; ld8 232(%sp),%i19
-       finop                   ; ld8 224(%sp),%i20
-       finop                   ; ld8 216(%sp),%i21
-       finop                   ; ld8 208(%sp),%i22
-       finop                   ; ld8 200(%sp),%i23
-       finop                   ; ld8 192(%sp),%i24
-       finop                   ; ld8 184(%sp),%i25
-       finop                   ; ld8 176(%sp),%i26
-       finop                   ; ld8 168(%sp),%i27
-       finop                   ; ld8 160(%sp),%i28
-       finop                   ; ld8 152(%sp),%i29
-       finop                   ; ld8 144(%sp),%i30
-
-#
-# FPU registers don't need to be loaded, or will be loaded by an
-# enclosing scope (e.g., if this is called by qt_block).
-#
-
-#
-# Load the special registers.  We don't load the stack ptr because
-# the new stack is passed in as an argument, we don't load the EFP
-# because we don't use it, and we load the return address specially
-# off the top of the stack.
-#
-       finop                   ; ld8 0(%sp),%c14       # return addr
-       finop                   ; ld8 496(%sp),%cp
-       finop                   ; ld8 504(%sp),%fp
-
-       finop                   ; jmp 32(%c14)          # jump back to thread
-       finop                   ; movi8 512,%c5         # stack adjust
-       finop                   ; sadd8.ntr 0,%sp,%c5,%sp
-
-        .data
-       .half 0x0, 0x0, 0x7ffff000, 0x7fff8000
-qt_block:
-       .word   qt_block$TXT
-       .word   qt_error
-       .word   qt_error$TXT
-       .word   qt_blocki
-#
-# Handle saving and restoring the FPU regs, relying on qt_blocki
-# to save and restore the remaining registers.
-#
-        .text
-qt_block$TXT:
-       finop                   ; cxnop                 # entry prefix
-       finop                   ; cxnop                 # entry prefix
-
-       add8.ntr 29,%i31,%i31   ; movi8 512,%c5         # ICR; stk adjust
-       finop                   ; ssub8.ntr 0,%sp,%c5,%sp
-       finop                   ; st8 %fp,504(%sp)      # Save caller's fp
-       finop                   ; st8 %cp,496(%sp)      # Save caller's cp
-       finop                   ; st8 %c14,488(%sp)     # store ret addr
-       finop                   ; sadd8.ntr 0,%sp,%c5,%fp # Our frame ptr
-       finop                   ; mov8_8 %c10, %cp      # Our cp
-
-#
-# Store 8 registers at once...destination must be a multiple of 64
-#
-       finop                   ; st64 %f16,384(%sp)
-       finop                   ; st64 %f24,320(%sp)
-       finop                   ; st64 %f32,256(%sp)
-       finop                   ; st64 %f40,192(%sp)
-       finop                   ; st64 %f48,128(%sp)
-       finop                   ; st64 %f56,64(%sp)
-
-#
-# Call the integer blocking routine, passing the arguments passed to us
-#
-       finop                   ; ld8 24(%cp), %c10
-       finop                   ; cxnop
-       finop                   ; jsr %c14, qt_blocki$TXT
-       finop                   ; cxnop
-       finop                   ; cxnop
-       movi8 4,%i0             ; movi8 0,%c8           # nargs brain dmg
-
-#
-# Load 8 registers at once...source must be a multiple of 64
-#
-       finop                   ; ld64 64(%sp),%f56
-       finop                   ; ld64 128(%sp),%f48
-       finop                   ; ld64 192(%sp),%f40
-       finop                   ; ld64 256(%sp),%f32
-       finop                   ; ld64 320(%sp),%f24
-       finop                   ; ld64 384(%sp),%f16
-
-       finop                   ; ld8 488(%sp),%c14
-       finop                   ; ld8 496(%sp),%cp
-       finop                   ; ld8 504(%sp),%fp
-       finop                   ; jmp 32(%c14)          # jump back to thread
-       finop                   ; movi8 512,%c5         # stack adjust
-       finop                   ; sadd8.ntr 0,%sp,%c5,%sp
-
-
-        .data
-       .half 0x0, 0x0, 0x7ffff000, 0x7fff8000
-qt_start:
-       .word qt_start$TXT
-#
-# A new thread is set up to "appear" as if it were executing code at
-# the beginning of qt_start and then it called a blocking routine
-# (qt_blocki).  So when a new thread starts to run, it gets unblocked
-# by the code above and "returns" to `qt_start$TXT' in the
-# restore step of the switch.  Blocked threads jump to 16(qt_restore$TXT),
-# and starting threads jump to 16(qt_start$TXT).
-#
-        .text
-qt_start$TXT:
-       finop                   ; cxnop                 # 
-       finop                   ; cxnop                 # 
-       finop                   ; ld8 40(%sp),%c10      # `only' constant block
-       finop                   ; ld8 32(%sp),%i4       # `userf' arg.
-       finop                   ; ld8 24(%sp),%i3       # `t' arg.
-       finop                   ; ld8 0(%c10),%c4       # `only' text location
-       finop                   ; ld8 16(%sp),%i2       # `u' arg.
-       finop                   ; cxnop
-       finop                   ; jsr %c14,16(%c4)      # call `only'
-#
-# Pop the frame used to store the thread's initial data
-#
-       finop                   ; sadd8.ntr 0,%sp,128,%sp
-       finop                   ; cxnop
-       movi8 2,%i0             ; movi8 0,%c8           # nargs brain dmg
-#
-# If we ever return, it's an error.
-#
-       finop                   ; jmp qt_error$TXT
-       finop                   ; cxnop
-       finop                   ; cxnop
-       movi8 0,%i0             ; movi8 0,%c8           # nargs brain dmg
-
-
-#
-# This stuff is broken
-#
-        .data
-       .half 0x0, 0x0, 0x7ffff000, 0x7fff8000
-qt_vstart:
-       .word qt_vstart$TXT
-
-       .text
-qt_vstart$TXT:
-       finop                   ; cxnop                 # entry prefix
-       finop                   ; cxnop                 # entry prefix
-       finop                   ; cxnop
-       finop                   ; cxnop
-       add8.ntr 11,%i31,%i31   ; movi8 512,%c5
-       finop                   ; ssub8.ntr 0,%sp,%c5,%sp       # fix stack
-       finop                   ; ld8 8(%sp),%i2        # load `t' as arg to
-       finop                   ; cxnop                 # `startup'
-       finop                   ; cxnop
-       finop                   ; ld8 16(%sp),%c10      # `startup' const block
-       finop                   ; cxnop
-       finop                   ; cxnop
-       finop                   ; ld8 0(%c10),%c4       # `startup' text loc.
-       finop                   ; cxnop
-       finop                   ; cxnop
-       finop                   ; jsr %c14,16(%c4)      # call `startup'
-       finop                   ; cxnop
-       finop                   ; cxnop
-       movi8 1, %i0            ; movi8 0,%c8           # nargs brain dmg
-#
-#      finop                   ; sadd 0,%sp,128,%sp    # alter stack
-#
-       finop                   ; ld8 8(%sp),%i2        # load `t' as arg to
-       finop                   ; ld8 8(%sp),%i2        # load `t' as arg to
-       finop                   ; ld8 8(%sp),%i2        # load `t' as arg to
-       finop                   ; ld8 8(%sp),%i2        # load `t' as arg to
-
-       finop                   ; ld8 32(%sp),%c10      # `only' constant block
-       finop                   ; ld8 8(%sp),%i2        # `u' arg.
-       finop                   ; ld8 16(%sp),%i3       # `t' arg.
-       finop                   ; ld8 0(%c10),%c4       # `only' text location
-       finop                   ; ld8 24(%sp),%i4       # `userf' arg.
-       finop                   ; cxnop
-       finop                   ; jsr %c4,16(%c4)       # call `only'
-       finop                   ; cxnop
-       finop                   ; cxnop
-#
-# If the callee ever calls `nargs', the following instruction (pair)
-# will be executed.  However, we don't know when we compile this code
-# how many args are being passed.  So we give our best guess: 0.
-#
-       movi8 0,%i0             ; movi8 0,%c8           # nargs brain dmg
-#
-# If we ever return, it's an error.
-#
-       finop                   ; jmp qt_error$TXT
-       finop                   ; cxnop
-       finop                   ; cxnop
-       movi8 0,%i0             ; movi8 0,%c8           # nargs brain dmg
diff --git a/qt/md/ksr1_b.s b/qt/md/ksr1_b.s
deleted file mode 100644
index 80b0c59..0000000
--- a/qt/md/ksr1_b.s
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .file   "ksr1_b.s"
-       .def    .debug; .endef
-
-        .globl b_call_reg$TXT
-       .globl b_call_reg
-       .globl b_call_imm$TXT
-       .globl b_call_imm
-       .globl b_add$TXT
-       .globl b_add
-       .globl b_load$TXT
-       .globl b_load
-
-
-b_call_reg:
-b_call_imm:
-b_add:
-b_load:
-       .word   b_call_reg$TXT
-       .word   qt_error
-       .word   qt_error$TXT
-
-
-b_call_reg$TXT:
-b_call_imm$TXT:
-b_add$TXT:
-b_load$TXT:
-       finop                   ; cxnop
-       finop                   ; cxnop
-       finop                   ; ld8 16(%cp),%c4
-        finop                  ; ld8 8(%cp),%cp
-       finop                   ; cxnop
-       finop                   ; cxnop
-        finop                  ; jsr %c4,0(%c4)
-       finop                   ; cxnop
-       finop                   ; cxnop
-
diff --git a/qt/md/m88k.Makefile b/qt/md/m88k.Makefile
deleted file mode 100644
index 608c706..0000000
--- a/qt/md/m88k.Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#
-# Hosted compilers for 88k for Meerkat.
-#
-CC = gcc88 -Dm88k -ansi -pedantic -Wall -fno-builtin
-AS = as88
diff --git a/qt/md/m88k.c b/qt/md/m88k.c
deleted file mode 100644
index 9e3ae8b..0000000
--- a/qt/md/m88k.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#include <stdarg.h>
-#include "qt.h"
-
-/* Varargs is harder on the m88k.  Parameters are saved on the stack as
-   something like (stack grows down to low memory; low at bottom of
-   picture):
-
-       |  :
-       | arg8          <-- va_list.__va_stk
-       +---
-       |  :
-       +---
-       | arg7
-       |  :
-       | iarg0         <-- va_list.__va_reg
-       +---
-       |  :
-       | va_list { __va_arg, __va_stk, __va_reg }
-       |  :
-       +---
-
-   Here, `va_list.__va_arg' is the number of word-size arguments
-   that have already been skipped.  Doubles must be double-arligned.
-
-   What this means for us is that the user's routine needs to be
-   called with an arg list where some of the words in the `__va_stk'
-   part of the parameter list have to be promoted to registers.
-
-   BUG: doubleword register arguments must be double-aligned.  If
-   something is passed as an even # arg and used as an odd # arg or
-   vice-versa, the code in the called routine (in the new thread) that
-   decides how to adjust the index will get it wrong, because it will
-   be expect it to be, say, doubleword aligned and it will really be
-   singleword aligned.
-
-   I'm not sure you can solve this without knowing the types of all
-   the arguments.  All in all, we never promised varargs would work
-   reliably. */
-
-
-
-#define QT_VADJ(sp)    (((char *)sp) - QT_VSTKBASE)
-
-/* Always allocate at least enough space for 8 args; waste some space
-   at the base of the stack to ensure the startup routine doesn't read
-   off the end of the stack. */
-
-#define QT_VARGS_MD0(sp, vabytes) \
-   ((qt_t *)(((char *)(sp)) - 8*4 - QT_STKROUNDUP(vabytes)))
-
-extern void qt_vstart(void);
-#define QT_VARGS_MD1(sp)       (QT_SPUT (sp, QT_1, qt_vstart))
-
-
-  struct qt_t *
-qt_vargs (struct qt_t *qsp, int nbytes, void *vargs,
-         void *pt, qt_function_t *startup,
-         qt_function_t *vuserf, qt_function_t *cleanup)
-{
-  va_list ap;
-  int i;
-  int n;               /* Number of words into original arg list. */
-  qt_word_t *sp;
-  int *reg;            /* Where to read passed-in-reg args. */
-  int *stk;            /* Where to read passed-on-stk args. */
-
-  ap = *(va_list *)vargs;
-  qsp = QT_VARGS_MD0 (qsp, nbytes);
-  sp = (qt_word_t *)qsp;
-
-  reg = (ap.__va_arg < 8)
-    ? &ap.__va_reg[ap.__va_arg]
-    : 0;
-  stk = &ap.__va_stk[8];
-  n = ap.__va_arg;
-  for (i=0; i<nbytes/sizeof(qt_word_t) && n<8; ++i,++n) {
-    sp[i] = *reg++;
-  }
-  for (; i<nbytes/sizeof(qt_word_t); ++i) {
-    sp[i] = *stk++;
-  }
-
-#ifdef QT_NDEF
-  for (i=0; i<nbytes/sizeof(qt_word_t); ++i) {
-    sp[i] = (n < 8)
-      ? *reg++
-      : *stk++;
-    ++n;
-  }
-#endif
-
-  QT_VARGS_MD1 (QT_VADJ(sp));
-  QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt);
-  QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup);
-  QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf);
-  QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup);
-  return ((qt_t *)QT_VADJ(sp));
-}
diff --git a/qt/md/m88k.h b/qt/md/m88k.h
deleted file mode 100644
index df7e07a..0000000
--- a/qt/md/m88k.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_M88K_H
-#define QT_M88K_H
-
-typedef unsigned long qt_word_t;
-
-#define QT_GROW_DOWN
-
-/* Stack layout on the mips:
-
-   Callee-save registers are: $16-$23, $30; $f20-$f30.
-   Also save $31, return pc.
-
-   Non-varargs:
-
-   +---
-   | r30 (fp)  on startup === 0
-   | r25
-   | r24
-   | r23
-   | r22
-   | r21
-   | r20
-   | r19
-   | r18
-   | r17       on startup === `only'
-   | r16       on startup === `userf'
-   | r15       on startup === `pt'
-   | r14       on startup === `pu'
-   | r1                on startup === `qt_start'
-   | 0
-   | 0
-   +---
-   | 0
-   | ... (8 regs worth === 32 bytes of homing area)
-   | 0                                         <--- sp
-   +---
-
-   Conventions for varargs:
-
-   |  :
-   | arg8
-   +---
-   | r30 (fp)  arg7
-   | r25       arg6
-   | r24       arg5
-   | r23       arg4
-   | r22       arg3
-   | r21       arg2
-   | r20       arg1
-   | r19       arg0
-   | r18
-   | r17       on startup === `startup'
-   | r16       on startup === `vuserf'
-   | r15       on startup === `pt'
-   | r14       on startup === `cleanup'
-   | r1                on startup === `qt_vstart'
-   | 0
-   | 0
-   +---
-   | 0
-   | ... (8 regs worth === 32 bytes of homing area)
-   | 0                                         <--- sp
-   +---
-
-   */
-
-
-/* Stack must be doubleword aligned. */
-#define QT_STKALIGN    (16)    /* Doubleword aligned. */
-
-/* How much space is allocated to hold all the crud for
-   initialization: saved registers plus padding to keep the stack
-   aligned plus 8 words of padding to use as a `homing area' (for
-   r2-r9) when calling helper functions on the stack of the (not yet
-   started) thread.  The varargs save area is small because it gets
-   overlapped with the top of the parameter list.  In case the
-   parameter list is less than 8 args, QT_ARGS_MD0 adds some dead
-   space at the top of the stack. */
-
-#define QT_STKBASE     (16*4 + 8*4)
-#define QT_VSTKBASE    (8*4 + 8*4)
-
-
-/* Index of various registers. */
-#define QT_1   (8+2)
-#define QT_14  (8+3)
-#define QT_15  (8+4)
-#define QT_16  (8+5)
-#define QT_17  (8+6)
-#define QT_30  (8+15)
-
-
-/* When a never-before-run thread is restored, the return pc points
-   to a fragment of code that starts the thread running.  For
-   non-vargs functions, it sets up arguments and calls the client's
-   `only' function.  For varargs functions, the startup code calls the
-   startup, user, and cleanup functions.
-
-   For non-varargs functions, we set the frame pointer to 0 to
-   null-terminate the call chain.
-
-   For varargs functions, the frame pointer register is used to hold
-   one of the arguments, so that all arguments can be laid out in
-   memory by the conventional `qt_vargs' varargs initialization
-   routine.
-
-   The varargs startup routine always reads 8 words of arguments from
-   the stack.  If there are less than 8 words of arguments, then the
-   arg list could call off the top of the stack.  To prevent fall-off,
-   always allocate 8 words. */
-
-extern void qt_start(void);
-#define QT_ARGS_MD(sp) \
-  (QT_SPUT (sp, QT_1, qt_start), \
-   QT_SPUT (sp, QT_30, 0))
-
-
-/* The m88k uses a struct for `va_list', so pass a pointer to the
-   struct. */
-
-typedef void (qt_function_t)(void);
-
-struct qt_t;
-extern struct qt_t *qt_vargs (struct qt_t *sp, int nbytes,
-                             void *vargs, void *pt,
-                             qt_function_t *startup,
-                             qt_function_t *vuserf,
-                             qt_function_t *cleanup);
-
-#define QT_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \
-  (qt_vargs (sp, nbytes, &(vargs), pt, (qt_function_t *)startup, \
-            (qt_function_t *)vuserf, (qt_function_t *)cleanup))
-
-
-/* The *index* (positive offset) of where to put each value. */
-#define QT_ONLY_INDEX  (QT_17)
-#define QT_USER_INDEX  (QT_16)
-#define QT_ARGT_INDEX  (QT_15)
-#define QT_ARGU_INDEX  (QT_14)
-
-#define QT_VCLEANUP_INDEX      (QT_14)
-#define QT_VUSERF_INDEX                (QT_16)
-#define QT_VSTARTUP_INDEX      (QT_17)
-#define QT_VARGT_INDEX         (QT_15)
-
-#endif /* ndef QT_M88K_H */
diff --git a/qt/md/m88k.s b/qt/md/m88k.s
deleted file mode 100644
index 42467e8..0000000
--- a/qt/md/m88k.s
+++ /dev/null
@@ -1,132 +0,0 @@
-/* m88k.s -- assembly support. */
-
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-/* Callee-save r14..r25, r31(sp), r30(fp).  r1 === return pc.
- * Argument registers r2..r9, return value r2..r3.
- *
- * On startup, restore regs so retpc === call to a function to start.
- *
- * We're going to call a function (r2) from within the context switch
- * routine.  Call it on the new thread's stack on behalf of the old
- * thread.
- */
-
-       .globl _qt_block
-       .globl _qt_blocki
-       .globl _qt_abort
-       .globl _qt_start
-       .globl _qt_vstart
-
-       /*
-       ** r2: ptr to function to call once curr is suspended
-       **      and control is on r5's stack.
-       ** r3: 1'th arg to *r2.
-       ** r4: 2'th arg to *r2.
-       ** r5: sp of thread to suspend.
-       **
-       ** The helper routine returns a value that is passed on as the
-       ** return value from the blocking routine.  Since we don't
-       ** touch r2 between the helper's return and the end of
-       ** function, we get this behavior for free.
-       **
-       ** Same entry for integer-only and floating-point, since there
-       ** are no separate integer and floating-point registers.
-       **
-       ** Each procedure call sets aside a ``home region'' of 8 regs
-       ** for r2-r9 for varargs.  For context switches we don't use
-       ** the ``home region'' for varargs so use it to save regs.
-       ** Allocate 64 bytes of save space -- use 32 bytes of register
-       ** save area passed in to us plus 32 bytes we allcated, use
-       ** the other 32 bytes for save area for a save area to call
-       ** the helper function.
-       */
-_qt_block:
-_qt_blocki:
-       sub r31, r31,64         /* Allocate reg save space. */
-       st r1, r31,8+32         /* Save callee-save registers. */
-       st r14, r31,12+32
-       st.d r15, r31,16+32
-       st.d r17, r31,24+32
-       st.d r19, r31,32+32
-       st.d r21, r31,40+32
-       st.d r23, r31,48+32
-       st r25, r31,56+32
-       st r30, r31,60+32
-
-_qt_abort:
-       addu r14, r31,0         /* Remember old sp. */
-       addu r31, r5,0          /* Set new sp. */
-       jsr.n r2                /* Call helper. */
-       addu r2, r14,0          /* Pass old sp as an arg0 to helper. */
-
-       ld r1, r31,8+32         /* Restore callee-save registers. */
-       ld r14, r31,12+32
-       ld.d r15, r31,16+32
-       ld.d r17, r31,24+32
-       ld.d r19, r31,32+32
-       ld.d r21, r31,40+32
-       ld.d r23, r31,48+32
-       ld r25, r31,56+32
-       ld r30, r31,60+32
-
-       jmp.n r1                /* Return to new thread's caller. */
-       addu r31, r31,64        /* Free register save space. */
-
-
-       /*
-       ** Non-varargs thread startup.
-       ** See `m88k.h' for register use conventions.
-       */
-_qt_start:
-       addu r2, r14,0          /* Set user arg `pu'. */
-       addu r3, r15,0          /* ... user function pt. */
-       jsr.n r17               /* Call `only'. */
-       addu r4, r16,0          /* ... user function userf. */
-
-       bsr _qt_error           /* `only' erroniously returned. */
-
-
-       /*
-       ** Varargs thread startup.
-       ** See `m88k.h' for register use conventions.
-       **
-       ** Call the `startup' function with just argument `pt'.
-       ** Then call `vuserf' with 8 register args plus any
-       ** stack args.
-       ** Then call `cleanup' with `pt' and the return value
-       ** from `vuserf'.
-       */
-_qt_vstart:
-       addu r18, r30,0         /* Remember arg7 to `vuserf'. */
-       addu r30, r0,0          /* Null-terminate call chain. */
-
-       jsr.n r17               /* Call `startup'. */
-       addu r2, r15,0          /* `pt' is arg0 to `startup'. */
-
-       addu r2, r19,0          /* Set arg0. */
-       addu r3, r20,0          /* Set arg1. */
-       addu r4, r21,0          /* Set arg2. */
-       addu r5, r22,0          /* Set arg3. */
-       addu r6, r23,0          /* Set arg4. */
-       addu r7, r24,0          /* Set arg5. */
-       addu r8, r25,0          /* Set arg6. */
-       jsr.n r16               /* Call `vuserf'. */
-       addu r9, r18,0          /* Set arg7. */
-
-       addu r3, r2,0           /* Ret. value is arg1 to `cleanup'. */
-       jsr.n r14               /* Call `cleanup'. */
-       addu r2, r15,0          /* `pt' is arg0 to `cleanup'. */
-
-       bsr _qt_error           /* `cleanup' erroniously returned. */
diff --git a/qt/md/m88k_b.s b/qt/md/m88k_b.s
deleted file mode 100644
index 1926e6a..0000000
--- a/qt/md/m88k_b.s
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .text
-       .globl _b_call_reg
-       .globl _b_call_imm
-       .globl _b_add
-       .globl _b_load
-
-_b_null:
-       jmp   r1
-
-_b_call_reg:
-       subu r31, r31,8                 /* Alloc ret pc save space. */
-       st r1, r31,32                   /* Save ret pc. */
-       or.u r3, r0,hi16(_b_null)       /* Put call addr in a reg. */
-       or r3, r3,lo16(_b_null)
-       jsr r3
-L0:
-       jsr r3
-       jsr r3
-       jsr r3
-       jsr.n r3
-       subu r2, r2,5                   /* Decrement #of iter to go. */
-       bcnd.n gt0,r2,L0
-       jsr r3
-
-       ld r1, r31,32
-       jmp r1
-
-
-_b_call_imm:
-       subu r31, r31,8                 /* Alloc ret pc save space. */
-       st r1, r31,32                   /* Save ret pc. */
-       bsr _b_null
-L1:
-       bsr _b_null
-       bsr _b_null
-       bsr _b_null
-       bsr.n _b_null
-       subu r2, r2,5                   /* Decrement #of iter to go. */
-       bcnd.n gt0,r2,L1
-       bsr _b_null
-
-       ld r1, r31,32
-       jmp r1
-
-_b_add:
-       add r0, r3,r4
-L2:
-       add r3, r4,r5
-       add r4, r5,r6
-       add r5, r6,r7
-       add r8, r9,r0
-       add r0, r3,r4
-       add r3, r4,r5
-       add r4, r5,r6
-       add r5, r6,r7
-       add r8, r9,r0
-
-       add r0, r3,r4
-       add r3, r4,r5
-       add r4, r5,r6
-       add r5, r6,r7
-       add r8, r9,r0
-       add r0, r3,r4
-       add r3, r4,r5
-       add r4, r5,r6
-       add r5, r6,r7
-       add r8, r9,r0
-
-       subu r2, r2,20                  /* Decrement #of iter to go. */
-       bcnd.n gt0,r2,L2
-       add r0, r3,r4
-
-       jmp r1
-
-
-_b_load:
-       ld r0, r31,0
-L3:
-       ld r3, r31,4
-       ld r4, r31,8
-       ld r5, r31,12
-       ld r6, r31,16
-       ld r0, r31,0
-       ld r3, r31,4
-       ld r4, r31,8
-       ld r5, r31,12
-       ld r6, r31,16
-
-       ld r0, r31,0
-       ld r3, r31,4
-       ld r4, r31,8
-       ld r5, r31,12
-       ld r6, r31,16
-       ld r0, r31,0
-       ld r3, r31,4
-       ld r4, r31,8
-       ld r5, r31,12
-       ld r6, r31,16
-
-       subu r2, r2,20                  /* Decrement #of iter to go. */
-       bcnd.n gt0,r2,L3
-       ld r0, r31,0
-
-       jmp   r1
diff --git a/qt/md/mips-irix5.s b/qt/md/mips-irix5.s
deleted file mode 100644
index 234a953..0000000
--- a/qt/md/mips-irix5.s
+++ /dev/null
@@ -1,182 +0,0 @@
-/* mips.s -- assembly support. */
-
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-/* Callee-save $16-$23, $30-$31.
- *
- * $25 is used as a procedure value pointer, used to discover constants
- * in a callee.  Thus, each caller here sets $25 before the call.
- *
- * On startup, restore regs so retpc === call to a function to start.
- * We're going to call a function ($4) from within this routine.
- * We're passing 3 args, therefore need to allocate 12 extra bytes on
- * the stack for a save area.  The start routine needs a like 16-byte
- * save area.  Must be doubleword aligned (_mips r3000 risc
- * architecture_, gerry kane, pg d-23).
- */
-
-/*
- * Modified by Assar Westerlund <address@hidden> to support Irix 5.x
- * calling conventions for dynamically-linked code.
- */
-
-       /* Make this position-independent code. */
-       .option pic2
-
-       .globl qt_block
-       .globl qt_blocki
-       .globl qt_abort
-       .globl qt_start
-       .globl qt_vstart
-
-       /*
-       ** $4: ptr to function to call once curr is suspended
-       **      and control is on $7's stack.
-       ** $5: 1'th arg to $4.
-       ** $6: 2'th arg to $4
-       ** $7: sp of thread to suspend.
-       **
-       ** Totally gross hack: The MIPS calling convention reserves
-       ** 4 words on the stack for a0..a3.  This routine "ought" to
-       ** allocate space for callee-save registers plus 4 words for
-       ** the helper function, but instead we use the 4 words
-       ** provided by the function that called us (we don't need to
-       ** save our argument registers).  So what *appears* to be
-       ** allocating only 40 bytes is actually allocating 56, by
-       ** using the caller's 16 bytes.
-       **
-       ** The helper routine returns a value that is passed on as the
-       ** return value from the blocking routine.  Since we don't
-       ** touch $2 between the helper's return and the end of
-       ** function, we get this behavior for free.
-       */
-qt_blocki:
-       sub $sp,$sp,40          /* Allocate reg save space. */
-       sw $16, 0+16($sp)
-       sw $17, 4+16($sp)
-       sw $18, 8+16($sp)
-       sw $19,12+16($sp)
-       sw $20,16+16($sp)
-       sw $21,20+16($sp)
-       sw $22,24+16($sp)
-       sw $23,28+16($sp)
-       sw $30,32+16($sp)
-       sw $31,36+16($sp)
-       add $2, $sp,$0          /* $2 <= old sp to pass to address@hidden */
-qt_abort:
-       add $sp, $7,$0          /* $sp <= new sp. */
-       .set noreorder
-       add $25, $4,$0          /* Set helper function procedure value. */
-       jal $31,$25             /* Call helper address@hidden . */
-       add $4, $2,$0           /* $a0 <= pass old sp as a parameter. */
-       .set reorder
-       lw $31,36+16($sp)       /* Restore callee-save regs... */
-       lw $30,32+16($sp)
-       lw $23,28+16($sp)
-       lw $22,24+16($sp)
-       lw $21,20+16($sp)
-       lw $20,16+16($sp)
-       lw $19,12+16($sp)
-       lw $18, 8+16($sp)
-       lw $17, 4+16($sp)
-       lw $16, 0+16($sp)       /* Restore callee-save */
-
-       add $sp,$sp,40          /* Deallocate reg save space. */
-       j $31                   /* Return to caller. */
-
-       /*
-       ** Non-varargs thread startup.
-       ** Note: originally, 56 bytes were allocated on the stack.
-       ** The thread restore routine (_blocki/_abort) removed 40
-       ** of them, which means there is still 16 bytes for the
-       ** argument area required by the MIPS calling convention.
-       */
-qt_start:
-       add $4, $16,$0          /* Load up user function pu. */
-       add $5, $17,$0          /* ... user function pt. */
-       add $6, $18,$0          /* ... user function userf. */
-       add $25, $19,$0         /* Set `only' procedure value. */
-       jal $31,$25             /* Call `only'. */
-       la $25,qt_error         /* Set `qt_error' procedure value. */
-       j $25
-
-
-       /*
-       ** Save calle-save floating-point regs $f20-$f30
-       ** See comment in `qt_block' about calling conventinos and
-       ** reserved space.  Use the same trick here, but here we
-       ** actually have to allocate all the bytes since we have to
-       ** leave 4 words leftover for `qt_blocki'.
-       **
-       ** Return value from `qt_block' is the same as the return from
-       ** `qt_blocki'.  We get that for free since we don't touch $2
-       ** between the return from `qt_blocki' and the return from
-       ** `qt_block'.
-       */
-qt_block:
-       sub $sp, $sp,56         /* 6 8-byte regs, saved ret pc, aligned. */
-       swc1 $f20,  0+16($sp)
-       swc1 $f22,  8+16($sp)
-       swc1 $f24, 16+16($sp)
-       swc1 $f26, 24+16($sp)
-       swc1 $f28, 32+16($sp)
-       swc1 $f30, 40+16($sp)
-       sw $31, 48+16($sp)
-       jal qt_blocki
-       lwc1 $f20,  0+16($sp)
-       lwc1 $f22,  8+16($sp)
-       lwc1 $f24, 16+16($sp)
-       lwc1 $f26, 24+16($sp)
-       lwc1 $f28, 32+16($sp)
-       lwc1 $f30, 40+16($sp)
-       lw $31, 48+16($sp)
-       add $sp, $sp,56
-       j $31
-
-
-       /*
-       ** First, call `startup' with the `pt' argument.
-       **
-       ** Next, call the user's function with all arguments.
-       ** Note that we don't know whether args were passed in
-       ** integer regs, fp regs, or on the stack (See Gerry Kane
-       ** "MIPS R2000 RISC Architecture" pg D-22), so we reload
-       ** all the registers, possibly with garbage arguments.
-       **
-       ** Finally, call `cleanup' with the `pt' argument and with
-       ** the return value from the user's function.  It is an error
-       ** for `cleanup' to return.
-       */
-qt_vstart:
-       add $4, $17,$0          /* `pt' is arg0 to `startup'. */
-       add $25, $18,$0         /* Set `startup' procedure value. */
-       jal $31, $25            /* Call `startup'. */
-
-       add $sp, $sp,16         /* Free extra save space. */
-       lw $4,  0($sp)          /* Load up args. */
-       lw $5,  4($sp)
-       lw $6,  8($sp)
-       lw $7, 12($sp)
-       lwc1 $f12, 0($sp)       /* Load up fp args. */
-       lwc1 $f14, 8($sp)
-       add $25, $19,$0         /* Set `userf' procedure value. */
-       jal $31,$25             /* Call `userf'. */
-
-       add $4, $17,$0          /* `pt' is arg0 to `cleanup'. */
-       add $5, $2,$0           /* Ret. val is arg1 to `cleanup'. */
-       add $25, $16,$0         /* Set `cleanup' procedure value. */
-       jal $31, $25            /* Call `cleanup'. */
-
-       la $25,qt_error         /* Set `qt_error' procedure value. */
-       j $25
diff --git a/qt/md/mips.h b/qt/md/mips.h
deleted file mode 100644
index c584a68..0000000
--- a/qt/md/mips.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_MIPS_H
-#define QT_MIPS_H
-
-typedef unsigned long qt_word_t;
-
-#define QT_GROW_DOWN
-
-/* Stack layout on the mips:
-
-   Callee-save registers are: $16-$23, $30; $f20-$f30.
-   Also save $31, return pc.
-
-   Non-varargs:
-
-   +---
-   | $f30      The first clump is only saved if `qt_block'
-   | $f28      is called, in which case it saves the fp regs
-   | $f26      then calls `qt_blocki' to save the int regs.
-   | $f24
-   | $f22
-   | $f20
-   | $31 === return pc in `qt_block'
-   +---
-   | $31 === return pc; on startup == qt_start
-   | $30
-   | $23
-   | $22
-   | $21
-   | $20
-   | $19       on startup === only
-   | $18       on startup === $a2 === userf
-   | $17       on startup === $a1 === pt
-   | $16       on startup === $a0 === pu
-   | <a3>      save area req'd by MIPS calling convention
-   | <a2>      save area req'd by MIPS calling convention
-   | <a1>      save area req'd by MIPS calling convention
-   | <a0>      save area req'd by MIPS calling convention      <--- sp
-   +---
-
-   Conventions for varargs:
-
-   | args ...
-   +---
-   |  :
-   |  :
-   | $21
-   | $20
-   | $19       on startup === `userf'
-   | $18       on startup === `startup'
-   | $17       on startup === `pt'
-   | $16       on startup === `cleanup'
-   | <a3>
-   | <a2>
-   | <a1>
-   | <a0>      <--- sp
-   +---
-
-   Note: if we wanted to, we could muck about and try to get the 4
-   argument registers loaded in to, e.g., $22, $23, $30, and $31,
-   and the return pc in, say, $20.  Then, the first 4 args would
-   not need to be loaded from memory, they could just use
-   register-to-register copies. */
-
-
-/* Stack must be doubleword aligned. */
-#define QT_STKALIGN    (8)     /* Doubleword aligned. */
-
-/* How much space is allocated to hold all the crud for
-   initialization: $16-$23, $30, $31.  Just do an integer restore,
-   no need to restore floating-point.  Four words are needed for the
-   argument save area for the helper function that will be called for
-   the old thread, just before the new thread starts to run. */
-
-#define QT_STKBASE     (14 * 4)
-#define QT_VSTKBASE    QT_STKBASE
-
-
-/* Offsets of various registers. */
-#define QT_31  (9+4)
-#define QT_19  (3+4)
-#define QT_18  (2+4)
-#define QT_17  (1+4)
-#define QT_16  (0+4)
-
-
-/* When a never-before-run thread is restored, the return pc points
-   to a fragment of code that starts the thread running.  For
-   non-vargs functions, it just calls the client's `only' function.
-   For varargs functions, it calls the startup, user, and cleanup
-   functions.
-
-   The varargs startup routine always reads 4 words of arguments from
-   the stack.  If there are less than 4 words of arguments, then the
-   startup routine can read off the top of the stack.  To prevent
-   errors we always allocate 4 words.  If there are more than 3 words
-   of arguments, the 4 preallocated words are simply wasted. */
-
-extern void qt_start(void);
-#define QT_ARGS_MD(sp) (QT_SPUT (sp, QT_31, qt_start))
-
-#define QT_VARGS_MD0(sp, vabytes) \
-  ((qt_t *)(((char *)(sp)) - 4*4 - QT_STKROUNDUP(vabytes)))
-
-extern void qt_vstart(void);
-#define QT_VARGS_MD1(sp)       (QT_SPUT (sp, QT_31, qt_vstart))
-
-#define QT_VARGS_DEFAULT
-
-
-/* The *index* (positive offset) of where to put each value. */
-#define QT_ONLY_INDEX  (QT_19)
-#define QT_USER_INDEX  (QT_18)
-#define QT_ARGT_INDEX  (QT_17)
-#define QT_ARGU_INDEX  (QT_16)
-
-#define QT_VCLEANUP_INDEX      (QT_16)
-#define QT_VUSERF_INDEX                (QT_19)
-#define QT_VSTARTUP_INDEX      (QT_18)
-#define QT_VARGT_INDEX         (QT_17)
-
-#endif /* ndef QT_MIPS_H */
diff --git a/qt/md/mips.s b/qt/md/mips.s
deleted file mode 100644
index b074b98..0000000
--- a/qt/md/mips.s
+++ /dev/null
@@ -1,164 +0,0 @@
-/* mips.s -- assembly support. */
-
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-/* Callee-save $16-$23, $30-$31.
- *
- * On startup, restore regs so retpc === call to a function to start.
- * We're going to call a function ($4) from within this routine.
- * We're passing 3 args, therefore need to allocate 12 extra bytes on
- * the stack for a save area.  The start routine needs a like 16-byte
- * save area.  Must be doubleword aligned (_mips r3000 risc
- * architecture_, gerry kane, pg d-23).
- */
-
-       .globl qt_block
-       .globl qt_blocki
-       .globl qt_abort
-       .globl qt_start
-       .globl qt_vstart
-
-       /*
-       ** $4: ptr to function to call once curr is suspended
-       **      and control is on $7's stack.
-       ** $5: 1'th arg to $4.
-       ** $6: 2'th arg to $4
-       ** $7: sp of thread to suspend.
-       **
-       ** Totally gross hack: The MIPS calling convention reserves
-       ** 4 words on the stack for a0..a3.  This routine "ought" to
-       ** allocate space for callee-save registers plus 4 words for
-       ** the helper function, but instead we use the 4 words
-       ** provided by the function that called us (we don't need to
-       ** save our argument registers).  So what *appears* to be
-       ** allocating only 40 bytes is actually allocating 56, by
-       ** using the caller's 16 bytes.
-       **
-       ** The helper routine returns a value that is passed on as the
-       ** return value from the blocking routine.  Since we don't
-       ** touch $2 between the helper's return and the end of
-       ** function, we get this behavior for free.
-       */
-qt_blocki:
-       sub $sp,$sp,40          /* Allocate reg save space. */
-       sw $16, 0+16($sp)
-       sw $17, 4+16($sp)
-       sw $18, 8+16($sp)
-       sw $19,12+16($sp)
-       sw $20,16+16($sp)
-       sw $21,20+16($sp)
-       sw $22,24+16($sp)
-       sw $23,28+16($sp)
-       sw $30,32+16($sp)
-       sw $31,36+16($sp)
-       add $2, $sp,$0          /* $2 <= old sp to pass to address@hidden */
-qt_abort:
-       add $sp, $7,$0          /* $sp <= new sp. */
-       .set noreorder
-       jal $31,$4              /* Call helper address@hidden . */
-       add $4, $2,$0           /* $a0 <= pass old sp as a parameter. */
-       .set reorder
-       lw $31,36+16($sp)       /* Restore callee-save regs... */
-       lw $30,32+16($sp)
-       lw $23,28+16($sp)
-       lw $22,24+16($sp)
-       lw $21,20+16($sp)
-       lw $20,16+16($sp)
-       lw $19,12+16($sp)
-       lw $18, 8+16($sp)
-       lw $17, 4+16($sp)
-       lw $16, 0+16($sp)       /* Restore callee-save */
-
-       add $sp,$sp,40          /* Deallocate reg save space. */
-       j $31                   /* Return to caller. */
-
-       /*
-       ** Non-varargs thread startup.
-       ** Note: originally, 56 bytes were allocated on the stack.
-       ** The thread restore routine (_blocki/_abort) removed 40
-       ** of them, which means there is still 16 bytes for the
-       ** argument area required by the MIPS calling convention.
-       */
-qt_start:
-       add $4, $16,$0          /* Load up user function pu. */
-       add $5, $17,$0          /* ... user function pt. */
-       add $6, $18,$0          /* ... user function userf. */
-       jal $31,$19             /* Call `only'. */
-       j qt_error
-
-
-       /*
-       ** Save calle-save floating-point regs $f20-$f30
-       ** See comment in `qt_block' about calling conventinos and
-       ** reserved space.  Use the same trick here, but here we
-       ** actually have to allocate all the bytes since we have to
-       ** leave 4 words leftover for `qt_blocki'.
-       **
-       ** Return value from `qt_block' is the same as the return from
-       ** `qt_blocki'.  We get that for free since we don't touch $2
-       ** between the return from `qt_blocki' and the return from
-       ** `qt_block'.
-       */
-qt_block:
-       sub $sp, $sp,56         /* 6 8-byte regs, saved ret pc, aligned. */
-       swc1 $f20,  0+16($sp)
-       swc1 $f22,  8+16($sp)
-       swc1 $f24, 16+16($sp)
-       swc1 $f26, 24+16($sp)
-       swc1 $f28, 32+16($sp)
-       swc1 $f30, 40+16($sp)
-       sw $31, 48+16($sp)
-       jal qt_blocki
-       lwc1 $f20,  0+16($sp)
-       lwc1 $f22,  8+16($sp)
-       lwc1 $f24, 16+16($sp)
-       lwc1 $f26, 24+16($sp)
-       lwc1 $f28, 32+16($sp)
-       lwc1 $f30, 40+16($sp)
-       lw $31, 48+16($sp)
-       add $sp, $sp,56
-       j $31
-
-
-       /*
-       ** First, call `startup' with the `pt' argument.
-       **
-       ** Next, call the user's function with all arguments.
-       ** Note that we don't know whether args were passed in
-       ** integer regs, fp regs, or on the stack (See Gerry Kane
-       ** "MIPS R2000 RISC Architecture" pg D-22), so we reload
-       ** all the registers, possibly with garbage arguments.
-       **
-       ** Finally, call `cleanup' with the `pt' argument and with
-       ** the return value from the user's function.  It is an error
-       ** for `cleanup' to return.
-       */
-qt_vstart:
-       add $4, $17,$0          /* `pt' is arg0 to `startup'. */
-       jal $31, $18            /* Call `startup'. */
-
-       add $sp, $sp,16         /* Free extra save space. */
-       lw $4,  0($sp)          /* Load up args. */
-       lw $5,  4($sp)
-       lw $6,  8($sp)
-       lw $7, 12($sp)
-       lwc1 $f12, 0($sp)       /* Load up fp args. */
-       lwc1 $f14, 8($sp)
-       jal $31,$19             /* Call `userf'. */
-
-       add $4, $17,$0          /* `pt' is arg0 to `cleanup'. */
-       add $5, $2,$0           /* Ret. val is arg1 to `cleanup'. */
-       jal $31, $16            /* Call `cleanup'. */
-
-       j qt_error
diff --git a/qt/md/mips_b.s b/qt/md/mips_b.s
deleted file mode 100644
index 5b37408..0000000
--- a/qt/md/mips_b.s
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .globl b_call_reg
-       .globl b_call_imm
-       .globl b_add
-       .globl b_load
-
-       .ent b_null
-b_null:
-       j $31
-       .end b_null
-
-       .ent b_call_reg
-b_call_reg:
-       la $5,b_null
-       add $6, $31,0
-$L0:
-       jal $5
-       jal $5
-       jal $5
-       jal $5
-       jal $5
-
-       sub $4, $4,5
-       bgtz $4,$L0
-       j $6
-       .end
-
-
-       .ent b_call_imm
-b_call_imm:
-       add $6, $31,0
-$L1:
-       jal b_null
-       jal b_null
-       jal b_null
-       jal b_null
-       jal b_null
-
-       sub $4, $4,5
-       bgtz $4,$L1
-       j $6
-       .end
-
-
-       .ent b_add
-b_add:
-       add $5, $0,$4
-       add $6, $0,$4
-       add $7, $0,$4
-       add $8, $0,$4
-$L2:
-       sub $4, $4,5
-       sub $5, $5,5
-       sub $6, $6,5
-       sub $7, $7,5
-       sub $8, $8,5
-
-       sub $4, $4,5
-       sub $5, $5,5
-       sub $6, $6,5
-       sub $7, $7,5
-       sub $8, $8,5
-
-       bgtz $4,$L2
-       j $31
-       .end
-
-
-       .ent b_load
-b_load:
-$L3:
-       ld $0, 0($sp)
-       ld $0, 4($sp)
-       ld $0, 8($sp)
-       ld $0, 12($sp)
-       ld $0, 16($sp)
-
-       ld $0, 20($sp)
-       ld $0, 24($sp)
-       ld $0, 28($sp)
-       ld $0, 32($sp)
-       ld $0, 36($sp)
-
-       sub $4, $4,10
-       bgtz $4,$L3
-       j $31
-       .end
diff --git a/qt/md/null.README b/qt/md/null.README
deleted file mode 100644
index e69de29..0000000
diff --git a/qt/md/null.c b/qt/md/null.c
deleted file mode 100644
index 775db62..0000000
--- a/qt/md/null.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-char const qtmd_rcsid[] = "$Header: 
/home/ludo/src/guile.cvs/gitification/guile-cvs/guile/guile-core/qt/md/null.c,v 
1.1 1996-10-01 03:34:16 mdj Exp $";
diff --git a/qt/md/solaris.README b/qt/md/solaris.README
deleted file mode 100644
index 04f855c..0000000
--- a/qt/md/solaris.README
+++ /dev/null
@@ -1,19 +0,0 @@
-Solaris 2.x is like System V (maybe it *is* System V?) and is different
-from older versions in that it uses no leading underscore for variable
-and function names.  That is, the old convention was:
-
-       foo(){}
-
-got compiled as
-
-               .globl  _foo
-       _foo:
-
-and is now compiled as
-
-               .globl  foo
-       foo:
-
-The `config' script should fix up the older (leading underscore) versions
-of the machine-dependent files to use the newer (no leading underscore)
-calling conventions.
diff --git a/qt/md/sparc.h b/qt/md/sparc.h
deleted file mode 100644
index e2ab281..0000000
--- a/qt/md/sparc.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_SPARC_H
-#define QT_SPARC_H
-
-typedef unsigned long qt_word_t;
-
-/* Stack layout on the sparc:
-
-   non-varargs:
-
-   +---
-   | <blank space for alignment>
-   | %o7 == return address -> qt_start
-   | %i7
-   | %i6 == frame pointer -> 0 (NULL-terminated stack frame chain)
-   | %i5 -> only
-   | %i4 -> userf
-   | %i3
-   | %i2 -> pt
-   | %i1 -> pu
-   | %i0
-   | %l7
-   | %l6
-   | %l5
-   | %l4
-   | %l3
-   | %l2
-   | %l1
-   | %l0       <--- qt_t.sp
-   +---
-
-   varargs:
-
-   |  :
-   |  :
-   | argument list
-   | one-word aggregate return pointer
-   +---
-   | <blank space for alignment>
-   | %o7 == return address -> qt_vstart
-   | %i7
-   | %i6 == frame pointer -> 0 (NULL-terminated stack frame chain)
-   | %i5 -> startup
-   | %i4 -> userf
-   | %i3 -> cleanup
-   | %i2 -> pt
-   | %i1
-   | %i0
-   | %l7
-   | %l6
-   | %l5
-   | %l4
-   | %l3
-   | %l2
-   | %l1
-   | %l0       <--- qt_t.sp
-   +---
-
-   */
-
-
-/* What to do to start a thread running. */
-extern void qt_start (void);
-extern void qt_vstart (void);
-
-
-/* Hold 17 saved registers + 1 word for alignment. */
-#define QT_STKBASE     (18 * 4)
-#define QT_VSTKBASE    QT_STKBASE
-
-
-/* Stack must be doubleword aligned. */
-#define QT_STKALIGN    (8)     /* Doubleword aligned. */
-
-#define QT_ONLY_INDEX  (QT_I5)
-#define QT_USER_INDEX  (QT_I4)
-#define QT_ARGT_INDEX  (QT_I2)
-#define QT_ARGU_INDEX  (QT_I1)
-
-#define QT_VSTARTUP_INDEX      (QT_I5)
-#define QT_VUSERF_INDEX                (QT_I4)
-#define QT_VCLEANUP_INDEX      (QT_I3)
-#define QT_VARGT_INDEX         (QT_I2)
-
-#define QT_O7  (16)
-#define QT_I6  (14)
-#define QT_I5  (13)
-#define QT_I4  (12)
-#define QT_I3  (11)
-#define QT_I2  (10)
-#define QT_I1  ( 9)
-
-
-/* The thread will ``return'' to the `qt_start' routine to get things
-   going.  The normal return sequence takes us to QT_O7+8, so we
-   pre-subtract 8.  The frame pointer chain is 0-terminated to prevent
-   the trap handler from chasing off in to random memory when flushing
-   stack windows. */
-
-#define QT_ARGS_MD(top) \
-    (QT_SPUT ((top), QT_O7, ((void *)(((int)qt_start)-8))), \
-     QT_SPUT ((top), QT_I6, 0))
-
-
-/* The varargs startup routine always reads 6 words of arguments
-   (6 argument registers) from the stack, offset by one word to
-   allow for an aggregate return area  pointer.  If the varargs
-   routine actually pushed fewer words than that, qt_vstart could read
-   off the top of the stack.  To prevent errors, we always allocate 8
-   words.  The space is often just wasted. */
-
-#define QT_VARGS_MD0(sp, vabytes) \
-  ((qt_t *)(((char *)(sp)) - 8*4 - QT_STKROUNDUP(vabytes)))
-
-#define QT_VARGS_MD1(sp) \
-  (QT_SPUT (sp, QT_O7, ((void *)(((int)qt_vstart)-8))))
-
-/* The SPARC has wierdo calling conventions which stores a hidden
-   parameter for returning aggregate values, so the rest of the
-   parameters are shoved up the stack by one place. */
-#define QT_VARGS_ADJUST(sp)    (((char *)sp)+4)
-
-#define QT_VARGS_DEFAULT
-
-
-#define QT_GROW_DOWN
-
-#endif /* ndef QT_SPARC_H */
diff --git a/qt/md/sparc.s b/qt/md/sparc.s
deleted file mode 100644
index d9bdf0c..0000000
--- a/qt/md/sparc.s
+++ /dev/null
@@ -1,142 +0,0 @@
-/* sparc.s -- assembly support for the `qt' thread building kit. */
-
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-/* #include <machine/trap.h> */
-
-       .text
-       .align 4
-       .global qt_blocki
-       .global qt_block
-       .global qt_abort
-       .global qt_start
-       .global qt_vstart
-
-/* Register assignment:
-// %o0:        incoming `helper' function to call after cswap
-//     also used as outgoing sp of old thread (qt_t *)
-// %o1, %o2:
-//     parameters to `helper' function called after cswap
-// %o3:        sp of new thread
-// %o5: tmp used to save old thread sp, while using %o0
-//     to call `helper' f() after cswap.
-//
-//
-// Aborting a thread is easy if there are no cached register window
-// frames: just switch to the new stack and away we go.  If there are
-// cached register window frames they must all be written back to the
-// old stack before we move to the new stack.  If we fail to do the
-// writeback then the old stack memory can be written with register
-// window contents e.g., after the stack memory has been freed and
-// reused.  
-//
-// If you don't believe this, try setting the frame pointer to zero
-// once we're on the new stack.  This will not affect correctnes
-// otherwise because the frame pointer will eventually get reloaded w/
-// the new thread's frame pointer.  But it will be zero briefly before
-// the reload.  You will eventually (100,000 cswaps later on a small
-// SPARC machine that I tried) get an illegal instruction trap  from
-// the kernel trying to flush a cached window to location 0x0.
-//
-// Solution: flush windows before switching stacks, which invalidates
-// all the other register windows.  We could do the trap
-// conditionally: if we're in the lowest frame of a thread, the fp is
-// zero already so we know there's nothing cached.  But we expect most
-// aborts will be done from a first function that does a `save', so we
-// will rarely save anything and always pay the cost of testing to see
-// if we should flush.
-//
-// All floating-point registers are caller-save, so this routine
-// doesn't need to do anything to save and restore them.
-//
-// `qt_block' and `qt_blocki' return the same value as the value
-// returned by the helper function.  We get this ``for free''
-// since we don't touch the return value register between the
-// return from the helper function and return from qt_block{,i}.
-*/
-
-qt_block:
-qt_blocki:
-       sub %sp, 8, %sp         /* Allocate save area for return pc. */
-       st %o7, [%sp+64]        /* Save return pc. */
-qt_abort:
-       ta 0x03                 /* Save locals and ins. */
-       mov %sp, %o5            /* Remember old sp w/o chng ins/locals. */
-       sub %o3, 64, %sp        /* Allocate kwsa, switch stacks. */
-       call %o0, 0             /* Call `helper' routine. */
-       mov %o5, %o0            /* Pass old thread to qt_after_t() */
-                               /* .. along w/ args in %o1 & %o2. */
-
-       /* Restore callee-save regs.  The kwsa
-       // is on this stack, so offset all
-       // loads by sizeof(kwsa), 64 bytes.
-       */
-       ldd [%sp+ 0+64], %l0
-       ldd [%sp+ 8+64], %l2
-       ldd [%sp+16+64], %l4
-       ldd [%sp+24+64], %l6
-       ldd [%sp+32+64], %i0
-       ldd [%sp+40+64], %i2
-       ldd [%sp+48+64], %i4
-       ldd [%sp+56+64], %i6
-       ld [%sp+64+64], %o7     /* Restore return pc. */
-
-       retl                    /* Return to address in %o7. */
-       add %sp, 72, %sp        /* Deallocate kwsa, ret pc area. */
-
-
-/* The function calling conventions say there has to be a 1-word area
-// in the caller's stack to hold a pointer to space for aggregate
-// return values.  It also says there should be a 6-word area to hold
-// %o0..%o5 if the callee wants to save them (why?  I don't know...)
-// Round up to 8 words to maintain alignment.
-//
-// Parameter values were stored in callee-save regs and are moved to
-// the parameter registers.
-*/
-qt_start:
-       mov %i1, %o0            /* `pu': Set up args to `only'. */
-       mov %i2, %o1            /* `pt'. */
-       mov %i4, %o2            /* `userf'. */
-       call %i5, 0             /* Call client function. */
-       sub %sp, 32, %sp        /* Allocate 6-word callee space. */
-
-       call qt_error, 0        /* `only' erroniously returned. */
-       nop
-
-
-/* Same comments as `qt_start' about allocating rounded-up 7-word
-// save areas. */
-
-qt_vstart:
-       sub %sp, 32, %sp        /* Allocate 7-word callee space. */
-       call %i5, 0             /* call `startup'. */
-       mov %i2, %o0            /* .. with argument `pt'. */
-
-       add %sp, 32, %sp        /* Use 7-word space in varargs. */
-       ld [%sp+ 4+64], %o0     /* Load arg0 ... */
-       ld [%sp+ 8+64], %o1
-       ld [%sp+12+64], %o2
-       ld [%sp+16+64], %o3
-       ld [%sp+20+64], %o4
-       call %i4, 0             /* Call `userf'. */
-       ld [%sp+24+64], %o5
-
-                               /* Use 6-word space in varargs. */
-       mov %o0, %o1            /* Pass return value from userf */
-       call %i3, 0             /* .. when call `cleanup. */
-       mov %i2, %o0            /* .. along with argument `pt'. */
-
-       call qt_error, 0        /* `cleanup' erroniously returned. */
-       nop
diff --git a/qt/md/sparc_b.s b/qt/md/sparc_b.s
deleted file mode 100644
index 08351d7..0000000
--- a/qt/md/sparc_b.s
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .globl b_call_reg
-       .globl b_call_imm
-       .globl b_add
-       .globl b_load
-
-b_null:
-       retl
-       nop
-
-b_call_reg:
-       sethi %hi(b_null),%o4
-       or %o4,%lo(b_null),%o4
-       add %o7,%g0, %o3
-L0:
-       call %o4
-       nop
-       call %o4
-       nop
-       call %o4
-       nop
-       call %o4
-       nop
-       call %o4
-       nop
-
-       subcc %o0,1,%o0
-       bg L0
-       nop
-       add %o3,%g0, %o7
-       retl
-       nop
-
-b_call_imm:
-       sethi %hi(b_null),%o4
-       or %o4,%lo(b_null),%o4
-       add %o7,%g0, %o3
-L1:
-       call b_null
-       call b_null
-       call b_null
-       call b_null
-       call b_null
-
-       subcc %o0,1,%o0
-       bg L0
-       nop
-       add %o3,%g0, %o7
-       retl
-       nop
-
-
-b_add:
-       add %o0,%g0,%o1
-       add %o0,%g0,%o2
-       add %o0,%g0,%o3
-       add %o0,%g0,%o4
-L2:
-       sub %o0,5,%o0
-       sub %o1,5,%o1
-       sub %o2,5,%o2
-       sub %o3,5,%o3
-       sub %o4,5,%o4
-
-       subcc %o0,5,%o0
-       sub %o1,5,%o1
-       sub %o2,5,%o2
-       sub %o3,5,%o3
-       sub %o4,5,%o4
-
-       bg L2
-       nop
-       retl
-       nop
-
-
-b_load:
-       ld [%sp+ 0], %g0
-L3:
-       ld [%sp+ 4],%g0
-       ld [%sp+ 8],%g0
-       ld [%sp+12],%g0
-       ld [%sp+16],%g0
-       ld [%sp+20],%g0
-       ld [%sp+24],%g0
-       ld [%sp+28],%g0
-       ld [%sp+32],%g0
-       ld [%sp+36],%g0
-
-       subcc %o0,10,%o0
-       bg L3
-       ld [%sp+ 0],%g0
-       retl
-       nop
diff --git a/qt/md/vax.h b/qt/md/vax.h
deleted file mode 100644
index 1a5af0f..0000000
--- a/qt/md/vax.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-#ifndef QT_VAX_H
-#define QT_VAX_H
-
-typedef unsigned long qt_word_t;
-
-/* Thread's initial stack layout on the VAX:
-
-   non-varargs:
-
-   +---
-   | arg[2]    === `userf' on startup
-   | arg[1]    === `pt' on startup
-   | arg[0]    === `pu' on startup
-   | ...       === `only' on startup.
-   +---
-   | ret pc    === `qt_start' on startup
-   | fp                === 0 on startup
-   | ap                === 0 on startup
-   | <mask>
-   | 0 (handler)                       <--- qt_t.sp
-   +---
-
-   When a non-varargs thread is started, it ``returns'' to the start
-   routine, which calls the client's `only' function.
-
-   The varargs case is clearly bad code.  The various values should be
-   stored in a save area and snarfed in to callee-save registers on
-   startup.  However, it's too painful to figure out the register
-   mask (right now), so do it the slow way.
-
-   +---
-   | arg[n-1]
-   | ..
-   | arg[0]
-   | nargs
-   +---
-   |           === `cleanup'
-   |           === `vuserf'
-   |           === `startup'
-   |           === `pt'
-   +---
-   | ret pc    === `qt_start' on startup
-   | fp                === 0 on startup
-   | ap                === 0 on startup
-   | <mask>
-   | 0 (handler)                       <--- qt_t.sp
-   +---
-
-   When a varargs thread is started, it ``returns'' to the `qt_vstart'
-   startup code.  The startup code pops all the extra arguments, then
-   calls the appropriate functions. */
-
-
-/* What to do to start a thread running. */
-extern void qt_start (void);
-extern void qt_vstart (void);
-
-
-/* Initial call frame for non-varargs and varargs cases. */
-#define QT_STKBASE     (10 * 4)
-#define QT_VSTKBASE    (9 * 4)
-
-
-/* Stack "must be" 4-byte aligned.  (Actually, no, but it's
-   easiest and probably fastest to do so.) */
-
-#define QT_STKALIGN    (4)
-
-
-/* Where to place various arguments. */
-#define QT_ONLY_INDEX  (5)
-#define QT_USER_INDEX  (8)
-#define QT_ARGT_INDEX  (7)
-#define QT_ARGU_INDEX  (6)
-
-#define QT_VSTARTUP_INDEX      (6)
-#define QT_VUSERF_INDEX                (7)
-#define QT_VCLEANUP_INDEX      (8)
-#define QT_VARGT_INDEX         (5)
-
-
-/* Stack grows down.  The top of the stack is the first thing to
-   pop off (predecrement, postincrement). */
-#define QT_GROW_DOWN
-
-
-extern void qt_error (void);
-
-#define QT_VAX_GMASK_NOREGS    (0)
-
-/* Push on the error return address, null termination to call chains,
-   number of arguments to `only', register save mask (save no
-   registers). */
-
-#define QT_ARGS_MD(sto) \
-    (QT_SPUT (sto, 0, 0), \
-     QT_SPUT (sto, 1, QT_VAX_GMASK_NOREGS), \
-     QT_SPUT (sto, 2, 0), \
-     QT_SPUT (sto, 3, 0), \
-     QT_SPUT (sto, 4, qt_start))
-
-#define QT_VARGS_MD0(sto, nbytes) \
-    (QT_SPUT (sto, (-(nbytes)/4)-1, (nbytes)/4), \
-     ((char *)(((sto)-4) - QT_STKROUNDUP(nbytes))))
-
-#define QT_VARGS_ADJUST(sp)    ((char *)sp + 4)
-
-#define QT_VARGS_MD1(sto) \
-    (QT_SPUT (sto, 0, 0), \
-     QT_SPUT (sto, 1, QT_VAX_GMASK_NOREGS), \
-     QT_SPUT (sto, 2, 0), \
-     QT_SPUT (sto, 3, 0), \
-     QT_SPUT (sto, 4, qt_vstart))
-
-#define QT_VARGS_DEFAULT
-
-#endif /* QT_VAX_H */
diff --git a/qt/md/vax.s b/qt/md/vax.s
deleted file mode 100644
index fed03f0..0000000
--- a/qt/md/vax.s
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .text
-
-       .globl _qt_abort
-       .globl _qt_block
-       .globl _qt_blocki
-       .globl _qt_start
-       .globl _qt_vstart
-
-
-/*
-// Calls to these routines have the signature
-//
-//     void *block (func, arg1, arg2, newsp)
-//
-// Since the prologue saves 5 registers, nargs, pc, fp, ap, mask, and
-// a condition handler (at sp+0), the first argument is 40=4*10 bytes
-// offset from the stack pointer.
-*/
-_qt_block:
-_qt_blocki:
-_qt_abort:
-       .word 0x7c0             /* Callee-save mask: 5 registers. */
-       movl 56(sp),r1          /* Get stack pointer of new thread. */
-       movl 52(sp),-(r1)       /* Push arg2 */
-       movl 48(sp),-(r1)       /* Push arg1 */
-       movl sp,-(r1)           /* Push arg0 */
-
-       movl 44(sp),r0          /* Get helper to call. */
-       movl r1,sp              /* Move to new thread's stack. */
-       addl3 sp,$12,fp         /* .. including the frame pointer. */
-       calls $3,(r0)           /* Call helper. */
-
-       ret
-
-_qt_start:
-       movl (sp)+,r0           /* Get `only'. */
-       calls $3,(r0)           /* Call `only'. */
-       calls $0,_qt_error      /* `only' erroniously returned. */
-
-
-_qt_vstart:
-       movl (sp)+,r10          /* Get `pt'. */
-       movl (sp)+,r9           /* Get `startup'. */
-       movl (sp)+,r8           /* Get `vuserf'. */
-       movl (sp)+,r7           /* Get `cleanup'. */
-
-       pushl r10               /* Push `qt'. */
-       calls $1,(r9)           /* Call `startup', pop `qt' on return. */
-
-       calls (sp)+,(r8)        /* Call user's function. */
-
-       pushl r0                /* Push `vuserf_retval'. */
-       pushl r10               /* Push `qt'. */
-       calls $2,(r7)           /* Call `cleanup', never return. */
-
-       calls $0,_qt_error      /* `cleanup' erroniously returned. */
diff --git a/qt/md/vax_b.s b/qt/md/vax_b.s
deleted file mode 100644
index 2db2d4f..0000000
--- a/qt/md/vax_b.s
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-       .text
-       .globl _b_call_reg
-       .globl _b_call_imm
-       .globl _b_add
-       .globl _b_load
-
-_b_null:
-       .word 0x0
-       ret
-
-_b_call_reg:
-       .word 0x0
-       movl 4(ap),r0
-       moval _b_null,r1
-L0:
-       calls $0,(r1)
-       calls $0,(r1)
-       calls $0,(r1)
-       calls $0,(r1)
-       calls $0,(r1)
-
-       subl2 $5,r0
-       bgtr L0
-       ret
-
-
-_b_call_imm:
-       .word 0x0
-       movl 4(ap),r0
-L1:
-       calls $0,_b_null
-       calls $0,_b_null
-       calls $0,_b_null
-       calls $0,_b_null
-       calls $0,_b_null
-
-       subl2 $5,r0
-       bgtr L1
-       ret
-
-
-_b_add:
-       .word 0x0
-       movl 4(ap),r0
-L2:
-       subl2 $1,r0
-       subl2 $1,r0
-       subl2 $1,r0
-       subl2 $1,r0
-       subl2 $1,r0
-
-       subl2 $1,r0
-       subl2 $1,r0
-       subl2 $1,r0
-       subl2 $1,r0
-       subl2 $1,r0
-
-       bgtr L2
-       ret
-
-
-_b_load:
-       .word 0x0
-       movl 4(ap),r0
-L3:
-       movl 0(sp),r1
-       movl 4(sp),r1
-       movl 8(sp),r1
-       movl 12(sp),r1
-       movl 16(sp),r1
-       movl 20(sp),r1
-       movl 24(sp),r1
-       movl 28(sp),r1
-       movl 32(sp),r1
-       movl 36(sp),r1
-
-       subl2 $1,r0
-       bgtr L3
-       ret
diff --git a/qt/meas.c b/qt/meas.c
deleted file mode 100644
index 3faab3c..0000000
--- a/qt/meas.c
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* meas.c -- measure qt stuff. */
-
-#include "copyright.h"
-
-/* Need this to get assertions under Mach on the Sequent/i386: */
-#ifdef __i386__
-#define assert(ex) \
-  do { \
-    if (!(ex)) { \
-      fprintf (stderr, "[%s:%d] Assertion " #ex " failed\n", __FILE__, 
__LINE__); \
-      abort(); \
-    } \
-  } while (0)
-#else
-#include <assert.h>
-#endif
-
-/* This really ought to be defined in some ANSI include file (*I*
-   think...), but it's defined here instead, which leads us to another
-   machine dependency.
-
-   The `iaddr_t' type is an integer representation of a pointer,
-   suited for doing arithmetic on addresses, e.g. to round an address
-   to an alignment boundary. */
-typedef unsigned long iaddr_t;
-
-#include <stdarg.h>    /* For varargs tryout. */
-#include <stdio.h>
-#include "b.h"
-#include "qt.h"
-#include "stp.h"
-
-extern void exit (int status);
-extern int atoi (char const *s);
-extern int fprintf (FILE *out, char const *fmt, ...);
-extern int fputs (char const *s, FILE *fp);
-extern void free (void *sto);
-extern void *malloc (unsigned nbytes);
-extern void perror (char const *s);
-
-void usage (void);
-void tracer(void);
-
-/* Round `v' to be `a'-aligned, assuming `a' is a power of two. */
-#define ROUND(v, a)    (((v) + (a) - 1) & ~((a)-1))
-
-typedef struct thread_t {
-  qt_t *qt;            /* Pointer to thread of function... */
-  void *stk;
-  void *top;           /* Set top of stack if reuse. */
-  struct thread_t *next;
-} thread_t;
-
-
-  static thread_t *
-t_alloc (void)
-{
-  thread_t *t;
-  int ssz = 0x1000;
-
-  t = malloc (sizeof(thread_t));
-  if (!t) {
-    perror ("malloc");
-    exit (1);
-  }
-  assert (ssz > QT_STKBASE);
-  t->stk = malloc (ssz);
-  t->stk = (void *)ROUND (((iaddr_t)t->stk), QT_STKALIGN);
-  if (!t->stk) {
-    perror ("malloc");
-    exit (1);
-  }
-  assert ((((iaddr_t)t->stk) & (QT_STKALIGN-1)) == 0);
-  t->top = QT_SP (t->stk, ssz - QT_STKBASE);
-
-  return (t);
-}
-
-
-  static thread_t *
-t_create (qt_only_t *starter, void *p0, qt_userf_t *f)
-{
-  thread_t *t;
-
-  t = t_alloc();
-  t->qt = QT_ARGS (t->top, p0, t, f, starter);
-  return (t);
-}
-
-
-  static void
-t_free (thread_t *t)
-{
-  free (t->stk);
-  free (t);
-}
-
-
-  static void *
-t_null (qt_t *old, void *p1, void *p2)
-{
-  /* return (garbage); */
-}
-
-
-  static void *
-t_splat (qt_t *old, void *oldp, void *null)
-{
-  *(qt_t **)oldp = old;
-  /* return (garbage); */
-}
-
-
-static char const test01_msg[] =
-  "*QT_SP(sto,sz), QT_ARGS(top,p0,p1,userf,first)";
-
-static char const *test01_descr[] = {
-  "Performs 1 QT_SP and one QT_ARGS per iteration.",
-  NULL
-};
-
-/* This test gives a guess on how long it takes to initalize
-   a thread. */
-
-  static void
-test01 (int n)
-{
-  char stack[QT_STKBASE+QT_STKALIGN];
-  char *stk;
-  qt_t *top;
-
-  stk = (char *)ROUND (((iaddr_t)stack), QT_STKALIGN);
-
-  {
-    int i;
-
-    for (i=0; i<QT_STKBASE; ++i) {
-      stk[i] = 0;
-    }
-  }
-
-  while (n>0) {
-    /* RETVALUSED */
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-#ifdef NDEF
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-    top = QT_SP (stk, QT_STKBASE);     QT_ARGS (top, 0, 0, 0, 0);
-
-    n -= 10;
-#else
-    n -= 1;
-#endif
-  }
-}
-
-
-static char const test02_msg[] = "QT_BLOCKI (0, 0, test02_aux, t->qt)";
-static qt_t *rootthread;
-
-  static void
-test02_aux1 (void *pu, void *pt, qt_userf_t *f)
-{
-  QT_ABORT (t_null, 0, 0, rootthread);
-}
-
-  static void *
-test02_aux2 (qt_t *old, void *farg1, void *farg2)
-{
-  rootthread = old;
-  /* return (garbage); */
-}
-
-  static void
-test02 (int n)
-{
-  thread_t *t;
-
-  while (n>0) {
-  t = t_create (test02_aux1, 0, 0);
-    QT_BLOCKI (test02_aux2, 0, 0, t->qt);
-  t_free (t);
-  t = t_create (test02_aux1, 0, 0);
-    QT_BLOCKI (test02_aux2, 0, 0, t->qt);
-  t_free (t);
-  t = t_create (test02_aux1, 0, 0);
-    QT_BLOCKI (test02_aux2, 0, 0, t->qt);
-  t_free (t);
-  t = t_create (test02_aux1, 0, 0);
-    QT_BLOCKI (test02_aux2, 0, 0, t->qt);
-  t_free (t);
-  t = t_create (test02_aux1, 0, 0);
-    QT_BLOCKI (test02_aux2, 0, 0, t->qt);
-  t_free (t);
-
-    n -= 5;
-  }
-}
-
-
-static char const test03_msg[] = "QT_BLOCKI (...) test vals are right.";
-
-
-/* Called by the thread function when it wants to shut down.
-   Return a value to the main thread. */
-
-  static void *
-test03_aux0 (qt_t *old_is_garbage, void *farg1, void *farg2)
-{
-  assert (farg1 == (void *)5);
-  assert (farg2 == (void *)6);
-  return ((void *)15);         /* Some unlikely value. */
-}
-
-
-/* Called during new thread startup by main thread.  Since the new
-   thread has never run before, return value is ignored. */
-
-  static void *
-test03_aux1 (qt_t *old, void *farg1, void *farg2)
-{
-  assert (old != NULL);
-  assert (farg1 == (void *)5);
-  assert (farg2 == (void *)6);
-  rootthread = old;
-  return ((void *)16);         /* Different than `15'. */
-}
-
-  static void
-test03_aux2 (void *pu, void *pt, qt_userf_t *f)
-{
-  assert (pu == (void *)1);
-  assert (f == (qt_userf_t *)4);
-  QT_ABORT (test03_aux0, (void *)5, (void *)6, rootthread);
-}
-
-  static void
-test03 (int n)
-{
-  thread_t *t;
-  void *rv;
-
-  while (n>0) {
-    t = t_create (test03_aux2, (void *)1, (qt_userf_t *)4);
-    rv = QT_BLOCKI (test03_aux1, (void *)5, (void *)6, t->qt);
-    assert (rv == (void *)15);
-    t_free (t);
-
-    --n;
-  }
-}
-
-
-static char const test04_msg[] = "stp_start w/ no threads.";
-
-  static void
-test04 (int n)
-{
-  while (n>0) {
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-    stp_init();        stp_start();
-
-    n -= 10;
-  }
-}
-
-
-static char const test05_msg[] = "stp w/ 2 yielding thread.";
-
-  static void
-test05_aux (void *null)
-{
-  stp_yield();
-  stp_yield();
-}
-
-  static void
-test05 (int n)
-{
-  while (n>0) {
-    stp_init();
-    stp_create (test05_aux, 0);
-    stp_create (test05_aux, 0);
-    stp_start();
-
-    --n;
-  }
-}
-
-
-static char const test06_msg[] = "*QT_ARGS(...), QT_BLOCKI one thread";
-
-static char const *test06_descr[] = {
-  "Does a QT_ARGS, QT_BLOCKI to a helper function that saves the",
-  "stack pointer of the main thread, calls an `only' function that",
-  "saves aborts the thread, calling a null helper function.",
-  ":: start/stop = QT_ARGS + QT_BLOCKI + QT_ABORT + 3 procedure calls.",
-  NULL
-};
-
-/* This test initializes a thread, runs it, then returns to the main
-   program, which reinitializes the thread, runs it again, etc.  Each
-   iteration corresponds to 1 init, 1 abort, 1 block. */
-
-static qt_t *test06_sp;
-
-
-  static void
-test06_aux2 (void *null0a, void *null1b, void *null2b, qt_userf_t *null)
-{
-  QT_ABORT (t_null, 0, 0, test06_sp);
-}
-
-
-  static void *
-test06_aux3 (qt_t *sp, void *null0c, void *null1c)
-{
-  test06_sp = sp;
-  /* return (garbage); */
-}
-
-
-  static void
-test06 (int n)
-{
-  thread_t *t;
-
-  t = t_create (0, 0, 0);
-
-  while (n>0) {
-    /* RETVALUSED */
-    QT_ARGS (t->top, 0, 0, 0, test06_aux2);
-    QT_BLOCKI (test06_aux3, 0, 0, t->qt);
-#ifdef NDEF
-    /* RETVALUSED */
-    QT_ARGS (t->top, 0, 0, 0, test06_aux2);
-    QT_BLOCKI (test06_aux3, 0, 0, t->qt);
-
-    /* RETVALUSED */
-    QT_ARGS (t->top, 0, 0, 0, test06_aux2);
-    QT_BLOCKI (test06_aux3, 0, 0, t->qt);
-
-    /* RETVALUSED */
-    QT_ARGS (t->top, 0, 0, 0, test06_aux2);
-    QT_BLOCKI (test06_aux3, 0, 0, t->qt);
-
-    /* RETVALUSED */
-    QT_ARGS (t->top, 0, 0, 0, test06_aux2);
-    QT_BLOCKI (test06_aux3, 0, 0, t->qt);
-
-    n -= 5;
-#else
-    --n;
-#endif
-  }
-}
-
-static char test07_msg[] = "*cswap between threads";
-
-static char const *test07_descr[] = {
-  "Build a chain of threads where each thread has a fixed successor.",
-  "There is no scheduling performed.  Each thread but one is a loop",
-  "that simply blocks with QT_BLOCKI, calling a helper that saves the",
-  "current stack pointer.  The last thread decrements a count, and,",
-  "if zero, aborts back to the main thread.  Else it continues with",
-  "the blocking chain.  The count is divided by the number of threads",
-  "in the chain, so `n' is the number of integer block operations.",
-  ":: integer cswap = QT_BLOCKI + a procedure call.",
-  NULL
-};
-
-/* This test repeatedly blocks a bunch of threads.
-   Each iteration corresponds to one block operation.
-
-   The threads are arranged so that there are TEST07_N-1 of them that
-   run `test07_aux2'.  Each one of those blocks saving it's sp to
-   storage owned by the preceding thread; a pointer to that storage is
-   passed in via `mep'.  Each thread has a handle on it's own storage
-   for the next thread, referenced by `nxtp', and it blocks by passing
-   control to `*nxtp', telling the helper function to save its state
-   in `*mep'.  The last thread in the chain decrements a count and, if
-   it's gone below zero, returns to `test07'; otherwise, it invokes
-   the first thread in the chain. */
-
-static qt_t *test07_heavy;
-
-#define TEST07_N (4)
-
-
-  static void
-test07_aux2 (void *null0, void *mep, void *nxtp, qt_userf_t *null)
-{
-  qt_t *nxt;
-
-  while (1) {
-    nxt = *(qt_t **)nxtp;
-#ifdef NDEF
-    printf ("Helper 0x%p\n", nxtp);
-#endif
-    QT_BLOCKI (t_splat, mep, 0, nxt);
-  }
-}
-
-  static void
-test07_aux3 (void *np, void *mep, void *nxtp, qt_userf_t *null)
-{
-  int n;
-
-  n = *(int *)np;
-  while (1) {
-    n -= TEST07_N;
-    if (n<0) {
-      QT_ABORT (t_splat, mep, 0, test07_heavy);
-    }
-    QT_BLOCKI (t_splat, mep, 0, *(qt_t **)nxtp);
-  }
-}
-
-
-  static void
-test07 (int n)
-{
-  int i;
-  thread_t *t[TEST07_N];
-
-  for (i=0; i<TEST07_N; ++i) {
-    t[i] = t_create (0, 0, 0);
-  }
-  for (i=0; i<TEST07_N-1; ++i) {
-    /* RETVALUSED */
-    QT_ARGS (t[i]->top, 0, &t[i]->qt, &t[i+1]->qt, test07_aux2);
-  }
-  /* RETVALUSED */
-  QT_ARGS (t[i]->top, &n, &t[TEST07_N-1]->qt, &t[0]->qt, test07_aux3);
-  QT_BLOCKI (t_splat, &test07_heavy, 0, t[0]->qt);
-}
-
-
-static char test08_msg[] = "Floating-point cswap between threads";
-
-static char const *test08_descr[] = {
-  "Measure context switch times including floating-point, use QT_BLOCK.",
-  NULL
-};
-
-static qt_t *test08_heavy;
-
-#define TEST08_N (4)
-
-
-  static void
-test08_aux2 (void *null0, void *mep, void *nxtp, qt_userf_t *null)
-{
-  qt_t *nxt;
-
-  while (1) {
-    nxt = *(qt_t **)nxtp;
-    QT_BLOCK (t_splat, mep, 0, nxt);
-  }
-}
-
-  static void
-test08_aux3 (void *np, void *mep, void *nxtp, qt_userf_t *null)
-{
-  int n;
-
-  n = *(int *)np;
-  while (1) {
-    n -= TEST08_N;
-    if (n<0) {
-      QT_ABORT (t_splat, mep, 0, test08_heavy);
-    }
-    QT_BLOCK (t_splat, mep, 0, *(qt_t **)nxtp);
-  }
-}
-
-
-  static void
-test08 (int n)
-{
-  int i;
-  thread_t *t[TEST08_N];
-
-  for (i=0; i<TEST08_N; ++i) {
-    t[i] = t_create (0, 0, 0);
-  }
-  for (i=0; i<TEST08_N-1; ++i) {
-    /* RETVALUSED */
-    QT_ARGS (t[i]->top, 0, &t[i]->qt, &t[i+1]->qt, test08_aux2);
-  }
-  /* RETVALUSED */
-  QT_ARGS (t[i]->top, &n, &t[TEST08_N-1]->qt, &t[0]->qt, test08_aux3);
-  QT_BLOCK (t_splat, &test08_heavy, 0, t[0]->qt);
-}
-
-
-/* Test the varargs procedure calling. */
-
-char const test09_msg[] = { "Start and run threads using varargs." };
-
-thread_t *test09_t0, *test09_t1, *test09_t2, *test09_main;
-
-  thread_t *
-test09_create (qt_startup_t *start, qt_vuserf_t *f,
-              qt_cleanup_t *cleanup, int nbytes, ...)
-{
-  va_list ap;
-  thread_t *t;
-
-  t = t_alloc();
-  va_start (ap, nbytes);
-  t->qt = QT_VARGS (t->top, nbytes, ap, t, start, f, cleanup);
-  va_end (ap);
-  return (t);
-}
-
-
-  static void
-test09_cleanup (void *pt, void *vuserf_retval)
-{
-  assert (vuserf_retval == (void *)17);
-  QT_ABORT (t_splat, &((thread_t *)pt)->qt, 0,
-           ((thread_t *)pt)->next->qt);
-}
-
-
-  static void
-test09_start (void *pt)
-{
-}
-
-
-  static void *
-test09_user0 (void)
-{
-  QT_BLOCKI (t_splat, &test09_t0->qt, 0, test09_t1->qt);
-  return ((void *)17);
-}
-
-  static void *
-test09_user2 (int one, int two)
-{
-  assert (one == 1);
-  assert (two == 2);
-  QT_BLOCKI (t_splat, &test09_t1->qt, 0, test09_t2->qt);
-  assert (one == 1);
-  assert (two == 2);
-  return ((void *)17);
-}
-
-  static void *
-test09_user10 (int one, int two, int three, int four, int five,
-             int six, int seven, int eight, int nine, int ten)
-{
-  assert (one == 1);
-  assert (two == 2);
-  assert (three == 3);
-  assert (four == 4);
-  assert (five == 5);
-  assert (six == 6);
-  assert (seven == 7);
-  assert (eight == 8);
-  assert (nine == 9);
-  assert (ten == 10);
-  QT_BLOCKI (t_splat, &test09_t2->qt, 0, test09_main->qt);
-  assert (one == 1);
-  assert (two == 2);
-  assert (three == 3);
-  assert (four == 4);
-  assert (five == 5);
-  assert (six == 6);
-  assert (seven == 7);
-  assert (eight == 8);
-  assert (nine == 9);
-  assert (ten == 10);
-  return ((void *)17);
-}
-
-
-  void
-test09 (int n)
-{
-  thread_t main;
-
-  test09_main = &main;
-
-  while (--n >= 0) {
-    test09_t0 = test09_create (test09_start, (qt_vuserf_t*)test09_user0,
-                              test09_cleanup, 0);
-    test09_t1 = test09_create (test09_start, (qt_vuserf_t*)test09_user2,
-                              test09_cleanup, 2 * sizeof(qt_word_t), 1, 2);
-    test09_t2 = test09_create (test09_start, (qt_vuserf_t*)test09_user10,
-                              test09_cleanup, 10 * sizeof(qt_word_t),
-                              1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
-
-    /* Chaining used by `test09_cleanup' to determine who is next. */
-    test09_t0->next = test09_t1;
-    test09_t1->next = test09_t2;
-    test09_t2->next = test09_main;
-
-    QT_BLOCKI (t_splat, &test09_main->qt, 0, test09_t0->qt);
-    QT_BLOCKI (t_splat, &test09_main->qt, 0, test09_t0->qt);
-
-    t_free (test09_t0);
-    t_free (test09_t1);
-    t_free (test09_t2);
-  }
-}
-
-
-/* Test 10/11/12: time the cost of various number of args. */
-
-char const test10_msg[] = { "*Test varargs init & startup w/ 0 args." };
-
-char const *test10_descr[] = {
-  "Start and stop threads that use variant argument lists (varargs).",
-  "Each thread is initialized by calling a routine that calls",
-  "QT_VARARGS.  Then runs the thread by calling QT_BLOCKI to hald the",
-  "main thread, a helper that saves the main thread's stack pointer,",
-  "a null startup function, a null user function, a cleanup function",
-  "that calls QT_ABORT and restarts the main thread.  Copies no user",
-  "parameters.",
-  ":: varargs start/stop = QT_BLOCKI + QT_ABORT + 6 function calls.",
-  NULL
-};
-
-/* Helper function to send control back to main.
-   Don't save anything. */
-
-
-/* Helper function for starting the varargs thread.  Save the stack
-   pointer of the main thread so we can get back there eventually. */
-
-
-/* Startup function for a varargs thread. */
-
-  static void
-test10_startup (void *pt)
-{
-}
-
-
-/* User function for a varargs thread. */
-
-  static void *
-test10_run (int arg0, ...)
-{
-  /* return (garbage); */
-}
-
-
-/* Cleanup function for a varargs thread.  Send control
-   back to the main thread.  Don't save any state from the thread that
-   is halting. */
-
-  void
-test10_cleanup (void *pt, void *vuserf_retval)
-{
-  QT_ABORT (t_null, 0, 0, ((thread_t *)pt)->qt);
-}
-
-
-  void
-test10_init (thread_t *new, thread_t *next, int nbytes, ...)
-{
-  va_list ap;
-
-  va_start (ap, nbytes);
-  new->qt = QT_VARGS (new->top, nbytes, ap, next, test10_startup,
-                     test10_run, test10_cleanup);
-  va_end (ap);
-}
-
-
-  void
-test10 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 0);
-    QT_BLOCKI (t_splat, &main.qt, 0, t->qt);
-  }
-  t_free (t);
-}
-
-
-char const test11_msg[] = { "*Test varargs init & startup w/ 2 args." };
-
-char const *test11_descr[] = {
-  "Varargs initialization/run.  Copies 2 user arguments.",
-  ":: varargs 2 start/stop = QT_VARGS(2 args), QT_BLOCKI, QT_ABORT, 6 f() 
calls.",
-  NULL
-};
-
-
-  void
-test11 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 2 * sizeof(int), 2, 1);
-    QT_BLOCKI (t_splat, &main.qt, 0, t->qt);
-  }
-  t_free (t);
-}
-
-char const test12_msg[] = { "*Test varargs init & startup w/ 4 args." };
-
-char const *test12_descr[] = {
-  "Varargs initialization/run.  Copies 4 user arguments.",
-  ":: varargs 4 start/stop = QT_VARGS(4 args), QT_BLOCKI, QT_ABORT, 6 f() 
calls.",
-  NULL
-};
-
-
-  void
-test12 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 4 * sizeof(int), 4, 3, 2, 1);
-    QT_BLOCKI (t_splat, &main.qt, 0, t->qt);
-  }
-  t_free (t);
-}
-
-
-char const test13_msg[] = { "*Test varargs init & startup w/ 8 args." };
-
-char const *test13_descr[] = {
-  "Varargs initialization/run.  Copies 8 user arguments.",
-  ":: varargs 8 start/stop = QT_VARGS(8 args), QT_BLOCKI, QT_ABORT, 6 f() 
calls.",
-  NULL
-};
-
-  void
-test13 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 8 * sizeof(int), 8, 7, 6, 5, 4, 3, 2, 1);
-    QT_BLOCKI (t_splat, &main.qt, 0, t->qt);
-  }
-  t_free (t);
-}
-
-
-char const test14_msg[] = { "*Test varargs initialization w/ 0 args." };
-
-char const *test14_descr[] = {
-  "Varargs initialization without running the thread.  Just calls",
-  "QT_VARGS.",
-  ":: varargs 0 init = QT_VARGS()",
-  NULL
-};
-
-  void
-test14 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 0 * sizeof(int));
-  }
-  t_free (t);
-}
-
-
-char const test15_msg[] = { "*Test varargs initialization w/ 2 args." };
-
-char const *test15_descr[] = {
-  "Varargs initialization without running the thread.  Just calls",
-  "QT_VARGS.",
-  ":: varargs 2 init = QT_VARGS(2 args)",
-  NULL
-};
-
-  void
-test15 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 2 * sizeof(int), 2, 1);
-  }
-  t_free (t);
-}
-
-char const test16_msg[] = { "*Test varargs initialization w/ 4 args." };
-
-char const *test16_descr[] = {
-  "Varargs initialization without running the thread.  Just calls",
-  "QT_VARGS.",
-  ":: varargs 4 init = QT_VARGS(4 args)",
-  NULL
-};
-
-
-  void
-test16 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 4 * sizeof(int), 4, 3, 2, 1);
-  }
-  t_free (t);
-}
-
-
-char const test17_msg[] = { "*Test varargs initialization w/ 8 args." };
-
-char const *test17_descr[] = {
-  "Varargs initialization without running the thread.  Just calls",
-  "QT_VARGS.",
-  ":: varargs 8 init = QT_VARGS(8 args)",
-  NULL
-};
-
-
-  void
-test17 (int n)
-{
-  thread_t main;
-  thread_t *t;
-
-  t = t_alloc();
-  t->next = &main;
-
-  while (--n >= 0) {
-    test10_init (t, &main, 8 * sizeof(int), 8, 7, 6, 5, 4, 3, 2, 1);
-  }
-  t_free (t);
-}
-
-/* Test times for basic machine operations. */
-
-char const test18_msg[] = { "*Call register indirect." };
-char const *test18_descr[] = { NULL };
-
-  void
-test18 (int n)
-{
-  b_call_reg (n);
-}
-
-
-char const test19_msg[] = { "*Call immediate." };
-char const *test19_descr[] = { NULL };
-
-  void
-test19 (int n)
-{
-  b_call_imm (n);
-}
-
-
-char const test20_msg[] = { "*Add register-to-register." };
-char const *test20_descr[] = { NULL };
-
-  void
-test20 (int n)
-{
-  b_add (n);
-}
-
-
-char const test21_msg[] = { "*Load memory to a register." };
-char const *test21_descr[] = { NULL };
-
-  void
-test21 (int n)
-{
-  b_load (n);
-}
-
-/* Driver. */
-
-typedef struct foo_t {
-    char const *msg;   /* Message to print for generic help. */
-    char const **descr;        /* A description of what is done by the test. */
-    void (*f)(int n);
-} foo_t;
-
-
-static foo_t foo[] = {
-  { "Usage:\n", NULL, (void(*)(int n))usage },
-  { test01_msg, test01_descr, test01 },
-  { test02_msg, NULL, test02 },
-  { test03_msg, NULL, test03 },
-  { test04_msg, NULL, test04 },
-  { test05_msg, NULL, test05 },
-  { test06_msg, test06_descr, test06 },
-  { test07_msg, test07_descr, test07 },
-  { test08_msg, test08_descr, test08 },
-  { test09_msg, NULL, test09 },
-  { test10_msg, test10_descr, test10 },
-  { test11_msg, test11_descr, test11 },
-  { test12_msg, test12_descr, test12 },
-  { test13_msg, test13_descr, test13 },
-  { test14_msg, test14_descr, test14 },
-  { test15_msg, test15_descr, test15 },
-  { test16_msg, test16_descr, test16 },
-  { test17_msg, test17_descr, test17 },
-  { test18_msg, test18_descr, test18 },
-  { test19_msg, test19_descr, test19 },
-  { test20_msg, test20_descr, test20 },
-  { test21_msg, test21_descr, test21 },
-  { 0, 0 }
-};
-
-static int tv = 0;
-
-  void
-tracer ()
-{
-
-  fprintf (stderr, "tracer\t%d\n", tv++);
-  fflush (stderr);
-}
-
-  void
-tracer2 (void *val)
-{
-  fprintf (stderr, "tracer2\t%d val=0x%p", tv++, val);
-  fflush (stderr);
-}
-
-
-  void
-describe()
-{
-  int i;
-  FILE *out = stdout;
-
-  for (i=0; foo[i].msg; ++i) {
-    if (foo[i].descr) {
-      int j;
-
-      putc ('\n', out);
-      fprintf (out, "[%d]\n", i);
-      for (j=0; foo[i].descr[j]; ++j) {
-       fputs (foo[i].descr[j], out);
-       putc ('\n', out);
-      }
-    }
-  }
-  exit (0);
-}
-
-
-  void
-usage()
-{
-  int i;
-
-  fputs (foo[0].msg, stderr);
-  for (i=1; foo[i].msg; ++i) {
-    fprintf (stderr, "%2d\t%s\n", i, foo[i].msg);
-  }
-  exit (1);
-}
-
-
-  void
-args (int *which, int *n, int argc, char **argv)
-{
-  static int nfuncs = 0;
-
-  if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'h') {
-    describe();
-  }
-
-  if (nfuncs == 0) {
-    for (nfuncs=0; foo[nfuncs].msg; ++nfuncs)
-      ;
-  }
-
-  if (argc != 2 && argc != 3) {
-    usage();
-  }
-
-  *which = atoi (argv[1]);
-  if (*which < 0 || *which >= nfuncs) {
-    usage();
-  }
-  *n = (argc == 3)
-    ? atoi (argv[2])
-    : 1;
-}
-
-
-  int
-main (int argc, char **argv)
-{
-  int which, n;
-  args (&which, &n, argc, argv);
-  (*(foo[which].f))(n);
-  exit (0);
-  return (0);
-}
diff --git a/qt/qt.c b/qt/qt.c
deleted file mode 100644
index d3e50bc..0000000
--- a/qt/qt.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "qt/copyright.h"
-#include "qt/qt.h"
-
-#ifdef QT_VARGS_DEFAULT
-
-/* If the stack grows down, `vargs' is a pointer to the lowest
-   address in the block of arguments.  If the stack grows up, it is a
-   pointer to the highest address in the block. */
-
-  qt_t *
-qt_vargs (qt_t *sp, int nbytes, void *vargs,
-         void *pt, qt_startup_t *startup,
-         qt_vuserf_t *vuserf, qt_cleanup_t *cleanup)
-{
-  int i;
-
-  sp = QT_VARGS_MD0 (sp, nbytes);
-#ifdef QT_GROW_UP
-    for (i=nbytes/sizeof(qt_word_t); i>0; --i) {
-      QT_SPUT (QT_VARGS_ADJUST(sp), i, ((qt_word_t *)vargs)[-i]);
-    }
-#else
-    for (i=nbytes/sizeof(qt_word_t); i>0; --i) {
-      QT_SPUT (QT_VARGS_ADJUST(sp), i-1, ((qt_word_t *)vargs)[i-1]);
-    }
-#endif
-
-  QT_VARGS_MD1 (QT_VADJ(sp));
-  QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt);
-  QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup);
-  QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf);
-  QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup);
-  return ((qt_t *)QT_VADJ(sp));
-}
-#endif /* def QT_VARGS_DEFAULT */
-
-  void
-qt_null (void)
-{
-}
-
-  void
-qt_error (void)
-{
-  extern void abort(void);
-
-  abort();
-}
diff --git a/qt/qt.h.in b/qt/qt.h.in
deleted file mode 100644
index 6399a89..0000000
--- a/qt/qt.h.in
+++ /dev/null
@@ -1,186 +0,0 @@
-#ifndef QT_H
-#define QT_H
-
-#if defined (QT_IMPORT)
-# define QT_API __declspec (dllimport) extern
-#elif defined (QT_EXPORT) || defined (DLL_EXPORT)
-# define QT_API __declspec (dllexport) extern
-#else
-# define QT_API extern
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <qt/@qtmd_h@>
-
-
-/* A QuickThreads thread is represented by it's current stack pointer.
-   To restart a thread, you merely need pass the current sp (qt_t*) to
-   a QuickThreads primitive.  `qt_t*' is a location on the stack.  To
-   improve type checking, represent it by a particular struct. */
-
-typedef struct qt_t {
-  char dummy;
-} qt_t;
-
-
-/* Alignment is guaranteed to be a power of two. */
-#ifndef QT_STKALIGN
-  #error "Need to know the machine-dependent stack alignment."
-#endif
-
-#define QT_STKROUNDUP(bytes) \
-  (((bytes)+QT_STKALIGN) & ~(QT_STKALIGN-1))
-
-
-/* Find ``top'' of the stack, space on the stack. */
-#ifndef QT_SP
-#ifdef QT_GROW_DOWN
-#define QT_SP(sto, size)       ((qt_t *)(&((char *)(sto))[(size)]))
-#endif
-#ifdef QT_GROW_UP
-#define QT_SP(sto, size)       ((void *)(sto))
-#endif
-#if !defined(QT_SP)
-  #error "QT_H: Stack must grow up or down!"
-#endif
-#endif
-
-
-/* The type of the user function:
-   For non-varargs, takes one void* function.
-   For varargs, takes some number of arguments. */
-typedef void *(qt_userf_t)(void *pu);
-typedef void *(qt_vuserf_t)(int arg0, ...);
-
-/* For non-varargs, just call a client-supplied function,
-   it does all startup and cleanup, and also calls the user's
-   function. */
-typedef void (qt_only_t)(void *pu, void *pt, qt_userf_t *userf);
-
-/* For varargs, call `startup', then call the user's function,
-   then call `cleanup'. */
-typedef void (qt_startup_t)(void *pt);
-typedef void (qt_cleanup_t)(void *pt, void *vuserf_return);
-
-
-/* Internal helper for putting stuff on stack. */
-#ifndef QT_SPUT
-#define QT_SPUT(top, at, val)  \
-    (((qt_word_t *)(top))[(at)] = (qt_word_t)(val))
-#endif
-
-
-/* Push arguments for the non-varargs case. */
-#ifndef QT_ARGS
-
-#ifndef QT_ARGS_MD
-#define QT_ARGS_MD (0)
-#endif
-
-#ifndef QT_STKBASE
-  #error "Need to know the machine-dependent stack allocation."
-#endif
-
-/* All things are put on the stack relative to the final value of
-   the stack pointer. */
-#ifdef QT_GROW_DOWN
-#define QT_ADJ(sp)     (((char *)sp) - QT_STKBASE)
-#else
-#define QT_ADJ(sp)     (((char *)sp) + QT_STKBASE)
-#endif
-
-#define QT_ARGS(sp, pu, pt, userf, only) \
-    (QT_ARGS_MD (QT_ADJ(sp)), \
-     QT_SPUT (QT_ADJ(sp), QT_ONLY_INDEX, only), \
-     QT_SPUT (QT_ADJ(sp), QT_USER_INDEX, userf), \
-     QT_SPUT (QT_ADJ(sp), QT_ARGT_INDEX, pt), \
-     QT_SPUT (QT_ADJ(sp), QT_ARGU_INDEX, pu), \
-     ((qt_t *)QT_ADJ(sp)))
-
-#endif
-
-
-/* Push arguments for the varargs case.
-   Has to be a function call because initialization is an expression
-   and we need to loop to copy nbytes of stuff on to the stack.
-   But that's probably OK, it's not terribly cheap, anyway. */
-
-#ifdef QT_VARGS_DEFAULT
-#ifndef QT_VARGS_MD0
-#define QT_VARGS_MD0(sp, vasize)       (sp)
-#endif
-#ifndef QT_VARGS_MD1
-#define QT_VARGS_MD1(sp)       do { ; } while (0)
-#endif
-
-#ifndef QT_VSTKBASE
-  #error "Need base stack size for varargs functions."
-#endif
-
-/* Sometimes the stack pointer needs to munged a bit when storing
-   the list of arguments. */
-#ifndef QT_VARGS_ADJUST
-#define QT_VARGS_ADJUST(sp)    (sp)
-#endif
-
-/* All things are put on the stack relative to the final value of
-   the stack pointer. */
-#ifdef QT_GROW_DOWN
-#define QT_VADJ(sp)    (((char *)sp) - QT_VSTKBASE)
-#else
-#define QT_VADJ(sp)    (((char *)sp) + QT_VSTKBASE)
-#endif
-
-QT_API qt_t *qt_vargs (qt_t *sp, int nbytes, void *vargs,
-                      void *pt, qt_startup_t *startup,
-                      qt_vuserf_t *vuserf, qt_cleanup_t *cleanup);
-
-#ifndef QT_VARGS
-#define QT_VARGS(sp, nbytes, vargs, pt, startup, vuserf, cleanup) \
-      (qt_vargs (sp, nbytes, vargs, pt, startup, vuserf, cleanup))
-#endif
-
-#endif
-
-QT_API void qt_null (void);
-QT_API void qt_error (void);
-
-/* Save the state of the thread and call the helper function
-   using the stack of the new thread. */
-typedef void *(qt_helper_t)(qt_t *old, void *a0, void *a1);
-typedef void *(qt_block_t)(qt_helper_t *helper, void *a0, void *a1,
-                         qt_t *newthread);
-
-/* Rearrange the parameters so that things passed to the helper
-   function are already in the right argument registers. */
-#ifndef QT_ABORT
-QT_API void qt_abort (qt_helper_t *h, void *a0, void *a1, qt_t *newthread);
-/* The following does, technically, `return' a value, but the
-   user had better not rely on it, since the function never
-   returns. */ 
-#define QT_ABORT(h, a0, a1, newthread) \
-    do { qt_abort (h, a0, a1, newthread); } while (0)
-#endif
-
-#ifndef QT_BLOCK
-QT_API void *qt_block (qt_helper_t *h, void *a0, void *a1,
-                      qt_t *newthread);
-#define QT_BLOCK(h, a0, a1, newthread) \
-    (qt_block (h, a0, a1, newthread))
-#endif
-
-#ifndef QT_BLOCKI
-QT_API void *qt_blocki (qt_helper_t *h, void *a0, void *a1,
-                       qt_t *newthread);
-#define QT_BLOCKI(h, a0, a1, newthread) \
-    (qt_blocki (h, a0, a1, newthread))
-#endif
-
-#ifdef __cplusplus
-}              /* Match `extern "C" {' at top. */
-#endif
-
-#endif /* ndef QT_H */
diff --git a/qt/stp.c b/qt/stp.c
deleted file mode 100644
index bfacc89..0000000
--- a/qt/stp.c
+++ /dev/null
@@ -1,199 +0,0 @@
-#include "copyright.h"
-#include "qt.h"
-#include "stp.h"
-
-#ifndef NULL
-#define NULL   0
-#endif
-
-#define STP_STKSIZE (0x1000)
-
-/* `alignment' must be a power of 2. */
-#define STP_STKALIGN(sp, alignment) \
-  ((void *)((((qt_word_t)(sp)) + (alignment) - 1) & ~((alignment)-1)))
-
-
-/* The notion of a thread is merged with the notion of a queue.
-   Thread stuff: thread status (sp) and stuff to use during
-   (re)initialization.  Queue stuff: next thread in the queue
-   (next). */
-
-struct stp_t {
-  qt_t *sp;              /* QuickThreads handle. */
-  void *sto;             /* `malloc'-allocated stack. */
-  struct stp_t *next;    /* Next thread in the queue. */
-};
-
-
-/* A queue is a circular list of threads.  The queue head is a
-   designated list element.  If this is a uniprocessor-only
-   implementation we can store the `main' thread in this, but in a
-   multiprocessor there are several `heavy' threads but only one run
-   queue.  A fancier implementation might have private run queues,
-   which would lead to a simpler (trivial) implementation */
-
-typedef struct stp_q_t {
-  stp_t t;
-  stp_t *tail;
-} stp_q_t;
-
-
-/* Helper functions. */
-
-extern void *malloc (unsigned size);
-extern void perror (char const *msg);
-extern void free (void *sto);
-
-  void *
-xmalloc (unsigned size)
-{
-  void *sto;
-
-  sto = malloc (size);
-  if (!sto) {
-    perror ("malloc");
-    exit (1);
-  }
-  return (sto);
-}
-
-/* Queue access functions. */
-
-  static void
-stp_qinit (stp_q_t *q)
-{
-  q->t.next = q->tail = &q->t;
-}
-
-
-  static stp_t *
-stp_qget (stp_q_t *q)
-{
-  stp_t *t;
-
-  t = q->t.next;
-  q->t.next = t->next;
-  if (t->next == &q->t) {
-    if (t == &q->t) {          /* If it was already empty .. */
-      return (NULL);           /* .. say so. */
-    }
-    q->tail = &q->t;           /* Else now it is empty. */
-  }
-  return (t);
-}
-
-
-  static void
-stp_qput (stp_q_t *q, stp_t *t)
-{
-  q->tail->next = t;
-  t->next = &q->t;
-  q->tail = t;
-}
-
-
-/* Thread routines. */
-
-static stp_q_t stp_global_runq;        /* A queue of runable threads. */
-static stp_t stp_global_main;   /* Thread for the process. */
-static stp_t *stp_global_curr; /* Currently-executing thread. */
-
-static void *stp_starthelp (qt_t *old, void *ignore0, void *ignore1);
-static void stp_only (void *pu, void *pt, qt_userf_t *f);
-static void *stp_aborthelp (qt_t *sp, void *old, void *null);
-static void *stp_yieldhelp (qt_t *sp, void *old, void *blockq);
-
-
-  void
-stp_init()
-{
-  stp_qinit (&stp_global_runq);
-}
-
-
-  void
-stp_start()
-{
-  stp_t *next;
-
-  while ((next = stp_qget (&stp_global_runq)) != NULL) {
-    stp_global_curr = next;
-    QT_BLOCK (stp_starthelp, 0, 0, next->sp);
-  }
-}
-
-
-  static void *
-stp_starthelp (qt_t *old, void *ignore0, void *ignore1)
-{
-  stp_global_main.sp = old;
-  stp_qput (&stp_global_runq, &stp_global_main);
-  /* return (garbage); */
-}
-
-
-  void
-stp_create (stp_userf_t *f, void *pu)
-{
-  stp_t *t;
-  void *sto;
-
-  t = xmalloc (sizeof(stp_t));
-  t->sto = xmalloc (STP_STKSIZE);
-  sto = STP_STKALIGN (t->sto, QT_STKALIGN);
-  t->sp = QT_SP (sto, STP_STKSIZE - QT_STKALIGN);
-  t->sp = QT_ARGS (t->sp, pu, t, (qt_userf_t *)f, stp_only);
-  stp_qput (&stp_global_runq, t);
-}
-
-
-  static void
-stp_only (void *pu, void *pt, qt_userf_t *f)
-{
-  stp_global_curr = (stp_t *)pt;
-  (*(stp_userf_t *)f)(pu);
-  stp_abort();
-  /* NOTREACHED */
-}
-
-
-  void
-stp_abort (void)
-{
-  stp_t *old, *newthread;
-
-  newthread = stp_qget (&stp_global_runq);
-  old = stp_global_curr;
-  stp_global_curr = newthread;
-  QT_ABORT (stp_aborthelp, old, (void *)NULL, newthread->sp);
-}
-
-
-  static void *
-stp_aborthelp (qt_t *sp, void *old, void *null)
-{
-  free (((stp_t *)old)->sto);
-  free (old);
-  /* return (garbage); */
-}
-
-
-  void
-stp_yield()
-{
-  stp_t *old, *newthread;
-
-  newthread = stp_qget (&stp_global_runq);
-  old = stp_global_curr;
-  stp_global_curr = newthread;
-  QT_BLOCK (stp_yieldhelp, old, &stp_global_runq, newthread->sp);
-}
-
-
-  static void *
-stp_yieldhelp (qt_t *sp, void *old, void *blockq)
-{
-  ((stp_t *)old)->sp = sp;
-  stp_qput ((stp_q_t *)blockq, (stp_t *)old);
-  /* return (garbage); */
-}
diff --git a/qt/stp.h b/qt/stp.h
deleted file mode 100644
index f786f04..0000000
--- a/qt/stp.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef STP_H
-#define STP_H
-
-/*
- * QuickThreads -- Threads-building toolkit.
- * Copyright (c) 1993 by David Keppel
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that the above copyright notice and this notice
- * appear in all copies.  This software is provided as a
- * proof-of-concept and for demonstration purposes; there is no
- * representation about the suitability of this software for any
- * purpose.
- */
-
-typedef struct stp_t stp_t;
-
-/* Each thread starts by calling a user-supplied function of this
-   type. */
-
-typedef void (stp_userf_t)(void *p0);
-
-/* Call this before any other primitives. */
-extern void stp_init();
-
-/* When one or more threads are created by the main thread,
-   the system goes multithread when this is called.  It is done
-   (no more runable threads) when this returns. */
-
-extern void stp_start (void);
-
-/* Create a thread and make it runable.  When the thread starts
-   running it will call `f' with the argument `p0'. */
-
-extern void stp_create (stp_userf_t *f, void *p0);
-
-/* The current thread stops running but stays runable.
-   It is an error to call `stp_yield' before `stp_start'
-   is called or after `stp_start' returns. */
-
-extern void stp_yield (void);
-
-/* Like `stp_yield' but the thread is discarded.  Any intermediate
-   state is lost.  The thread can also terminate by simply
-   returning. */
-
-extern void stp_abort (void);
-
-
-#endif /* ndef STP_H */
diff --git a/qt/time/Makefile.am b/qt/time/Makefile.am
deleted file mode 100644
index bdce61f..0000000
--- a/qt/time/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-##
-##     Copyright (C) 1998, 2006 Free Software Foundation, Inc.
-##
-##   This file is part of GUILE.
-##   
-##   GUILE is free software; you can redistribute it and/or modify it
-##   under the terms of the GNU Lesser General Public License as
-##   published by the Free Software Foundation; either version 3, or
-##   (at your option) any later version.
-##
-##   GUILE 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 Lesser General Public License for more details.
-##
-##   You should have received a copy of the GNU Lesser General Public
-##   License along with GUILE; see the file COPYING.LESSER.  If not,
-##   write to the Free Software Foundation, Inc., 51 Franklin Street,
-##   Fifth Floor, Boston, MA 02110-1301 USA
-
-AUTOMAKE_OPTIONS = gnu
-
-EXTRA_DIST = README.time assim cswap go init prim raw
diff --git a/qt/time/README.time b/qt/time/README.time
deleted file mode 100644
index 4bb190e..0000000
--- a/qt/time/README.time
+++ /dev/null
@@ -1,17 +0,0 @@
-The program `raw', when run in `..' runs the program `run' produced
-from `meas.c'.  It produces a raw output file (see `../tmp/*.raw').
-`raw' will die with an error if run in the current directory.  Note
-that some versions of `time' produce output in an unexpected format;
-edit them by hand.
-
-`prim', `init', `cswap' and `go' produce formatted table entries used
-in the documentation (in `../doc').  For example, from `..',
-
-       foreach i (tmp/*.raw)
-         time/prim $i
-       end
-
-See notes in the QuickThreads document about the applicability of
-these microbenchmark measurements -- in general, you can expect all
-QuickThreads operations to be a bit slower when used in a real
-application.
diff --git a/qt/time/assim b/qt/time/assim
deleted file mode 100755
index 6c4c521..0000000
--- a/qt/time/assim
+++ /dev/null
@@ -1,42 +0,0 @@
-#! /bin/awk -f
-
-BEGIN {
-  nmach = 0;
-
-  init_test = "1";
-  abort_test = "6";
-  blocki_test = "7";
-  block_test = "8";
-}
-
-{
-  mach = $1
-  test = $2
-  iter = $3
-  time = $6 + $8
-
-  if (machi[mach] == 0) {
-    machn[nmach] = mach;
-    machi[mach] = 1;
-    ++nmach;
-  }
-
-  us_per_op = time / iter * 1000000
-  times[mach "_" test] = us_per_op;
-}
-
-
-END {
-  for (i=0; i<nmach; ++i) {
-    m = machn[i];
-    init = times[m "_" init_test];
-    printf ("init %s | %f\n", m, init);
-
-    init_abort_blocki = times[m "_" abort_test];
-    abort_blocki = init_abort_blocki - init;
-    blocki = times[m "_" blocki_test];
-    abort = abort_blocki - blocki;
-    blockf = times[m "_" block_test];
-    printf ("swap %s | %f | %f | %f\n", m, abort, blocki, blockf);
-  }
-}
diff --git a/qt/time/cswap b/qt/time/cswap
deleted file mode 100755
index 0ec811b..0000000
--- a/qt/time/cswap
+++ /dev/null
@@ -1,37 +0,0 @@
-#! /bin/awk -f
-
-BEGIN {
-  purpose = "report time used by int only and int+fp cswaps";
-
-  nmach = 0;
-
-  test_int = "7";
-  test_fp = "8";
-}
-
-{
-  mach = $1
-  test = $2
-  iter = $3
-  time = $6 + $8
-
-  if (machi[mach] == 0) {
-    machn[nmach] = mach;
-    machi[mach] = 1;
-    ++nmach;
-  }
-
-  us_per_op = time / iter * 1000000
-  times[mach "_" test] = us_per_op;
-}
-
-
-END {
-  for (i=0; i<nmach; ++i) {
-    m = machn[i];
-
-    integer = times[m "_" test_int];
-    fp = times[m "_" test_fp];
-    printf ("%s|%3.1f|%3.1f\n", m, integer, fp);
-  }
-}
diff --git a/qt/time/go b/qt/time/go
deleted file mode 100755
index 489d538..0000000
--- a/qt/time/go
+++ /dev/null
@@ -1,43 +0,0 @@
-#! /bin/awk -f
-
-BEGIN {
-  purpose = "report times used for init/start/stop";
-
-  nmach = 0;
-
-  test_single = "6";
-  test_v0 = "10";
-  test_v2 = "11";
-  test_v4 = "12";
-  test_v8 = "13";
-}
-
-{
-  mach = $1
-  test = $2
-  iter = $3
-  time = $6 + $8
-
-  if (machi[mach] == 0) {
-    machn[nmach] = mach;
-    machi[mach] = 1;
-    ++nmach;
-  }
-
-  us_per_op = time / iter * 1000000
-  times[mach "_" test] = us_per_op;
-}
-
-
-END {
-  for (i=0; i<nmach; ++i) {
-    m = machn[i];
-
-    single = times[m "_" test_single];
-    v0 = times[m "_" test_v0];
-    v2 = times[m "_" test_v2];
-    v4 = times[m "_" test_v4];
-    v8 = times[m "_" test_v8];
-    printf ("%s|%3.1f|%3.1f|%3.1f|%3.1f|%3.1f\n", m, single, v0, v2, v4, v8);
-  }
-}
diff --git a/qt/time/init b/qt/time/init
deleted file mode 100755
index 8bcbf34..0000000
--- a/qt/time/init
+++ /dev/null
@@ -1,42 +0,0 @@
-#! /bin/awk -f
-
-BEGIN {
-  purpose = "Report time used to initialize a thread."
-  nmach = 0;
-
-  test_single = "1";
-  test_v0 = "14";
-  test_v2 = "15";
-  test_v4 = "16";
-  test_v8 = "17";
-}
-
-{
-  mach = $1
-  test = $2
-  iter = $3
-  time = $6 + $8
-
-  if (machi[mach] == 0) {
-    machn[nmach] = mach;
-    machi[mach] = 1;
-    ++nmach;
-  }
-
-  us_per_op = time / iter * 1000000
-  times[mach "_" test] = us_per_op;
-}
-
-
-END {
-  for (i=0; i<nmach; ++i) {
-    m = machn[i];
-
-    single = times[m "_" test_single];
-    v0 = times[m "_" test_v0];
-    v2 = times[m "_" test_v2];
-    v4 = times[m "_" test_v4];
-    v8 = times[m "_" test_v8];
-    printf ("%s|%3.1f|%3.1f|%3.1f|%3.1f|%3.1f\n", m, single, v0, v2, v4, v8);
-  }
-}
diff --git a/qt/time/prim b/qt/time/prim
deleted file mode 100755
index 22b323f..0000000
--- a/qt/time/prim
+++ /dev/null
@@ -1,41 +0,0 @@
-#! /bin/awk -f
-
-BEGIN {
-  purpose = "report times for microbenchmarks"
-
-  nmach = 0;
-
-  test_callind = "18";
-  test_callimm = "18";
-  test_addreg = "20";
-  test_loadreg = "21";
-}
-
-{
-  mach = $1
-  test = $2
-  iter = $3
-  time = $6 + $8
-
-  if (machi[mach] == 0) {
-    machn[nmach] = mach;
-    machi[mach] = 1;
-    ++nmach;
-  }
-
-  ns_per_op = time / iter * 1000000
-  times[mach "_" test] = ns_per_op;
-}
-
-
-END {
-  for (i=0; i<nmach; ++i) {
-    m = machn[i];
-
-    ind = times[m "_" test_callind];
-    imm = times[m "_" test_callimm];
-    add = times[m "_" test_addreg];
-    load = times[m "_" test_loadreg];
-    printf ("%s|%1.3f|%1.3f|%1.3f|%1.3f\n", m, ind, imm, add, load);
-  }
-}
diff --git a/qt/time/raw b/qt/time/raw
deleted file mode 100755
index 96ae10a..0000000
--- a/qt/time/raw
+++ /dev/null
@@ -1,58 +0,0 @@
-#! /bin/csh
-
-rm -f timed
-
-set init=1
-set runone=6
-set blockint=7
-set blockfloat=8
-set vainit0=14
-set vainit2=15
-set vainit4=16
-set vainit8=17
-set vastart0=10
-set vastart2=11
-set vastart4=12
-set vastart8=13
-set bench_regcall=18
-set bench_immcall=19
-set bench_add=20
-set bench_load=21
-
-source configuration
-
-echo -n $config_machine $init $config_init
-/bin/time run $init $config_init
-echo -n $config_machine $runone $config_runone
-/bin/time run $runone $config_runone
-echo -n $config_machine $blockint $config_blockint
-/bin/time run $blockint $config_blockint
-echo -n $config_machine $blockfloat $config_blockfloat
-/bin/time run $blockfloat $config_blockfloat
-
-echo -n $config_machine $vainit0 $config_vainit0
-/bin/time run $vainit0 $config_vainit0
-echo -n $config_machine $vainit2 $config_vainit2
-/bin/time run $vainit2 $config_vainit2
-echo -n $config_machine $vainit4 $config_vainit4
-/bin/time run $vainit4 $config_vainit4
-echo -n $config_machine $vainit8 $config_vainit8
-/bin/time run $vainit8 $config_vainit8
-
-echo -n $config_machine $vastart0 $config_vastart0
-/bin/time run $vastart0 $config_vastart0
-echo -n $config_machine $vastart2 $config_vastart2
-/bin/time run $vastart2 $config_vastart2
-echo -n $config_machine $vastart4 $config_vastart4
-/bin/time run $vastart4 $config_vastart4
-echo -n $config_machine $vastart8 $config_vastart8
-/bin/time run $vastart8 $config_vastart8
-
-echo -n $config_machine $bench_regcall $config_bcall_reg
-/bin/time run $bench_regcall $config_bcall_reg
-echo -n $config_machine $bench_immcall $config_bcall_imm
-/bin/time run $bench_immcall $config_bcall_imm
-echo -n $config_machine $bench_add $config_b_add
-/bin/time run $bench_add $config_b_add
-echo -n $config_machine $bench_load $config_b_load
-/bin/time run $bench_load $config_b_load
diff --git a/test-suite/standalone/test-conversion.c 
b/test-suite/standalone/test-conversion.c
index 0dfa80a..d201874 100644
--- a/test-suite/standalone/test-conversion.c
+++ b/test-suite/standalone/test-conversion.c
@@ -834,7 +834,7 @@ ieee_init (void)
      before trying to use it.  (But in practice we believe this is not a
      problem on any system guile is likely to target.)  */
   guile_Inf = INFINITY;
-#elif HAVE_DINFINITY
+#elif defined HAVE_DINFINITY
   /* OSF */
   extern unsigned int DINFINITY[2];
   guile_Inf = (*((double *) (DINFINITY)));
@@ -853,7 +853,7 @@ ieee_init (void)
 #ifdef NAN
   /* C99 NAN, when available */
   guile_NaN = NAN;
-#elif HAVE_DQNAN
+#elif defined HAVE_DQNAN
   {
     /* OSF */
     extern unsigned int DQNAN[2];
diff --git a/test-suite/standalone/test-unwind.c 
b/test-suite/standalone/test-unwind.c
index 2b0291d..f9820cc 100644
--- a/test-suite/standalone/test-unwind.c
+++ b/test-suite/standalone/test-unwind.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2005, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2004, 2005, 2008, 2009 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -206,8 +206,7 @@ check_ports ()
   if (tmpdir == NULL)
     tmpdir = "/tmp";
 
-  filename = (char *) alloca (strlen (tmpdir) +
-                             sizeof (FILENAME_TEMPLATE) + 1);
+  filename = alloca (strlen (tmpdir) + sizeof (FILENAME_TEMPLATE) + 1);
   strcpy (filename, tmpdir);
   strcat (filename, FILENAME_TEMPLATE);
 


hooks/post-receive
-- 
GNU Guile




reply via email to

[Prev in Thread] Current Thread [Next in Thread]