[gcl] Update to 20120323 snapshot.

Jerry James jjames at fedoraproject.org
Wed Mar 28 16:46:13 UTC 2012


commit 660b8f411ac4d93b1f5de0cc8cecb46d057b7cf7
Author: Jerry James <loganjerry at gmail.com>
Date:   Wed Mar 28 10:45:52 2012 -0600

    Update to 20120323 snapshot.

 gcl-2.6.8-alloca.patch         |  160 +-
 gcl-2.6.8-asm-signal-h.patch   |   16 +-
 gcl-2.6.8-extension.patch      |  194 +-
 gcl-2.6.8-infrastructure.patch |50150 ++++++++++++++++++++--------------------
 gcl-2.6.8-unrandomize.patch    |  234 +-
 gcl.spec                       |   10 +-
 sources                        |    2 +-
 7 files changed, 25384 insertions(+), 25382 deletions(-)
---
diff --git a/gcl-2.6.8-alloca.patch b/gcl-2.6.8-alloca.patch
index cae7508..d589503 100644
--- a/gcl-2.6.8-alloca.patch
+++ b/gcl-2.6.8-alloca.patch
@@ -1,80 +1,6 @@
---- ./acconfig.h.orig	2009-02-23 12:39:42.000000000 -0700
-+++ ./acconfig.h	2012-01-09 20:47:04.938687050 -0700
-@@ -53,11 +53,10 @@
- #undef HAVE_ALLOCA 
- #endif
- 
--
- /* define if need alloca.h */
--#undef NEED_ALLOCA_H
-+#undef HAVE_ALLOCA_H
- 
--#ifdef NEED_ALLOCA_H
-+#ifdef HAVE_ALLOCA_H
- #include <alloca.h>
- #endif
- 
---- ./h/gclincl.h.in.orig	2010-08-04 15:44:24.000000000 -0600
-+++ ./h/gclincl.h.in	2012-01-09 20:47:04.939687029 -0700
-@@ -54,11 +54,10 @@
- #undef HAVE_ALLOCA 
- #endif
- 
--
- /* define if need alloca.h */
--#undef NEED_ALLOCA_H
-+#undef HAVE_ALLOCA_H
- 
--#ifdef NEED_ALLOCA_H
-+#ifdef HAVE_ALLOCA_H
- #include <alloca.h>
- #endif
- 
-@@ -260,6 +259,21 @@
- #undef HAVE_OBJC_MALLOC_H
- #undef HAVE_OUTPUT_BFD
- 
-+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-+   systems. This function is required for `alloca.c' support on those systems.
-+   */
-+#undef CRAY_STACKSEG_END
-+
-+/* Define to 1 if using `alloca.c'. */
-+#undef C_ALLOCA
-+
-+/* Define to 1 if you have `alloca', as a function or macro. */
-+#undef HAVE_ALLOCA
-+
-+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-+   */
-+#undef HAVE_ALLOCA_H
-+
- /* Define to 1 if you have the <asm/sigcontext.h> header file. */
- #undef HAVE_ASM_SIGCONTEXT_H
- 
-@@ -365,8 +379,19 @@
- /* The size of `long', as computed by sizeof. */
- #undef SIZEOF_LONG
- 
-+/* If using the C implementation of alloca, define if you know the
-+   direction of stack growth for your system; otherwise it will be
-+   automatically deduced at runtime.
-+	STACK_DIRECTION > 0 => grows toward higher addresses
-+	STACK_DIRECTION < 0 => grows toward lower addresses
-+	STACK_DIRECTION = 0 => direction of growth unknown */
-+#undef STACK_DIRECTION
-+
- /* staticly linked images */
- #undef STATIC_LINKING
- 
- /* Define to 1 if you have the ANSI C header files. */
- #undef STDC_HEADERS
-+
-+/* Define to `unsigned int' if <sys/types.h> does not define. */
-+#undef size_t
---- ./configure.in.orig	2012-01-09 20:41:39.017551755 -0700
-+++ ./configure.in	2012-01-09 20:47:04.940687008 -0700
-@@ -1906,33 +1906,7 @@
+--- ./configure.in.orig	2012-03-28 09:53:39.622413068 -0600
++++ ./configure.in	2012-03-28 09:55:40.957561557 -0600
+@@ -1923,33 +1923,7 @@
  
  # alloca
  
@@ -109,8 +35,8 @@
  
  # dlopen etc
  # idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
---- ./configure.orig	2012-01-09 20:41:41.703495184 -0700
-+++ ./configure	2012-01-09 20:47:13.481507117 -0700
+--- ./configure.orig	2012-03-28 09:53:39.628412580 -0600
++++ ./configure	2012-03-28 09:55:40.964560988 -0600
 @@ -609,6 +609,7 @@
  NIFLAGS
  FINAL_CFLAGS
@@ -180,7 +106,7 @@
  cat >config.log <<_ACEOF
  This file contains any messages produced by compilers while
  running configure, to aid debugging if configure makes a mistake.
-@@ -7882,81 +7937,205 @@
+@@ -7963,81 +8018,205 @@
  
  # alloca
  
@@ -420,3 +346,77 @@
  
  
  # dlopen etc
+--- ./h/gclincl.h.in.orig	2012-01-16 13:08:04.000000000 -0700
++++ ./h/gclincl.h.in	2012-03-28 09:55:40.955561719 -0600
+@@ -54,11 +54,10 @@
+ #undef HAVE_ALLOCA 
+ #endif
+ 
+-
+ /* define if need alloca.h */
+-#undef NEED_ALLOCA_H
++#undef HAVE_ALLOCA_H
+ 
+-#ifdef NEED_ALLOCA_H
++#ifdef HAVE_ALLOCA_H
+ #include <alloca.h>
+ #endif
+ 
+@@ -261,6 +260,21 @@
+ #undef HAVE_OUTPUT_BFD
+ #undef HAVE_BUILTIN_CLEAR_CACHE
+ 
++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
++   systems. This function is required for `alloca.c' support on those systems.
++   */
++#undef CRAY_STACKSEG_END
++
++/* Define to 1 if using `alloca.c'. */
++#undef C_ALLOCA
++
++/* Define to 1 if you have `alloca', as a function or macro. */
++#undef HAVE_ALLOCA
++
++/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
++   */
++#undef HAVE_ALLOCA_H
++
+ /* Define to 1 if you have the <asm/sigcontext.h> header file. */
+ #undef HAVE_ASM_SIGCONTEXT_H
+ 
+@@ -366,8 +380,19 @@
+ /* The size of `long', as computed by sizeof. */
+ #undef SIZEOF_LONG
+ 
++/* If using the C implementation of alloca, define if you know the
++   direction of stack growth for your system; otherwise it will be
++   automatically deduced at runtime.
++	STACK_DIRECTION > 0 => grows toward higher addresses
++	STACK_DIRECTION < 0 => grows toward lower addresses
++	STACK_DIRECTION = 0 => direction of growth unknown */
++#undef STACK_DIRECTION
++
+ /* staticly linked images */
+ #undef STATIC_LINKING
+ 
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
++
++/* Define to `unsigned int' if <sys/types.h> does not define. */
++#undef size_t
+--- ./acconfig.h.orig	2012-01-16 13:07:59.000000000 -0700
++++ ./acconfig.h	2012-03-28 09:55:40.953561881 -0600
+@@ -53,11 +53,10 @@
+ #undef HAVE_ALLOCA 
+ #endif
+ 
+-
+ /* define if need alloca.h */
+-#undef NEED_ALLOCA_H
++#undef HAVE_ALLOCA_H
+ 
+-#ifdef NEED_ALLOCA_H
++#ifdef HAVE_ALLOCA_H
+ #include <alloca.h>
+ #endif
+ 
diff --git a/gcl-2.6.8-asm-signal-h.patch b/gcl-2.6.8-asm-signal-h.patch
index 10152f4..0827fc7 100644
--- a/gcl-2.6.8-asm-signal-h.patch
+++ b/gcl-2.6.8-asm-signal-h.patch
@@ -1,6 +1,6 @@
---- ./configure.in.orig	2012-01-09 20:51:43.102828225 -0700
-+++ ./configure.in	2012-01-09 20:53:17.237845506 -0700
-@@ -1624,7 +1624,7 @@
+--- ./configure.in.orig	2012-03-28 09:57:37.877068843 -0600
++++ ./configure.in	2012-03-28 09:58:08.359593977 -0600
+@@ -1641,7 +1641,7 @@
  
  #if test $use = "386-linux" ; then
  	AC_CHECK_HEADERS(asm/sigcontext.h)
@@ -9,7 +9,7 @@
  	AC_MSG_CHECKING([for sigcontext])
  	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  	#include <signal.h>
-@@ -1649,6 +1649,7 @@
+@@ -1666,6 +1666,7 @@
               #include <asm/sigcontext.h>
               #endif
               #ifdef HAVE_ASM_SIGNAL_H          
@@ -17,9 +17,9 @@
               #include <asm/signal.h>
               #endif
            ]],
---- ./configure.orig	2012-01-09 20:51:54.679584389 -0700
-+++ ./configure	2012-01-09 20:53:37.292423109 -0700
-@@ -8230,7 +8230,8 @@
+--- ./configure.orig	2012-03-28 09:57:37.885068193 -0600
++++ ./configure	2012-03-28 09:58:08.366593408 -0600
+@@ -8311,7 +8311,8 @@
  
  	for ac_header in asm/signal.h
  do :
@@ -29,7 +29,7 @@
  if test "x$ac_cv_header_asm_signal_h" = xyes; then :
    cat >>confdefs.h <<_ACEOF
  #define HAVE_ASM_SIGNAL_H 1
-@@ -8283,6 +8284,7 @@
+@@ -8364,6 +8365,7 @@
               #include <asm/sigcontext.h>
               #endif
               #ifdef HAVE_ASM_SIGNAL_H
diff --git a/gcl-2.6.8-extension.patch b/gcl-2.6.8-extension.patch
index 885ff90..9bc8748 100644
--- a/gcl-2.6.8-extension.patch
+++ b/gcl-2.6.8-extension.patch
@@ -1,94 +1,5 @@
---- ./acconfig.h.orig	2012-01-09 20:47:04.938687050 -0700
-+++ ./acconfig.h	2012-01-09 20:49:21.947801299 -0700
-@@ -1,3 +1,6 @@
-+/* Whether compiling on a glibc-based system */
-+#undef _GNU_SOURCE
-+
- /* define where the heap could begin.   Normally should
- be the smallest value returned by sbrk().   Underestimating
- by 10-20 megabytes is not a problem. */
-@@ -157,7 +160,6 @@
- 
- #ifdef IN_NUM_CO
- #ifdef HAVE_ISNORMAL
--#define _GNU_SOURCE
- #include <math.h>
- #define ISNORMAL(a) isnormal(a)
- #else
-@@ -178,7 +180,6 @@
- 
- #ifdef NEED_ISFINITE
- #ifdef HAVE_ISFINITE
--#define _GNU_SOURCE
- #include <math.h>
- #define ISFINITE(a) isfinite(a)
- #else
---- ./h/gclincl.h.in.orig	2012-01-09 20:47:04.939687029 -0700
-+++ ./h/gclincl.h.in	2012-01-09 20:49:21.948801277 -0700
-@@ -1,4 +1,7 @@
- /* h/gclincl.h.in.  Generated from configure.in by autoheader.  */
-+/* Whether compiling on a glibc-based system */
-+#undef _GNU_SOURCE
-+
- /* define where the heap could begin.   Normally should
- be the smallest value returned by sbrk().   Underestimating
- by 10-20 megabytes is not a problem. */
-@@ -158,7 +161,6 @@
- 
- #ifdef IN_NUM_CO
- #ifdef HAVE_ISNORMAL
--#define _GNU_SOURCE
- #include <math.h>
- #define ISNORMAL(a) isnormal(a)
- #else
-@@ -179,7 +181,6 @@
- 
- #ifdef NEED_ISFINITE
- #ifdef HAVE_ISFINITE
--#define _GNU_SOURCE
- #include <math.h>
- #define ISFINITE(a) isfinite(a)
- #else
-@@ -393,5 +394,37 @@
- /* Define to 1 if you have the ANSI C header files. */
- #undef STDC_HEADERS
- 
-+/* Enable extensions on AIX 3, Interix.  */
-+#ifndef _ALL_SOURCE
-+# undef _ALL_SOURCE
-+#endif
-+/* Enable GNU extensions on systems that have them.  */
-+#ifndef _GNU_SOURCE
-+# undef _GNU_SOURCE
-+#endif
-+/* Enable threading extensions on Solaris.  */
-+#ifndef _POSIX_PTHREAD_SEMANTICS
-+# undef _POSIX_PTHREAD_SEMANTICS
-+#endif
-+/* Enable extensions on HP NonStop.  */
-+#ifndef _TANDEM_SOURCE
-+# undef _TANDEM_SOURCE
-+#endif
-+/* Enable general extensions on Solaris.  */
-+#ifndef __EXTENSIONS__
-+# undef __EXTENSIONS__
-+#endif
-+
-+
-+/* Define to 1 if on MINIX. */
-+#undef _MINIX
-+
-+/* Define to 2 if the system does not provide POSIX.1 features except with
-+   this defined. */
-+#undef _POSIX_1_SOURCE
-+
-+/* Define to 1 if you need to in order for `stat' and other things to work. */
-+#undef _POSIX_SOURCE
-+
- /* Define to `unsigned int' if <sys/types.h> does not define. */
- #undef size_t
---- ./configure.in.orig	2012-01-09 20:47:04.940687008 -0700
-+++ ./configure.in	2012-01-09 20:49:21.949801255 -0700
+--- ./configure.in.orig	2012-03-28 09:55:40.957561557 -0600
++++ ./configure.in	2012-03-28 09:56:09.658231276 -0600
 @@ -421,6 +421,7 @@
  	LDFLAGS=" "
  fi
@@ -97,7 +8,7 @@
  AC_PROG_CC
  AC_PROG_CPP
  AC_SUBST(CC)
-@@ -1414,7 +1415,6 @@
+@@ -1431,7 +1432,6 @@
  #
  AC_MSG_CHECKING([for isnormal])
  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
@@ -105,7 +16,7 @@
  	    #include <math.h>
  	    ]],[[
  	    float f;
-@@ -1432,7 +1432,6 @@
+@@ -1449,7 +1449,6 @@
  
  AC_MSG_CHECKING([for isfinite])
  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
@@ -113,8 +24,8 @@
  	#include <math.h>
  	]],[[
  	float f;
---- ./configure.orig	2012-01-09 20:47:13.481507117 -0700
-+++ ./configure	2012-01-09 20:49:33.805551545 -0700
+--- ./configure.orig	2012-03-28 09:55:40.964560988 -0600
++++ ./configure	2012-03-28 09:56:09.667230545 -0600
 @@ -654,9 +654,9 @@
  GMP
  MAKEINFO
@@ -1509,7 +1420,7 @@
  if test "x$ac_cv_header_malloc_malloc_h" = xyes; then :
  
  else
-@@ -6860,7 +7598,6 @@
+@@ -6941,7 +7679,6 @@
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
@@ -1517,7 +1428,7 @@
  	    #include <math.h>
  
  int
-@@ -6934,7 +7671,6 @@
+@@ -7015,7 +7752,6 @@
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
@@ -1525,3 +1436,92 @@
  	#include <math.h>
  
  int
+--- ./h/gclincl.h.in.orig	2012-03-28 09:55:40.955561719 -0600
++++ ./h/gclincl.h.in	2012-03-28 09:56:09.657231357 -0600
+@@ -1,4 +1,7 @@
+ /* h/gclincl.h.in.  Generated from configure.in by autoheader.  */
++/* Whether compiling on a glibc-based system */
++#undef _GNU_SOURCE
++
+ /* define where the heap could begin.   Normally should
+ be the smallest value returned by sbrk().   Underestimating
+ by 10-20 megabytes is not a problem. */
+@@ -158,7 +161,6 @@
+ 
+ #ifdef IN_NUM_CO
+ #ifdef HAVE_ISNORMAL
+-#define _GNU_SOURCE
+ #include <math.h>
+ #define ISNORMAL(a) isnormal(a)
+ #else
+@@ -179,7 +181,6 @@
+ 
+ #ifdef NEED_ISFINITE
+ #ifdef HAVE_ISFINITE
+-#define _GNU_SOURCE
+ #include <math.h>
+ #define ISFINITE(a) isfinite(a)
+ #else
+@@ -394,5 +395,37 @@
+ /* Define to 1 if you have the ANSI C header files. */
+ #undef STDC_HEADERS
+ 
++/* Enable extensions on AIX 3, Interix.  */
++#ifndef _ALL_SOURCE
++# undef _ALL_SOURCE
++#endif
++/* Enable GNU extensions on systems that have them.  */
++#ifndef _GNU_SOURCE
++# undef _GNU_SOURCE
++#endif
++/* Enable threading extensions on Solaris.  */
++#ifndef _POSIX_PTHREAD_SEMANTICS
++# undef _POSIX_PTHREAD_SEMANTICS
++#endif
++/* Enable extensions on HP NonStop.  */
++#ifndef _TANDEM_SOURCE
++# undef _TANDEM_SOURCE
++#endif
++/* Enable general extensions on Solaris.  */
++#ifndef __EXTENSIONS__
++# undef __EXTENSIONS__
++#endif
++
++
++/* Define to 1 if on MINIX. */
++#undef _MINIX
++
++/* Define to 2 if the system does not provide POSIX.1 features except with
++   this defined. */
++#undef _POSIX_1_SOURCE
++
++/* Define to 1 if you need to in order for `stat' and other things to work. */
++#undef _POSIX_SOURCE
++
+ /* Define to `unsigned int' if <sys/types.h> does not define. */
+ #undef size_t
+--- ./acconfig.h.orig	2012-03-28 09:55:40.953561881 -0600
++++ ./acconfig.h	2012-03-28 09:56:09.656231438 -0600
+@@ -1,3 +1,6 @@
++/* Whether compiling on a glibc-based system */
++#undef _GNU_SOURCE
++
+ /* define where the heap could begin.   Normally should
+ be the smallest value returned by sbrk().   Underestimating
+ by 10-20 megabytes is not a problem. */
+@@ -157,7 +160,6 @@
+ 
+ #ifdef IN_NUM_CO
+ #ifdef HAVE_ISNORMAL
+-#define _GNU_SOURCE
+ #include <math.h>
+ #define ISNORMAL(a) isnormal(a)
+ #else
+@@ -178,7 +180,6 @@
+ 
+ #ifdef NEED_ISFINITE
+ #ifdef HAVE_ISFINITE
+-#define _GNU_SOURCE
+ #include <math.h>
+ #define ISFINITE(a) isfinite(a)
+ #else
diff --git a/gcl-2.6.8-infrastructure.patch b/gcl-2.6.8-infrastructure.patch
index 79b3274..1668762 100644
--- a/gcl-2.6.8-infrastructure.patch
+++ b/gcl-2.6.8-infrastructure.patch
@@ -1,26018 +1,26018 @@
---- ./ltmain.sh.orig	2002-08-08 23:49:32.000000000 -0600
-+++ ./ltmain.sh	2012-01-09 20:36:31.869118769 -0700
-@@ -1,199 +1,928 @@
--# ltmain.sh - Provide generalized library-building support services.
--# NOTE: Changing this file will not affect anything until you rerun ltconfig.
--#
--# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
--# Free Software Foundation, Inc.
--# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
--#
--# This program is free software; you can redistribute it and/or modify
-+
-+# libtool (GNU libtool) 2.4
-+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-+
-+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-+# This is free software; see the source for copying conditions.  There is NO
-+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-+
-+# GNU Libtool 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 program is distributed in the hope that it will be useful, but
-+# As a special exception to the GNU General Public License,
-+# if you distribute this file as part of a program or library that
-+# is built using GNU Libtool, you may include this file under the
-+# same distribution terms that you use for the rest of that program.
-+#
-+# GNU Libtool 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, write to the Free Software
--# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+# along with GNU Libtool; see the file COPYING.  If not, a copy
-+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
-+# or obtained by writing to the Free Software Foundation, Inc.,
-+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+
-+# Usage: $progname [OPTION]... [MODE-ARG]...
- #
--# As a special exception to the GNU General Public License, if you
--# distribute this file as part of a program that contains a
--# configuration script generated by Autoconf, you may include it under
--# the same distribution terms that you use for the rest of that program.
-+# Provide generalized library-building support services.
-+#
-+#       --config             show all configuration variables
-+#       --debug              enable verbose shell tracing
-+#   -n, --dry-run            display commands without modifying any files
-+#       --features           display basic configuration information and exit
-+#       --mode=MODE          use operation mode MODE
-+#       --preserve-dup-deps  don't remove duplicate dependency libraries
-+#       --quiet, --silent    don't print informational messages
-+#       --no-quiet, --no-silent
-+#                            print informational messages (default)
-+#       --tag=TAG            use configuration variables from tag TAG
-+#   -v, --verbose            print more informational messages than default
-+#       --no-verbose         don't print the extra informational messages
-+#       --version            print version information
-+#   -h, --help, --help-all   print short, long, or detailed help message
-+#
-+# MODE must be one of the following:
-+#
-+#         clean              remove files from the build directory
-+#         compile            compile a source file into a libtool object
-+#         execute            automatically set library path, then run a program
-+#         finish             complete the installation of libtool libraries
-+#         install            install libraries or executables
-+#         link               create a library or an executable
-+#         uninstall          remove libraries from an installed directory
-+#
-+# MODE-ARGS vary depending on the MODE.  When passed as first option,
-+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
-+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
-+#
-+# When reporting a bug, please describe a test case to reproduce it and
-+# include the following information:
-+#
-+#         host-triplet:	$host
-+#         shell:		$SHELL
-+#         compiler:		$LTCC
-+#         compiler flags:		$LTCFLAGS
-+#         linker:		$LD (gnu? $with_gnu_ld)
-+#         $progname:	(GNU libtool) 2.4
-+#         automake:	$automake_version
-+#         autoconf:	$autoconf_version
-+#
-+# Report bugs to <bug-libtool at gnu.org>.
-+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-+# General help using GNU software: <http://www.gnu.org/gethelp/>.
- 
--# Check that we have a working $echo.
--if test "X$1" = X--no-reexec; then
--  # Discard the --no-reexec flag, and continue.
--  shift
--elif test "X$1" = X--fallback-echo; then
--  # Avoid inline document here, it may be left over
--  :
--elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
--  # Yippee, $echo works!
--  :
-+PROGRAM=libtool
-+PACKAGE=libtool
-+VERSION=2.4
-+TIMESTAMP=""
-+package_revision=1.3293
-+
-+# Be Bourne compatible
-+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-+  emulate sh
-+  NULLCMD=:
-+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-+  # is contrary to our usage.  Disable this feature.
-+  alias -g '${1+"$@"}'='"$@"'
-+  setopt NO_GLOB_SUBST
- else
--  # Restart under the correct shell, and then maybe $echo will work.
--  exec $SHELL "$0" --no-reexec ${1+"$@"}
-+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
- fi
-+BIN_SH=xpg4; export BIN_SH # for Tru64
-+DUALCASE=1; export DUALCASE # for MKS sh
- 
--if test "X$1" = X--fallback-echo; then
--  # used as fallback echo
--  shift
--  cat <<EOF
--$*
--EOF
--  exit 0
--fi
-+# A function that is used when there is no print builtin or printf.
-+func_fallback_echo ()
-+{
-+  eval 'cat <<_LTECHO_EOF
-+$1
-+_LTECHO_EOF'
-+}
+--- ./configure.in.orig	2012-01-18 07:52:07.000000000 -0700
++++ ./configure.in	2012-03-28 09:53:39.622413068 -0600
+@@ -1,4 +1,4 @@
+-AC_INIT()
++AC_INIT
+ AC_PREREQ([2.61])
+ AC_CONFIG_HEADER(h/gclincl.h)
  
--# The name of this program.
--progname=`$echo "$0" | sed 's%^.*/%%'`
--modename="$progname"
-+# NLS nuisances: We save the old values to restore during execute mode.
-+lt_user_locale=
-+lt_safe_locale=
-+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-+do
-+  eval "if test \"\${$lt_var+set}\" = set; then
-+          save_$lt_var=\$$lt_var
-+          $lt_var=C
-+	  export $lt_var
-+	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
-+	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
-+	fi"
-+done
-+LC_ALL=C
-+LANGUAGE=C
-+export LANGUAGE LC_ALL
+@@ -445,7 +445,7 @@
+    AC_MSG_CHECKING([for CFLAG $TMPF])
+    CFLAGS_ORI=$CFLAGS
+    CFLAGS="$CFLAGS $TMPF"
+-   AC_TRY_RUN([int main() {return 0;}],TCFLAGS="$TCFLAGS $TMPF";AC_MSG_RESULT(yes),AC_MSG_RESULT(no))
++   AC_RUN_IFELSE([AC_LANG_PROGRAM([],[[return 0;]])],TCFLAGS="$TCFLAGS $TMPF";AC_MSG_RESULT(yes),AC_MSG_RESULT(no))
+    CFLAGS=$CFLAGS_ORI
  
--# Constants.
--PROGRAM=ltmain.sh
--PACKAGE=libtool
--VERSION=1.4a-GCC3.0
--TIMESTAMP=" (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)"
-+$lt_unset CDPATH
+ else
+@@ -629,9 +629,6 @@
+ AC_MSG_CHECKING([system version (for dynamic loading)])
+ if machine=`uname -m` ; then true; else machine=unknown ; fi
  
--default_mode=
--help="Try \`$progname --help' for more information."
--magic="%%%MAGIC variable%%%"
--mkdir="mkdir"
--mv="mv -f"
--rm="rm -f"
+-AC_CHECK_PROGS(MAKEINFO,makeinfo,"false")
+-AC_SUBST(MAKEINFO)
+-
+ if test -f /usr/lib/NextStep/software_version; then
+     system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
+ else
+@@ -672,21 +669,24 @@
  
--# Sed substitution that helps us do robust quoting.  It backslashifies
--# metacharacters that are still active within double-quoted strings.
--Xsed='sed -e 1s/^X//'
--sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
--SP2NL='tr \040 \012'
--NL2SP='tr \015\012 \040\040'
-+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-+# is ksh but when the shell is invoked as "sh" and the current value of
-+# the _XPG environment variable is not equal to 1 (one), the special
-+# positional parameter $0, within a function call, is the name of the
-+# function.
-+progpath="$0"
+ AC_CHECK_HEADER(unistd.h,
+ 	AC_CHECK_LIB(c,sysconf,
+-		AC_MSG_CHECKING("for _SC_CLK_TCK")
+-		AC_TRY_RUN([#include <unistd.h>
++		AC_MSG_CHECKING([for _SC_CLK_TCK])
++		AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++		            #include <unistd.h>
+ 		            #include <stdio.h>
+-		            int
+-			    main() {
++		            ]],[[
+ 			   	FILE *fp=fopen("conftest1","w");
+ 				fprintf(fp,"%lu\n",sysconf(_SC_CLK_TCK));
+ 				fclose(fp);
+ 			        return 0;
+-			    }],
++			    ]])],
+ 			    hz=`cat conftest1`
+ 			    AC_DEFINE_UNQUOTED(HZ,$hz)
+ 			    ,hz=0,hz=0)
+ 	        [AC_MSG_RESULT($hz)]))
  
--# NLS nuisances.
--# Only set LANG and LC_ALL to C if already set.
--# These must not be set unconditionally because not all systems understand
--# e.g. LANG=C (notably SCO).
--# We save the old values to restore during execute mode.
--if test "${LC_ALL+set}" = set; then
--  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
--fi
--if test "${LANG+set}" = set; then
--  save_LANG="$LANG"; LANG=C; export LANG
--fi
++AC_PROG_EGREP
++AC_CHECK_PROGS(MAKEINFO,makeinfo,"false")
++AC_SUBST(MAKEINFO)
  
--if test "$LTCONFIG_VERSION" != "$VERSION"; then
--  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
--  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
--  exit 1
--fi
+ #MY_SUBDIRS=
  
--if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
--  echo "$modename: not configured to build any kind of library" 1>&2
--  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
--  exit 1
--fi
-+: ${CP="cp -f"}
-+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-+: ${EGREP="/bin/grep -E"}
-+: ${FGREP="/bin/grep -F"}
-+: ${GREP="/bin/grep"}
-+: ${LN_S="ln -s"}
-+: ${MAKE="make"}
-+: ${MKDIR="mkdir"}
-+: ${MV="mv -f"}
-+: ${RM="rm -f"}
-+: ${SED="/bin/sed"}
-+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
-+: ${Xsed="$SED -e 1s/^X//"}
+@@ -703,17 +703,19 @@
+  if test "$enable_dynsysgmp" = "yes" ; then
+ 	AC_CHECK_HEADER(gmp.h,
+ 		AC_CHECK_LIB(gmp,__gmpz_init,
+-			AC_MSG_CHECKING("for external gmp version")
+-			AC_TRY_RUN([#include <gmp.h>
+-				    int main() {
++			AC_MSG_CHECKING([for external gmp version])
++			AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++				    #include <gmp.h>
++				]],[[
+ 				    #if __GNU_MP_VERSION == 4 || __GNU_MP_VERSION == 5
+ 					return 0;
+ 				    #else
+ 					return -1;
+ 				    #endif
+-				    }],
++				    ]])],
+ #				MPFILES=$GMPDIR/mpn/mul_n.o
+ #				PATCHED_SYMBOLS=__gmpn_toom3_mul_n
++				AC_MSG_RESULT([4/5])
+ 				MPFILES=
+ 				PATCHED_SYMBOLS=
+ #				if test "$use" = "m68k-linux" ; then
+@@ -725,7 +727,8 @@
+ 				echo "int main() {return 0;}" >>foo.c
+ 				MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
+ 				rm -f foo.c,
+-				echo "Cannot use dynamic gmp lib" , echo "Cannot use dynamic gmp lib" ),
++				AC_MSG_RESULT([Cannot use dynamic gmp lib]),
++				AC_MSG_RESULT([Cannot use dynamic gmp lib])),
+ 			echo "Cannot use dynamic gmp lib" ,),
+ 		echo "Cannot use dynamic gmp lib" ,)
+ fi
+@@ -772,7 +775,7 @@
  
--# Global variables.
--mode=$default_mode
--nonopt=
--prev=
--prevopt=
--run=
--show="$echo"
--show_help=
--execute_dlfiles=
--lo2o="s/\\.lo\$/.${objext}/"
--o2lo="s/\\.${objext}\$/.lo/"
--taglist=
-+# Global variables:
-+EXIT_SUCCESS=0
-+EXIT_FAILURE=1
-+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
-+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+ fi
  
--# Parse our command line options once, thoroughly.
--while test $# -gt 0
--do
--  arg="$1"
--  shift
-+exit_status=$EXIT_SUCCESS
+-AC_MSG_CHECKING("for leading underscore in object symbols")
++AC_MSG_CHECKING([for leading underscore in object symbols])
+ cat>foo.c <<EOFF
+ #include <math.h>
+ #include <stdio.h>
+@@ -782,60 +785,62 @@
+ if nm foo.o |grep " U " | grep "_cos" >/dev/null || nm foo.o |grep " U " | grep " _getc" >/dev/null ; then
+ 	LEADING_UNDERSCORE=1
+ 	AC_DEFINE(LEADING_UNDERSCORE)
+-	AC_MSG_RESULT("yes")
++	AC_MSG_RESULT([yes])
+ else
+ 	LEADING_UNDERSCORE=""
+-	AC_MSG_RESULT("no")
++	AC_MSG_RESULT([no])
+ fi
+-AC_MSG_CHECKING("for GNU ld option -Map")
++AC_MSG_CHECKING([for GNU ld option -Map])
+ touch map
+ $CC -o foo [ -Wl,-Map ] map foo.o >/dev/null 2>&1
+ if test `cat map | wc -l` != "0" ; then
+-	AC_MSG_RESULT("yes")
++	AC_MSG_RESULT([yes])
+ 	AC_DEFINE(HAVE_GNU_LD)
+ 	GNU_LD=1
+ else
+-	AC_MSG_RESULT("no")
++	AC_MSG_RESULT([no])
+ 	GNU_LD=
+ fi
+ rm -f foo.c foo.o foo map
  
--  case $arg in
--  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
--  *) optarg= ;;
--  esac
-+# Make sure IFS has a sensible default
-+lt_nl='
-+'
-+IFS=" 	$lt_nl"
+- AC_MSG_CHECKING("for size of gmp limbs")
+- AC_TRY_RUN([#include <stdio.h>
++ AC_MSG_CHECKING([for size of gmp limbs])
++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++	#include <stdio.h>
+ 	#include "$MP_INCLUDE"
+-	int main() {
++	]],[[
+ 	FILE *fp=fopen("conftest1","w");
+ 	fprintf(fp,"%u",sizeof(mp_limb_t));
+ 	fclose(fp);
+ 	return 0;
+-	}],mpsize=`cat conftest1`,mpsize=0,mpsize=0)
++	]])],mpsize=`cat conftest1`,mpsize=0,mpsize=0)
+  if test "$mpsize" = "0" ; then
+-	echo "Cannot determine mpsize"
+-	exit 1
++	AC_MSG_ERROR([Cannot determine mpsize], 1)
+  fi
+  AC_DEFINE_UNQUOTED(MP_LIMB_BYTES,$mpsize)
+  AC_MSG_RESULT($mpsize) 
  
--  # If the previous option needs an argument, assign it.
--  if test -n "$prev"; then
--    case $prev in
--    execute_dlfiles)
--      execute_dlfiles="$execute_dlfiles $arg"
-+dirname="s,/[^/]*$,,"
-+basename="s,^.*/,,"
-+
-+# func_dirname file append nondir_replacement
-+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-+# otherwise set result to NONDIR_REPLACEMENT.
-+func_dirname ()
-+{
-+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-+    if test "X$func_dirname_result" = "X${1}"; then
-+      func_dirname_result="${3}"
-+    else
-+      func_dirname_result="$func_dirname_result${2}"
-+    fi
-+} # func_dirname may be replaced by extended shell implementation
-+
-+
-+# func_basename file
-+func_basename ()
-+{
-+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-+} # func_basename may be replaced by extended shell implementation
-+
-+
-+# func_dirname_and_basename file append nondir_replacement
-+# perform func_basename and func_dirname in a single function
-+# call:
-+#   dirname:  Compute the dirname of FILE.  If nonempty,
-+#             add APPEND to the result, otherwise set result
-+#             to NONDIR_REPLACEMENT.
-+#             value returned in "$func_dirname_result"
-+#   basename: Compute filename of FILE.
-+#             value retuned in "$func_basename_result"
-+# Implementation must be kept synchronized with func_dirname
-+# and func_basename. For efficiency, we do not delegate to
-+# those functions but instead duplicate the functionality here.
-+func_dirname_and_basename ()
-+{
-+    # Extract subdirectory from the argument.
-+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
-+    if test "X$func_dirname_result" = "X${1}"; then
-+      func_dirname_result="${3}"
-+    else
-+      func_dirname_result="$func_dirname_result${2}"
-+    fi
-+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
-+} # func_dirname_and_basename may be replaced by extended shell implementation
-+
-+
-+# func_stripname prefix suffix name
-+# strip PREFIX and SUFFIX off of NAME.
-+# PREFIX and SUFFIX must not contain globbing or regex special
-+# characters, hashes, percent signs, but SUFFIX may contain a leading
-+# dot (in which case that matches only a dot).
-+# func_strip_suffix prefix name
-+func_stripname ()
-+{
-+    case ${2} in
-+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-+    esac
-+} # func_stripname may be replaced by extended shell implementation
-+
-+
-+# These SED scripts presuppose an absolute path with a trailing slash.
-+pathcar='s,^/\([^/]*\).*$,\1,'
-+pathcdr='s,^/[^/]*,,'
-+removedotparts=':dotsl
-+		s@/\./@/@g
-+		t dotsl
-+		s,/\.$,/,'
-+collapseslashes='s@/\{1,\}@/@g'
-+finalslash='s,/*$,/,'
-+
-+# func_normal_abspath PATH
-+# Remove doubled-up and trailing slashes, "." path components,
-+# and cancel out any ".." path components in PATH after making
-+# it an absolute path.
-+#             value returned in "$func_normal_abspath_result"
-+func_normal_abspath ()
-+{
-+  # Start from root dir and reassemble the path.
-+  func_normal_abspath_result=
-+  func_normal_abspath_tpath=$1
-+  func_normal_abspath_altnamespace=
-+  case $func_normal_abspath_tpath in
-+    "")
-+      # Empty path, that just means $cwd.
-+      func_stripname '' '/' "`pwd`"
-+      func_normal_abspath_result=$func_stripname_result
-+      return
-+    ;;
-+    # The next three entries are used to spot a run of precisely
-+    # two leading slashes without using negated character classes;
-+    # we take advantage of case's first-match behaviour.
-+    ///*)
-+      # Unusual form of absolute path, do nothing.
-+    ;;
-+    //*)
-+      # Not necessarily an ordinary path; POSIX reserves leading '//'
-+      # and for example Cygwin uses it to access remote file shares
-+      # over CIFS/SMB, so we conserve a leading double slash if found.
-+      func_normal_abspath_altnamespace=/
-+    ;;
-+    /*)
-+      # Absolute path, do nothing.
-+    ;;
-+    *)
-+      # Relative path, prepend $cwd.
-+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
-+    ;;
-+  esac
-+  # Cancel out all the simple stuff to save iterations.  We also want
-+  # the path to end with a slash for ease of parsing, so make sure
-+  # there is one (and only one) here.
-+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
-+  while :; do
-+    # Processed it all yet?
-+    if test "$func_normal_abspath_tpath" = / ; then
-+      # If we ascended to the root using ".." the result may be empty now.
-+      if test -z "$func_normal_abspath_result" ; then
-+        func_normal_abspath_result=/
-+      fi
-+      break
-+    fi
-+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
-+        -e "$pathcar"`
-+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-+        -e "$pathcdr"`
-+    # Figure out what to do with it
-+    case $func_normal_abspath_tcomponent in
-+      "")
-+        # Trailing empty path component, ignore it.
-       ;;
--    tag)
--      tagname="$arg"
-+      ..)
-+        # Parent dir; strip last assembled component from result.
-+        func_dirname "$func_normal_abspath_result"
-+        func_normal_abspath_result=$func_dirname_result
-+      ;;
-+      *)
-+        # Actual path component, append it.
-+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
-+      ;;
-+    esac
-+  done
-+  # Restore leading double-slash if one was found on entry.
-+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
-+}
+- AC_MSG_CHECKING("_SHORT_LIMB")
+- AC_TRY_RUN([#include <stdio.h>
++ AC_MSG_CHECKING([_SHORT_LIMB])
++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++	#include <stdio.h>
+ 	#include "$MP_INCLUDE"
+-	int main() {
++	]],[[
+ 	#ifdef _SHORT_LIMB
+ 	return 0;
+ 	#else
+ 	return 1;
+ 	#endif
+-	}],AC_DEFINE(__SHORT_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
+- AC_MSG_CHECKING("_LONG_LONG_LIMB")
+- AC_TRY_RUN([#include <stdio.h>
++	]])],AC_DEFINE(__SHORT_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
++ AC_MSG_CHECKING([_LONG_LONG_LIMB])
++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++	#include <stdio.h>
+ 	#include "$MP_INCLUDE"
+-	int main() {
++	]],[[
+ 	#ifdef _LONG_LONG_LIMB
+ 	return 0;
+ 	#else
+ 	return 1;
+ 	#endif
+-	}],AC_DEFINE(__LONG_LONG_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
++	]])],AC_DEFINE(__LONG_LONG_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
  
--      # Check whether tagname contains only valid characters
--      case $tagname in
--      *[!-_A-Za-z0-9,/]*)
--	echo "$progname: invalid tag name: $tagname" 1>&2
--	exit 1
--        ;;
--      esac
-+# func_relative_path SRCDIR DSTDIR
-+# generates a relative path from SRCDIR to DSTDIR, with a trailing
-+# slash if non-empty, suitable for immediately appending a filename
-+# without needing to append a separator.
-+#             value returned in "$func_relative_path_result"
-+func_relative_path ()
-+{
-+  func_relative_path_result=
-+  func_normal_abspath "$1"
-+  func_relative_path_tlibdir=$func_normal_abspath_result
-+  func_normal_abspath "$2"
-+  func_relative_path_tbindir=$func_normal_abspath_result
+  GMP=1
+  AC_DEFINE(GMP)
+@@ -891,10 +896,9 @@
  
--      case $tagname in
--      CC)
--	# Don't test for the "default" C tag, as we know, it's there, but
--	# not specially marked.
--	taglist="$taglist $tagname"
--	;;
-+  # Ascend the tree starting from libdir
-+  while :; do
-+    # check if we have found a prefix of bindir
-+    case $func_relative_path_tbindir in
-+      $func_relative_path_tlibdir)
-+        # found an exact match
-+        func_relative_path_tcancelled=
-+        break
-+        ;;
-+      $func_relative_path_tlibdir*)
-+        # found a matching prefix
-+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
-+        func_relative_path_tcancelled=$func_stripname_result
-+        if test -z "$func_relative_path_result"; then
-+          func_relative_path_result=.
-+        fi
-+        break
-+        ;;
-       *)
--        if grep "^### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
--          taglist="$taglist $tagname"
--	  # Evaluate the configuration.
--	  eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
--        else
--	  echo "$progname: ignoring unknown tag $tagname" 1>&2
-+        func_dirname $func_relative_path_tlibdir
-+        func_relative_path_tlibdir=${func_dirname_result}
-+        if test "x$func_relative_path_tlibdir" = x ; then
-+          # Have to descend all the way to the root!
-+          func_relative_path_result=../$func_relative_path_result
-+          func_relative_path_tcancelled=$func_relative_path_tbindir
-+          break
-         fi
-+        func_relative_path_result=../$func_relative_path_result
-         ;;
--      esac
--      ;;
--    *)
--      eval "$prev=\$arg"
--      ;;
-     esac
-+  done
+  	AC_CHECK_LIB(dl,dlopen,have_dl=1,have_dl=0)
+  	if test "$have_dl" = "0" ; then
+- 		echo "Cannot find dlopen in -dl"
+- 		exit 1
++ 		AC_MSG_ERROR([Cannot find dlopen in -dl], 1)
+  	fi
+-dnl	AC_SEARCH_LIBS(dlopen, dl, have_dl=1, AC_ERROR(dlopen not found))
++dnl	AC_SEARCH_LIBS(dlopen, dl, have_dl=1, AC_MSG_ERROR([dlopen not found]))
+ dnl LIBS and TLIBS - why not merged from the beginning?
  
--    prev=
--    prevopt=
--    continue
-+  # Now calculate path; take care to avoid doubling-up slashes.
-+  func_stripname '' '/' "$func_relative_path_result"
-+  func_relative_path_result=$func_stripname_result
-+  func_stripname '/' '/' "$func_relative_path_tcancelled"
-+  if test "x$func_stripname_result" != x ; then
-+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
-   fi
+ 	TLIBS="$TLIBS -ldl -rdynamic"
+@@ -908,15 +912,17 @@
+ 		#
+ 		# Old binutils appear to need CONST defined to const
+ 		#
+-			AC_MSG_CHECKING(if need to define CONST for bfd)
+-			AC_TRY_RUN([#define IN_GCC
++			AC_MSG_CHECKING([if need to define CONST for bfd])
++			AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++				    #define IN_GCC
+ 				    #include <bfd.h>
+-				    int main() { symbol_info t; return 0;}],
++				    ]],[[symbol_info t; return 0;]])],
+ 				AC_MSG_RESULT(no),
+-				AC_TRY_RUN([#define CONST const
++				AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++					    #define CONST const
+                                             #define IN_GCC
+ 					    #include <bfd.h>
+-					    int main() {symbol_info t; return 0;}],
++					    ]],[[symbol_info t; return 0;]])],
+ 					AC_MSG_RESULT(yes) 
+ 					AC_DEFINE(NEED_CONST),
+ 					AC_MSG_ERROR([cannot use bfd]),
+@@ -930,11 +936,12 @@
+ # BFD boolean syntax
+ #
  
--  # Have we seen a non-optional argument yet?
--  case $arg in
--  --help)
--    show_help=yes
--    ;;
-+  # Normalisation. If bindir is libdir, return empty string,
-+  # else relative path ending with a slash; either way, target
-+  # file name can be directly appended.
-+  if test ! -z "$func_relative_path_result"; then
-+    func_stripname './' '' "$func_relative_path_result/"
-+    func_relative_path_result=$func_stripname_result
-+  fi
-+}
+-	AC_MSG_CHECKING(for useable bfd_boolean)
+-	AC_TRY_RUN([#define IN_GCC
++	AC_MSG_CHECKING([for usable bfd_boolean])
++	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++		    #define IN_GCC
+ 		    #include <bfd.h>
+ 		    bfd_boolean foo() {return FALSE;}
+-		    int main() {return 0;}],
++		    ]],[[return 0;]])],
+ 		AC_MSG_RESULT(yes) 
+ 		AC_DEFINE(HAVE_BFD_BOOLEAN),
+ 		AC_MSG_RESULT(no),
+@@ -945,10 +952,11 @@
+ # bfd_link_info.output_bfd minimal configure change check
+ #
  
--  --version)
--    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
--    exit 0
-+# The name of this program:
-+func_dirname_and_basename "$progpath"
-+progname=$func_basename_result
-+
-+# Make sure we have an absolute path for reexecution:
-+case $progpath in
-+  [\\/]*|[A-Za-z]:\\*) ;;
-+  *[\\/]*)
-+     progdir=$func_dirname_result
-+     progdir=`cd "$progdir" && pwd`
-+     progpath="$progdir/$progname"
-+     ;;
-+  *)
-+     save_IFS="$IFS"
-+     IFS=:
-+     for progdir in $PATH; do
-+       IFS="$save_IFS"
-+       test -x "$progdir/$progname" && break
-+     done
-+     IFS="$save_IFS"
-+     test -n "$progdir" || progdir=`pwd`
-+     progpath="$progdir/$progname"
-+     ;;
-+esac
-+
-+# Sed substitution that helps us do robust quoting.  It backslashifies
-+# metacharacters that are still active within double-quoted strings.
-+Xsed="${SED}"' -e 1s/^X//'
-+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
-+
-+# Same as above, but do not quote variable references.
-+double_quote_subst='s/\(["`\\]\)/\\\1/g'
-+
-+# Sed substitution that turns a string into a regex matching for the
-+# string literally.
-+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
-+
-+# Sed substitution that converts a w32 file name or path
-+# which contains forward slashes, into one that contains
-+# (escaped) backslashes.  A very naive implementation.
-+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-+
-+# Re-`\' parameter expansions in output of double_quote_subst that were
-+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
-+# in input to double_quote_subst, that '$' was protected from expansion.
-+# Since each input `\' is now two `\'s, look for any number of runs of
-+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
-+bs='\\'
-+bs2='\\\\'
-+bs4='\\\\\\\\'
-+dollar='\$'
-+sed_double_backslash="\
-+  s/$bs4/&\\
-+/g
-+  s/^$bs2$dollar/$bs&/
-+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
-+  s/\n//g"
-+
-+# Standard options:
-+opt_dry_run=false
-+opt_help=false
-+opt_quiet=false
-+opt_verbose=false
-+opt_warning=:
-+
-+# func_echo arg...
-+# Echo program name prefixed message, along with the current mode
-+# name if it has been set yet.
-+func_echo ()
-+{
-+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
-+}
-+
-+# func_verbose arg...
-+# Echo program name prefixed message in verbose mode only.
-+func_verbose ()
-+{
-+    $opt_verbose && func_echo ${1+"$@"}
-+
-+    # A bug in bash halts the script if the last line of a function
-+    # fails when set -e is in force, so we need another command to
-+    # work around that:
-+    :
-+}
-+
-+# func_echo_all arg...
-+# Invoke $ECHO with all args, space-separated.
-+func_echo_all ()
-+{
-+    $ECHO "$*"
-+}
-+
-+# func_error arg...
-+# Echo program name prefixed message to standard error.
-+func_error ()
-+{
-+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
-+}
-+
-+# func_warning arg...
-+# Echo program name prefixed warning message to standard error.
-+func_warning ()
-+{
-+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
-+
-+    # bash bug again:
-+    :
-+}
-+
-+# func_fatal_error arg...
-+# Echo program name prefixed message to standard error, and exit.
-+func_fatal_error ()
-+{
-+    func_error ${1+"$@"}
-+    exit $EXIT_FAILURE
-+}
-+
-+# func_fatal_help arg...
-+# Echo program name prefixed message to standard error, followed by
-+# a help hint, and exit.
-+func_fatal_help ()
-+{
-+    func_error ${1+"$@"}
-+    func_fatal_error "$help"
-+}
-+help="Try \`$progname --help' for more information."  ## default
-+
-+
-+# func_grep expression filename
-+# Check whether EXPRESSION matches any line of FILENAME, without output.
-+func_grep ()
-+{
-+    $GREP "$1" "$2" >/dev/null 2>&1
-+}
-+
-+
-+# func_mkdir_p directory-path
-+# Make sure the entire path to DIRECTORY-PATH is available.
-+func_mkdir_p ()
-+{
-+    my_directory_path="$1"
-+    my_dir_list=
-+
-+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
-+
-+      # Protect directory names starting with `-'
-+      case $my_directory_path in
-+        -*) my_directory_path="./$my_directory_path" ;;
-+      esac
-+
-+      # While some portion of DIR does not yet exist...
-+      while test ! -d "$my_directory_path"; do
-+        # ...make a list in topmost first order.  Use a colon delimited
-+	# list incase some portion of path contains whitespace.
-+        my_dir_list="$my_directory_path:$my_dir_list"
-+
-+        # If the last portion added has no slash in it, the list is done
-+        case $my_directory_path in */*) ;; *) break ;; esac
-+
-+        # ...otherwise throw away the child directory and loop
-+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
-+      done
-+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
-+
-+      save_mkdir_p_IFS="$IFS"; IFS=':'
-+      for my_dir in $my_dir_list; do
-+	IFS="$save_mkdir_p_IFS"
-+        # mkdir can fail with a `File exist' error if two processes
-+        # try to create one of the directories concurrently.  Don't
-+        # stop in that case!
-+        $MKDIR "$my_dir" 2>/dev/null || :
-+      done
-+      IFS="$save_mkdir_p_IFS"
-+
-+      # Bail out if we (or some other process) failed to create a directory.
-+      test -d "$my_directory_path" || \
-+        func_fatal_error "Failed to create \`$1'"
-+    fi
-+}
-+
-+
-+# func_mktempdir [string]
-+# Make a temporary directory that won't clash with other running
-+# libtool processes, and avoids race conditions if possible.  If
-+# given, STRING is the basename for that directory.
-+func_mktempdir ()
-+{
-+    my_template="${TMPDIR-/tmp}/${1-$progname}"
-+
-+    if test "$opt_dry_run" = ":"; then
-+      # Return a directory name, but don't create it in dry-run mode
-+      my_tmpdir="${my_template}-$$"
-+    else
-+
-+      # If mktemp works, use that first and foremost
-+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-+
-+      if test ! -d "$my_tmpdir"; then
-+        # Failing that, at least try and use $RANDOM to avoid a race
-+        my_tmpdir="${my_template}-${RANDOM-0}$$"
-+
-+        save_mktempdir_umask=`umask`
-+        umask 0077
-+        $MKDIR "$my_tmpdir"
-+        umask $save_mktempdir_umask
-+      fi
-+
-+      # If we're not in dry-run mode, bomb out on failure
-+      test -d "$my_tmpdir" || \
-+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
-+    fi
-+
-+    $ECHO "$my_tmpdir"
-+}
-+
-+
-+# func_quote_for_eval arg
-+# Aesthetically quote ARG to be evaled later.
-+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
-+# is double-quoted, suitable for a subsequent eval, whereas
-+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
-+# which are still active within double quotes backslashified.
-+func_quote_for_eval ()
-+{
-+    case $1 in
-+      *[\\\`\"\$]*)
-+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
-+      *)
-+        func_quote_for_eval_unquoted_result="$1" ;;
-+    esac
-+
-+    case $func_quote_for_eval_unquoted_result in
-+      # Double-quote args containing shell metacharacters to delay
-+      # word splitting, command substitution and and variable
-+      # expansion for a subsequent eval.
-+      # Many Bourne shells cannot handle close brackets correctly
-+      # in scan sets, so we specify it separately.
-+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
-+        ;;
-+      *)
-+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
-+    esac
-+}
-+
-+
-+# func_quote_for_expand arg
-+# Aesthetically quote ARG to be evaled later; same as above,
-+# but do not quote variable references.
-+func_quote_for_expand ()
-+{
-+    case $1 in
-+      *[\\\`\"]*)
-+	my_arg=`$ECHO "$1" | $SED \
-+	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
-+      *)
-+        my_arg="$1" ;;
-+    esac
-+
-+    case $my_arg in
-+      # Double-quote args containing shell metacharacters to delay
-+      # word splitting and command substitution for a subsequent eval.
-+      # Many Bourne shells cannot handle close brackets correctly
-+      # in scan sets, so we specify it separately.
-+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
-+        my_arg="\"$my_arg\""
-+        ;;
-+    esac
-+
-+    func_quote_for_expand_result="$my_arg"
-+}
-+
-+
-+# func_show_eval cmd [fail_exp]
-+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
-+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
-+# is given, then evaluate it.
-+func_show_eval ()
-+{
-+    my_cmd="$1"
-+    my_fail_exp="${2-:}"
-+
-+    ${opt_silent-false} || {
-+      func_quote_for_expand "$my_cmd"
-+      eval "func_echo $func_quote_for_expand_result"
-+    }
-+
-+    if ${opt_dry_run-false}; then :; else
-+      eval "$my_cmd"
-+      my_status=$?
-+      if test "$my_status" -eq 0; then :; else
-+	eval "(exit $my_status); $my_fail_exp"
-+      fi
-+    fi
-+}
-+
-+
-+# func_show_eval_locale cmd [fail_exp]
-+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
-+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
-+# is given, then evaluate it.  Use the saved locale for evaluation.
-+func_show_eval_locale ()
-+{
-+    my_cmd="$1"
-+    my_fail_exp="${2-:}"
-+
-+    ${opt_silent-false} || {
-+      func_quote_for_expand "$my_cmd"
-+      eval "func_echo $func_quote_for_expand_result"
-+    }
-+
-+    if ${opt_dry_run-false}; then :; else
-+      eval "$lt_user_locale
-+	    $my_cmd"
-+      my_status=$?
-+      eval "$lt_safe_locale"
-+      if test "$my_status" -eq 0; then :; else
-+	eval "(exit $my_status); $my_fail_exp"
-+      fi
-+    fi
-+}
-+
-+# func_tr_sh
-+# Turn $1 into a string suitable for a shell variable name.
-+# Result is stored in $func_tr_sh_result.  All characters
-+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
-+# if $1 begins with a digit, a '_' is prepended as well.
-+func_tr_sh ()
-+{
-+  case $1 in
-+  [0-9]* | *[!a-zA-Z0-9_]*)
-+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
-     ;;
-+  * )
-+    func_tr_sh_result=$1
-+    ;;
-+  esac
-+}
-+
-+
-+# func_version
-+# Echo version message to standard output and exit.
-+func_version ()
-+{
-+    $opt_debug
-+
-+    $SED -n '/(C)/!b go
-+	:more
-+	/\./!{
-+	  N
-+	  s/\n# / /
-+	  b more
-+	}
-+	:go
-+	/^# '$PROGRAM' (GNU /,/# warranty; / {
-+        s/^# //
-+	s/^# *$//
-+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
-+        p
-+     }' < "$progpath"
-+     exit $?
-+}
-+
-+# func_usage
-+# Echo short help message to standard output and exit.
-+func_usage ()
-+{
-+    $opt_debug
-+
-+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
-+        s/^# //
-+	s/^# *$//
-+	s/\$progname/'$progname'/
-+	p
-+    }' < "$progpath"
-+    echo
-+    $ECHO "run \`$progname --help | more' for full usage"
-+    exit $?
-+}
-+
-+# func_help [NOEXIT]
-+# Echo long help message to standard output and exit,
-+# unless 'noexit' is passed as argument.
-+func_help ()
-+{
-+    $opt_debug
-+
-+    $SED -n '/^# Usage:/,/# Report bugs to/ {
-+	:print
-+        s/^# //
-+	s/^# *$//
-+	s*\$progname*'$progname'*
-+	s*\$host*'"$host"'*
-+	s*\$SHELL*'"$SHELL"'*
-+	s*\$LTCC*'"$LTCC"'*
-+	s*\$LTCFLAGS*'"$LTCFLAGS"'*
-+	s*\$LD*'"$LD"'*
-+	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-+	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-+	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
-+	p
-+	d
-+     }
-+     /^# .* home page:/b print
-+     /^# General help using/b print
-+     ' < "$progpath"
-+    ret=$?
-+    if test -z "$1"; then
-+      exit $ret
-+    fi
-+}
-+
-+# func_missing_arg argname
-+# Echo program name prefixed message to standard error and set global
-+# exit_cmd.
-+func_missing_arg ()
-+{
-+    $opt_debug
-+
-+    func_error "missing argument for $1."
-+    exit_cmd=exit
-+}
-+
-+
-+# func_split_short_opt shortopt
-+# Set func_split_short_opt_name and func_split_short_opt_arg shell
-+# variables after splitting SHORTOPT after the 2nd character.
-+func_split_short_opt ()
-+{
-+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
-+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
-+
-+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
-+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
-+} # func_split_short_opt may be replaced by extended shell implementation
-+
-+
-+# func_split_long_opt longopt
-+# Set func_split_long_opt_name and func_split_long_opt_arg shell
-+# variables after splitting LONGOPT at the `=' sign.
-+func_split_long_opt ()
-+{
-+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
-+    my_sed_long_arg='1s/^--[^=]*=//'
-+
-+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
-+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
-+} # func_split_long_opt may be replaced by extended shell implementation
-+
-+exit_cmd=:
-+
-+
-+
-+
-+
-+magic="%%%MAGIC variable%%%"
-+magic_exe="%%%MAGIC EXE variable%%%"
-+
-+# Global variables.
-+nonopt=
-+preserve_args=
-+lo2o="s/\\.lo\$/.${objext}/"
-+o2lo="s/\\.${objext}\$/.lo/"
-+extracted_archives=
-+extracted_serial=0
-+
-+# If this variable is set in any of the actions, the command in it
-+# will be execed at the end.  This prevents here-documents from being
-+# left over by shells.
-+exec_cmd=
-+
-+# func_append var value
-+# Append VALUE to the end of shell variable VAR.
-+func_append ()
-+{
-+    eval "${1}=\$${1}\${2}"
-+} # func_append may be replaced by extended shell implementation
-+
-+# func_append_quoted var value
-+# Quote VALUE and append to the end of shell variable VAR, separated
-+# by a space.
-+func_append_quoted ()
-+{
-+    func_quote_for_eval "${2}"
-+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
-+} # func_append_quoted may be replaced by extended shell implementation
-+
-+
-+# func_arith arithmetic-term...
-+func_arith ()
-+{
-+    func_arith_result=`expr "${@}"`
-+} # func_arith may be replaced by extended shell implementation
-+
-+
-+# func_len string
-+# STRING may not start with a hyphen.
-+func_len ()
-+{
-+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
-+} # func_len may be replaced by extended shell implementation
-+
-+
-+# func_lo2o object
-+func_lo2o ()
-+{
-+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-+} # func_lo2o may be replaced by extended shell implementation
-+
-+
-+# func_xform libobj-or-source
-+func_xform ()
-+{
-+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-+} # func_xform may be replaced by extended shell implementation
-+
-+
-+# func_fatal_configuration arg...
-+# Echo program name prefixed message to standard error, followed by
-+# a configuration failure hint, and exit.
-+func_fatal_configuration ()
-+{
-+    func_error ${1+"$@"}
-+    func_error "See the $PACKAGE documentation for more information."
-+    func_fatal_error "Fatal configuration error."
-+}
-+
-+
-+# func_config
-+# Display the configuration for all the tags in this script.
-+func_config ()
-+{
-+    re_begincf='^# ### BEGIN LIBTOOL'
-+    re_endcf='^# ### END LIBTOOL'
-+
-+    # Default configuration.
-+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
- 
--  --config)
--    sed -n -e '/^### BEGIN LIBTOOL CONFIG/,/^### END LIBTOOL CONFIG/p' < "$0"
-     # Now print the configurations for the tags.
-     for tagname in $taglist; do
--      sed -n -e "/^### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
-+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
-     done
--    exit 0
--    ;;
- 
--  --debug)
--    echo "$progname: enabling shell trace mode"
--    set -x
--    ;;
--
--  --dry-run | -n)
--    run=:
--    ;;
-+    exit $?
-+}
- 
--  --features)
-+# func_features
-+# Display the features supported by this script.
-+func_features ()
-+{
-     echo "host: $host"
-     if test "$build_libtool_libs" = yes; then
-       echo "enable shared libraries"
-@@ -205,349 +934,1184 @@
-     else
-       echo "disable static libraries"
-     fi
--    exit 0
--    ;;
- 
--  --finish) mode="finish" ;;
-+    exit $?
-+}
- 
--  --mode) prevopt="--mode" prev=mode ;;
--  --mode=*) mode="$optarg" ;;
-+# func_enable_tag tagname
-+# Verify that TAGNAME is valid, and either flag an error and exit, or
-+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
-+# variable here.
-+func_enable_tag ()
-+{
-+  # Global variable:
-+  tagname="$1"
- 
--  --quiet | --silent)
--    show=:
--    ;;
-+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
-+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
-+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
- 
--  --tag) prevopt="--tag" prev=tag ;;
--  --tag=*)
--    set tag "$optarg" ${1+"$@"}
-+  # Validate tagname.
-+  case $tagname in
-+    *[!-_A-Za-z0-9,/]*)
-+      func_fatal_error "invalid tag name: $tagname"
-+      ;;
-+  esac
-+
-+  # Don't test for the "default" C tag, as we know it's
-+  # there but not specially marked.
-+  case $tagname in
-+    CC) ;;
-+    *)
-+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
-+	taglist="$taglist $tagname"
-+
-+	# Evaluate the configuration.  Be careful to quote the path
-+	# and the sed script, to avoid splitting on whitespace, but
-+	# also don't use non-portable quotes within backquotes within
-+	# quotes we have to do it in 2 steps:
-+	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
-+	eval "$extractedcf"
-+      else
-+	func_error "ignoring unknown tag $tagname"
-+      fi
-+      ;;
-+  esac
-+}
-+
-+# func_check_version_match
-+# Ensure that we are using m4 macros, and libtool script from the same
-+# release of libtool.
-+func_check_version_match ()
-+{
-+  if test "$package_revision" != "$macro_revision"; then
-+    if test "$VERSION" != "$macro_version"; then
-+      if test -z "$macro_version"; then
-+        cat >&2 <<_LT_EOF
-+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-+$progname: definition of this LT_INIT comes from an older release.
-+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-+$progname: and run autoconf again.
-+_LT_EOF
-+      else
-+        cat >&2 <<_LT_EOF
-+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-+$progname: and run autoconf again.
-+_LT_EOF
-+      fi
-+    else
-+      cat >&2 <<_LT_EOF
-+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-+$progname: of $PACKAGE $VERSION and run autoconf again.
-+_LT_EOF
-+    fi
-+
-+    exit $EXIT_MISMATCH
-+  fi
-+}
-+
-+
-+# Shorthand for --mode=foo, only valid as the first argument
-+case $1 in
-+clean|clea|cle|cl)
-+  shift; set dummy --mode clean ${1+"$@"}; shift
-+  ;;
-+compile|compil|compi|comp|com|co|c)
-+  shift; set dummy --mode compile ${1+"$@"}; shift
-+  ;;
-+execute|execut|execu|exec|exe|ex|e)
-+  shift; set dummy --mode execute ${1+"$@"}; shift
-+  ;;
-+finish|finis|fini|fin|fi|f)
-+  shift; set dummy --mode finish ${1+"$@"}; shift
-+  ;;
-+install|instal|insta|inst|ins|in|i)
-+  shift; set dummy --mode install ${1+"$@"}; shift
-+  ;;
-+link|lin|li|l)
-+  shift; set dummy --mode link ${1+"$@"}; shift
-+  ;;
-+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-+  shift; set dummy --mode uninstall ${1+"$@"}; shift
-+  ;;
-+esac
-+
-+
-+
-+# Option defaults:
-+opt_debug=:
-+opt_dry_run=false
-+opt_config=false
-+opt_preserve_dup_deps=false
-+opt_features=false
-+opt_finish=false
-+opt_help=false
-+opt_help_all=false
-+opt_silent=:
-+opt_verbose=:
-+opt_silent=false
-+opt_verbose=false
-+
-+
-+# Parse options once, thoroughly.  This comes as soon as possible in the
-+# script to make things like `--version' happen as quickly as we can.
-+{
-+  # this just eases exit handling
-+  while test $# -gt 0; do
-+    opt="$1"
-     shift
--    prev=tag
--    ;;
-+    case $opt in
-+      --debug|-x)	opt_debug='set -x'
-+			func_echo "enabling shell trace mode"
-+			$opt_debug
-+			;;
-+      --dry-run|--dryrun|-n)
-+			opt_dry_run=:
-+			;;
-+      --config)
-+			opt_config=:
-+func_config
-+			;;
-+      --dlopen|-dlopen)
-+			optarg="$1"
-+			opt_dlopen="${opt_dlopen+$opt_dlopen
-+}$optarg"
-+			shift
-+			;;
-+      --preserve-dup-deps)
-+			opt_preserve_dup_deps=:
-+			;;
-+      --features)
-+			opt_features=:
-+func_features
-+			;;
-+      --finish)
-+			opt_finish=:
-+set dummy --mode finish ${1+"$@"}; shift
-+			;;
-+      --help)
-+			opt_help=:
-+			;;
-+      --help-all)
-+			opt_help_all=:
-+opt_help=': help-all'
-+			;;
-+      --mode)
-+			test $# = 0 && func_missing_arg $opt && break
-+			optarg="$1"
-+			opt_mode="$optarg"
-+case $optarg in
-+  # Valid mode arguments:
-+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
- 
--  -dlopen)
--    prevopt="-dlopen"
--    prev=execute_dlfiles
--    ;;
-+  # Catch anything else as an error
-+  *) func_error "invalid argument for $opt"
-+     exit_cmd=exit
-+     break
-+     ;;
-+esac
-+			shift
-+			;;
-+      --no-silent|--no-quiet)
-+			opt_silent=false
-+func_append preserve_args " $opt"
-+			;;
-+      --no-verbose)
-+			opt_verbose=false
-+func_append preserve_args " $opt"
-+			;;
-+      --silent|--quiet)
-+			opt_silent=:
-+func_append preserve_args " $opt"
-+        opt_verbose=false
-+			;;
-+      --verbose|-v)
-+			opt_verbose=:
-+func_append preserve_args " $opt"
-+opt_silent=false
-+			;;
-+      --tag)
-+			test $# = 0 && func_missing_arg $opt && break
-+			optarg="$1"
-+			opt_tag="$optarg"
-+func_append preserve_args " $opt $optarg"
-+func_enable_tag "$optarg"
-+			shift
-+			;;
- 
--  -*)
--    $echo "$modename: unrecognized option \`$arg'" 1>&2
--    $echo "$help" 1>&2
--    exit 1
-+      -\?|-h)		func_usage				;;
-+      --help)		func_help				;;
-+      --version)	func_version				;;
-+
-+      # Separate optargs to long options:
-+      --*=*)
-+			func_split_long_opt "$opt"
-+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
-+			shift
-+			;;
-+
-+      # Separate non-argument short options:
-+      -\?*|-h*|-n*|-v*)
-+			func_split_short_opt "$opt"
-+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
-+			shift
-+			;;
-+
-+      --)		break					;;
-+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
-+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
-+    esac
-+  done
-+
-+  # Validate options:
-+
-+  # save first non-option argument
-+  if test "$#" -gt 0; then
-+    nonopt="$opt"
-+    shift
-+  fi
-+
-+  # preserve --debug
-+  test "$opt_debug" = : || func_append preserve_args " --debug"
-+
-+  case $host in
-+    *cygwin* | *mingw* | *pw32* | *cegcc*)
-+      # don't eliminate duplications in $postdeps and $predeps
-+      opt_duplicate_compiler_generated_deps=:
-+      ;;
-+    *)
-+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
-+      ;;
-+  esac
-+
-+  $opt_help || {
-+    # Sanity checks first:
-+    func_check_version_match
-+
-+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-+      func_fatal_configuration "not configured to build any kind of library"
-+    fi
-+
-+    # Darwin sucks
-+    eval std_shrext=\"$shrext_cmds\"
-+
-+    # Only execute mode is allowed to have -dlopen flags.
-+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
-+      func_error "unrecognized option \`-dlopen'"
-+      $ECHO "$help" 1>&2
-+      exit $EXIT_FAILURE
-+    fi
-+
-+    # Change the help message to a mode-specific one.
-+    generic_help="$help"
-+    help="Try \`$progname --help --mode=$opt_mode' for more information."
-+  }
-+
-+
-+  # Bail if the options were screwed
-+  $exit_cmd $EXIT_FAILURE
-+}
-+
-+
-+
-+
-+## ----------- ##
-+##    Main.    ##
-+## ----------- ##
-+
-+# func_lalib_p file
-+# True iff FILE is a libtool `.la' library or `.lo' object file.
-+# This function is only a basic sanity check; it will hardly flush out
-+# determined imposters.
-+func_lalib_p ()
-+{
-+    test -f "$1" &&
-+      $SED -e 4q "$1" 2>/dev/null \
-+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
-+}
-+
-+# func_lalib_unsafe_p file
-+# True iff FILE is a libtool `.la' library or `.lo' object file.
-+# This function implements the same check as func_lalib_p without
-+# resorting to external programs.  To this end, it redirects stdin and
-+# closes it afterwards, without saving the original file descriptor.
-+# As a safety measure, use it only where a negative result would be
-+# fatal anyway.  Works if `file' does not exist.
-+func_lalib_unsafe_p ()
-+{
-+    lalib_p=no
-+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
-+	for lalib_p_l in 1 2 3 4
-+	do
-+	    read lalib_p_line
-+	    case "$lalib_p_line" in
-+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
-+	    esac
-+	done
-+	exec 0<&5 5<&-
-+    fi
-+    test "$lalib_p" = yes
-+}
-+
-+# func_ltwrapper_script_p file
-+# True iff FILE is a libtool wrapper script
-+# This function is only a basic sanity check; it will hardly flush out
-+# determined imposters.
-+func_ltwrapper_script_p ()
-+{
-+    func_lalib_p "$1"
-+}
-+
-+# func_ltwrapper_executable_p file
-+# True iff FILE is a libtool wrapper executable
-+# This function is only a basic sanity check; it will hardly flush out
-+# determined imposters.
-+func_ltwrapper_executable_p ()
-+{
-+    func_ltwrapper_exec_suffix=
-+    case $1 in
-+    *.exe) ;;
-+    *) func_ltwrapper_exec_suffix=.exe ;;
-+    esac
-+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
-+}
-+
-+# func_ltwrapper_scriptname file
-+# Assumes file is an ltwrapper_executable
-+# uses $file to determine the appropriate filename for a
-+# temporary ltwrapper_script.
-+func_ltwrapper_scriptname ()
-+{
-+    func_dirname_and_basename "$1" "" "."
-+    func_stripname '' '.exe' "$func_basename_result"
-+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-+}
-+
-+# func_ltwrapper_p file
-+# True iff FILE is a libtool wrapper script or wrapper executable
-+# This function is only a basic sanity check; it will hardly flush out
-+# determined imposters.
-+func_ltwrapper_p ()
-+{
-+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
-+}
-+
-+
-+# func_execute_cmds commands fail_cmd
-+# Execute tilde-delimited COMMANDS.
-+# If FAIL_CMD is given, eval that upon failure.
-+# FAIL_CMD may read-access the current command in variable CMD!
-+func_execute_cmds ()
-+{
-+    $opt_debug
-+    save_ifs=$IFS; IFS='~'
-+    for cmd in $1; do
-+      IFS=$save_ifs
-+      eval cmd=\"$cmd\"
-+      func_show_eval "$cmd" "${2-:}"
-+    done
-+    IFS=$save_ifs
-+}
-+
-+
-+# func_source file
-+# Source FILE, adding directory component if necessary.
-+# Note that it is not necessary on cygwin/mingw to append a dot to
-+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
-+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
-+# `FILE.' does not work on cygwin managed mounts.
-+func_source ()
-+{
-+    $opt_debug
-+    case $1 in
-+    */* | *\\*)	. "$1" ;;
-+    *)		. "./$1" ;;
-+    esac
-+}
-+
-+
-+# func_resolve_sysroot PATH
-+# Replace a leading = in PATH with a sysroot.  Store the result into
-+# func_resolve_sysroot_result
-+func_resolve_sysroot ()
-+{
-+  func_resolve_sysroot_result=$1
-+  case $func_resolve_sysroot_result in
-+  =*)
-+    func_stripname '=' '' "$func_resolve_sysroot_result"
-+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
-     ;;
-+  esac
-+}
- 
-+# func_replace_sysroot PATH
-+# If PATH begins with the sysroot, replace it with = and
-+# store the result into func_replace_sysroot_result.
-+func_replace_sysroot ()
-+{
-+  case "$lt_sysroot:$1" in
-+  ?*:"$lt_sysroot"*)
-+    func_stripname "$lt_sysroot" '' "$1"
-+    func_replace_sysroot_result="=$func_stripname_result"
-+    ;;
-   *)
--    nonopt="$arg"
--    break
-+    # Including no sysroot.
-+    func_replace_sysroot_result=$1
-     ;;
-   esac
--done
-+}
- 
--if test -n "$prevopt"; then
--  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
--  $echo "$help" 1>&2
--  exit 1
--fi
-+# func_infer_tag arg
-+# Infer tagged configuration to use if any are available and
-+# if one wasn't chosen via the "--tag" command line option.
-+# Only attempt this if the compiler in the base compile
-+# command doesn't match the default compiler.
-+# arg is usually of the form 'gcc ...'
-+func_infer_tag ()
-+{
-+    $opt_debug
-+    if test -n "$available_tags" && test -z "$tagname"; then
-+      CC_quoted=
-+      for arg in $CC; do
-+	func_append_quoted CC_quoted "$arg"
-+      done
-+      CC_expanded=`func_echo_all $CC`
-+      CC_quoted_expanded=`func_echo_all $CC_quoted`
-+      case $@ in
-+      # Blanks in the command may have been stripped by the calling shell,
-+      # but not from the CC environment variable when configure was run.
-+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
-+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
-+      # Blanks at the start of $base_compile will cause this to fail
-+      # if we don't check for them as well.
-+      *)
-+	for z in $available_tags; do
-+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
-+	    # Evaluate the configuration.
-+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
-+	    CC_quoted=
-+	    for arg in $CC; do
-+	      # Double-quote args containing other shell metacharacters.
-+	      func_append_quoted CC_quoted "$arg"
-+	    done
-+	    CC_expanded=`func_echo_all $CC`
-+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
-+	    case "$@ " in
-+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
-+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
-+	      # The compiler in the base compile command matches
-+	      # the one in the tagged configuration.
-+	      # Assume this is the tagged configuration we want.
-+	      tagname=$z
-+	      break
-+	      ;;
-+	    esac
-+	  fi
-+	done
-+	# If $tagname still isn't set, then no tagged configuration
-+	# was found and let the user know that the "--tag" command
-+	# line option must be used.
-+	if test -z "$tagname"; then
-+	  func_echo "unable to infer tagged configuration"
-+	  func_fatal_error "specify a tag with \`--tag'"
-+#	else
-+#	  func_verbose "using $tagname tagged configuration"
-+	fi
-+	;;
-+      esac
-+    fi
-+}
- 
--# If this variable is set in any of the actions, the command in it
--# will be execed at the end.  This prevents here-documents from being
--# left over by shells.
--exec_cmd=
- 
--if test -z "$show_help"; then
- 
--  # Infer the operation mode.
--  if test -z "$mode"; then
--    case $nonopt in
--    *cc | *++ | gcc* | *-gcc*)
--      mode=link
--      for arg
--      do
--	case $arg in
--	-c)
--	   mode=compile
--	   break
--	   ;;
--	esac
--      done
--      ;;
--    *db | *dbx | *strace | *truss)
--      mode=execute
--      ;;
--    *install*|cp|mv)
--      mode=install
--      ;;
--    *rm)
--      mode=uninstall
--      ;;
--    *)
--      # If we have no mode, but dlfiles were specified, then do execute mode.
--      test -n "$execute_dlfiles" && mode=execute
-+# func_write_libtool_object output_name pic_name nonpic_name
-+# Create a libtool object file (analogous to a ".la" file),
-+# but don't create it if we're doing a dry run.
-+func_write_libtool_object ()
-+{
-+    write_libobj=${1}
-+    if test "$build_libtool_libs" = yes; then
-+      write_lobj=\'${2}\'
-+    else
-+      write_lobj=none
-+    fi
- 
--      # Just use the default operation mode.
--      if test -z "$mode"; then
--	if test -n "$nonopt"; then
--	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
--	else
--	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
--	fi
-+    if test "$build_old_libs" = yes; then
-+      write_oldobj=\'${3}\'
-+    else
-+      write_oldobj=none
-+    fi
-+
-+    $opt_dry_run || {
-+      cat >${write_libobj}T <<EOF
-+# $write_libobj - a libtool object file
-+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-+#
-+# Please DO NOT delete this file!
-+# It is necessary for linking the library.
-+
-+# Name of the PIC object.
-+pic_object=$write_lobj
-+
-+# Name of the non-PIC object
-+non_pic_object=$write_oldobj
-+
-+EOF
-+      $MV "${write_libobj}T" "${write_libobj}"
-+    }
-+}
-+
-+
-+##################################################
-+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
-+##################################################
-+
-+# func_convert_core_file_wine_to_w32 ARG
-+# Helper function used by file name conversion functions when $build is *nix,
-+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
-+# correctly configured wine environment available, with the winepath program
-+# in $build's $PATH.
-+#
-+# ARG is the $build file name to be converted to w32 format.
-+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
-+# be empty on error (or when ARG is empty)
-+func_convert_core_file_wine_to_w32 ()
-+{
-+  $opt_debug
-+  func_convert_core_file_wine_to_w32_result="$1"
-+  if test -n "$1"; then
-+    # Unfortunately, winepath does not exit with a non-zero error code, so we
-+    # are forced to check the contents of stdout. On the other hand, if the
-+    # command is not found, the shell will set an exit code of 127 and print
-+    # *an error message* to stdout. So we must check for both error code of
-+    # zero AND non-empty stdout, which explains the odd construction:
-+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
-+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
-+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
-+        $SED -e "$lt_sed_naive_backslashify"`
-+    else
-+      func_convert_core_file_wine_to_w32_result=
-+    fi
-+  fi
-+}
-+# end: func_convert_core_file_wine_to_w32
-+
-+
-+# func_convert_core_path_wine_to_w32 ARG
-+# Helper function used by path conversion functions when $build is *nix, and
-+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
-+# configured wine environment available, with the winepath program in $build's
-+# $PATH. Assumes ARG has no leading or trailing path separator characters.
-+#
-+# ARG is path to be converted from $build format to win32.
-+# Result is available in $func_convert_core_path_wine_to_w32_result.
-+# Unconvertible file (directory) names in ARG are skipped; if no directory names
-+# are convertible, then the result may be empty.
-+func_convert_core_path_wine_to_w32 ()
-+{
-+  $opt_debug
-+  # unfortunately, winepath doesn't convert paths, only file names
-+  func_convert_core_path_wine_to_w32_result=""
-+  if test -n "$1"; then
-+    oldIFS=$IFS
-+    IFS=:
-+    for func_convert_core_path_wine_to_w32_f in $1; do
-+      IFS=$oldIFS
-+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
-+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
-+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
-+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
-+        else
-+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
-+        fi
-       fi
-+    done
-+    IFS=$oldIFS
-+  fi
-+}
-+# end: func_convert_core_path_wine_to_w32
-+
-+
-+# func_cygpath ARGS...
-+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
-+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
-+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
-+# (2), returns the Cygwin file name or path in func_cygpath_result (input
-+# file name or path is assumed to be in w32 format, as previously converted
-+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
-+# or path in func_cygpath_result (input file name or path is assumed to be in
-+# Cygwin format). Returns an empty string on error.
-+#
-+# ARGS are passed to cygpath, with the last one being the file name or path to
-+# be converted.
-+#
-+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
-+# environment variable; do not put it in $PATH.
-+func_cygpath ()
-+{
-+  $opt_debug
-+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
-+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
-+    if test "$?" -ne 0; then
-+      # on failure, ensure result is empty
-+      func_cygpath_result=
-+    fi
-+  else
-+    func_cygpath_result=
-+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
-+  fi
-+}
-+#end: func_cygpath
-+
-+
-+# func_convert_core_msys_to_w32 ARG
-+# Convert file name or path ARG from MSYS format to w32 format.  Return
-+# result in func_convert_core_msys_to_w32_result.
-+func_convert_core_msys_to_w32 ()
-+{
-+  $opt_debug
-+  # awkward: cmd appends spaces to result
-+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
-+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
-+}
-+#end: func_convert_core_msys_to_w32
-+
-+
-+# func_convert_file_check ARG1 ARG2
-+# Verify that ARG1 (a file name in $build format) was converted to $host
-+# format in ARG2. Otherwise, emit an error message, but continue (resetting
-+# func_to_host_file_result to ARG1).
-+func_convert_file_check ()
-+{
-+  $opt_debug
-+  if test -z "$2" && test -n "$1" ; then
-+    func_error "Could not determine host file name corresponding to"
-+    func_error "  \`$1'"
-+    func_error "Continuing, but uninstalled executables may not work."
-+    # Fallback:
-+    func_to_host_file_result="$1"
-+  fi
-+}
-+# end func_convert_file_check
-+
-+
-+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
-+# Verify that FROM_PATH (a path in $build format) was converted to $host
-+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
-+# func_to_host_file_result to a simplistic fallback value (see below).
-+func_convert_path_check ()
-+{
-+  $opt_debug
-+  if test -z "$4" && test -n "$3"; then
-+    func_error "Could not determine the host path corresponding to"
-+    func_error "  \`$3'"
-+    func_error "Continuing, but uninstalled executables may not work."
-+    # Fallback.  This is a deliberately simplistic "conversion" and
-+    # should not be "improved".  See libtool.info.
-+    if test "x$1" != "x$2"; then
-+      lt_replace_pathsep_chars="s|$1|$2|g"
-+      func_to_host_path_result=`echo "$3" |
-+        $SED -e "$lt_replace_pathsep_chars"`
-+    else
-+      func_to_host_path_result="$3"
-+    fi
-+  fi
-+}
-+# end func_convert_path_check
-+
-+
-+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
-+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
-+# and appending REPL if ORIG matches BACKPAT.
-+func_convert_path_front_back_pathsep ()
-+{
-+  $opt_debug
-+  case $4 in
-+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
-+    ;;
-+  esac
-+  case $4 in
-+  $2 ) func_append func_to_host_path_result "$3"
-+    ;;
-+  esac
-+}
-+# end func_convert_path_front_back_pathsep
-+
-+
-+##################################################
-+# $build to $host FILE NAME CONVERSION FUNCTIONS #
-+##################################################
-+# invoked via `$to_host_file_cmd ARG'
-+#
-+# In each case, ARG is the path to be converted from $build to $host format.
-+# Result will be available in $func_to_host_file_result.
-+
-+
-+# func_to_host_file ARG
-+# Converts the file name ARG from $build format to $host format. Return result
-+# in func_to_host_file_result.
-+func_to_host_file ()
-+{
-+  $opt_debug
-+  $to_host_file_cmd "$1"
-+}
-+# end func_to_host_file
-+
-+
-+# func_to_tool_file ARG LAZY
-+# converts the file name ARG from $build format to toolchain format. Return
-+# result in func_to_tool_file_result.  If the conversion in use is listed
-+# in (the comma separated) LAZY, no conversion takes place.
-+func_to_tool_file ()
-+{
-+  $opt_debug
-+  case ,$2, in
-+    *,"$to_tool_file_cmd",*)
-+      func_to_tool_file_result=$1
-       ;;
--    esac
-+    *)
-+      $to_tool_file_cmd "$1"
-+      func_to_tool_file_result=$func_to_host_file_result
-+      ;;
-+  esac
-+}
-+# end func_to_tool_file
-+
-+
-+# func_convert_file_noop ARG
-+# Copy ARG to func_to_host_file_result.
-+func_convert_file_noop ()
-+{
-+  func_to_host_file_result="$1"
-+}
-+# end func_convert_file_noop
-+
-+
-+# func_convert_file_msys_to_w32 ARG
-+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
-+# conversion to w32 is not available inside the cwrapper.  Returns result in
-+# func_to_host_file_result.
-+func_convert_file_msys_to_w32 ()
-+{
-+  $opt_debug
-+  func_to_host_file_result="$1"
-+  if test -n "$1"; then
-+    func_convert_core_msys_to_w32 "$1"
-+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
-   fi
-+  func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_msys_to_w32
- 
--  # Only execute mode is allowed to have -dlopen flags.
--  if test -n "$execute_dlfiles" && test "$mode" != execute; then
--    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
--    $echo "$help" 1>&2
--    exit 1
-+
-+# func_convert_file_cygwin_to_w32 ARG
-+# Convert file name ARG from Cygwin to w32 format.  Returns result in
-+# func_to_host_file_result.
-+func_convert_file_cygwin_to_w32 ()
-+{
-+  $opt_debug
-+  func_to_host_file_result="$1"
-+  if test -n "$1"; then
-+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
-+    # LT_CYGPATH in this case.
-+    func_to_host_file_result=`cygpath -m "$1"`
-   fi
-+  func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_cygwin_to_w32
- 
--  # Change the help message to a mode-specific one.
--  generic_help="$help"
--  help="Try \`$modename --help --mode=$mode' for more information."
- 
--  # These modes are in order of execution frequency so that they run quickly.
--  case $mode in
--  # libtool compile mode
--  compile)
--    modename="$modename: compile"
--    # Get the compilation command and the source file.
--    base_compile=
--    prev=
--    lastarg=
--    srcfile="$nonopt"
--    suppress_output=
-+# func_convert_file_nix_to_w32 ARG
-+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
-+# and a working winepath. Returns result in func_to_host_file_result.
-+func_convert_file_nix_to_w32 ()
-+{
-+  $opt_debug
-+  func_to_host_file_result="$1"
-+  if test -n "$1"; then
-+    func_convert_core_file_wine_to_w32 "$1"
-+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
-+  fi
-+  func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_nix_to_w32
- 
--    user_target=no
--    for arg
--    do
--      case $prev in
--      "") ;;
--      xcompiler)
--	# Aesthetically quote the previous argument.
--	prev=
--	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- 
--	case $arg in
--	# Double-quote args containing other shell metacharacters.
--	# Many Bourne shells cannot handle close brackets correctly
--	# in scan sets, so we specify it separately.
--	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	  arg="\"$arg\""
--	  ;;
--	esac
-+# func_convert_file_msys_to_cygwin ARG
-+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
-+# Returns result in func_to_host_file_result.
-+func_convert_file_msys_to_cygwin ()
-+{
-+  $opt_debug
-+  func_to_host_file_result="$1"
-+  if test -n "$1"; then
-+    func_convert_core_msys_to_w32 "$1"
-+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
-+    func_to_host_file_result="$func_cygpath_result"
-+  fi
-+  func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_msys_to_cygwin
- 
--	# Add the previous argument to base_compile.
--	if test -z "$base_compile"; then
--	  base_compile="$lastarg"
--	else
--	  base_compile="$base_compile $lastarg"
--	fi
--	continue
--	;;
--      esac
- 
--      # Accept any command-line options.
--      case $arg in
--      -o)
--	if test "$user_target" != "no"; then
--	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
--	  exit 1
--	fi
--	user_target=next
--	;;
-+# func_convert_file_nix_to_cygwin ARG
-+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
-+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
-+# in func_to_host_file_result.
-+func_convert_file_nix_to_cygwin ()
-+{
-+  $opt_debug
-+  func_to_host_file_result="$1"
-+  if test -n "$1"; then
-+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
-+    func_convert_core_file_wine_to_w32 "$1"
-+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
-+    func_to_host_file_result="$func_cygpath_result"
-+  fi
-+  func_convert_file_check "$1" "$func_to_host_file_result"
-+}
-+# end func_convert_file_nix_to_cygwin
- 
--      -static)
--	build_old_libs=yes
--	continue
--	;;
- 
--      -prefer-pic)
--	pic_mode=yes
--	continue
--	;;
-+#############################################
-+# $build to $host PATH CONVERSION FUNCTIONS #
-+#############################################
-+# invoked via `$to_host_path_cmd ARG'
-+#
-+# In each case, ARG is the path to be converted from $build to $host format.
-+# The result will be available in $func_to_host_path_result.
-+#
-+# Path separators are also converted from $build format to $host format.  If
-+# ARG begins or ends with a path separator character, it is preserved (but
-+# converted to $host format) on output.
-+#
-+# All path conversion functions are named using the following convention:
-+#   file name conversion function    : func_convert_file_X_to_Y ()
-+#   path conversion function         : func_convert_path_X_to_Y ()
-+# where, for any given $build/$host combination the 'X_to_Y' value is the
-+# same.  If conversion functions are added for new $build/$host combinations,
-+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
-+# will break.
- 
--      -prefer-non-pic)
--	pic_mode=no
--	continue
--	;;
- 
--      -Xcompiler)
--	prev=xcompiler
--	continue
--	;;
-+# func_init_to_host_path_cmd
-+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
-+# appropriate value, based on the value of $to_host_file_cmd.
-+to_host_path_cmd=
-+func_init_to_host_path_cmd ()
-+{
-+  $opt_debug
-+  if test -z "$to_host_path_cmd"; then
-+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
-+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
-+  fi
-+}
- 
--      -Wc,*)
--	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
--	lastarg=
--	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
--	for arg in $args; do
--	  IFS="$save_ifs"
- 
--	  # Double-quote args containing other shell metacharacters.
--	  # Many Bourne shells cannot handle close brackets correctly
--	  # in scan sets, so we specify it separately.
--	  case $arg in
--	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	    arg="\"$arg\""
--	    ;;
--	  esac
--	  lastarg="$lastarg $arg"
--	done
--	IFS="$save_ifs"
--	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-+# func_to_host_path ARG
-+# Converts the path ARG from $build format to $host format. Return result
-+# in func_to_host_path_result.
-+func_to_host_path ()
-+{
-+  $opt_debug
-+  func_init_to_host_path_cmd
-+  $to_host_path_cmd "$1"
-+}
-+# end func_to_host_path
- 
--	# Add the arguments to base_compile.
--	if test -z "$base_compile"; then
--	  base_compile="$lastarg"
--	else
--	  base_compile="$base_compile $lastarg"
--	fi
--	continue
--	;;
--      esac
- 
--      case $user_target in
--      next)
--	# The next one is the -o target name
--	user_target=yes
--	continue
-+# func_convert_path_noop ARG
-+# Copy ARG to func_to_host_path_result.
-+func_convert_path_noop ()
-+{
-+  func_to_host_path_result="$1"
-+}
-+# end func_convert_path_noop
-+
-+
-+# func_convert_path_msys_to_w32 ARG
-+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
-+# conversion to w32 is not available inside the cwrapper.  Returns result in
-+# func_to_host_path_result.
-+func_convert_path_msys_to_w32 ()
-+{
-+  $opt_debug
-+  func_to_host_path_result="$1"
-+  if test -n "$1"; then
-+    # Remove leading and trailing path separator characters from ARG.  MSYS
-+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
-+    # and winepath ignores them completely.
-+    func_stripname : : "$1"
-+    func_to_host_path_tmp1=$func_stripname_result
-+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
-+    func_convert_path_check : ";" \
-+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-+  fi
-+}
-+# end func_convert_path_msys_to_w32
-+
-+
-+# func_convert_path_cygwin_to_w32 ARG
-+# Convert path ARG from Cygwin to w32 format.  Returns result in
-+# func_to_host_file_result.
-+func_convert_path_cygwin_to_w32 ()
-+{
-+  $opt_debug
-+  func_to_host_path_result="$1"
-+  if test -n "$1"; then
-+    # See func_convert_path_msys_to_w32:
-+    func_stripname : : "$1"
-+    func_to_host_path_tmp1=$func_stripname_result
-+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
-+    func_convert_path_check : ";" \
-+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-+  fi
-+}
-+# end func_convert_path_cygwin_to_w32
-+
-+
-+# func_convert_path_nix_to_w32 ARG
-+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
-+# a working winepath.  Returns result in func_to_host_file_result.
-+func_convert_path_nix_to_w32 ()
-+{
-+  $opt_debug
-+  func_to_host_path_result="$1"
-+  if test -n "$1"; then
-+    # See func_convert_path_msys_to_w32:
-+    func_stripname : : "$1"
-+    func_to_host_path_tmp1=$func_stripname_result
-+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
-+    func_convert_path_check : ";" \
-+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
-+  fi
-+}
-+# end func_convert_path_nix_to_w32
-+
-+
-+# func_convert_path_msys_to_cygwin ARG
-+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
-+# Returns result in func_to_host_file_result.
-+func_convert_path_msys_to_cygwin ()
-+{
-+  $opt_debug
-+  func_to_host_path_result="$1"
-+  if test -n "$1"; then
-+    # See func_convert_path_msys_to_w32:
-+    func_stripname : : "$1"
-+    func_to_host_path_tmp1=$func_stripname_result
-+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
-+    func_to_host_path_result="$func_cygpath_result"
-+    func_convert_path_check : : \
-+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
-+  fi
-+}
-+# end func_convert_path_msys_to_cygwin
-+
-+
-+# func_convert_path_nix_to_cygwin ARG
-+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
-+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
-+# func_to_host_file_result.
-+func_convert_path_nix_to_cygwin ()
-+{
-+  $opt_debug
-+  func_to_host_path_result="$1"
-+  if test -n "$1"; then
-+    # Remove leading and trailing path separator characters from
-+    # ARG. msys behavior is inconsistent here, cygpath turns them
-+    # into '.;' and ';.', and winepath ignores them completely.
-+    func_stripname : : "$1"
-+    func_to_host_path_tmp1=$func_stripname_result
-+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
-+    func_to_host_path_result="$func_cygpath_result"
-+    func_convert_path_check : : \
-+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
-+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
-+  fi
-+}
-+# end func_convert_path_nix_to_cygwin
-+
-+
-+# func_mode_compile arg...
-+func_mode_compile ()
-+{
-+    $opt_debug
-+    # Get the compilation command and the source file.
-+    base_compile=
-+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
-+    suppress_opt=yes
-+    suppress_output=
-+    arg_mode=normal
-+    libobj=
-+    later=
-+    pie_flag=
-+
-+    for arg
-+    do
-+      case $arg_mode in
-+      arg  )
-+	# do not "continue".  Instead, add this to base_compile
-+	lastarg="$arg"
-+	arg_mode=normal
- 	;;
--      yes)
--	# We got the output file
--	user_target=set
-+
-+      target )
- 	libobj="$arg"
-+	arg_mode=normal
- 	continue
- 	;;
--      esac
- 
--      # Accept the current argument as the source file.
--      lastarg="$srcfile"
--      srcfile="$arg"
-+      normal )
-+	# Accept any command-line options.
-+	case $arg in
-+	-o)
-+	  test -n "$libobj" && \
-+	    func_fatal_error "you cannot specify \`-o' more than once"
-+	  arg_mode=target
-+	  continue
-+	  ;;
- 
--      # Aesthetically quote the previous argument.
-+	-pie | -fpie | -fPIE)
-+          func_append pie_flag " $arg"
-+	  continue
-+	  ;;
- 
--      # Backslashify any backslashes, double quotes, and dollar signs.
--      # These are the only characters that are still specially
--      # interpreted inside of double-quoted scrings.
--      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-+	-shared | -static | -prefer-pic | -prefer-non-pic)
-+	  func_append later " $arg"
-+	  continue
-+	  ;;
- 
--      # Double-quote args containing other shell metacharacters.
--      # Many Bourne shells cannot handle close brackets correctly
--      # in scan sets, so we specify it separately.
--      case $lastarg in
--      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	lastarg="\"$lastarg\""
-+	-no-suppress)
-+	  suppress_opt=no
-+	  continue
-+	  ;;
-+
-+	-Xcompiler)
-+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
-+	  continue      #  The current "srcfile" will either be retained or
-+	  ;;            #  replaced later.  I would guess that would be a bug.
-+
-+	-Wc,*)
-+	  func_stripname '-Wc,' '' "$arg"
-+	  args=$func_stripname_result
-+	  lastarg=
-+	  save_ifs="$IFS"; IFS=','
-+	  for arg in $args; do
-+	    IFS="$save_ifs"
-+	    func_append_quoted lastarg "$arg"
-+	  done
-+	  IFS="$save_ifs"
-+	  func_stripname ' ' '' "$lastarg"
-+	  lastarg=$func_stripname_result
-+
-+	  # Add the arguments to base_compile.
-+	  func_append base_compile " $lastarg"
-+	  continue
-+	  ;;
-+
-+	*)
-+	  # Accept the current argument as the source file.
-+	  # The previous "srcfile" becomes the current argument.
-+	  #
-+	  lastarg="$srcfile"
-+	  srcfile="$arg"
-+	  ;;
-+	esac  #  case $arg
- 	;;
--      esac
-+      esac    #  case $arg_mode
- 
--      # Add the previous argument to base_compile.
--      if test -z "$base_compile"; then
--	base_compile="$lastarg"
--      else
--	base_compile="$base_compile $lastarg"
--      fi
--    done
-+      # Aesthetically quote the previous argument.
-+      func_append_quoted base_compile "$lastarg"
-+    done # for arg
- 
--    case $user_target in
--    set)
-+    case $arg_mode in
-+    arg)
-+      func_fatal_error "you must specify an argument for -Xcompile"
-       ;;
--    no)
--      # Get the name of the library object.
--      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-+    target)
-+      func_fatal_error "you must specify a target with \`-o'"
-       ;;
-     *)
--      $echo "$modename: you must specify a target with \`-o'" 1>&2
--      exit 1
-+      # Get the name of the library object.
-+      test -z "$libobj" && {
-+	func_basename "$srcfile"
-+	libobj="$func_basename_result"
-+      }
-       ;;
-     esac
- 
-     # Recognize several different file suffixes.
-     # If the user specifies -o file.o, it is replaced with file.lo
--    xform='[cCFSfmso]'
-     case $libobj in
--    *.ada) xform=ada ;;
--    *.adb) xform=adb ;;
--    *.ads) xform=ads ;;
--    *.asm) xform=asm ;;
--    *.c++) xform=c++ ;;
--    *.cc) xform=cc ;;
--    *.class) xform=class ;;
--    *.cpp) xform=cpp ;;
--    *.cxx) xform=cxx ;;
--    *.f90) xform=f90 ;;
--    *.for) xform=for ;;
--    *.java) xform=java ;;
-+    *.[cCFSifmso] | \
-+    *.ada | *.adb | *.ads | *.asm | \
-+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-+    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
-+      func_xform "$libobj"
-+      libobj=$func_xform_result
-+      ;;
-     esac
- 
--    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
--
-     case $libobj in
--    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
-     *)
--      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
--      exit 1
-+      func_fatal_error "cannot determine name of library object from \`$libobj'"
-       ;;
-     esac
- 
--    # Infer tagged configuration to use if any are available and
--    # if one wasn't chosen via the "--tag" command line option.
--    # Only attempt this if the compiler in the base compile
--    # command doesn't match the default compiler.
--    if test -n "$available_tags" && test -z "$tagname"; then
--      case $base_compile in
--      "$CC "*) ;;
--      # Blanks in the command may have been stripped by the calling shell,
--      # but not from the CC environment variable when ltconfig was run.
--      "`$echo $CC` "*) ;;
--      *)
--        for z in $available_tags; do
--          if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
--	    # Evaluate the configuration.
--	    eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
--            case $base_compile in
--	    "$CC "*)
--              # The compiler in the base compile command matches
--              # the one in the tagged configuration.
--              # Assume this is the tagged configuration we want.
--              tagname=$z
--              break
--              ;;
--	    "`$echo $CC` "*)
--	      tagname=$z
--	      break
--	      ;;
--	    esac
--          fi
--        done
--        # If $tagname still isn't set, then no tagged configuration
--        # was found and let the user know that the "--tag" command
--        # line option must be used.
--        if test -z "$tagname"; then
--          echo "$modename: unable to infer tagged configuration"
--          echo "$modename: specify a tag with \`--tag'" 1>&2
--	  exit 1
--#        else
--#          echo "$modename: using $tagname tagged configuration"
--        fi
-+    func_infer_tag $base_compile
-+
-+    for arg in $later; do
-+      case $arg in
-+      -shared)
-+	test "$build_libtool_libs" != yes && \
-+	  func_fatal_configuration "can not build a shared library"
-+	build_old_libs=no
-+	continue
-+	;;
-+
-+      -static)
-+	build_libtool_libs=no
-+	build_old_libs=yes
-+	continue
-+	;;
-+
-+      -prefer-pic)
-+	pic_mode=yes
-+	continue
-+	;;
-+
-+      -prefer-non-pic)
-+	pic_mode=no
-+	continue
- 	;;
-       esac
--    fi
-+    done
- 
--    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
--    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
--    if test "X$xdir" = "X$obj"; then
--      xdir=
--    else
--      xdir=$xdir/
--    fi
-+    func_quote_for_eval "$libobj"
-+    test "X$libobj" != "X$func_quote_for_eval_result" \
-+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
-+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
-+    func_dirname_and_basename "$obj" "/" ""
-+    objname="$func_basename_result"
-+    xdir="$func_dirname_result"
-     lobj=${xdir}$objdir/$objname
- 
--    if test -z "$base_compile"; then
--      $echo "$modename: you must specify a compilation command" 1>&2
--      $echo "$help" 1>&2
--      exit 1
--    fi
-+    test -z "$base_compile" && \
-+      func_fatal_help "you must specify a compilation command"
- 
-     # Delete any leftover library objects.
-     if test "$build_old_libs" = yes; then
-@@ -556,16 +2120,13 @@
-       removelist="$lobj $libobj ${libobj}T"
-     fi
- 
--    $run $rm $removelist
--    trap "$run $rm $removelist; exit 1" 1 2 15
--
-     # On Cygwin there's no "real" PIC flag so we must build both object types
-     case $host_os in
--    cygwin* | mingw* | pw32* | os2*)
-+    cygwin* | mingw* | pw32* | os2* | cegcc*)
-       pic_mode=default
-       ;;
-     esac
--    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
-+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
-       # non-PIC code in shared libraries is not supported
-       pic_mode=default
-     fi
-@@ -573,10 +2134,8 @@
-     # Calculate the filename of the output object if compiler does
-     # not support -o with -c
-     if test "$compiler_c_o" = no; then
--      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
-+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
-       lockfile="$output_obj.lock"
--      removelist="$removelist $output_obj $lockfile"
--      trap "$run $rm $removelist; exit 1" 1 2 15
-     else
-       output_obj=
-       need_locks=no
-@@ -586,13 +2145,13 @@
-     # Lock this critical section if it is needed
-     # We use this script file to make the link, it avoids creating a new file
-     if test "$need_locks" = yes; then
--      until $run ln "$0" "$lockfile" 2>/dev/null; do
--	$show "Waiting for $lockfile to be removed"
-+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
-+	func_echo "Waiting for $lockfile to be removed"
- 	sleep 2
-       done
-     elif test "$need_locks" = warn; then
-       if test -f "$lockfile"; then
--	echo "\
-+	$ECHO "\
- *** ERROR, $lockfile exists and contains:
- `cat $lockfile 2>/dev/null`
- 
-@@ -603,29 +2162,21 @@
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
--	$run $rm $removelist
--	exit 1
-+	$opt_dry_run || $RM $removelist
-+	exit $EXIT_FAILURE
-       fi
--      echo $srcfile > "$lockfile"
--    fi
--
--    if test -n "$fix_srcfile_path"; then
--      eval srcfile=\"$fix_srcfile_path\"
-+      func_append removelist " $output_obj"
-+      $ECHO "$srcfile" > "$lockfile"
-     fi
- 
--    $run $rm "$libobj" "${libobj}T"
--
--    # Create a libtool object file (analogous to a ".la" file),
--    # but don't create it if we're doing a dry run.
--    test -z "$run" && cat > ${libobj}T <<EOF
--# $libobj - a libtool object file
--# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
--#
--# Please DO NOT delete this file!
--# It is necessary for linking the library.
-+    $opt_dry_run || $RM $removelist
-+    func_append removelist " $lockfile"
-+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
- 
--# Name of the PIC object.
--EOF
-+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
-+    srcfile=$func_to_tool_file_result
-+    func_quote_for_eval "$srcfile"
-+    qsrcfile=$func_quote_for_eval_result
- 
-     # Only build a PIC object if we are building libtool libraries.
-     if test "$build_libtool_libs" = yes; then
-@@ -633,38 +2184,25 @@
-       fbsd_hideous_sh_bug=$base_compile
- 
-       if test "$pic_mode" != no; then
--	command="$base_compile $srcfile $pic_flag"
-+	command="$base_compile $qsrcfile $pic_flag"
-       else
- 	# Don't build PIC code
--	command="$base_compile $srcfile"
-+	command="$base_compile $qsrcfile"
-       fi
- 
--      if test ! -d ${xdir}$objdir; then
--	$show "$mkdir ${xdir}$objdir"
--	$run $mkdir ${xdir}$objdir
--	status=$?
--	if test $status -ne 0 && test ! -d ${xdir}$objdir; then
--	  exit $status
--        fi
--      fi 
-+      func_mkdir_p "$xdir$objdir"
- 
-       if test -z "$output_obj"; then
--        # Place PIC objects in $objdir
--        command="$command -o $lobj"
-+	# Place PIC objects in $objdir
-+	func_append command " -o $lobj"
-       fi
- 
--      $run $rm "$lobj" "$output_obj"
--
--      $show "$command"
--      if $run eval "$command"; then :
--      else
--	test -n "$output_obj" && $run $rm $removelist
--	exit 1
--      fi
-+      func_show_eval_locale "$command"	\
-+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
- 
-       if test "$need_locks" = warn &&
--	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
--	echo "\
-+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-+	$ECHO "\
- *** ERROR, $lockfile contains:
- `cat $lockfile 2>/dev/null`
- 
-@@ -678,63 +2216,42 @@
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
--	$run $rm $removelist
--	exit 1
-+	$opt_dry_run || $RM $removelist
-+	exit $EXIT_FAILURE
-       fi
- 
-       # Just move the object if needed, then go on to compile the next one
--      if test -n "$output_obj" && test "x$output_obj" != "x$lobj"; then
--	$show "$mv $output_obj $lobj"
--	if $run $mv $output_obj $lobj; then :
--	else
--	  error=$?
--	  $run $rm $removelist
--	  exit $error
--	fi
-+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
-+	func_show_eval '$MV "$output_obj" "$lobj"' \
-+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
-       fi
- 
--      # Append the name of the PIC object to the libtool object file.
--      test -z "$run" && cat >> ${libobj}T <<EOF
--pic_object='$objdir/$objname'
--
--EOF
--
-       # Allow error messages only from the first compilation.
--      suppress_output=' >/dev/null 2>&1'
--    else
--      # No PIC object so indicate it doesn't exist in the libtool
--      # object file.
--      test -z "$run" && cat >> ${libobj}T <<EOF
--pic_object=none
--
--EOF
-+      if test "$suppress_opt" = yes; then
-+	suppress_output=' >/dev/null 2>&1'
-+      fi
-     fi
- 
-     # Only build a position-dependent object if we build old libraries.
-     if test "$build_old_libs" = yes; then
-       if test "$pic_mode" != yes; then
- 	# Don't build PIC code
--	command="$base_compile $srcfile"
-+	command="$base_compile $qsrcfile$pie_flag"
-       else
--	command="$base_compile $srcfile $pic_flag"
-+	command="$base_compile $qsrcfile $pic_flag"
-       fi
-       if test "$compiler_c_o" = yes; then
--	command="$command -o $obj"
-+	func_append command " -o $obj"
-       fi
- 
-       # Suppress compiler output if we already did a PIC compilation.
--      command="$command$suppress_output"
--      $run $rm "$obj" "$output_obj"
--      $show "$command"
--      if $run eval "$command"; then :
--      else
--	$run $rm $removelist
--	exit 1
--      fi
-+      func_append command "$suppress_output"
-+      func_show_eval_locale "$command" \
-+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
- 
-       if test "$need_locks" = warn &&
--	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
--	echo "\
-+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-+	$ECHO "\
- *** ERROR, $lockfile contains:
- `cat $lockfile 2>/dev/null`
- 
-@@ -748,57 +2265,2828 @@
- avoid parallel builds (make -j) in this platform, or get a better
- compiler."
- 
--	$run $rm $removelist
--	exit 1
-+	$opt_dry_run || $RM $removelist
-+	exit $EXIT_FAILURE
-       fi
- 
-       # Just move the object if needed
--      if test -n "$output_obj" && test "x$output_obj" != "x$obj"; then
--	$show "$mv $output_obj $obj"
--	if $run $mv $output_obj $obj; then :
-+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
-+	func_show_eval '$MV "$output_obj" "$obj"' \
-+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
-+      fi
-+    fi
-+
-+    $opt_dry_run || {
-+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
-+
-+      # Unlock the critical section if it was locked
-+      if test "$need_locks" != no; then
-+	removelist=$lockfile
-+        $RM "$lockfile"
-+      fi
-+    }
-+
-+    exit $EXIT_SUCCESS
-+}
-+
-+$opt_help || {
-+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
-+}
-+
-+func_mode_help ()
-+{
-+    # We need to display help for each of the modes.
-+    case $opt_mode in
-+      "")
-+        # Generic help is extracted from the usage comments
-+        # at the start of this file.
-+        func_help
-+        ;;
-+
-+      clean)
-+        $ECHO \
-+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-+
-+Remove files from the build directory.
-+
-+RM is the name of the program to use to delete files associated with each FILE
-+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-+to RM.
-+
-+If FILE is a libtool library, object or program, all the files associated
-+with it are deleted. Otherwise, only FILE itself is deleted using RM."
-+        ;;
-+
-+      compile)
-+      $ECHO \
-+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-+
-+Compile a source file into a libtool library object.
-+
-+This mode accepts the following additional options:
-+
-+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-+  -no-suppress      do not suppress compiler output for multiple passes
-+  -prefer-pic       try to build PIC objects only
-+  -prefer-non-pic   try to build non-PIC objects only
-+  -shared           do not build a \`.o' file suitable for static linking
-+  -static           only build a \`.o' file suitable for static linking
-+  -Wc,FLAG          pass FLAG directly to the compiler
-+
-+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-+from the given SOURCEFILE.
-+
-+The output file name is determined by removing the directory component from
-+SOURCEFILE, then substituting the C source code suffix \`.c' with the
-+library object suffix, \`.lo'."
-+        ;;
-+
-+      execute)
-+        $ECHO \
-+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
-+
-+Automatically set library path, then run a program.
-+
-+This mode accepts the following additional options:
-+
-+  -dlopen FILE      add the directory containing FILE to the library path
-+
-+This mode sets the library path environment variable according to \`-dlopen'
-+flags.
-+
-+If any of the ARGS are libtool executable wrappers, then they are translated
-+into their corresponding uninstalled binary, and any of their required library
-+directories are added to the library path.
-+
-+Then, COMMAND is executed, with ARGS as arguments."
-+        ;;
-+
-+      finish)
-+        $ECHO \
-+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
-+
-+Complete the installation of libtool libraries.
-+
-+Each LIBDIR is a directory that contains libtool libraries.
-+
-+The commands that this mode executes may require superuser privileges.  Use
-+the \`--dry-run' option if you just want to see what would be executed."
-+        ;;
-+
-+      install)
-+        $ECHO \
-+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
-+
-+Install executables or libraries.
-+
-+INSTALL-COMMAND is the installation command.  The first component should be
-+either the \`install' or \`cp' program.
-+
-+The following components of INSTALL-COMMAND are treated specially:
-+
-+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
-+
-+The rest of the components are interpreted as arguments to that command (only
-+BSD-compatible install options are recognized)."
-+        ;;
-+
-+      link)
-+        $ECHO \
-+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
-+
-+Link object files or libraries together to form another library, or to
-+create an executable program.
-+
-+LINK-COMMAND is a command using the C compiler that you would use to create
-+a program from several object files.
-+
-+The following components of LINK-COMMAND are treated specially:
-+
-+  -all-static       do not do any dynamic linking at all
-+  -avoid-version    do not add a version suffix if possible
-+  -bindir BINDIR    specify path to binaries directory (for systems where
-+                    libraries must be found in the PATH setting at runtime)
-+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-+  -export-symbols SYMFILE
-+                    try to export only the symbols listed in SYMFILE
-+  -export-symbols-regex REGEX
-+                    try to export only the symbols matching REGEX
-+  -LLIBDIR          search LIBDIR for required installed libraries
-+  -lNAME            OUTPUT-FILE requires the installed library libNAME
-+  -module           build a library that can dlopened
-+  -no-fast-install  disable the fast-install mode
-+  -no-install       link a not-installable executable
-+  -no-undefined     declare that a library does not refer to external symbols
-+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-+  -objectlist FILE  Use a list of object files found in FILE to specify objects
-+  -precious-files-regex REGEX
-+                    don't remove output files matching REGEX
-+  -release RELEASE  specify package release information
-+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-+  -shared           only do dynamic linking of libtool libraries
-+  -shrext SUFFIX    override the standard shared library file extension
-+  -static           do not do any dynamic linking of uninstalled libtool libraries
-+  -static-libtool-libs
-+                    do not do any dynamic linking of libtool libraries
-+  -version-info CURRENT[:REVISION[:AGE]]
-+                    specify library version info [each variable defaults to 0]
-+  -weak LIBNAME     declare that the target provides the LIBNAME interface
-+  -Wc,FLAG
-+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
-+  -Wl,FLAG
-+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
-+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
-+
-+All other options (arguments beginning with \`-') are ignored.
-+
-+Every other argument is treated as a filename.  Files ending in \`.la' are
-+treated as uninstalled libtool libraries, other files are standard or library
-+object files.
-+
-+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-+only library objects (\`.lo' files) may be specified, and \`-rpath' is
-+required, except when creating a convenience library.
-+
-+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-+using \`ar' and \`ranlib', or on Windows using \`lib'.
-+
-+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-+is created, otherwise an executable program is created."
-+        ;;
-+
-+      uninstall)
-+        $ECHO \
-+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-+
-+Remove libraries from an installation directory.
-+
-+RM is the name of the program to use to delete files associated with each FILE
-+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-+to RM.
-+
-+If FILE is a libtool library, all the files associated with it are deleted.
-+Otherwise, only FILE itself is deleted using RM."
-+        ;;
-+
-+      *)
-+        func_fatal_help "invalid operation mode \`$opt_mode'"
-+        ;;
-+    esac
-+
-+    echo
-+    $ECHO "Try \`$progname --help' for more information about other modes."
-+}
-+
-+# Now that we've collected a possible --mode arg, show help if necessary
-+if $opt_help; then
-+  if test "$opt_help" = :; then
-+    func_mode_help
-+  else
-+    {
-+      func_help noexit
-+      for opt_mode in compile link execute install finish uninstall clean; do
-+	func_mode_help
-+      done
-+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
-+    {
-+      func_help noexit
-+      for opt_mode in compile link execute install finish uninstall clean; do
-+	echo
-+	func_mode_help
-+      done
-+    } |
-+    sed '1d
-+      /^When reporting/,/^Report/{
-+	H
-+	d
-+      }
-+      $x
-+      /information about other modes/d
-+      /more detailed .*MODE/d
-+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
-+  fi
-+  exit $?
-+fi
-+
-+
-+# func_mode_execute arg...
-+func_mode_execute ()
-+{
-+    $opt_debug
-+    # The first argument is the command name.
-+    cmd="$nonopt"
-+    test -z "$cmd" && \
-+      func_fatal_help "you must specify a COMMAND"
-+
-+    # Handle -dlopen flags immediately.
-+    for file in $opt_dlopen; do
-+      test -f "$file" \
-+	|| func_fatal_help "\`$file' is not a file"
-+
-+      dir=
-+      case $file in
-+      *.la)
-+	func_resolve_sysroot "$file"
-+	file=$func_resolve_sysroot_result
-+
-+	# Check to see that this really is a libtool archive.
-+	func_lalib_unsafe_p "$file" \
-+	  || func_fatal_help "\`$lib' is not a valid libtool archive"
-+
-+	# Read the libtool library.
-+	dlname=
-+	library_names=
-+	func_source "$file"
-+
-+	# Skip this library if it cannot be dlopened.
-+	if test -z "$dlname"; then
-+	  # Warn if it was a shared library.
-+	  test -n "$library_names" && \
-+	    func_warning "\`$file' was not linked with \`-export-dynamic'"
-+	  continue
-+	fi
-+
-+	func_dirname "$file" "" "."
-+	dir="$func_dirname_result"
-+
-+	if test -f "$dir/$objdir/$dlname"; then
-+	  func_append dir "/$objdir"
- 	else
--	  error=$?
--	  $run $rm $removelist
--	  exit $error
-+	  if test ! -f "$dir/$dlname"; then
-+	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
-+	  fi
- 	fi
-+	;;
-+
-+      *.lo)
-+	# Just add the directory containing the .lo file.
-+	func_dirname "$file" "" "."
-+	dir="$func_dirname_result"
-+	;;
-+
-+      *)
-+	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
-+	continue
-+	;;
-+      esac
-+
-+      # Get the absolute pathname.
-+      absdir=`cd "$dir" && pwd`
-+      test -n "$absdir" && dir="$absdir"
-+
-+      # Now add the directory to shlibpath_var.
-+      if eval "test -z \"\$$shlibpath_var\""; then
-+	eval "$shlibpath_var=\"\$dir\""
-+      else
-+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-       fi
-+    done
- 
--      # Append the name of the non-PIC object the libtool object file.
--      # Only append if the libtool object file exists.
--      test -z "$run" && cat >> ${libobj}T <<EOF
--# Name of the non-PIC object.
--non_pic_object='$objname'
-+    # This variable tells wrapper scripts just to set shlibpath_var
-+    # rather than running their programs.
-+    libtool_execute_magic="$magic"
- 
--EOF
-+    # Check if any of the arguments is a wrapper script.
-+    args=
-+    for file
-+    do
-+      case $file in
-+      -* | *.la | *.lo ) ;;
-+      *)
-+	# Do a test to see if this is really a libtool program.
-+	if func_ltwrapper_script_p "$file"; then
-+	  func_source "$file"
-+	  # Transform arg to wrapped name.
-+	  file="$progdir/$program"
-+	elif func_ltwrapper_executable_p "$file"; then
-+	  func_ltwrapper_scriptname "$file"
-+	  func_source "$func_ltwrapper_scriptname_result"
-+	  # Transform arg to wrapped name.
-+	  file="$progdir/$program"
-+	fi
-+	;;
-+      esac
-+      # Quote arguments (to preserve shell metacharacters).
-+      func_append_quoted args "$file"
-+    done
-+
-+    if test "X$opt_dry_run" = Xfalse; then
-+      if test -n "$shlibpath_var"; then
-+	# Export the shlibpath_var.
-+	eval "export $shlibpath_var"
-+      fi
-+
-+      # Restore saved environment variables
-+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-+      do
-+	eval "if test \"\${save_$lt_var+set}\" = set; then
-+                $lt_var=\$save_$lt_var; export $lt_var
-+	      else
-+		$lt_unset $lt_var
-+	      fi"
-+      done
-+
-+      # Now prepare to actually exec the command.
-+      exec_cmd="\$cmd$args"
-     else
--      # Append the name of the non-PIC object the libtool object file.
--      # Only append if the libtool object file exists.
--      test -z "$run" && cat >> ${libobj}T <<EOF
--# Name of the non-PIC object.
--non_pic_object=none
-+      # Display what would be done.
-+      if test -n "$shlibpath_var"; then
-+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-+	echo "export $shlibpath_var"
-+      fi
-+      $ECHO "$cmd$args"
-+      exit $EXIT_SUCCESS
-+    fi
-+}
- 
--EOF
-+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
-+
-+
-+# func_mode_finish arg...
-+func_mode_finish ()
-+{
-+    $opt_debug
-+    libs=
-+    libdirs=
-+    admincmds=
-+
-+    for opt in "$nonopt" ${1+"$@"}
-+    do
-+      if test -d "$opt"; then
-+	func_append libdirs " $opt"
-+
-+      elif test -f "$opt"; then
-+	if func_lalib_unsafe_p "$opt"; then
-+	  func_append libs " $opt"
-+	else
-+	  func_warning "\`$opt' is not a valid libtool archive"
-+	fi
-+
-+      else
-+	func_fatal_error "invalid argument \`$opt'"
-+      fi
-+    done
-+
-+    if test -n "$libs"; then
-+      if test -n "$lt_sysroot"; then
-+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
-+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
-+      else
-+        sysroot_cmd=
-+      fi
-+
-+      # Remove sysroot references
-+      if $opt_dry_run; then
-+        for lib in $libs; do
-+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
-+        done
-+      else
-+        tmpdir=`func_mktempdir`
-+        for lib in $libs; do
-+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
-+	    > $tmpdir/tmp-la
-+	  mv -f $tmpdir/tmp-la $lib
-+	done
-+        ${RM}r "$tmpdir"
-+      fi
-     fi
- 
--    $run $mv "${libobj}T" "${libobj}"
-+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-+      for libdir in $libdirs; do
-+	if test -n "$finish_cmds"; then
-+	  # Do each command in the finish commands.
-+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
-+'"$cmd"'"'
-+	fi
-+	if test -n "$finish_eval"; then
-+	  # Do the single finish_eval.
-+	  eval cmds=\"$finish_eval\"
-+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
-+       $cmds"
-+	fi
-+      done
-+    fi
- 
--    # Unlock the critical section if it was locked
--    if test "$need_locks" != no; then
--      $run $rm "$lockfile"
-+    # Exit here if they wanted silent mode.
-+    $opt_silent && exit $EXIT_SUCCESS
-+
-+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-+      echo "----------------------------------------------------------------------"
-+      echo "Libraries have been installed in:"
-+      for libdir in $libdirs; do
-+	$ECHO "   $libdir"
-+      done
-+      echo
-+      echo "If you ever happen to want to link against installed libraries"
-+      echo "in a given directory, LIBDIR, you must either use libtool, and"
-+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-+      echo "flag during linking and do at least one of the following:"
-+      if test -n "$shlibpath_var"; then
-+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-+	echo "     during execution"
-+      fi
-+      if test -n "$runpath_var"; then
-+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-+	echo "     during linking"
-+      fi
-+      if test -n "$hardcode_libdir_flag_spec"; then
-+	libdir=LIBDIR
-+	eval flag=\"$hardcode_libdir_flag_spec\"
-+
-+	$ECHO "   - use the \`$flag' linker flag"
-+      fi
-+      if test -n "$admincmds"; then
-+	$ECHO "   - have your system administrator run these commands:$admincmds"
-+      fi
-+      if test -f /etc/ld.so.conf; then
-+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-+      fi
-+      echo
-+
-+      echo "See any operating system documentation about shared libraries for"
-+      case $host in
-+	solaris2.[6789]|solaris2.1[0-9])
-+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-+	  echo "pages."
-+	  ;;
-+	*)
-+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
-+	  ;;
-+      esac
-+      echo "----------------------------------------------------------------------"
-     fi
-+    exit $EXIT_SUCCESS
-+}
- 
--    exit 0
-+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
-+
-+
-+# func_mode_install arg...
-+func_mode_install ()
-+{
-+    $opt_debug
-+    # There may be an optional sh(1) argument at the beginning of
-+    # install_prog (especially on Windows NT).
-+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-+       # Allow the use of GNU shtool's install command.
-+       case $nonopt in *shtool*) :;; *) false;; esac; then
-+      # Aesthetically quote it.
-+      func_quote_for_eval "$nonopt"
-+      install_prog="$func_quote_for_eval_result "
-+      arg=$1
-+      shift
-+    else
-+      install_prog=
-+      arg=$nonopt
-+    fi
-+
-+    # The real first argument should be the name of the installation program.
-+    # Aesthetically quote it.
-+    func_quote_for_eval "$arg"
-+    func_append install_prog "$func_quote_for_eval_result"
-+    install_shared_prog=$install_prog
-+    case " $install_prog " in
-+      *[\\\ /]cp\ *) install_cp=: ;;
-+      *) install_cp=false ;;
-+    esac
-+
-+    # We need to accept at least all the BSD install flags.
-+    dest=
-+    files=
-+    opts=
-+    prev=
-+    install_type=
-+    isdir=no
-+    stripme=
-+    no_mode=:
-+    for arg
-+    do
-+      arg2=
-+      if test -n "$dest"; then
-+	func_append files " $dest"
-+	dest=$arg
-+	continue
-+      fi
-+
-+      case $arg in
-+      -d) isdir=yes ;;
-+      -f)
-+	if $install_cp; then :; else
-+	  prev=$arg
-+	fi
-+	;;
-+      -g | -m | -o)
-+	prev=$arg
-+	;;
-+      -s)
-+	stripme=" -s"
-+	continue
-+	;;
-+      -*)
-+	;;
-+      *)
-+	# If the previous option needed an argument, then skip it.
-+	if test -n "$prev"; then
-+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
-+	    arg2=$install_override_mode
-+	    no_mode=false
-+	  fi
-+	  prev=
-+	else
-+	  dest=$arg
-+	  continue
-+	fi
-+	;;
-+      esac
-+
-+      # Aesthetically quote the argument.
-+      func_quote_for_eval "$arg"
-+      func_append install_prog " $func_quote_for_eval_result"
-+      if test -n "$arg2"; then
-+	func_quote_for_eval "$arg2"
-+      fi
-+      func_append install_shared_prog " $func_quote_for_eval_result"
-+    done
-+
-+    test -z "$install_prog" && \
-+      func_fatal_help "you must specify an install program"
-+
-+    test -n "$prev" && \
-+      func_fatal_help "the \`$prev' option requires an argument"
-+
-+    if test -n "$install_override_mode" && $no_mode; then
-+      if $install_cp; then :; else
-+	func_quote_for_eval "$install_override_mode"
-+	func_append install_shared_prog " -m $func_quote_for_eval_result"
-+      fi
-+    fi
-+
-+    if test -z "$files"; then
-+      if test -z "$dest"; then
-+	func_fatal_help "no file or destination specified"
-+      else
-+	func_fatal_help "you must specify a destination"
-+      fi
-+    fi
-+
-+    # Strip any trailing slash from the destination.
-+    func_stripname '' '/' "$dest"
-+    dest=$func_stripname_result
-+
-+    # Check to see that the destination is a directory.
-+    test -d "$dest" && isdir=yes
-+    if test "$isdir" = yes; then
-+      destdir="$dest"
-+      destname=
-+    else
-+      func_dirname_and_basename "$dest" "" "."
-+      destdir="$func_dirname_result"
-+      destname="$func_basename_result"
-+
-+      # Not a directory, so check to see that there is only one file specified.
-+      set dummy $files; shift
-+      test "$#" -gt 1 && \
-+	func_fatal_help "\`$dest' is not a directory"
-+    fi
-+    case $destdir in
-+    [\\/]* | [A-Za-z]:[\\/]*) ;;
-+    *)
-+      for file in $files; do
-+	case $file in
-+	*.lo) ;;
-+	*)
-+	  func_fatal_help "\`$destdir' must be an absolute directory name"
-+	  ;;
-+	esac
-+      done
-+      ;;
-+    esac
-+
-+    # This variable tells wrapper scripts just to set variables rather
-+    # than running their programs.
-+    libtool_install_magic="$magic"
-+
-+    staticlibs=
-+    future_libdirs=
-+    current_libdirs=
-+    for file in $files; do
-+
-+      # Do each installation.
-+      case $file in
-+      *.$libext)
-+	# Do the static libraries later.
-+	func_append staticlibs " $file"
-+	;;
-+
-+      *.la)
-+	func_resolve_sysroot "$file"
-+	file=$func_resolve_sysroot_result
-+
-+	# Check to see that this really is a libtool archive.
-+	func_lalib_unsafe_p "$file" \
-+	  || func_fatal_help "\`$file' is not a valid libtool archive"
-+
-+	library_names=
-+	old_library=
-+	relink_command=
-+	func_source "$file"
-+
-+	# Add the libdir to current_libdirs if it is the destination.
-+	if test "X$destdir" = "X$libdir"; then
-+	  case "$current_libdirs " in
-+	  *" $libdir "*) ;;
-+	  *) func_append current_libdirs " $libdir" ;;
-+	  esac
-+	else
-+	  # Note the libdir as a future libdir.
-+	  case "$future_libdirs " in
-+	  *" $libdir "*) ;;
-+	  *) func_append future_libdirs " $libdir" ;;
-+	  esac
-+	fi
-+
-+	func_dirname "$file" "/" ""
-+	dir="$func_dirname_result"
-+	func_append dir "$objdir"
-+
-+	if test -n "$relink_command"; then
-+	  # Determine the prefix the user has applied to our future dir.
-+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
-+
-+	  # Don't allow the user to place us outside of our expected
-+	  # location b/c this prevents finding dependent libraries that
-+	  # are installed to the same prefix.
-+	  # At present, this check doesn't affect windows .dll's that
-+	  # are installed into $libdir/../bin (currently, that works fine)
-+	  # but it's something to keep an eye on.
-+	  test "$inst_prefix_dir" = "$destdir" && \
-+	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
-+
-+	  if test -n "$inst_prefix_dir"; then
-+	    # Stick the inst_prefix_dir data into the link command.
-+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
-+	  else
-+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
-+	  fi
-+
-+	  func_warning "relinking \`$file'"
-+	  func_show_eval "$relink_command" \
-+	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
-+	fi
-+
-+	# See the names of the shared library.
-+	set dummy $library_names; shift
-+	if test -n "$1"; then
-+	  realname="$1"
-+	  shift
-+
-+	  srcname="$realname"
-+	  test -n "$relink_command" && srcname="$realname"T
-+
-+	  # Install the shared library and build the symlinks.
-+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
-+	      'exit $?'
-+	  tstripme="$stripme"
-+	  case $host_os in
-+	  cygwin* | mingw* | pw32* | cegcc*)
-+	    case $realname in
-+	    *.dll.a)
-+	      tstripme=""
-+	      ;;
-+	    esac
-+	    ;;
-+	  esac
-+	  if test -n "$tstripme" && test -n "$striplib"; then
-+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
-+	  fi
-+
-+	  if test "$#" -gt 0; then
-+	    # Delete the old symlinks, and create new ones.
-+	    # Try `ln -sf' first, because the `ln' binary might depend on
-+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
-+	    # so we also need to try rm && ln -s.
-+	    for linkname
-+	    do
-+	      test "$linkname" != "$realname" \
-+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
-+	    done
-+	  fi
-+
-+	  # Do each command in the postinstall commands.
-+	  lib="$destdir/$realname"
-+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
-+	fi
-+
-+	# Install the pseudo-library for information purposes.
-+	func_basename "$file"
-+	name="$func_basename_result"
-+	instname="$dir/$name"i
-+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
-+
-+	# Maybe install the static library, too.
-+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
-+	;;
-+
-+      *.lo)
-+	# Install (i.e. copy) a libtool object.
-+
-+	# Figure out destination file name, if it wasn't already specified.
-+	if test -n "$destname"; then
-+	  destfile="$destdir/$destname"
-+	else
-+	  func_basename "$file"
-+	  destfile="$func_basename_result"
-+	  destfile="$destdir/$destfile"
-+	fi
-+
-+	# Deduce the name of the destination old-style object file.
-+	case $destfile in
-+	*.lo)
-+	  func_lo2o "$destfile"
-+	  staticdest=$func_lo2o_result
-+	  ;;
-+	*.$objext)
-+	  staticdest="$destfile"
-+	  destfile=
-+	  ;;
-+	*)
-+	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
-+	  ;;
-+	esac
-+
-+	# Install the libtool object if requested.
-+	test -n "$destfile" && \
-+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
-+
-+	# Install the old object if enabled.
-+	if test "$build_old_libs" = yes; then
-+	  # Deduce the name of the old-style object file.
-+	  func_lo2o "$file"
-+	  staticobj=$func_lo2o_result
-+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
-+	fi
-+	exit $EXIT_SUCCESS
-+	;;
-+
-+      *)
-+	# Figure out destination file name, if it wasn't already specified.
-+	if test -n "$destname"; then
-+	  destfile="$destdir/$destname"
-+	else
-+	  func_basename "$file"
-+	  destfile="$func_basename_result"
-+	  destfile="$destdir/$destfile"
-+	fi
-+
-+	# If the file is missing, and there is a .exe on the end, strip it
-+	# because it is most likely a libtool script we actually want to
-+	# install
-+	stripped_ext=""
-+	case $file in
-+	  *.exe)
-+	    if test ! -f "$file"; then
-+	      func_stripname '' '.exe' "$file"
-+	      file=$func_stripname_result
-+	      stripped_ext=".exe"
-+	    fi
-+	    ;;
-+	esac
-+
-+	# Do a test to see if this is really a libtool program.
-+	case $host in
-+	*cygwin* | *mingw*)
-+	    if func_ltwrapper_executable_p "$file"; then
-+	      func_ltwrapper_scriptname "$file"
-+	      wrapper=$func_ltwrapper_scriptname_result
-+	    else
-+	      func_stripname '' '.exe' "$file"
-+	      wrapper=$func_stripname_result
-+	    fi
-+	    ;;
-+	*)
-+	    wrapper=$file
-+	    ;;
-+	esac
-+	if func_ltwrapper_script_p "$wrapper"; then
-+	  notinst_deplibs=
-+	  relink_command=
-+
-+	  func_source "$wrapper"
-+
-+	  # Check the variables that should have been set.
-+	  test -z "$generated_by_libtool_version" && \
-+	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
-+
-+	  finalize=yes
-+	  for lib in $notinst_deplibs; do
-+	    # Check to see that each library is installed.
-+	    libdir=
-+	    if test -f "$lib"; then
-+	      func_source "$lib"
-+	    fi
-+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
-+	    if test -n "$libdir" && test ! -f "$libfile"; then
-+	      func_warning "\`$lib' has not been installed in \`$libdir'"
-+	      finalize=no
-+	    fi
-+	  done
-+
-+	  relink_command=
-+	  func_source "$wrapper"
-+
-+	  outputname=
-+	  if test "$fast_install" = no && test -n "$relink_command"; then
-+	    $opt_dry_run || {
-+	      if test "$finalize" = yes; then
-+	        tmpdir=`func_mktempdir`
-+		func_basename "$file$stripped_ext"
-+		file="$func_basename_result"
-+	        outputname="$tmpdir/$file"
-+	        # Replace the output file specification.
-+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
-+
-+	        $opt_silent || {
-+	          func_quote_for_expand "$relink_command"
-+		  eval "func_echo $func_quote_for_expand_result"
-+	        }
-+	        if eval "$relink_command"; then :
-+	          else
-+		  func_error "error: relink \`$file' with the above command before installing it"
-+		  $opt_dry_run || ${RM}r "$tmpdir"
-+		  continue
-+	        fi
-+	        file="$outputname"
-+	      else
-+	        func_warning "cannot relink \`$file'"
-+	      fi
-+	    }
-+	  else
-+	    # Install the binary that we compiled earlier.
-+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
-+	  fi
-+	fi
-+
-+	# remove .exe since cygwin /usr/bin/install will append another
-+	# one anyway
-+	case $install_prog,$host in
-+	*/usr/bin/install*,*cygwin*)
-+	  case $file:$destfile in
-+	  *.exe:*.exe)
-+	    # this is ok
-+	    ;;
-+	  *.exe:*)
-+	    destfile=$destfile.exe
-+	    ;;
-+	  *:*.exe)
-+	    func_stripname '' '.exe' "$destfile"
-+	    destfile=$func_stripname_result
-+	    ;;
-+	  esac
-+	  ;;
-+	esac
-+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
-+	$opt_dry_run || if test -n "$outputname"; then
-+	  ${RM}r "$tmpdir"
-+	fi
-+	;;
-+      esac
-+    done
-+
-+    for file in $staticlibs; do
-+      func_basename "$file"
-+      name="$func_basename_result"
-+
-+      # Set up the ranlib parameters.
-+      oldlib="$destdir/$name"
-+
-+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
-+
-+      if test -n "$stripme" && test -n "$old_striplib"; then
-+	func_show_eval "$old_striplib $oldlib" 'exit $?'
-+      fi
-+
-+      # Do each command in the postinstall commands.
-+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
-+    done
-+
-+    test -n "$future_libdirs" && \
-+      func_warning "remember to run \`$progname --finish$future_libdirs'"
-+
-+    if test -n "$current_libdirs"; then
-+      # Maybe just do a dry run.
-+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
-+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-+    else
-+      exit $EXIT_SUCCESS
-+    fi
-+}
-+
-+test "$opt_mode" = install && func_mode_install ${1+"$@"}
-+
-+
-+# func_generate_dlsyms outputname originator pic_p
-+# Extract symbols from dlprefiles and create ${outputname}S.o with
-+# a dlpreopen symbol table.
-+func_generate_dlsyms ()
-+{
-+    $opt_debug
-+    my_outputname="$1"
-+    my_originator="$2"
-+    my_pic_p="${3-no}"
-+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
-+    my_dlsyms=
-+
-+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
-+	my_dlsyms="${my_outputname}S.c"
-+      else
-+	func_error "not configured to extract global symbols from dlpreopened files"
-+      fi
-+    fi
-+
-+    if test -n "$my_dlsyms"; then
-+      case $my_dlsyms in
-+      "") ;;
-+      *.c)
-+	# Discover the nlist of each of the dlfiles.
-+	nlist="$output_objdir/${my_outputname}.nm"
-+
-+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
-+
-+	# Parse the name list into a source file.
-+	func_verbose "creating $output_objdir/$my_dlsyms"
-+
-+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
-+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
-+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
-+
-+#ifdef __cplusplus
-+extern \"C\" {
-+#endif
-+
-+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
-+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
-+#endif
-+
-+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-+/* DATA imports from DLLs on WIN32 con't be const, because runtime
-+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
-+# define LT_DLSYM_CONST
-+#elif defined(__osf__)
-+/* This system does not cope well with relocations in const data.  */
-+# define LT_DLSYM_CONST
-+#else
-+# define LT_DLSYM_CONST const
-+#endif
-+
-+/* External symbol declarations for the compiler. */\
-+"
-+
-+	if test "$dlself" = yes; then
-+	  func_verbose "generating symbol list for \`$output'"
-+
-+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
-+
-+	  # Add our own program objects to the symbol list.
-+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
-+	  for progfile in $progfiles; do
-+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
-+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
-+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
-+	  done
-+
-+	  if test -n "$exclude_expsyms"; then
-+	    $opt_dry_run || {
-+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-+	      eval '$MV "$nlist"T "$nlist"'
-+	    }
-+	  fi
-+
-+	  if test -n "$export_symbols_regex"; then
-+	    $opt_dry_run || {
-+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-+	      eval '$MV "$nlist"T "$nlist"'
-+	    }
-+	  fi
-+
-+	  # Prepare the list of exported symbols
-+	  if test -z "$export_symbols"; then
-+	    export_symbols="$output_objdir/$outputname.exp"
-+	    $opt_dry_run || {
-+	      $RM $export_symbols
-+	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-+	      case $host in
-+	      *cygwin* | *mingw* | *cegcc* )
-+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
-+	        ;;
-+	      esac
-+	    }
-+	  else
-+	    $opt_dry_run || {
-+	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
-+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
-+	      eval '$MV "$nlist"T "$nlist"'
-+	      case $host in
-+	        *cygwin* | *mingw* | *cegcc* )
-+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
-+	          ;;
-+	      esac
-+	    }
-+	  fi
-+	fi
-+
-+	for dlprefile in $dlprefiles; do
-+	  func_verbose "extracting global C symbols from \`$dlprefile'"
-+	  func_basename "$dlprefile"
-+	  name="$func_basename_result"
-+          case $host in
-+	    *cygwin* | *mingw* | *cegcc* )
-+	      # if an import library, we need to obtain dlname
-+	      if func_win32_import_lib_p "$dlprefile"; then
-+	        func_tr_sh "$dlprefile"
-+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
-+	        dlprefile_dlbasename=""
-+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
-+	          # Use subshell, to avoid clobbering current variable values
-+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
-+	          if test -n "$dlprefile_dlname" ; then
-+	            func_basename "$dlprefile_dlname"
-+	            dlprefile_dlbasename="$func_basename_result"
-+	          else
-+	            # no lafile. user explicitly requested -dlpreopen <import library>.
-+	            $sharedlib_from_linklib_cmd "$dlprefile"
-+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
-+	          fi
-+	        fi
-+	        $opt_dry_run || {
-+	          if test -n "$dlprefile_dlbasename" ; then
-+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
-+	          else
-+	            func_warning "Could not compute DLL name from $name"
-+	            eval '$ECHO ": $name " >> "$nlist"'
-+	          fi
-+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
-+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
-+	        }
-+	      else # not an import lib
-+	        $opt_dry_run || {
-+	          eval '$ECHO ": $name " >> "$nlist"'
-+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-+	        }
-+	      fi
-+	    ;;
-+	    *)
-+	      $opt_dry_run || {
-+	        eval '$ECHO ": $name " >> "$nlist"'
-+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
-+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-+	      }
-+	    ;;
-+          esac
-+	done
-+
-+	$opt_dry_run || {
-+	  # Make sure we have at least an empty file.
-+	  test -f "$nlist" || : > "$nlist"
-+
-+	  if test -n "$exclude_expsyms"; then
-+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-+	    $MV "$nlist"T "$nlist"
-+	  fi
-+
-+	  # Try sorting and uniquifying the output.
-+	  if $GREP -v "^: " < "$nlist" |
-+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
-+		sort -k 3
-+	      else
-+		sort +2
-+	      fi |
-+	      uniq > "$nlist"S; then
-+	    :
-+	  else
-+	    $GREP -v "^: " < "$nlist" > "$nlist"S
-+	  fi
-+
-+	  if test -f "$nlist"S; then
-+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
-+	  else
-+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
-+	  fi
-+
-+	  echo >> "$output_objdir/$my_dlsyms" "\
-+
-+/* The mapping between symbol names and symbols.  */
-+typedef struct {
-+  const char *name;
-+  void *address;
-+} lt_dlsymlist;
-+extern LT_DLSYM_CONST lt_dlsymlist
-+lt_${my_prefix}_LTX_preloaded_symbols[];
-+LT_DLSYM_CONST lt_dlsymlist
-+lt_${my_prefix}_LTX_preloaded_symbols[] =
-+{\
-+  { \"$my_originator\", (void *) 0 },"
-+
-+	  case $need_lib_prefix in
-+	  no)
-+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
-+	    ;;
-+	  *)
-+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
-+	    ;;
-+	  esac
-+	  echo >> "$output_objdir/$my_dlsyms" "\
-+  {0, (void *) 0}
-+};
-+
-+/* This works around a problem in FreeBSD linker */
-+#ifdef FREEBSD_WORKAROUND
-+static const void *lt_preloaded_setup() {
-+  return lt_${my_prefix}_LTX_preloaded_symbols;
-+}
-+#endif
-+
-+#ifdef __cplusplus
-+}
-+#endif\
-+"
-+	} # !$opt_dry_run
-+
-+	pic_flag_for_symtable=
-+	case "$compile_command " in
-+	*" -static "*) ;;
-+	*)
-+	  case $host in
-+	  # compiling the symbol table file with pic_flag works around
-+	  # a FreeBSD bug that causes programs to crash when -lm is
-+	  # linked before any other PIC object.  But we must not use
-+	  # pic_flag when linking with -static.  The problem exists in
-+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
-+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
-+	  *-*-hpux*)
-+	    pic_flag_for_symtable=" $pic_flag"  ;;
-+	  *)
-+	    if test "X$my_pic_p" != Xno; then
-+	      pic_flag_for_symtable=" $pic_flag"
-+	    fi
-+	    ;;
-+	  esac
-+	  ;;
-+	esac
-+	symtab_cflags=
-+	for arg in $LTCFLAGS; do
-+	  case $arg in
-+	  -pie | -fpie | -fPIE) ;;
-+	  *) func_append symtab_cflags " $arg" ;;
-+	  esac
-+	done
-+
-+	# Now compile the dynamic symbol file.
-+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
-+
-+	# Clean up the generated files.
-+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
-+
-+	# Transform the symbol file into the correct name.
-+	symfileobj="$output_objdir/${my_outputname}S.$objext"
-+	case $host in
-+	*cygwin* | *mingw* | *cegcc* )
-+	  if test -f "$output_objdir/$my_outputname.def"; then
-+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-+	  else
-+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-+	  fi
-+	  ;;
-+	*)
-+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
-+	  ;;
-+	esac
-+	;;
-+      *)
-+	func_fatal_error "unknown suffix for \`$my_dlsyms'"
-+	;;
-+      esac
-+    else
-+      # We keep going just in case the user didn't refer to
-+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
-+      # really was required.
-+
-+      # Nullify the symbol file.
-+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
-+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
-+    fi
-+}
-+
-+# func_win32_libid arg
-+# return the library type of file 'arg'
-+#
-+# Need a lot of goo to handle *both* DLLs and import libs
-+# Has to be a shell function in order to 'eat' the argument
-+# that is supplied when $file_magic_command is called.
-+# Despite the name, also deal with 64 bit binaries.
-+func_win32_libid ()
-+{
-+  $opt_debug
-+  win32_libid_type="unknown"
-+  win32_fileres=`file -L $1 2>/dev/null`
-+  case $win32_fileres in
-+  *ar\ archive\ import\ library*) # definitely import
-+    win32_libid_type="x86 archive import"
-+    ;;
-+  *ar\ archive*) # could be an import, or static
-+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
-+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-+      func_to_tool_file "$1" func_convert_file_msys_to_w32
-+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
-+	$SED -n -e '
-+	    1,100{
-+		/ I /{
-+		    s,.*,import,
-+		    p
-+		    q
-+		}
-+	    }'`
-+      case $win32_nmres in
-+      import*)  win32_libid_type="x86 archive import";;
-+      *)        win32_libid_type="x86 archive static";;
-+      esac
-+    fi
-+    ;;
-+  *DLL*)
-+    win32_libid_type="x86 DLL"
-+    ;;
-+  *executable*) # but shell scripts are "executable" too...
-+    case $win32_fileres in
-+    *MS\ Windows\ PE\ Intel*)
-+      win32_libid_type="x86 DLL"
-+      ;;
-+    esac
-     ;;
-+  esac
-+  $ECHO "$win32_libid_type"
-+}
- 
--  # libtool link mode
--  link | relink)
--    modename="$modename: link"
-+# func_cygming_dll_for_implib ARG
-+#
-+# Platform-specific function to extract the
-+# name of the DLL associated with the specified
-+# import library ARG.
-+# Invoked by eval'ing the libtool variable
-+#    $sharedlib_from_linklib_cmd
-+# Result is available in the variable
-+#    $sharedlib_from_linklib_result
-+func_cygming_dll_for_implib ()
-+{
-+  $opt_debug
-+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
-+}
-+
-+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
-+#
-+# The is the core of a fallback implementation of a
-+# platform-specific function to extract the name of the
-+# DLL associated with the specified import library LIBNAME.
-+#
-+# SECTION_NAME is either .idata$6 or .idata$7, depending
-+# on the platform and compiler that created the implib.
-+#
-+# Echos the name of the DLL associated with the
-+# specified import library.
-+func_cygming_dll_for_implib_fallback_core ()
-+{
-+  $opt_debug
-+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
-+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
-+    $SED '/^Contents of section '"$match_literal"':/{
-+      # Place marker at beginning of archive member dllname section
-+      s/.*/====MARK====/
-+      p
-+      d
-+    }
-+    # These lines can sometimes be longer than 43 characters, but
-+    # are always uninteresting
-+    /:[	 ]*file format pe[i]\{,1\}-/d
-+    /^In archive [^:]*:/d
-+    # Ensure marker is printed
-+    /^====MARK====/p
-+    # Remove all lines with less than 43 characters
-+    /^.\{43\}/!d
-+    # From remaining lines, remove first 43 characters
-+    s/^.\{43\}//' |
-+    $SED -n '
-+      # Join marker and all lines until next marker into a single line
-+      /^====MARK====/ b para
-+      H
-+      $ b para
-+      b
-+      :para
-+      x
-+      s/\n//g
-+      # Remove the marker
-+      s/^====MARK====//
-+      # Remove trailing dots and whitespace
-+      s/[\. \t]*$//
-+      # Print
-+      /./p' |
-+    # we now have a list, one entry per line, of the stringified
-+    # contents of the appropriate section of all members of the
-+    # archive which possess that section. Heuristic: eliminate
-+    # all those which have a first or second character that is
-+    # a '.' (that is, objdump's representation of an unprintable
-+    # character.) This should work for all archives with less than
-+    # 0x302f exports -- but will fail for DLLs whose name actually
-+    # begins with a literal '.' or a single character followed by
-+    # a '.'.
-+    #
-+    # Of those that remain, print the first one.
-+    $SED -e '/^\./d;/^.\./d;q'
-+}
-+
-+# func_cygming_gnu_implib_p ARG
-+# This predicate returns with zero status (TRUE) if
-+# ARG is a GNU/binutils-style import library. Returns
-+# with nonzero status (FALSE) otherwise.
-+func_cygming_gnu_implib_p ()
-+{
-+  $opt_debug
-+  func_to_tool_file "$1" func_convert_file_msys_to_w32
-+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
-+  test -n "$func_cygming_gnu_implib_tmp"
-+}
-+
-+# func_cygming_ms_implib_p ARG
-+# This predicate returns with zero status (TRUE) if
-+# ARG is an MS-style import library. Returns
-+# with nonzero status (FALSE) otherwise.
-+func_cygming_ms_implib_p ()
-+{
-+  $opt_debug
-+  func_to_tool_file "$1" func_convert_file_msys_to_w32
-+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
-+  test -n "$func_cygming_ms_implib_tmp"
-+}
-+
-+# func_cygming_dll_for_implib_fallback ARG
-+# Platform-specific function to extract the
-+# name of the DLL associated with the specified
-+# import library ARG.
-+#
-+# This fallback implementation is for use when $DLLTOOL
-+# does not support the --identify-strict option.
-+# Invoked by eval'ing the libtool variable
-+#    $sharedlib_from_linklib_cmd
-+# Result is available in the variable
-+#    $sharedlib_from_linklib_result
-+func_cygming_dll_for_implib_fallback ()
-+{
-+  $opt_debug
-+  if func_cygming_gnu_implib_p "$1" ; then
-+    # binutils import library
-+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
-+  elif func_cygming_ms_implib_p "$1" ; then
-+    # ms-generated import library
-+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
-+  else
-+    # unknown
-+    sharedlib_from_linklib_result=""
-+  fi
-+}
-+
-+
-+# func_extract_an_archive dir oldlib
-+func_extract_an_archive ()
-+{
-+    $opt_debug
-+    f_ex_an_ar_dir="$1"; shift
-+    f_ex_an_ar_oldlib="$1"
-+    if test "$lock_old_archive_extraction" = yes; then
-+      lockfile=$f_ex_an_ar_oldlib.lock
-+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
-+	func_echo "Waiting for $lockfile to be removed"
-+	sleep 2
-+      done
-+    fi
-+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
-+		   'stat=$?; rm -f "$lockfile"; exit $stat'
-+    if test "$lock_old_archive_extraction" = yes; then
-+      $opt_dry_run || rm -f "$lockfile"
-+    fi
-+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
-+     :
-+    else
-+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
-+    fi
-+}
-+
-+
-+# func_extract_archives gentop oldlib ...
-+func_extract_archives ()
-+{
-+    $opt_debug
-+    my_gentop="$1"; shift
-+    my_oldlibs=${1+"$@"}
-+    my_oldobjs=""
-+    my_xlib=""
-+    my_xabs=""
-+    my_xdir=""
-+
-+    for my_xlib in $my_oldlibs; do
-+      # Extract the objects.
-+      case $my_xlib in
-+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
-+	*) my_xabs=`pwd`"/$my_xlib" ;;
-+      esac
-+      func_basename "$my_xlib"
-+      my_xlib="$func_basename_result"
-+      my_xlib_u=$my_xlib
-+      while :; do
-+        case " $extracted_archives " in
-+	*" $my_xlib_u "*)
-+	  func_arith $extracted_serial + 1
-+	  extracted_serial=$func_arith_result
-+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
-+	*) break ;;
-+	esac
-+      done
-+      extracted_archives="$extracted_archives $my_xlib_u"
-+      my_xdir="$my_gentop/$my_xlib_u"
-+
-+      func_mkdir_p "$my_xdir"
-+
-+      case $host in
-+      *-darwin*)
-+	func_verbose "Extracting $my_xabs"
-+	# Do not bother doing anything if just a dry run
-+	$opt_dry_run || {
-+	  darwin_orig_dir=`pwd`
-+	  cd $my_xdir || exit $?
-+	  darwin_archive=$my_xabs
-+	  darwin_curdir=`pwd`
-+	  darwin_base_archive=`basename "$darwin_archive"`
-+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
-+	  if test -n "$darwin_arches"; then
-+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
-+	    darwin_arch=
-+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
-+	    for darwin_arch in  $darwin_arches ; do
-+	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-+	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
-+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
-+	      cd "$darwin_curdir"
-+	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
-+	    done # $darwin_arches
-+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
-+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
-+	    darwin_file=
-+	    darwin_files=
-+	    for darwin_file in $darwin_filelist; do
-+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
-+	      $LIPO -create -output "$darwin_file" $darwin_files
-+	    done # $darwin_filelist
-+	    $RM -rf unfat-$$
-+	    cd "$darwin_orig_dir"
-+	  else
-+	    cd $darwin_orig_dir
-+	    func_extract_an_archive "$my_xdir" "$my_xabs"
-+	  fi # $darwin_arches
-+	} # !$opt_dry_run
-+	;;
-+      *)
-+        func_extract_an_archive "$my_xdir" "$my_xabs"
-+	;;
-+      esac
-+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
-+    done
-+
-+    func_extract_archives_result="$my_oldobjs"
-+}
-+
-+
-+# func_emit_wrapper [arg=no]
-+#
-+# Emit a libtool wrapper script on stdout.
-+# Don't directly open a file because we may want to
-+# incorporate the script contents within a cygwin/mingw
-+# wrapper executable.  Must ONLY be called from within
-+# func_mode_link because it depends on a number of variables
-+# set therein.
-+#
-+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-+# variable will take.  If 'yes', then the emitted script
-+# will assume that the directory in which it is stored is
-+# the $objdir directory.  This is a cygwin/mingw-specific
-+# behavior.
-+func_emit_wrapper ()
-+{
-+	func_emit_wrapper_arg1=${1-no}
-+
-+	$ECHO "\
-+#! $SHELL
-+
-+# $output - temporary wrapper script for $objdir/$outputname
-+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-+#
-+# The $output program cannot be directly executed until all the libtool
-+# libraries that it depends on are installed.
-+#
-+# This wrapper script should never be moved out of the build directory.
-+# If it is, it will not operate correctly.
-+
-+# Sed substitution that helps us do robust quoting.  It backslashifies
-+# metacharacters that are still active within double-quoted strings.
-+sed_quote_subst='$sed_quote_subst'
-+
-+# Be Bourne compatible
-+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
-+  emulate sh
-+  NULLCMD=:
-+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
-+  # is contrary to our usage.  Disable this feature.
-+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-+  setopt NO_GLOB_SUBST
-+else
-+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
-+fi
-+BIN_SH=xpg4; export BIN_SH # for Tru64
-+DUALCASE=1; export DUALCASE # for MKS sh
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-+
-+relink_command=\"$relink_command\"
-+
-+# This environment variable determines our operation mode.
-+if test \"\$libtool_install_magic\" = \"$magic\"; then
-+  # install mode needs the following variables:
-+  generated_by_libtool_version='$macro_version'
-+  notinst_deplibs='$notinst_deplibs'
-+else
-+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
-+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
-+    file=\"\$0\""
-+
-+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
-+    $ECHO "\
-+
-+# A function that is used when there is no print builtin or printf.
-+func_fallback_echo ()
-+{
-+  eval 'cat <<_LTECHO_EOF
-+\$1
-+_LTECHO_EOF'
-+}
-+    ECHO=\"$qECHO\"
-+  fi
-+
-+# Very basic option parsing. These options are (a) specific to
-+# the libtool wrapper, (b) are identical between the wrapper
-+# /script/ and the wrapper /executable/ which is used only on
-+# windows platforms, and (c) all begin with the string "--lt-"
-+# (application programs are unlikely to have options which match
-+# this pattern).
-+#
-+# There are only two supported options: --lt-debug and
-+# --lt-dump-script. There is, deliberately, no --lt-help.
-+#
-+# The first argument to this parsing function should be the
-+# script's $0 value, followed by "$@".
-+lt_option_debug=
-+func_parse_lt_options ()
-+{
-+  lt_script_arg0=\$0
-+  shift
-+  for lt_opt
-+  do
-+    case \"\$lt_opt\" in
-+    --lt-debug) lt_option_debug=1 ;;
-+    --lt-dump-script)
-+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
-+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
-+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
-+        cat \"\$lt_dump_D/\$lt_dump_F\"
-+        exit 0
-+      ;;
-+    --lt-*)
-+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
-+        exit 1
-+      ;;
-+    esac
-+  done
-+
-+  # Print the debug banner immediately:
-+  if test -n \"\$lt_option_debug\"; then
-+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
-+  fi
-+}
-+
-+# Used when --lt-debug. Prints its arguments to stdout
-+# (redirection is the responsibility of the caller)
-+func_lt_dump_args ()
-+{
-+  lt_dump_args_N=1;
-+  for lt_arg
-+  do
-+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
-+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
-+  done
-+}
-+
-+# Core function for launching the target application
-+func_exec_program_core ()
-+{
-+"
-+  case $host in
-+  # Backslashes separate directories on plain windows
-+  *-*-mingw | *-*-os2* | *-cegcc*)
-+    $ECHO "\
-+      if test -n \"\$lt_option_debug\"; then
-+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
-+        func_lt_dump_args \${1+\"\$@\"} 1>&2
-+      fi
-+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-+"
-+    ;;
-+
-+  *)
-+    $ECHO "\
-+      if test -n \"\$lt_option_debug\"; then
-+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
-+        func_lt_dump_args \${1+\"\$@\"} 1>&2
-+      fi
-+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-+"
-+    ;;
-+  esac
-+  $ECHO "\
-+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-+      exit 1
-+}
-+
-+# A function to encapsulate launching the target application
-+# Strips options in the --lt-* namespace from \$@ and
-+# launches target application with the remaining arguments.
-+func_exec_program ()
-+{
-+  for lt_wr_arg
-+  do
-+    case \$lt_wr_arg in
-+    --lt-*) ;;
-+    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
-+    esac
-+    shift
-+  done
-+  func_exec_program_core \${1+\"\$@\"}
-+}
-+
-+  # Parse options
-+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
-+
-+  # Find the directory that this script lives in.
-+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
-+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-+
-+  # Follow symbolic links until we get to the real thisdir.
-+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
-+  while test -n \"\$file\"; do
-+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
-+
-+    # If there was a directory component, then change thisdir.
-+    if test \"x\$destdir\" != \"x\$file\"; then
-+      case \"\$destdir\" in
-+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
-+      *) thisdir=\"\$thisdir/\$destdir\" ;;
-+      esac
-+    fi
-+
-+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
-+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
-+  done
-+
-+  # Usually 'no', except on cygwin/mingw when embedded into
-+  # the cwrapper.
-+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
-+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
-+    # special case for '.'
-+    if test \"\$thisdir\" = \".\"; then
-+      thisdir=\`pwd\`
-+    fi
-+    # remove .libs from thisdir
-+    case \"\$thisdir\" in
-+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
-+    $objdir )   thisdir=. ;;
-+    esac
-+  fi
-+
-+  # Try to get the absolute directory name.
-+  absdir=\`cd \"\$thisdir\" && pwd\`
-+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-+"
-+
-+	if test "$fast_install" = yes; then
-+	  $ECHO "\
-+  program=lt-'$outputname'$exeext
-+  progdir=\"\$thisdir/$objdir\"
-+
-+  if test ! -f \"\$progdir/\$program\" ||
-+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
-+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-+
-+    file=\"\$\$-\$program\"
-+
-+    if test ! -d \"\$progdir\"; then
-+      $MKDIR \"\$progdir\"
-+    else
-+      $RM \"\$progdir/\$file\"
-+    fi"
-+
-+	  $ECHO "\
-+
-+    # relink executable if necessary
-+    if test -n \"\$relink_command\"; then
-+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
-+      else
-+	$ECHO \"\$relink_command_output\" >&2
-+	$RM \"\$progdir/\$file\"
-+	exit 1
-+      fi
-+    fi
-+
-+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-+    { $RM \"\$progdir/\$program\";
-+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-+    $RM \"\$progdir/\$file\"
-+  fi"
-+	else
-+	  $ECHO "\
-+  program='$outputname'
-+  progdir=\"\$thisdir/$objdir\"
-+"
-+	fi
-+
-+	$ECHO "\
-+
-+  if test -f \"\$progdir/\$program\"; then"
-+
-+	# fixup the dll searchpath if we need to.
-+	#
-+	# Fix the DLL searchpath if we need to.  Do this before prepending
-+	# to shlibpath, because on Windows, both are PATH and uninstalled
-+	# libraries must come first.
-+	if test -n "$dllsearchpath"; then
-+	  $ECHO "\
-+    # Add the dll search path components to the executable PATH
-+    PATH=$dllsearchpath:\$PATH
-+"
-+	fi
-+
-+	# Export our shlibpath_var if we have one.
-+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-+	  $ECHO "\
-+    # Add our own library path to $shlibpath_var
-+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-+
-+    # Some systems cannot cope with colon-terminated $shlibpath_var
-+    # The second colon is a workaround for a bug in BeOS R4 sed
-+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
-+
-+    export $shlibpath_var
-+"
-+	fi
-+
-+	$ECHO "\
-+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-+      # Run the actual program with our arguments.
-+      func_exec_program \${1+\"\$@\"}
-+    fi
-+  else
-+    # The program doesn't exist.
-+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
-+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
-+    exit 1
-+  fi
-+fi\
-+"
-+}
-+
-+
-+# func_emit_cwrapperexe_src
-+# emit the source code for a wrapper executable on stdout
-+# Must ONLY be called from within func_mode_link because
-+# it depends on a number of variable set therein.
-+func_emit_cwrapperexe_src ()
-+{
-+	cat <<EOF
-+
-+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
-+
-+   The $output program cannot be directly executed until all the libtool
-+   libraries that it depends on are installed.
-+
-+   This wrapper executable should never be moved out of the build directory.
-+   If it is, it will not operate correctly.
-+*/
-+EOF
-+	    cat <<"EOF"
-+#ifdef _MSC_VER
-+# define _CRT_SECURE_NO_DEPRECATE 1
-+#endif
-+#include <stdio.h>
-+#include <stdlib.h>
-+#ifdef _MSC_VER
-+# include <direct.h>
-+# include <process.h>
-+# include <io.h>
-+#else
-+# include <unistd.h>
-+# include <stdint.h>
-+# ifdef __CYGWIN__
-+#  include <io.h>
-+# endif
-+#endif
-+#include <malloc.h>
-+#include <stdarg.h>
-+#include <assert.h>
-+#include <string.h>
-+#include <ctype.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <sys/stat.h>
-+
-+/* declarations of non-ANSI functions */
-+#if defined(__MINGW32__)
-+# ifdef __STRICT_ANSI__
-+int _putenv (const char *);
-+# endif
-+#elif defined(__CYGWIN__)
-+# ifdef __STRICT_ANSI__
-+char *realpath (const char *, char *);
-+int putenv (char *);
-+int setenv (const char *, const char *, int);
-+# endif
-+/* #elif defined (other platforms) ... */
-+#endif
-+
-+/* portability defines, excluding path handling macros */
-+#if defined(_MSC_VER)
-+# define setmode _setmode
-+# define stat    _stat
-+# define chmod   _chmod
-+# define getcwd  _getcwd
-+# define putenv  _putenv
-+# define S_IXUSR _S_IEXEC
-+# ifndef _INTPTR_T_DEFINED
-+#  define _INTPTR_T_DEFINED
-+#  define intptr_t int
-+# endif
-+#elif defined(__MINGW32__)
-+# define setmode _setmode
-+# define stat    _stat
-+# define chmod   _chmod
-+# define getcwd  _getcwd
-+# define putenv  _putenv
-+#elif defined(__CYGWIN__)
-+# define HAVE_SETENV
-+# define FOPEN_WB "wb"
-+/* #elif defined (other platforms) ... */
-+#endif
-+
-+#if defined(PATH_MAX)
-+# define LT_PATHMAX PATH_MAX
-+#elif defined(MAXPATHLEN)
-+# define LT_PATHMAX MAXPATHLEN
-+#else
-+# define LT_PATHMAX 1024
-+#endif
-+
-+#ifndef S_IXOTH
-+# define S_IXOTH 0
-+#endif
-+#ifndef S_IXGRP
-+# define S_IXGRP 0
-+#endif
-+
-+/* path handling portability macros */
-+#ifndef DIR_SEPARATOR
-+# define DIR_SEPARATOR '/'
-+# define PATH_SEPARATOR ':'
-+#endif
-+
-+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-+  defined (__OS2__)
-+# define HAVE_DOS_BASED_FILE_SYSTEM
-+# define FOPEN_WB "wb"
-+# ifndef DIR_SEPARATOR_2
-+#  define DIR_SEPARATOR_2 '\\'
-+# endif
-+# ifndef PATH_SEPARATOR_2
-+#  define PATH_SEPARATOR_2 ';'
-+# endif
-+#endif
-+
-+#ifndef DIR_SEPARATOR_2
-+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-+#else /* DIR_SEPARATOR_2 */
-+# define IS_DIR_SEPARATOR(ch) \
-+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-+#endif /* DIR_SEPARATOR_2 */
-+
-+#ifndef PATH_SEPARATOR_2
-+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-+#else /* PATH_SEPARATOR_2 */
-+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-+#endif /* PATH_SEPARATOR_2 */
-+
-+#ifndef FOPEN_WB
-+# define FOPEN_WB "w"
-+#endif
-+#ifndef _O_BINARY
-+# define _O_BINARY 0
-+#endif
-+
-+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
-+#define XFREE(stale) do { \
-+  if (stale) { free ((void *) stale); stale = 0; } \
-+} while (0)
-+
-+#if defined(LT_DEBUGWRAPPER)
-+static int lt_debug = 1;
-+#else
-+static int lt_debug = 0;
-+#endif
-+
-+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
-+
-+void *xmalloc (size_t num);
-+char *xstrdup (const char *string);
-+const char *base_name (const char *name);
-+char *find_executable (const char *wrapper);
-+char *chase_symlinks (const char *pathspec);
-+int make_executable (const char *path);
-+int check_executable (const char *path);
-+char *strendzap (char *str, const char *pat);
-+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
-+void lt_fatal (const char *file, int line, const char *message, ...);
-+static const char *nonnull (const char *s);
-+static const char *nonempty (const char *s);
-+void lt_setenv (const char *name, const char *value);
-+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-+void lt_update_exe_path (const char *name, const char *value);
-+void lt_update_lib_path (const char *name, const char *value);
-+char **prepare_spawn (char **argv);
-+void lt_dump_script (FILE *f);
-+EOF
-+
-+	    cat <<EOF
-+volatile const char * MAGIC_EXE = "$magic_exe";
-+const char * LIB_PATH_VARNAME = "$shlibpath_var";
-+EOF
-+
-+	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-+              func_to_host_path "$temp_rpath"
-+	      cat <<EOF
-+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
-+EOF
-+	    else
-+	      cat <<"EOF"
-+const char * LIB_PATH_VALUE   = "";
-+EOF
-+	    fi
-+
-+	    if test -n "$dllsearchpath"; then
-+              func_to_host_path "$dllsearchpath:"
-+	      cat <<EOF
-+const char * EXE_PATH_VARNAME = "PATH";
-+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
-+EOF
-+	    else
-+	      cat <<"EOF"
-+const char * EXE_PATH_VARNAME = "";
-+const char * EXE_PATH_VALUE   = "";
-+EOF
-+	    fi
-+
-+	    if test "$fast_install" = yes; then
-+	      cat <<EOF
-+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
-+EOF
-+	    else
-+	      cat <<EOF
-+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
-+EOF
-+	    fi
-+
-+
-+	    cat <<"EOF"
-+
-+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
-+
-+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
-+
-+int
-+main (int argc, char *argv[])
-+{
-+  char **newargz;
-+  int  newargc;
-+  char *tmp_pathspec;
-+  char *actual_cwrapper_path;
-+  char *actual_cwrapper_name;
-+  char *target_name;
-+  char *lt_argv_zero;
-+  intptr_t rval = 127;
-+
-+  int i;
-+
-+  program_name = (char *) xstrdup (base_name (argv[0]));
-+  newargz = XMALLOC (char *, argc + 1);
-+
-+  /* very simple arg parsing; don't want to rely on getopt
-+   * also, copy all non cwrapper options to newargz, except
-+   * argz[0], which is handled differently
-+   */
-+  newargc=0;
-+  for (i = 1; i < argc; i++)
-+    {
-+      if (strcmp (argv[i], dumpscript_opt) == 0)
-+	{
-+EOF
-+	    case "$host" in
-+	      *mingw* | *cygwin* )
-+		# make stdout use "unix" line endings
-+		echo "          setmode(1,_O_BINARY);"
-+		;;
-+	      esac
-+
-+	    cat <<"EOF"
-+	  lt_dump_script (stdout);
-+	  return 0;
-+	}
-+      if (strcmp (argv[i], debug_opt) == 0)
-+	{
-+          lt_debug = 1;
-+          continue;
-+	}
-+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
-+        {
-+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-+             namespace, but it is not one of the ones we know about and
-+             have already dealt with, above (inluding dump-script), then
-+             report an error. Otherwise, targets might begin to believe
-+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-+             namespace. The first time any user complains about this, we'll
-+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-+             or a configure.ac-settable value.
-+           */
-+          lt_fatal (__FILE__, __LINE__,
-+		    "unrecognized %s option: '%s'",
-+                    ltwrapper_option_prefix, argv[i]);
-+        }
-+      /* otherwise ... */
-+      newargz[++newargc] = xstrdup (argv[i]);
-+    }
-+  newargz[++newargc] = NULL;
-+
-+EOF
-+	    cat <<EOF
-+  /* The GNU banner must be the first non-error debug message */
-+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
-+EOF
-+	    cat <<"EOF"
-+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
-+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
-+
-+  tmp_pathspec = find_executable (argv[0]);
-+  if (tmp_pathspec == NULL)
-+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
-+  lt_debugprintf (__FILE__, __LINE__,
-+                  "(main) found exe (before symlink chase) at: %s\n",
-+		  tmp_pathspec);
-+
-+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-+  lt_debugprintf (__FILE__, __LINE__,
-+                  "(main) found exe (after symlink chase) at: %s\n",
-+		  actual_cwrapper_path);
-+  XFREE (tmp_pathspec);
-+
-+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
-+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
-+
-+  /* wrapper name transforms */
-+  strendzap (actual_cwrapper_name, ".exe");
-+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
-+  XFREE (actual_cwrapper_name);
-+  actual_cwrapper_name = tmp_pathspec;
-+  tmp_pathspec = 0;
-+
-+  /* target_name transforms -- use actual target program name; might have lt- prefix */
-+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
-+  strendzap (target_name, ".exe");
-+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
-+  XFREE (target_name);
-+  target_name = tmp_pathspec;
-+  tmp_pathspec = 0;
-+
-+  lt_debugprintf (__FILE__, __LINE__,
-+		  "(main) libtool target name: %s\n",
-+		  target_name);
-+EOF
-+
-+	    cat <<EOF
-+  newargz[0] =
-+    XMALLOC (char, (strlen (actual_cwrapper_path) +
-+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
-+  strcpy (newargz[0], actual_cwrapper_path);
-+  strcat (newargz[0], "$objdir");
-+  strcat (newargz[0], "/");
-+EOF
-+
-+	    cat <<"EOF"
-+  /* stop here, and copy so we don't have to do this twice */
-+  tmp_pathspec = xstrdup (newargz[0]);
-+
-+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
-+  strcat (newargz[0], actual_cwrapper_name);
-+
-+  /* DO want the lt- prefix here if it exists, so use target_name */
-+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
-+  XFREE (tmp_pathspec);
-+  tmp_pathspec = NULL;
-+EOF
-+
-+	    case $host_os in
-+	      mingw*)
-+	    cat <<"EOF"
-+  {
-+    char* p;
-+    while ((p = strchr (newargz[0], '\\')) != NULL)
-+      {
-+	*p = '/';
-+      }
-+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
-+      {
-+	*p = '/';
-+      }
-+  }
-+EOF
-+	    ;;
-+	    esac
-+
-+	    cat <<"EOF"
-+  XFREE (target_name);
-+  XFREE (actual_cwrapper_path);
-+  XFREE (actual_cwrapper_name);
-+
-+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
-+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
-+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
-+     because on Windows, both *_VARNAMEs are PATH but uninstalled
-+     libraries must come first. */
-+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
-+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
-+
-+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
-+		  nonnull (lt_argv_zero));
-+  for (i = 0; i < newargc; i++)
-+    {
-+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
-+		      i, nonnull (newargz[i]));
-+    }
-+
-+EOF
-+
-+	    case $host_os in
-+	      mingw*)
-+		cat <<"EOF"
-+  /* execv doesn't actually work on mingw as expected on unix */
-+  newargz = prepare_spawn (newargz);
-+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
-+  if (rval == -1)
-+    {
-+      /* failed to start process */
-+      lt_debugprintf (__FILE__, __LINE__,
-+		      "(main) failed to launch target \"%s\": %s\n",
-+		      lt_argv_zero, nonnull (strerror (errno)));
-+      return 127;
-+    }
-+  return rval;
-+EOF
-+		;;
-+	      *)
-+		cat <<"EOF"
-+  execv (lt_argv_zero, newargz);
-+  return rval; /* =127, but avoids unused variable warning */
-+EOF
-+		;;
-+	    esac
-+
-+	    cat <<"EOF"
-+}
-+
-+void *
-+xmalloc (size_t num)
-+{
-+  void *p = (void *) malloc (num);
-+  if (!p)
-+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
-+
-+  return p;
-+}
-+
-+char *
-+xstrdup (const char *string)
-+{
-+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
-+			  string) : NULL;
-+}
-+
-+const char *
-+base_name (const char *name)
-+{
-+  const char *base;
-+
-+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-+  /* Skip over the disk name in MSDOS pathnames. */
-+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
-+    name += 2;
-+#endif
-+
-+  for (base = name; *name; name++)
-+    if (IS_DIR_SEPARATOR (*name))
-+      base = name + 1;
-+  return base;
-+}
-+
-+int
-+check_executable (const char *path)
-+{
-+  struct stat st;
-+
-+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
-+                  nonempty (path));
-+  if ((!path) || (!*path))
-+    return 0;
-+
-+  if ((stat (path, &st) >= 0)
-+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
-+    return 1;
-+  else
-+    return 0;
-+}
-+
-+int
-+make_executable (const char *path)
-+{
-+  int rval = 0;
-+  struct stat st;
-+
-+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
-+                  nonempty (path));
-+  if ((!path) || (!*path))
-+    return 0;
-+
-+  if (stat (path, &st) >= 0)
-+    {
-+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
-+    }
-+  return rval;
-+}
-+
-+/* Searches for the full path of the wrapper.  Returns
-+   newly allocated full path name if found, NULL otherwise
-+   Does not chase symlinks, even on platforms that support them.
-+*/
-+char *
-+find_executable (const char *wrapper)
-+{
-+  int has_slash = 0;
-+  const char *p;
-+  const char *p_next;
-+  /* static buffer for getcwd */
-+  char tmp[LT_PATHMAX + 1];
-+  int tmp_len;
-+  char *concat_name;
-+
-+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
-+                  nonempty (wrapper));
-+
-+  if ((wrapper == NULL) || (*wrapper == '\0'))
-+    return NULL;
-+
-+  /* Absolute path? */
-+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
-+    {
-+      concat_name = xstrdup (wrapper);
-+      if (check_executable (concat_name))
-+	return concat_name;
-+      XFREE (concat_name);
-+    }
-+  else
-+    {
-+#endif
-+      if (IS_DIR_SEPARATOR (wrapper[0]))
-+	{
-+	  concat_name = xstrdup (wrapper);
-+	  if (check_executable (concat_name))
-+	    return concat_name;
-+	  XFREE (concat_name);
-+	}
-+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-+    }
-+#endif
-+
-+  for (p = wrapper; *p; p++)
-+    if (*p == '/')
-+      {
-+	has_slash = 1;
-+	break;
-+      }
-+  if (!has_slash)
-+    {
-+      /* no slashes; search PATH */
-+      const char *path = getenv ("PATH");
-+      if (path != NULL)
-+	{
-+	  for (p = path; *p; p = p_next)
-+	    {
-+	      const char *q;
-+	      size_t p_len;
-+	      for (q = p; *q; q++)
-+		if (IS_PATH_SEPARATOR (*q))
-+		  break;
-+	      p_len = q - p;
-+	      p_next = (*q == '\0' ? q : q + 1);
-+	      if (p_len == 0)
-+		{
-+		  /* empty path: current directory */
-+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
-+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
-+                              nonnull (strerror (errno)));
-+		  tmp_len = strlen (tmp);
-+		  concat_name =
-+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
-+		  memcpy (concat_name, tmp, tmp_len);
-+		  concat_name[tmp_len] = '/';
-+		  strcpy (concat_name + tmp_len + 1, wrapper);
-+		}
-+	      else
-+		{
-+		  concat_name =
-+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
-+		  memcpy (concat_name, p, p_len);
-+		  concat_name[p_len] = '/';
-+		  strcpy (concat_name + p_len + 1, wrapper);
-+		}
-+	      if (check_executable (concat_name))
-+		return concat_name;
-+	      XFREE (concat_name);
-+	    }
-+	}
-+      /* not found in PATH; assume curdir */
-+    }
-+  /* Relative path | not found in path: prepend cwd */
-+  if (getcwd (tmp, LT_PATHMAX) == NULL)
-+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
-+              nonnull (strerror (errno)));
-+  tmp_len = strlen (tmp);
-+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
-+  memcpy (concat_name, tmp, tmp_len);
-+  concat_name[tmp_len] = '/';
-+  strcpy (concat_name + tmp_len + 1, wrapper);
-+
-+  if (check_executable (concat_name))
-+    return concat_name;
-+  XFREE (concat_name);
-+  return NULL;
-+}
-+
-+char *
-+chase_symlinks (const char *pathspec)
-+{
-+#ifndef S_ISLNK
-+  return xstrdup (pathspec);
-+#else
-+  char buf[LT_PATHMAX];
-+  struct stat s;
-+  char *tmp_pathspec = xstrdup (pathspec);
-+  char *p;
-+  int has_symlinks = 0;
-+  while (strlen (tmp_pathspec) && !has_symlinks)
-+    {
-+      lt_debugprintf (__FILE__, __LINE__,
-+		      "checking path component for symlinks: %s\n",
-+		      tmp_pathspec);
-+      if (lstat (tmp_pathspec, &s) == 0)
-+	{
-+	  if (S_ISLNK (s.st_mode) != 0)
-+	    {
-+	      has_symlinks = 1;
-+	      break;
-+	    }
-+
-+	  /* search backwards for last DIR_SEPARATOR */
-+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
-+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
-+	    p--;
-+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
-+	    {
-+	      /* no more DIR_SEPARATORS left */
-+	      break;
-+	    }
-+	  *p = '\0';
-+	}
-+      else
-+	{
-+	  lt_fatal (__FILE__, __LINE__,
-+		    "error accessing file \"%s\": %s",
-+		    tmp_pathspec, nonnull (strerror (errno)));
-+	}
-+    }
-+  XFREE (tmp_pathspec);
-+
-+  if (!has_symlinks)
-+    {
-+      return xstrdup (pathspec);
-+    }
-+
-+  tmp_pathspec = realpath (pathspec, buf);
-+  if (tmp_pathspec == 0)
-+    {
-+      lt_fatal (__FILE__, __LINE__,
-+		"could not follow symlinks for %s", pathspec);
-+    }
-+  return xstrdup (tmp_pathspec);
-+#endif
-+}
-+
-+char *
-+strendzap (char *str, const char *pat)
-+{
-+  size_t len, patlen;
-+
-+  assert (str != NULL);
-+  assert (pat != NULL);
-+
-+  len = strlen (str);
-+  patlen = strlen (pat);
-+
-+  if (patlen <= len)
-+    {
-+      str += len - patlen;
-+      if (strcmp (str, pat) == 0)
-+	*str = '\0';
-+    }
-+  return str;
-+}
-+
-+void
-+lt_debugprintf (const char *file, int line, const char *fmt, ...)
-+{
-+  va_list args;
-+  if (lt_debug)
-+    {
-+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
-+      va_start (args, fmt);
-+      (void) vfprintf (stderr, fmt, args);
-+      va_end (args);
-+    }
-+}
-+
-+static void
-+lt_error_core (int exit_status, const char *file,
-+	       int line, const char *mode,
-+	       const char *message, va_list ap)
-+{
-+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
-+  vfprintf (stderr, message, ap);
-+  fprintf (stderr, ".\n");
-+
-+  if (exit_status >= 0)
-+    exit (exit_status);
-+}
-+
-+void
-+lt_fatal (const char *file, int line, const char *message, ...)
-+{
-+  va_list ap;
-+  va_start (ap, message);
-+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
-+  va_end (ap);
-+}
-+
-+static const char *
-+nonnull (const char *s)
-+{
-+  return s ? s : "(null)";
-+}
-+
-+static const char *
-+nonempty (const char *s)
-+{
-+  return (s && !*s) ? "(empty)" : nonnull (s);
-+}
-+
-+void
-+lt_setenv (const char *name, const char *value)
-+{
-+  lt_debugprintf (__FILE__, __LINE__,
-+		  "(lt_setenv) setting '%s' to '%s'\n",
-+                  nonnull (name), nonnull (value));
-+  {
-+#ifdef HAVE_SETENV
-+    /* always make a copy, for consistency with !HAVE_SETENV */
-+    char *str = xstrdup (value);
-+    setenv (name, str, 1);
-+#else
-+    int len = strlen (name) + 1 + strlen (value) + 1;
-+    char *str = XMALLOC (char, len);
-+    sprintf (str, "%s=%s", name, value);
-+    if (putenv (str) != EXIT_SUCCESS)
-+      {
-+        XFREE (str);
-+      }
-+#endif
-+  }
-+}
-+
-+char *
-+lt_extend_str (const char *orig_value, const char *add, int to_end)
-+{
-+  char *new_value;
-+  if (orig_value && *orig_value)
-+    {
-+      int orig_value_len = strlen (orig_value);
-+      int add_len = strlen (add);
-+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
-+      if (to_end)
-+        {
-+          strcpy (new_value, orig_value);
-+          strcpy (new_value + orig_value_len, add);
-+        }
-+      else
-+        {
-+          strcpy (new_value, add);
-+          strcpy (new_value + add_len, orig_value);
-+        }
-+    }
-+  else
-+    {
-+      new_value = xstrdup (add);
-+    }
-+  return new_value;
-+}
-+
-+void
-+lt_update_exe_path (const char *name, const char *value)
-+{
-+  lt_debugprintf (__FILE__, __LINE__,
-+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-+                  nonnull (name), nonnull (value));
-+
-+  if (name && *name && value && *value)
-+    {
-+      char *new_value = lt_extend_str (getenv (name), value, 0);
-+      /* some systems can't cope with a ':'-terminated path #' */
-+      int len = strlen (new_value);
-+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
-+        {
-+          new_value[len-1] = '\0';
-+        }
-+      lt_setenv (name, new_value);
-+      XFREE (new_value);
-+    }
-+}
-+
-+void
-+lt_update_lib_path (const char *name, const char *value)
-+{
-+  lt_debugprintf (__FILE__, __LINE__,
-+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-+                  nonnull (name), nonnull (value));
-+
-+  if (name && *name && value && *value)
-+    {
-+      char *new_value = lt_extend_str (getenv (name), value, 0);
-+      lt_setenv (name, new_value);
-+      XFREE (new_value);
-+    }
-+}
-+
-+EOF
-+	    case $host_os in
-+	      mingw*)
-+		cat <<"EOF"
-+
-+/* Prepares an argument vector before calling spawn().
-+   Note that spawn() does not by itself call the command interpreter
-+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
-+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-+         GetVersionEx(&v);
-+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
-+      }) ? "cmd.exe" : "command.com").
-+   Instead it simply concatenates the arguments, separated by ' ', and calls
-+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
-+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
-+   special way:
-+   - Space and tab are interpreted as delimiters. They are not treated as
-+     delimiters if they are surrounded by double quotes: "...".
-+   - Unescaped double quotes are removed from the input. Their only effect is
-+     that within double quotes, space and tab are treated like normal
-+     characters.
-+   - Backslashes not followed by double quotes are not special.
-+   - But 2*n+1 backslashes followed by a double quote become
-+     n backslashes followed by a double quote (n >= 0):
-+       \" -> "
-+       \\\" -> \"
-+       \\\\\" -> \\"
-+ */
-+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
-+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
-+char **
-+prepare_spawn (char **argv)
-+{
-+  size_t argc;
-+  char **new_argv;
-+  size_t i;
-+
-+  /* Count number of arguments.  */
-+  for (argc = 0; argv[argc] != NULL; argc++)
-+    ;
-+
-+  /* Allocate new argument vector.  */
-+  new_argv = XMALLOC (char *, argc + 1);
-+
-+  /* Put quoted arguments into the new argument vector.  */
-+  for (i = 0; i < argc; i++)
-+    {
-+      const char *string = argv[i];
-+
-+      if (string[0] == '\0')
-+	new_argv[i] = xstrdup ("\"\"");
-+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
-+	{
-+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
-+	  size_t length;
-+	  unsigned int backslashes;
-+	  const char *s;
-+	  char *quoted_string;
-+	  char *p;
-+
-+	  length = 0;
-+	  backslashes = 0;
-+	  if (quote_around)
-+	    length++;
-+	  for (s = string; *s != '\0'; s++)
-+	    {
-+	      char c = *s;
-+	      if (c == '"')
-+		length += backslashes + 1;
-+	      length++;
-+	      if (c == '\\')
-+		backslashes++;
-+	      else
-+		backslashes = 0;
-+	    }
-+	  if (quote_around)
-+	    length += backslashes + 1;
-+
-+	  quoted_string = XMALLOC (char, length + 1);
-+
-+	  p = quoted_string;
-+	  backslashes = 0;
-+	  if (quote_around)
-+	    *p++ = '"';
-+	  for (s = string; *s != '\0'; s++)
-+	    {
-+	      char c = *s;
-+	      if (c == '"')
-+		{
-+		  unsigned int j;
-+		  for (j = backslashes + 1; j > 0; j--)
-+		    *p++ = '\\';
-+		}
-+	      *p++ = c;
-+	      if (c == '\\')
-+		backslashes++;
-+	      else
-+		backslashes = 0;
-+	    }
-+	  if (quote_around)
-+	    {
-+	      unsigned int j;
-+	      for (j = backslashes; j > 0; j--)
-+		*p++ = '\\';
-+	      *p++ = '"';
-+	    }
-+	  *p = '\0';
-+
-+	  new_argv[i] = quoted_string;
-+	}
-+      else
-+	new_argv[i] = (char *) string;
-+    }
-+  new_argv[argc] = NULL;
-+
-+  return new_argv;
-+}
-+EOF
-+		;;
-+	    esac
-+
-+            cat <<"EOF"
-+void lt_dump_script (FILE* f)
-+{
-+EOF
-+	    func_emit_wrapper yes |
-+              $SED -e 's/\([\\"]\)/\\\1/g' \
-+	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
-+
-+            cat <<"EOF"
-+}
-+EOF
-+}
-+# end: func_emit_cwrapperexe_src
-+
-+# func_win32_import_lib_p ARG
-+# True if ARG is an import lib, as indicated by $file_magic_cmd
-+func_win32_import_lib_p ()
-+{
-+    $opt_debug
-+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
-+    *import*) : ;;
-+    *) false ;;
-+    esac
-+}
-+
-+# func_mode_link arg...
-+func_mode_link ()
-+{
-+    $opt_debug
-     case $host in
--    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-       # It is impossible to link a dll without this setting, and
-       # we shouldn't force the makefile maintainer to figure out
-       # which system we are compiling for in order to pass an extra
--      # flag for every libtool invokation.
-+      # flag for every libtool invocation.
-       # allow_undefined=no
- 
-       # FIXME: Unfortunately, there are problems with the above when trying
-@@ -812,10 +5100,10 @@
-       allow_undefined=yes
-       ;;
-     esac
--    libtool_args="$nonopt"
--    base_compile="$nonopt"
--    compile_command="$nonopt"
--    finalize_command="$nonopt"
-+    libtool_args=$nonopt
-+    base_compile="$nonopt $@"
-+    compile_command=$nonopt
-+    finalize_command=$nonopt
- 
-     compile_rpath=
-     finalize_rpath=
-@@ -829,8 +5117,11 @@
-     linker_flags=
-     dllsearchpath=
-     lib_search_path=`pwd`
-+    inst_prefix_dir=
-+    new_inherited_linker_flags=
- 
-     avoid_version=no
-+    bindir=
-     dlfiles=
-     dlprefiles=
-     dlself=no
-@@ -844,6 +5135,7 @@
-     no_install=no
-     objs=
-     non_pic_objects=
-+    precious_files_regex=
-     prefer_static_libs=no
-     preload=no
-     prev=
-@@ -855,27 +5147,47 @@
-     temp_rpath=
-     thread_safe=no
-     vinfo=
-+    vinfo_number=no
-+    weak_libs=
-+    single_module="${wl}-single_module"
-+    func_infer_tag $base_compile
- 
-     # We need to know -static, to get the right output filenames.
-     for arg
-     do
-       case $arg in
--      -all-static | -static)
--	if test "X$arg" = "X-all-static"; then
-+      -shared)
-+	test "$build_libtool_libs" != yes && \
-+	  func_fatal_configuration "can not build a shared library"
-+	build_old_libs=no
-+	break
-+	;;
-+      -all-static | -static | -static-libtool-libs)
-+	case $arg in
-+	-all-static)
- 	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
--	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-+	    func_warning "complete static linking is impossible in this configuration"
- 	  fi
- 	  if test -n "$link_static_flag"; then
- 	    dlopen_self=$dlopen_self_static
- 	  fi
--	else
-+	  prefer_static_libs=yes
-+	  ;;
-+	-static)
- 	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
- 	    dlopen_self=$dlopen_self_static
- 	  fi
--	fi
-+	  prefer_static_libs=built
-+	  ;;
-+	-static-libtool-libs)
-+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
-+	    dlopen_self=$dlopen_self_static
-+	  fi
-+	  prefer_static_libs=yes
-+	  ;;
-+	esac
- 	build_libtool_libs=no
- 	build_old_libs=yes
--	prefer_static_libs=yes
- 	break
- 	;;
-       esac
-@@ -885,33 +5197,33 @@
-     test -n "$old_archive_from_new_cmds" && build_old_libs=yes
- 
-     # Go through the arguments, transforming them on the way.
--    while test $# -gt 0; do
-+    while test "$#" -gt 0; do
-       arg="$1"
--      base_compile="$base_compile $arg"
-       shift
--      case $arg in
--      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
--	;;
--      *) qarg=$arg ;;
--      esac
--      libtool_args="$libtool_args $qarg"
-+      func_quote_for_eval "$arg"
-+      qarg=$func_quote_for_eval_unquoted_result
-+      func_append libtool_args " $func_quote_for_eval_result"
- 
-       # If the previous option needs an argument, assign it.
-       if test -n "$prev"; then
- 	case $prev in
- 	output)
--	  compile_command="$compile_command @OUTPUT@"
--	  finalize_command="$finalize_command @OUTPUT@"
-+	  func_append compile_command " @OUTPUT@"
-+	  func_append finalize_command " @OUTPUT@"
- 	  ;;
- 	esac
- 
- 	case $prev in
-+	bindir)
-+	  bindir="$arg"
-+	  prev=
-+	  continue
-+	  ;;
- 	dlfiles|dlprefiles)
- 	  if test "$preload" = no; then
- 	    # Add the symbol object into the linking commands.
--	    compile_command="$compile_command @SYMFILE@"
--	    finalize_command="$finalize_command @SYMFILE@"
-+	    func_append compile_command " @SYMFILE@"
-+	    func_append finalize_command " @SYMFILE@"
- 	    preload=yes
- 	  fi
- 	  case $arg in
-@@ -938,9 +5250,9 @@
- 	    ;;
- 	  *)
- 	    if test "$prev" = dlfiles; then
--	      dlfiles="$dlfiles $arg"
-+	      func_append dlfiles " $arg"
- 	    else
--	      dlprefiles="$dlprefiles $arg"
-+	      func_append dlprefiles " $arg"
- 	    fi
- 	    prev=
- 	    continue
-@@ -949,10 +5261,8 @@
- 	  ;;
- 	expsyms)
- 	  export_symbols="$arg"
--	  if test ! -f "$arg"; then
--	    $echo "$modename: symbol file \`$arg' does not exist"
--	    exit 1
--	  fi
-+	  test -f "$arg" \
-+	    || func_fatal_error "symbol file \`$arg' does not exist"
- 	  prev=
- 	  continue
- 	  ;;
-@@ -961,115 +5271,127 @@
- 	  prev=
- 	  continue
- 	  ;;
--	release)
--	  release="-$arg"
-+	framework)
-+	  case $host in
-+	    *-*-darwin*)
-+	      case "$deplibs " in
-+		*" $qarg.ltframework "*) ;;
-+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
-+		   ;;
-+	      esac
-+	      ;;
-+	  esac
-+	  prev=
-+	  continue
-+	  ;;
-+	inst_prefix)
-+	  inst_prefix_dir="$arg"
- 	  prev=
- 	  continue
- 	  ;;
- 	objectlist)
- 	  if test -f "$arg"; then
--            save_arg=$arg
-+	    save_arg=$arg
- 	    moreargs=
--	    for fil in `cat $save_arg`
-+	    for fil in `cat "$save_arg"`
- 	    do
--#	      moreargs="$moreargs $fil"
--              arg=$fil
--              # A libtool-controlled object.
-+#	      func_append moreargs " $fil"
-+	      arg=$fil
-+	      # A libtool-controlled object.
- 
- 	      # Check to see that this really is a libtool object.
--	      if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
--                pic_object=
--                non_pic_object=
--
--                # Read the .lo file
--                # If there is no directory component, then add one.
--                case $arg in
--                */* | *\\*) . $arg ;;
--                *) . ./$arg ;;
--                esac
-+	      if func_lalib_unsafe_p "$arg"; then
-+		pic_object=
-+		non_pic_object=
- 
--                if test -z "$pic_object" || \
--                   test -z "$non_pic_object" ||
--                   test "$pic_object" = none && \
--                   test "$non_pic_object" = none; then
--                  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
--                  exit 1
--                fi
-+		# Read the .lo file
-+		func_source "$arg"
- 
--	        # Extract subdirectory from the argument.
--	        xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
--	        if test "X$xdir" = "X$arg"; then
--	          xdir=
--	        else
--	          xdir="$xdir/"
--	        fi
-+		if test -z "$pic_object" ||
-+		   test -z "$non_pic_object" ||
-+		   test "$pic_object" = none &&
-+		   test "$non_pic_object" = none; then
-+		  func_fatal_error "cannot find name of object for \`$arg'"
-+		fi
- 
--                if test "$pic_object" != none; then
--                  # Prepend the subdirectory the object is found in.
--	          pic_object="$xdir$pic_object"
-+		# Extract subdirectory from the argument.
-+		func_dirname "$arg" "/" ""
-+		xdir="$func_dirname_result"
- 
--	          if test "$prev" = dlfiles; then
--	            if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
--	              dlfiles="$dlfiles $pic_object"
--	              prev=
--	              continue
--	            else
--	              # If libtool objects are unsupported, then we need to preload.
--	              prev=dlprefiles
--	            fi
--	          fi
-+		if test "$pic_object" != none; then
-+		  # Prepend the subdirectory the object is found in.
-+		  pic_object="$xdir$pic_object"
- 
--	          # CHECK ME:  I think I busted this.  -Ossama
--                  if test "$prev" = dlprefiles; then
--	            # Preload the old-style object.
--	            dlprefiles="$dlprefiles $pic_object"
--	            prev=
--                  fi
-+		  if test "$prev" = dlfiles; then
-+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-+		      func_append dlfiles " $pic_object"
-+		      prev=
-+		      continue
-+		    else
-+		      # If libtool objects are unsupported, then we need to preload.
-+		      prev=dlprefiles
-+		    fi
-+		  fi
- 
--                  # A PIC object.
--	          libobjs="$libobjs $pic_object"
--	          arg="$pic_object"
--                fi
-+		  # CHECK ME:  I think I busted this.  -Ossama
-+		  if test "$prev" = dlprefiles; then
-+		    # Preload the old-style object.
-+		    func_append dlprefiles " $pic_object"
-+		    prev=
-+		  fi
- 
--                # Non-PIC object.
--                if test "$non_pic_object" != none; then
--                  # Prepend the subdirectory the object is found in.
--	          non_pic_object="$xdir$non_pic_object"
-+		  # A PIC object.
-+		  func_append libobjs " $pic_object"
-+		  arg="$pic_object"
-+		fi
- 
--                  # A standard non-PIC object
--                  non_pic_objects="$non_pic_objects $non_pic_object"
--                  if test -z "$pic_object" || test "$pic_object" = none ; then
--                    arg="$non_pic_object"
--                  fi
--                fi
--              else
--                # Only an error if not doing a dry-run.
--                if test -z "$run"; then
--                  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
--                  exit 1
--                else
--                  # Dry-run case.
-+		# Non-PIC object.
-+		if test "$non_pic_object" != none; then
-+		  # Prepend the subdirectory the object is found in.
-+		  non_pic_object="$xdir$non_pic_object"
- 
--	          # Extract subdirectory from the argument.
--	          xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
--	          if test "X$xdir" = "X$arg"; then
--	            xdir=
--	          else
--	            xdir="$xdir/"
--	          fi
-+		  # A standard non-PIC object
-+		  func_append non_pic_objects " $non_pic_object"
-+		  if test -z "$pic_object" || test "$pic_object" = none ; then
-+		    arg="$non_pic_object"
-+		  fi
-+		else
-+		  # If the PIC object exists, use it instead.
-+		  # $xdir was prepended to $pic_object above.
-+		  non_pic_object="$pic_object"
-+		  func_append non_pic_objects " $non_pic_object"
-+		fi
-+	      else
-+		# Only an error if not doing a dry-run.
-+		if $opt_dry_run; then
-+		  # Extract subdirectory from the argument.
-+		  func_dirname "$arg" "/" ""
-+		  xdir="$func_dirname_result"
- 
--                  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
--                  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
--	          libobjs="$libobjs $pic_object"
--                  non_pic_objects="$non_pic_objects $non_pic_object"
--                fi
-+		  func_lo2o "$arg"
-+		  pic_object=$xdir$objdir/$func_lo2o_result
-+		  non_pic_object=$xdir$func_lo2o_result
-+		  func_append libobjs " $pic_object"
-+		  func_append non_pic_objects " $non_pic_object"
-+	        else
-+		  func_fatal_error "\`$arg' is not a valid libtool object"
-+		fi
- 	      fi
- 	    done
- 	  else
--	    $echo "$modename: link input file \`$save_arg' does not exist"
--	    exit 1
-+	    func_fatal_error "link input file \`$arg' does not exist"
- 	  fi
--          arg=$save_arg
-+	  arg=$save_arg
-+	  prev=
-+	  continue
-+	  ;;
-+	precious_regex)
-+	  precious_files_regex="$arg"
-+	  prev=
-+	  continue
-+	  ;;
-+	release)
-+	  release="-$arg"
- 	  prev=
- 	  continue
- 	  ;;
-@@ -1078,37 +5400,54 @@
- 	  case $arg in
- 	  [\\/]* | [A-Za-z]:[\\/]*) ;;
- 	  *)
--	    $echo "$modename: only absolute run-paths are allowed" 1>&2
--	    exit 1
-+	    func_fatal_error "only absolute run-paths are allowed"
- 	    ;;
- 	  esac
- 	  if test "$prev" = rpath; then
- 	    case "$rpath " in
- 	    *" $arg "*) ;;
--	    *) rpath="$rpath $arg" ;;
-+	    *) func_append rpath " $arg" ;;
- 	    esac
- 	  else
- 	    case "$xrpath " in
- 	    *" $arg "*) ;;
--	    *) xrpath="$xrpath $arg" ;;
-+	    *) func_append xrpath " $arg" ;;
- 	    esac
- 	  fi
- 	  prev=
- 	  continue
- 	  ;;
-+	shrext)
-+	  shrext_cmds="$arg"
-+	  prev=
-+	  continue
-+	  ;;
-+	weak)
-+	  func_append weak_libs " $arg"
-+	  prev=
-+	  continue
-+	  ;;
-+	xcclinker)
-+	  func_append linker_flags " $qarg"
-+	  func_append compiler_flags " $qarg"
-+	  prev=
-+	  func_append compile_command " $qarg"
-+	  func_append finalize_command " $qarg"
-+	  continue
-+	  ;;
- 	xcompiler)
--	  compiler_flags="$compiler_flags $qarg"
-+	  func_append compiler_flags " $qarg"
- 	  prev=
--	  compile_command="$compile_command $qarg"
--	  finalize_command="$finalize_command $qarg"
-+	  func_append compile_command " $qarg"
-+	  func_append finalize_command " $qarg"
- 	  continue
- 	  ;;
- 	xlinker)
--	  linker_flags="$linker_flags $qarg"
--	  compiler_flags="$compiler_flags $wl$qarg"
-+	  func_append linker_flags " $qarg"
-+	  func_append compiler_flags " $wl$qarg"
- 	  prev=
--	  compile_command="$compile_command $wl$qarg"
--	  finalize_command="$finalize_command $wl$qarg"
-+	  func_append compile_command " $wl$qarg"
-+	  func_append finalize_command " $wl$qarg"
- 	  continue
- 	  ;;
- 	*)
-@@ -1117,23 +5456,23 @@
- 	  continue
- 	  ;;
- 	esac
--      fi # test -n $prev
-+      fi # test -n "$prev"
- 
-       prevarg="$arg"
- 
-       case $arg in
-       -all-static)
- 	if test -n "$link_static_flag"; then
--	  compile_command="$compile_command $link_static_flag"
--	  finalize_command="$finalize_command $link_static_flag"
-+	  # See comment for -static flag below, for more details.
-+	  func_append compile_command " $link_static_flag"
-+	  func_append finalize_command " $link_static_flag"
- 	fi
- 	continue
- 	;;
- 
-       -allow-undefined)
- 	# FIXME: remove this flag sometime in the future.
--	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
--	continue
-+	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
- 	;;
- 
-       -avoid-version)
-@@ -1141,6 +5480,11 @@
- 	continue
- 	;;
- 
-+      -bindir)
-+	prev=bindir
-+	continue
-+	;;
-+
-       -dlopen)
- 	prev=dlfiles
- 	continue
-@@ -1158,8 +5502,7 @@
- 
-       -export-symbols | -export-symbols-regex)
- 	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
--	  $echo "$modename: more than one -exported-symbols argument is not allowed"
--	  exit 1
-+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
- 	fi
- 	if test "X$arg" = "X-export-symbols"; then
- 	  prev=expsyms
-@@ -1169,44 +5512,74 @@
- 	continue
- 	;;
- 
-+      -framework)
-+	prev=framework
-+	continue
-+	;;
-+
-+      -inst-prefix-dir)
-+	prev=inst_prefix
-+	continue
-+	;;
-+
-       # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
-       # so, if we see these flags be careful not to treat them like -L
-       -L[A-Z][A-Z]*:*)
- 	case $with_gcc/$host in
--	no/*-*-irix*)
--	  compile_command="$compile_command $arg"
--	  finalize_command="$finalize_command $arg"
-+	no/*-*-irix* | /*-*-irix*)
-+	  func_append compile_command " $arg"
-+	  func_append finalize_command " $arg"
- 	  ;;
- 	esac
- 	continue
- 	;;
- 
-       -L*)
--	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-+	func_stripname "-L" '' "$arg"
-+	if test -z "$func_stripname_result"; then
-+	  if test "$#" -gt 0; then
-+	    func_fatal_error "require no space between \`-L' and \`$1'"
-+	  else
-+	    func_fatal_error "need path for \`-L' option"
-+	  fi
-+	fi
-+	func_resolve_sysroot "$func_stripname_result"
-+	dir=$func_resolve_sysroot_result
- 	# We need an absolute path.
- 	case $dir in
- 	[\\/]* | [A-Za-z]:[\\/]*) ;;
- 	*)
- 	  absdir=`cd "$dir" && pwd`
--	  if test -z "$absdir"; then
--	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
--	    exit 1
--	  fi
-+	  test -z "$absdir" && \
-+	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
- 	  dir="$absdir"
- 	  ;;
- 	esac
- 	case "$deplibs " in
--	*" -L$dir "*) ;;
-+	*" -L$dir "* | *" $arg "*)
-+	  # Will only happen for absolute or sysroot arguments
-+	  ;;
- 	*)
--	  deplibs="$deplibs -L$dir"
--	  lib_search_path="$lib_search_path $dir"
-+	  # Preserve sysroot, but never include relative directories
-+	  case $dir in
-+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
-+	    *) func_append deplibs " -L$dir" ;;
-+	  esac
-+	  func_append lib_search_path " $dir"
- 	  ;;
- 	esac
- 	case $host in
--	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
- 	  case :$dllsearchpath: in
- 	  *":$dir:"*) ;;
--	  *) dllsearchpath="$dllsearchpath:$dir";;
-+	  ::) dllsearchpath=$dir;;
-+	  *) func_append dllsearchpath ":$dir";;
-+	  esac
-+	  case :$dllsearchpath: in
-+	  *":$testbindir:"*) ;;
-+	  ::) dllsearchpath=$testbindir;;
-+	  *) func_append dllsearchpath ":$testbindir";;
- 	  esac
- 	  ;;
- 	esac
-@@ -1216,17 +5589,41 @@
-       -l*)
- 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
- 	  case $host in
--	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
-+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
- 	    # These systems don't actually have a C or math library (as such)
- 	    continue
- 	    ;;
--	  *-*-mingw* | *-*-os2*)
-+	  *-*-os2*)
- 	    # These systems don't actually have a C library (as such)
- 	    test "X$arg" = "X-lc" && continue
- 	    ;;
-+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-+	    # Do not include libc due to us having libc/libc_r.
-+	    test "X$arg" = "X-lc" && continue
-+	    ;;
-+	  *-*-rhapsody* | *-*-darwin1.[012])
-+	    # Rhapsody C and math libraries are in the System framework
-+	    func_append deplibs " System.ltframework"
-+	    continue
-+	    ;;
-+	  *-*-sco3.2v5* | *-*-sco5v6*)
-+	    # Causes problems with __ctype
-+	    test "X$arg" = "X-lc" && continue
-+	    ;;
-+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-+	    # Compiler inserts libc in the correct place for threads to work
-+	    test "X$arg" = "X-lc" && continue
-+	    ;;
- 	  esac
-+	elif test "X$arg" = "X-lc_r"; then
-+	 case $host in
-+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-+	   # Do not include libc_r directly, use -pthread flag.
-+	   continue
-+	   ;;
-+	 esac
- 	fi
--	deplibs="$deplibs $arg"
-+	func_append deplibs " $arg"
- 	continue
- 	;;
- 
-@@ -1235,6 +5632,33 @@
- 	continue
- 	;;
- 
-+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
-+      # classes, name mangling, and exception handling.
-+      # Darwin uses the -arch flag to determine output architecture.
-+      -model|-arch|-isysroot|--sysroot)
-+	func_append compiler_flags " $arg"
-+	func_append compile_command " $arg"
-+	func_append finalize_command " $arg"
-+	prev=xcompiler
-+	continue
-+	;;
-+
-+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-+	func_append compiler_flags " $arg"
-+	func_append compile_command " $arg"
-+	func_append finalize_command " $arg"
-+	case "$new_inherited_linker_flags " in
-+	    *" $arg "*) ;;
-+	    * ) func_append new_inherited_linker_flags " $arg" ;;
-+	esac
-+	continue
-+	;;
-+
-+      -multi_module)
-+	single_module="${wl}-multi_module"
-+	continue
-+	;;
-+
-       -no-fast-install)
- 	fast_install=no
- 	continue
-@@ -1242,11 +5666,11 @@
- 
-       -no-install)
- 	case $host in
--	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
- 	  # The PATH hackery in wrapper scripts is required on Windows
--	  # in order for the loader to find any dlls it needs.
--	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
--	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
-+	  # and Darwin in order for the loader to find any dlls it needs.
-+	  func_warning "\`-no-install' is ignored for $host"
-+	  func_warning "assuming \`-no-fast-install' instead"
- 	  fast_install=no
- 	  ;;
- 	*) no_install=yes ;;
-@@ -1266,6 +5690,11 @@
- 
-       -o) prev=output ;;
- 
-+      -precious-files-regex)
-+	prev=precious_regex
-+	continue
-+	;;
-+
-       -release)
- 	prev=release
- 	continue
-@@ -1282,23 +5711,37 @@
- 	;;
- 
-       -R*)
--	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-+	func_stripname '-R' '' "$arg"
-+	dir=$func_stripname_result
- 	# We need an absolute path.
- 	case $dir in
- 	[\\/]* | [A-Za-z]:[\\/]*) ;;
-+	=*)
-+	  func_stripname '=' '' "$dir"
-+	  dir=$lt_sysroot$func_stripname_result
-+	  ;;
- 	*)
--	  $echo "$modename: only absolute run-paths are allowed" 1>&2
--	  exit 1
-+	  func_fatal_error "only absolute run-paths are allowed"
- 	  ;;
- 	esac
- 	case "$xrpath " in
- 	*" $dir "*) ;;
--	*) xrpath="$xrpath $dir" ;;
-+	*) func_append xrpath " $dir" ;;
- 	esac
- 	continue
- 	;;
- 
--      -static)
-+      -shared)
-+	# The effects of -shared are defined in a previous loop.
-+	continue
-+	;;
-+
-+      -shrext)
-+	prev=shrext
-+	continue
-+	;;
-+
-+      -static | -static-libtool-libs)
- 	# The effects of -static are defined in a previous loop.
- 	# We used to do the same as -all-static on platforms that
- 	# didn't have a PIC flag, but the assumption that the effects
-@@ -1317,41 +5760,48 @@
- 	continue
- 	;;
- 
-+      -version-number)
-+	prev=vinfo
-+	vinfo_number=yes
-+	continue
-+	;;
-+
-+      -weak)
-+        prev=weak
-+	continue
-+	;;
-+
-       -Wc,*)
--	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
-+	func_stripname '-Wc,' '' "$arg"
-+	args=$func_stripname_result
- 	arg=
--	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
-+	save_ifs="$IFS"; IFS=','
- 	for flag in $args; do
- 	  IFS="$save_ifs"
--	  case $flag in
--	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	    flag="\"$flag\""
--	    ;;
--	  esac
--	  arg="$arg $wl$flag"
--	  compiler_flags="$compiler_flags $flag"
-+          func_quote_for_eval "$flag"
-+	  func_append arg " $func_quote_for_eval_result"
-+	  func_append compiler_flags " $func_quote_for_eval_result"
- 	done
- 	IFS="$save_ifs"
--	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-+	func_stripname ' ' '' "$arg"
-+	arg=$func_stripname_result
- 	;;
- 
-       -Wl,*)
--	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
-+	func_stripname '-Wl,' '' "$arg"
-+	args=$func_stripname_result
- 	arg=
--	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
-+	save_ifs="$IFS"; IFS=','
- 	for flag in $args; do
- 	  IFS="$save_ifs"
--	  case $flag in
--	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	    flag="\"$flag\""
--	    ;;
--	  esac
--	  arg="$arg $wl$flag"
--	  compiler_flags="$compiler_flags $wl$flag"
--	  linker_flags="$linker_flags $flag"
-+          func_quote_for_eval "$flag"
-+	  func_append arg " $wl$func_quote_for_eval_result"
-+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
-+	  func_append linker_flags " $func_quote_for_eval_result"
- 	done
- 	IFS="$save_ifs"
--	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-+	func_stripname ' ' '' "$arg"
-+	arg=$func_stripname_result
- 	;;
- 
-       -Xcompiler)
-@@ -1364,136 +5814,156 @@
- 	continue
- 	;;
- 
-+      -XCClinker)
-+	prev=xcclinker
-+	continue
-+	;;
-+
-+      # -msg_* for osf cc
-+      -msg_*)
-+	func_quote_for_eval "$arg"
-+	arg="$func_quote_for_eval_result"
-+	;;
-+
-+      # Flags to be passed through unchanged, with rationale:
-+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
-+      # -r[0-9][0-9]*        specify processor for the SGI compiler
-+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
-+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
-+      # -q*                  compiler args for the IBM compiler
-+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
-+      # -F/path              path to uninstalled frameworks, gcc on darwin
-+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
-+      # @file                GCC response files
-+      # -tp=*                Portland pgcc target processor selection
-+      # --sysroot=*          for sysroot support
-+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
-+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
-+        func_quote_for_eval "$arg"
-+	arg="$func_quote_for_eval_result"
-+        func_append compile_command " $arg"
-+        func_append finalize_command " $arg"
-+        func_append compiler_flags " $arg"
-+        continue
-+        ;;
-+
-       # Some other compiler flag.
-       -* | +*)
--	# Unknown arguments in both finalize_command and compile_command need
--	# to be aesthetically quoted because they are evaled later.
--	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
--	case $arg in
--	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	  arg="\"$arg\""
--	  ;;
--	esac
-+        func_quote_for_eval "$arg"
-+	arg="$func_quote_for_eval_result"
- 	;;
- 
-       *.$objext)
- 	# A standard object.
--	objs="$objs $arg"
-+	func_append objs " $arg"
- 	;;
- 
-       *.lo)
- 	# A libtool-controlled object.
- 
- 	# Check to see that this really is a libtool object.
--	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
--          pic_object=
--          non_pic_object=
-+	if func_lalib_unsafe_p "$arg"; then
-+	  pic_object=
-+	  non_pic_object=
- 
--          # Read the .lo file
--          # If there is no directory component, then add one.
--          case $arg in
--          */* | *\\*) . $arg ;;
--          *) . ./$arg ;;
--          esac
-+	  # Read the .lo file
-+	  func_source "$arg"
- 
--          if test -z "$pic_object" || \
--             test -z "$non_pic_object" ||
--             test "$pic_object" = none && \
--             test "$non_pic_object" = none; then
--            $echo "$modename: cannot find name of object for \`$arg'" 1>&2
--            exit 1
--          fi
-+	  if test -z "$pic_object" ||
-+	     test -z "$non_pic_object" ||
-+	     test "$pic_object" = none &&
-+	     test "$non_pic_object" = none; then
-+	    func_fatal_error "cannot find name of object for \`$arg'"
-+	  fi
- 
- 	  # Extract subdirectory from the argument.
--	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
--	  if test "X$xdir" = "X$arg"; then
--	    xdir=
--	  else
--	    xdir="$xdir/"
--	  fi
-+	  func_dirname "$arg" "/" ""
-+	  xdir="$func_dirname_result"
- 
--          if test "$pic_object" != none; then
--            # Prepend the subdirectory the object is found in.
-+	  if test "$pic_object" != none; then
-+	    # Prepend the subdirectory the object is found in.
- 	    pic_object="$xdir$pic_object"
- 
- 	    if test "$prev" = dlfiles; then
- 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
--	        dlfiles="$dlfiles $pic_object"
--	        prev=
--	        continue
-+		func_append dlfiles " $pic_object"
-+		prev=
-+		continue
- 	      else
--	        # If libtool objects are unsupported, then we need to preload.
--	        prev=dlprefiles
-+		# If libtool objects are unsupported, then we need to preload.
-+		prev=dlprefiles
- 	      fi
- 	    fi
- 
- 	    # CHECK ME:  I think I busted this.  -Ossama
--            if test "$prev" = dlprefiles; then
-+	    if test "$prev" = dlprefiles; then
- 	      # Preload the old-style object.
--	      dlprefiles="$dlprefiles $pic_object"
-+	      func_append dlprefiles " $pic_object"
- 	      prev=
--            fi
-+	    fi
- 
--            # A PIC object.
--	    libobjs="$libobjs $pic_object"
-+	    # A PIC object.
-+	    func_append libobjs " $pic_object"
- 	    arg="$pic_object"
--          fi
-+	  fi
- 
--          # Non-PIC object.
--          if test "$non_pic_object" != none; then
--            # Prepend the subdirectory the object is found in.
-+	  # Non-PIC object.
-+	  if test "$non_pic_object" != none; then
-+	    # Prepend the subdirectory the object is found in.
- 	    non_pic_object="$xdir$non_pic_object"
- 
--            # A standard non-PIC object
--            non_pic_objects="$non_pic_objects $non_pic_object"
--            if test -z "$pic_object" || test "$pic_object" = none ; then
--              arg="$non_pic_object"
--            fi
--          fi
--        else
--          # Only an error if not doing a dry-run.
--          if test -z "$run"; then
--            $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
--            exit 1
--          else
--            # Dry-run case.
--
--	    # Extract subdirectory from the argument.
--	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
--	    if test "X$xdir" = "X$arg"; then
--	      xdir=
--	    else
--	      xdir="$xdir/"
-+	    # A standard non-PIC object
-+	    func_append non_pic_objects " $non_pic_object"
-+	    if test -z "$pic_object" || test "$pic_object" = none ; then
-+	      arg="$non_pic_object"
- 	    fi
-+	  else
-+	    # If the PIC object exists, use it instead.
-+	    # $xdir was prepended to $pic_object above.
-+	    non_pic_object="$pic_object"
-+	    func_append non_pic_objects " $non_pic_object"
-+	  fi
-+	else
-+	  # Only an error if not doing a dry-run.
-+	  if $opt_dry_run; then
-+	    # Extract subdirectory from the argument.
-+	    func_dirname "$arg" "/" ""
-+	    xdir="$func_dirname_result"
- 
--            pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
--            non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
--	    libobjs="$libobjs $pic_object"
--            non_pic_objects="$non_pic_objects $non_pic_object"
--          fi
-+	    func_lo2o "$arg"
-+	    pic_object=$xdir$objdir/$func_lo2o_result
-+	    non_pic_object=$xdir$func_lo2o_result
-+	    func_append libobjs " $pic_object"
-+	    func_append non_pic_objects " $non_pic_object"
-+	  else
-+	    func_fatal_error "\`$arg' is not a valid libtool object"
-+	  fi
- 	fi
- 	;;
- 
-       *.$libext)
- 	# An archive.
--	deplibs="$deplibs $arg"
--	old_deplibs="$old_deplibs $arg"
-+	func_append deplibs " $arg"
-+	func_append old_deplibs " $arg"
- 	continue
- 	;;
- 
-       *.la)
- 	# A libtool-controlled library.
- 
-+	func_resolve_sysroot "$arg"
- 	if test "$prev" = dlfiles; then
- 	  # This library was specified with -dlopen.
--	  dlfiles="$dlfiles $arg"
-+	  func_append dlfiles " $func_resolve_sysroot_result"
- 	  prev=
- 	elif test "$prev" = dlprefiles; then
- 	  # The library was specified with -dlpreopen.
--	  dlprefiles="$dlprefiles $arg"
-+	  func_append dlprefiles " $func_resolve_sysroot_result"
- 	  prev=
- 	else
--	  deplibs="$deplibs $arg"
-+	  func_append deplibs " $func_resolve_sysroot_result"
- 	fi
- 	continue
- 	;;
-@@ -1502,113 +5972,53 @@
-       *)
- 	# Unknown arguments in both finalize_command and compile_command need
- 	# to be aesthetically quoted because they are evaled later.
--	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
--	case $arg in
--	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
--	  arg="\"$arg\""
--	  ;;
--	esac
-+	func_quote_for_eval "$arg"
-+	arg="$func_quote_for_eval_result"
- 	;;
-       esac # arg
- 
-       # Now actually substitute the argument into the commands.
-       if test -n "$arg"; then
--	compile_command="$compile_command $arg"
--	finalize_command="$finalize_command $arg"
-+	func_append compile_command " $arg"
-+	func_append finalize_command " $arg"
-       fi
-     done # argument parsing loop
- 
--    if test -n "$prev"; then
--      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
--      $echo "$help" 1>&2
--      exit 1
--    fi
--
--    # Infer tagged configuration to use if any are available and
--    # if one wasn't chosen via the "--tag" command line option.
--    # Only attempt this if the compiler in the base link
--    # command doesn't match the default compiler.
--    if test -n "$available_tags" && test -z "$tagname"; then
--      case $base_compile in
--      "$CC "*) ;;
--      # Blanks in the command may have been stripped by the calling shell,
--      # but not from the CC environment variable when ltconfig was run.
--      "`$echo $CC` "*) ;;
--      *)
--        for z in $available_tags; do
--          if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
--	    # Evaluate the configuration.
--	    eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
--            case $base_compile in
--	    "$CC "*)
--              # The compiler in $compile_command matches
--              # the one in the tagged configuration.
--              # Assume this is the tagged configuration we want.
--              tagname=$z
--              break
--	      ;;
--	    "`$echo $CC` "*)
--	      tagname=$z
--	      break
--	      ;;
--	    esac
--          fi
--        done
--        # If $tagname still isn't set, then no tagged configuration
--        # was found and let the user know that the "--tag" command
--        # line option must be used.
--        if test -z "$tagname"; then
--          echo "$modename: unable to infer tagged configuration"
--          echo "$modename: specify a tag with \`--tag'" 1>&2
--	  exit 1
--#       else
--#         echo "$modename: using $tagname tagged configuration"
--        fi
--	;;
--      esac
--    fi
-+    test -n "$prev" && \
-+      func_fatal_help "the \`$prevarg' option requires an argument"
- 
-     if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-       eval arg=\"$export_dynamic_flag_spec\"
--      compile_command="$compile_command $arg"
--      finalize_command="$finalize_command $arg"
-+      func_append compile_command " $arg"
-+      func_append finalize_command " $arg"
-     fi
- 
-+    oldlibs=
-     # calculate the name of the file, without its directory
--    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-+    func_basename "$output"
-+    outputname="$func_basename_result"
-     libobjs_save="$libobjs"
- 
-     if test -n "$shlibpath_var"; then
-       # get the directories listed in $shlibpath_var
--      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
-     else
-       shlib_search_path=
-     fi
-     eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
- 
--    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
--    if test "X$output_objdir" = "X$output"; then
--      output_objdir="$objdir"
--    else
--      output_objdir="$output_objdir/$objdir"
--    fi
-+    func_dirname "$output" "/" ""
-+    output_objdir="$func_dirname_result$objdir"
-+    func_to_tool_file "$output_objdir/"
-+    tool_output_objdir=$func_to_tool_file_result
-     # Create the object directory.
--    if test ! -d $output_objdir; then
--      $show "$mkdir $output_objdir"
--      $run $mkdir $output_objdir
--      status=$?
--      if test $status -ne 0 && test ! -d $output_objdir; then
--	exit $status
--      fi
--    fi
-+    func_mkdir_p "$output_objdir"
- 
-     # Determine the type of output
-     case $output in
-     "")
--      $echo "$modename: you must specify an output file" 1>&2
--      $echo "$help" 1>&2
--      exit 1
-+      func_fatal_help "you must specify an output file"
-       ;;
-     *.$libext) linkmode=oldlib ;;
-     *.lo | *.$objext) linkmode=obj ;;
-@@ -1617,29 +6027,34 @@
-     esac
- 
-     specialdeplibs=
-+
-     libs=
-     # Find all interdependent deplibs by searching for libraries
-     # that are linked more than once (e.g. -la -lb -la)
-     for deplib in $deplibs; do
--      case "$libs " in
--      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
--      esac
--      libs="$libs $deplib"
-+      if $opt_preserve_dup_deps ; then
-+	case "$libs " in
-+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
-+	esac
-+      fi
-+      func_append libs " $deplib"
-     done
- 
--    if test $linkmode = lib; then
-+    if test "$linkmode" = lib; then
-       libs="$predeps $libs $compiler_lib_search_path $postdeps"
- 
-       # Compute libraries that are listed more than once in $predeps
-       # $postdeps and mark them as special (i.e., whose duplicates are
-       # not to be eliminated).
-       pre_post_deps=
--      for pre_post_dep in $predeps $postdeps; do
--        case "$pre_post_deps " in
--	*" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
--	esac
--	pre_post_deps="$pre_post_deps $pre_post_dep"
--      done
-+      if $opt_duplicate_compiler_generated_deps; then
-+	for pre_post_dep in $predeps $postdeps; do
-+	  case "$pre_post_deps " in
-+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
-+	  esac
-+	  func_append pre_post_deps " $pre_post_dep"
-+	done
-+      fi
-       pre_post_deps=
-     fi
- 
-@@ -1649,15 +6064,15 @@
-     need_relink=no # whether we're linking any uninstalled libtool libraries
-     notinst_deplibs= # not-installed libtool libraries
-     notinst_path= # paths that contain not-installed libtool libraries
-+
-     case $linkmode in
-     lib)
--	passes="conv link"
-+	passes="conv dlpreopen link"
- 	for file in $dlfiles $dlprefiles; do
- 	  case $file in
- 	  *.la) ;;
- 	  *)
--	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
--	    exit 1
-+	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
- 	    ;;
- 	  esac
- 	done
-@@ -1673,40 +6088,105 @@
-     *)  passes="conv"
- 	;;
-     esac
-+
-     for pass in $passes; do
--      if test $linkmode = prog; then
--	# Determine which files to process
-+      # The preopen pass in lib mode reverses $deplibs; put it back here
-+      # so that -L comes before libs that need it for instance...
-+      if test "$linkmode,$pass" = "lib,link"; then
-+	## FIXME: Find the place where the list is rebuilt in the wrong
-+	##        order, and fix it there properly
-+        tmp_deplibs=
-+	for deplib in $deplibs; do
-+	  tmp_deplibs="$deplib $tmp_deplibs"
-+	done
-+	deplibs="$tmp_deplibs"
-+      fi
-+
-+      if test "$linkmode,$pass" = "lib,link" ||
-+	 test "$linkmode,$pass" = "prog,scan"; then
-+	libs="$deplibs"
-+	deplibs=
-+      fi
-+      if test "$linkmode" = prog; then
- 	case $pass in
--	dlopen)
--	  libs="$dlfiles"
--	  save_deplibs="$deplibs" # Collect dlpreopened libraries
--	  deplibs=
--	  ;;
-+	dlopen) libs="$dlfiles" ;;
- 	dlpreopen) libs="$dlprefiles" ;;
- 	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
- 	esac
-       fi
-+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
-+	# Collect and forward deplibs of preopened libtool libs
-+	for lib in $dlprefiles; do
-+	  # Ignore non-libtool-libs
-+	  dependency_libs=
-+	  func_resolve_sysroot "$lib"
-+	  case $lib in
-+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
-+	  esac
-+
-+	  # Collect preopened libtool deplibs, except any this library
-+	  # has declared as weak libs
-+	  for deplib in $dependency_libs; do
-+	    func_basename "$deplib"
-+            deplib_base=$func_basename_result
-+	    case " $weak_libs " in
-+	    *" $deplib_base "*) ;;
-+	    *) func_append deplibs " $deplib" ;;
-+	    esac
-+	  done
-+	done
-+	libs="$dlprefiles"
-+      fi
-+      if test "$pass" = dlopen; then
-+	# Collect dlpreopened libraries
-+	save_deplibs="$deplibs"
-+	deplibs=
-+      fi
-+
-       for deplib in $libs; do
- 	lib=
- 	found=no
- 	case $deplib in
-+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-+	  if test "$linkmode,$pass" = "prog,link"; then
-+	    compile_deplibs="$deplib $compile_deplibs"
-+	    finalize_deplibs="$deplib $finalize_deplibs"
-+	  else
-+	    func_append compiler_flags " $deplib"
-+	    if test "$linkmode" = lib ; then
-+		case "$new_inherited_linker_flags " in
-+		    *" $deplib "*) ;;
-+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
-+		esac
-+	    fi
-+	  fi
-+	  continue
-+	  ;;
- 	-l*)
--	  if test $linkmode = oldlib && test $linkmode = obj; then
--	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
-+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
-+	    func_warning "\`-l' is ignored for archives/objects"
- 	    continue
- 	  fi
--	  if test $pass = conv; then
--	    deplibs="$deplib $deplibs"
--	    continue
-+	  func_stripname '-l' '' "$deplib"
-+	  name=$func_stripname_result
-+	  if test "$linkmode" = lib; then
-+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
-+	  else
-+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
- 	  fi
--	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
--	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
--	    # Search the libtool library
--	    lib="$searchdir/lib${name}.la"
--	    if test -f "$lib"; then
--	      found=yes
--	      break
--	    fi
-+	  for searchdir in $searchdirs; do
-+	    for search_ext in .la $std_shrext .so .a; do
-+	      # Search the libtool library
-+	      lib="$searchdir/lib${name}${search_ext}"
-+	      if test -f "$lib"; then
-+		if test "$search_ext" = ".la"; then
-+		  found=yes
-+		else
-+		  found=no
-+		fi
-+		break 2
-+	      fi
-+	    done
- 	  done
- 	  if test "$found" != yes; then
- 	    # deplib doesn't seem to be a libtool library
-@@ -1715,74 +6195,153 @@
- 	      finalize_deplibs="$deplib $finalize_deplibs"
- 	    else
- 	      deplibs="$deplib $deplibs"
--	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
-+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
- 	    fi
- 	    continue
-+	  else # deplib is a libtool library
-+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
-+	    # We need to do some special things here, and not later.
-+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+	      case " $predeps $postdeps " in
-+	      *" $deplib "*)
-+		if func_lalib_p "$lib"; then
-+		  library_names=
-+		  old_library=
-+		  func_source "$lib"
-+		  for l in $old_library $library_names; do
-+		    ll="$l"
-+		  done
-+		  if test "X$ll" = "X$old_library" ; then # only static version available
-+		    found=no
-+		    func_dirname "$lib" "" "."
-+		    ladir="$func_dirname_result"
-+		    lib=$ladir/$old_library
-+		    if test "$linkmode,$pass" = "prog,link"; then
-+		      compile_deplibs="$deplib $compile_deplibs"
-+		      finalize_deplibs="$deplib $finalize_deplibs"
-+		    else
-+		      deplibs="$deplib $deplibs"
-+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-+		    fi
-+		    continue
-+		  fi
-+		fi
-+		;;
-+	      *) ;;
-+	      esac
-+	    fi
- 	  fi
- 	  ;; # -l
-+	*.ltframework)
-+	  if test "$linkmode,$pass" = "prog,link"; then
-+	    compile_deplibs="$deplib $compile_deplibs"
-+	    finalize_deplibs="$deplib $finalize_deplibs"
-+	  else
-+	    deplibs="$deplib $deplibs"
-+	    if test "$linkmode" = lib ; then
-+		case "$new_inherited_linker_flags " in
-+		    *" $deplib "*) ;;
-+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
-+		esac
-+	    fi
-+	  fi
-+	  continue
-+	  ;;
- 	-L*)
- 	  case $linkmode in
- 	  lib)
- 	    deplibs="$deplib $deplibs"
--	    test $pass = conv && continue
-+	    test "$pass" = conv && continue
- 	    newdependency_libs="$deplib $newdependency_libs"
--	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-+	    func_stripname '-L' '' "$deplib"
-+	    func_resolve_sysroot "$func_stripname_result"
-+	    func_append newlib_search_path " $func_resolve_sysroot_result"
- 	    ;;
- 	  prog)
--	    if test $pass = conv; then
-+	    if test "$pass" = conv; then
- 	      deplibs="$deplib $deplibs"
- 	      continue
- 	    fi
--	    if test $pass = scan; then
-+	    if test "$pass" = scan; then
- 	      deplibs="$deplib $deplibs"
--	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- 	    else
- 	      compile_deplibs="$deplib $compile_deplibs"
- 	      finalize_deplibs="$deplib $finalize_deplibs"
- 	    fi
-+	    func_stripname '-L' '' "$deplib"
-+	    func_resolve_sysroot "$func_stripname_result"
-+	    func_append newlib_search_path " $func_resolve_sysroot_result"
- 	    ;;
- 	  *)
--	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
-+	    func_warning "\`-L' is ignored for archives/objects"
- 	    ;;
- 	  esac # linkmode
- 	  continue
- 	  ;; # -L
- 	-R*)
--	  if test $pass = link; then
--	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-+	  if test "$pass" = link; then
-+	    func_stripname '-R' '' "$deplib"
-+	    func_resolve_sysroot "$func_stripname_result"
-+	    dir=$func_resolve_sysroot_result
- 	    # Make sure the xrpath contains only unique directories.
- 	    case "$xrpath " in
- 	    *" $dir "*) ;;
--	    *) xrpath="$xrpath $dir" ;;
-+	    *) func_append xrpath " $dir" ;;
- 	    esac
- 	  fi
- 	  deplibs="$deplib $deplibs"
- 	  continue
- 	  ;;
--	*.la) lib="$deplib" ;;
-+	*.la)
-+	  func_resolve_sysroot "$deplib"
-+	  lib=$func_resolve_sysroot_result
-+	  ;;
- 	*.$libext)
--	  if test $pass = conv; then
-+	  if test "$pass" = conv; then
- 	    deplibs="$deplib $deplibs"
- 	    continue
- 	  fi
- 	  case $linkmode in
- 	  lib)
--	    if test "$deplibs_check_method" != pass_all; then
--	      echo
--	      echo "*** Warning: This library needs some functionality provided by $deplib."
--	      echo "*** I have the capability to make that library automatically link in when"
--	      echo "*** you link to this library.  But I can only do this if you have a"
--	      echo "*** shared version of the library, which you do not appear to have."
--	    else
--	      echo
--	      echo "*** Warning: Linking the shared library $output against the"
--	      echo "*** static library $deplib is not portable!"
--	      deplibs="$deplib $deplibs"
--	    fi
-+	    # Linking convenience modules into shared libraries is allowed,
-+	    # but linking other static libraries is non-portable.
-+	    case " $dlpreconveniencelibs " in
-+	    *" $deplib "*) ;;
-+	    *)
-+	      valid_a_lib=no
-+	      case $deplibs_check_method in
-+		match_pattern*)
-+		  set dummy $deplibs_check_method; shift
-+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
-+		    | $EGREP "$match_pattern_regex" > /dev/null; then
-+		    valid_a_lib=yes
-+		  fi
-+		;;
-+		pass_all)
-+		  valid_a_lib=yes
-+		;;
-+	      esac
-+	      if test "$valid_a_lib" != yes; then
-+		echo
-+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
-+		echo "*** I have the capability to make that library automatically link in when"
-+		echo "*** you link to this library.  But I can only do this if you have a"
-+		echo "*** shared version of the library, which you do not appear to have"
-+		echo "*** because the file extensions .$libext of this argument makes me believe"
-+		echo "*** that it is just a static archive that I should not use here."
-+	      else
-+		echo
-+		$ECHO "*** Warning: Linking the shared library $output against the"
-+		$ECHO "*** static library $deplib is not portable!"
-+		deplibs="$deplib $deplibs"
-+	      fi
-+	      ;;
-+	    esac
- 	    continue
- 	    ;;
- 	  prog)
--	    if test $pass != link; then
-+	    if test "$pass" != link; then
- 	      deplibs="$deplib $deplibs"
- 	    else
- 	      compile_deplibs="$deplib $compile_deplibs"
-@@ -1793,14 +6352,18 @@
- 	  esac # linkmode
- 	  ;; # *.$libext
- 	*.lo | *.$objext)
--	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
--	    # If there is no dlopen support or we're linking statically,
--	    # we need to preload.
--	    newdlprefiles="$newdlprefiles $deplib"
--	    compile_deplibs="$deplib $compile_deplibs"
--	    finalize_deplibs="$deplib $finalize_deplibs"
--	  else
--	    newdlfiles="$newdlfiles $deplib"
-+	  if test "$pass" = conv; then
-+	    deplibs="$deplib $deplibs"
-+	  elif test "$linkmode" = prog; then
-+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-+	      # If there is no dlopen support or we're linking statically,
-+	      # we need to preload.
-+	      func_append newdlprefiles " $deplib"
-+	      compile_deplibs="$deplib $compile_deplibs"
-+	      finalize_deplibs="$deplib $finalize_deplibs"
-+	    else
-+	      func_append newdlfiles " $deplib"
-+	    fi
- 	  fi
- 	  continue
- 	  ;;
-@@ -1809,21 +6372,18 @@
- 	  continue
- 	  ;;
- 	esac # case $deplib
--	if test $found = yes || test -f "$lib"; then :
-+
-+	if test "$found" = yes || test -f "$lib"; then :
- 	else
--	  $echo "$modename: cannot find the library \`$lib'" 1>&2
--	  exit 1
-+	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
- 	fi
- 
- 	# Check to see that this really is a libtool archive.
--	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
--	else
--	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
--	  exit 1
--	fi
-+	func_lalib_unsafe_p "$lib" \
-+	  || func_fatal_error "\`$lib' is not a valid libtool archive"
- 
--	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
--	test "X$ladir" = "X$lib" && ladir="."
-+	func_dirname "$lib" "" "."
-+	ladir="$func_dirname_result"
- 
- 	dlname=
- 	dlopen=
-@@ -1831,72 +6391,92 @@
- 	libdir=
- 	library_names=
- 	old_library=
-+	inherited_linker_flags=
- 	# If the library was installed with an old release of libtool,
--	# it will not redefine variable installed.
-+	# it will not redefine variables installed, or shouldnotlink
- 	installed=yes
-+	shouldnotlink=no
-+	avoidtemprpath=
-+
- 
- 	# Read the .la file
--	case $lib in
--	*/* | *\\*) . $lib ;;
--	*) . ./$lib ;;
--	esac
-+	func_source "$lib"
- 
-+	# Convert "-framework foo" to "foo.ltframework"
-+	if test -n "$inherited_linker_flags"; then
-+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
-+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
-+	    case " $new_inherited_linker_flags " in
-+	      *" $tmp_inherited_linker_flag "*) ;;
-+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
-+	    esac
-+	  done
-+	fi
-+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
- 	if test "$linkmode,$pass" = "lib,link" ||
- 	   test "$linkmode,$pass" = "prog,scan" ||
--	   { test $linkmode = oldlib && test $linkmode = obj; }; then
--	   # Add dl[pre]opened files of deplib
--	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
--	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
-+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
- 	fi
- 
--	if test $pass = conv; then
-+	if test "$pass" = conv; then
- 	  # Only check for convenience libraries
- 	  deplibs="$lib $deplibs"
- 	  if test -z "$libdir"; then
- 	    if test -z "$old_library"; then
--	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
--	      exit 1
-+	      func_fatal_error "cannot find name of link library for \`$lib'"
- 	    fi
- 	    # It is a libtool convenience library, so add in its objects.
--	    convenience="$convenience $ladir/$objdir/$old_library"
--	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
--	    tmp_libs=
--	    for deplib in $dependency_libs; do
--	      deplibs="$deplib $deplibs"
-+	    func_append convenience " $ladir/$objdir/$old_library"
-+	    func_append old_convenience " $ladir/$objdir/$old_library"
-+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
-+	    func_fatal_error "\`$lib' is not a convenience library"
-+	  fi
-+	  tmp_libs=
-+	  for deplib in $dependency_libs; do
-+	    deplibs="$deplib $deplibs"
-+	    if $opt_preserve_dup_deps ; then
- 	      case "$tmp_libs " in
--	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
- 	      esac
--	      tmp_libs="$tmp_libs $deplib"
--	    done
--	  elif test $linkmode != prog && test $linkmode != lib; then
--	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
--	    exit 1
--	  fi
-+	    fi
-+	    func_append tmp_libs " $deplib"
-+	  done
- 	  continue
- 	fi # $pass = conv
- 
-+
- 	# Get the name of the library we link against.
- 	linklib=
--	for l in $old_library $library_names; do
--	  linklib="$l"
--	done
-+	if test -n "$old_library" &&
-+	   { test "$prefer_static_libs" = yes ||
-+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
-+	  linklib=$old_library
-+	else
-+	  for l in $old_library $library_names; do
-+	    linklib="$l"
-+	  done
-+	fi
- 	if test -z "$linklib"; then
--	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
--	  exit 1
-+	  func_fatal_error "cannot find name of link library for \`$lib'"
- 	fi
- 
- 	# This library was specified with -dlopen.
--	if test $pass = dlopen; then
-+	if test "$pass" = dlopen; then
- 	  if test -z "$libdir"; then
--	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
--	    exit 1
-+	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
- 	  fi
--	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-+	  if test -z "$dlname" ||
-+	     test "$dlopen_support" != yes ||
-+	     test "$build_libtool_libs" = no; then
- 	    # If there is no dlname, no dlopen support or we're linking
--	    # statically, we need to preload.
--	    dlprefiles="$dlprefiles $lib"
-+	    # statically, we need to preload.  We also need to preload any
-+	    # dependent libraries so libltdl's deplib preloader doesn't
-+	    # bomb out in the load deplibs phase.
-+	    func_append dlprefiles " $lib $dependency_libs"
- 	  else
--	    newdlfiles="$newdlfiles $lib"
-+	    func_append newdlfiles " $lib"
- 	  fi
- 	  continue
- 	fi # $pass = dlopen
-@@ -1907,66 +6487,106 @@
- 	*)
- 	  abs_ladir=`cd "$ladir" && pwd`
- 	  if test -z "$abs_ladir"; then
--	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
--	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-+	    func_warning "cannot determine absolute directory name of \`$ladir'"
-+	    func_warning "passing it literally to the linker, although it might fail"
- 	    abs_ladir="$ladir"
- 	  fi
- 	  ;;
- 	esac
--	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-+	func_basename "$lib"
-+	laname="$func_basename_result"
- 
- 	# Find the relevant object directory and library name.
- 	if test "X$installed" = Xyes; then
--	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
--	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
-+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-+	    func_warning "library \`$lib' was moved."
- 	    dir="$ladir"
- 	    absdir="$abs_ladir"
- 	    libdir="$abs_ladir"
- 	  else
--	    dir="$libdir"
--	    absdir="$libdir"
-+	    dir="$lt_sysroot$libdir"
-+	    absdir="$lt_sysroot$libdir"
- 	  fi
-+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
- 	else
--	  dir="$ladir/$objdir"
--	  absdir="$abs_ladir/$objdir"
--	  # Remove this search path later
--	  notinst_path="$notinst_path $abs_ladir"
-+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-+	    dir="$ladir"
-+	    absdir="$abs_ladir"
-+	    # Remove this search path later
-+	    func_append notinst_path " $abs_ladir"
-+	  else
-+	    dir="$ladir/$objdir"
-+	    absdir="$abs_ladir/$objdir"
-+	    # Remove this search path later
-+	    func_append notinst_path " $abs_ladir"
-+	  fi
- 	fi # $installed = yes
--	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-+	func_stripname 'lib' '.la' "$laname"
-+	name=$func_stripname_result
- 
- 	# This library was specified with -dlpreopen.
--	if test $pass = dlpreopen; then
--	  if test -z "$libdir"; then
--	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
--	    exit 1
--	  fi
--	  # Prefer using a static library (so that no silly _DYNAMIC symbols
--	  # are required to link).
--	  if test -n "$old_library"; then
--	    newdlprefiles="$newdlprefiles $dir/$old_library"
--	  # Otherwise, use the dlname, so that lt_dlopen finds it.
--	  elif test -n "$dlname"; then
--	    newdlprefiles="$newdlprefiles $dir/$dlname"
--	  else
--	    newdlprefiles="$newdlprefiles $dir/$linklib"
-+	if test "$pass" = dlpreopen; then
-+	  if test -z "$libdir" && test "$linkmode" = prog; then
-+	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
- 	  fi
-+	  case "$host" in
-+	    # special handling for platforms with PE-DLLs.
-+	    *cygwin* | *mingw* | *cegcc* )
-+	      # Linker will automatically link against shared library if both
-+	      # static and shared are present.  Therefore, ensure we extract
-+	      # symbols from the import library if a shared library is present
-+	      # (otherwise, the dlopen module name will be incorrect).  We do
-+	      # this by putting the import library name into $newdlprefiles.
-+	      # We recover the dlopen module name by 'saving' the la file
-+	      # name in a special purpose variable, and (later) extracting the
-+	      # dlname from the la file.
-+	      if test -n "$dlname"; then
-+	        func_tr_sh "$dir/$linklib"
-+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
-+	        func_append newdlprefiles " $dir/$linklib"
-+	      else
-+	        func_append newdlprefiles " $dir/$old_library"
-+	        # Keep a list of preopened convenience libraries to check
-+	        # that they are being used correctly in the link pass.
-+	        test -z "$libdir" && \
-+	          func_append dlpreconveniencelibs " $dir/$old_library"
-+	      fi
-+	    ;;
-+	    * )
-+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
-+	      # are required to link).
-+	      if test -n "$old_library"; then
-+	        func_append newdlprefiles " $dir/$old_library"
-+	        # Keep a list of preopened convenience libraries to check
-+	        # that they are being used correctly in the link pass.
-+	        test -z "$libdir" && \
-+	          func_append dlpreconveniencelibs " $dir/$old_library"
-+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
-+	      elif test -n "$dlname"; then
-+	        func_append newdlprefiles " $dir/$dlname"
-+	      else
-+	        func_append newdlprefiles " $dir/$linklib"
-+	      fi
-+	    ;;
-+	  esac
- 	fi # $pass = dlpreopen
- 
- 	if test -z "$libdir"; then
- 	  # Link the convenience library
--	  if test $linkmode = lib; then
-+	  if test "$linkmode" = lib; then
- 	    deplibs="$dir/$old_library $deplibs"
- 	  elif test "$linkmode,$pass" = "prog,link"; then
- 	    compile_deplibs="$dir/$old_library $compile_deplibs"
- 	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
- 	  else
--	    deplibs="$lib $deplibs"
-+	    deplibs="$lib $deplibs" # used for prog,scan pass
- 	  fi
- 	  continue
- 	fi
- 
--	if test $linkmode = prog && test $pass != link; then
--	  newlib_search_path="$newlib_search_path $ladir"
-+
-+	if test "$linkmode" = prog && test "$pass" != link; then
-+	  func_append newlib_search_path " $ladir"
- 	  deplibs="$lib $deplibs"
- 
- 	  linkalldeplibs=no
-@@ -1978,31 +6598,43 @@
- 	  tmp_libs=
- 	  for deplib in $dependency_libs; do
- 	    case $deplib in
--	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
-+	    -L*) func_stripname '-L' '' "$deplib"
-+	         func_resolve_sysroot "$func_stripname_result"
-+	         func_append newlib_search_path " $func_resolve_sysroot_result"
-+		 ;;
- 	    esac
- 	    # Need to link against all dependency_libs?
--	    if test $linkalldeplibs = yes; then
-+	    if test "$linkalldeplibs" = yes; then
- 	      deplibs="$deplib $deplibs"
- 	    else
- 	      # Need to hardcode shared library paths
- 	      # or/and link against static libraries
- 	      newdependency_libs="$deplib $newdependency_libs"
- 	    fi
--	    case "$tmp_libs " in
--	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
--	    esac
--	    tmp_libs="$tmp_libs $deplib"
-+	    if $opt_preserve_dup_deps ; then
-+	      case "$tmp_libs " in
-+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
-+	      esac
-+	    fi
-+	    func_append tmp_libs " $deplib"
- 	  done # for deplib
- 	  continue
- 	fi # $linkmode = prog...
- 
--	link_static=no # Whether the deplib will be linked statically
--	if test -n "$library_names" &&
--	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
--	  # Link against this shared library
-+	if test "$linkmode,$pass" = "prog,link"; then
-+	  if test -n "$library_names" &&
-+	     { { test "$prefer_static_libs" = no ||
-+	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
-+	       test -z "$old_library"; }; then
-+	    # We need to hardcode the library path
-+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
-+	      # Make sure the rpath contains only unique directories.
-+	      case "$temp_rpath:" in
-+	      *"$absdir:"*) ;;
-+	      *) func_append temp_rpath "$absdir:" ;;
-+	      esac
-+	    fi
- 
--	  if test "$linkmode,$pass" = "prog,link" ||
--	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
- 	    # Hardcode the library path.
- 	    # Skip directories that are in the system default run-time
- 	    # search path.
-@@ -2011,7 +6643,7 @@
- 	    *)
- 	      case "$compile_rpath " in
- 	      *" $absdir "*) ;;
--	      *) compile_rpath="$compile_rpath $absdir"
-+	      *) func_append compile_rpath " $absdir" ;;
- 	      esac
- 	      ;;
- 	    esac
-@@ -2020,21 +6652,10 @@
- 	    *)
- 	      case "$finalize_rpath " in
- 	      *" $libdir "*) ;;
--	      *) finalize_rpath="$finalize_rpath $libdir"
-+	      *) func_append finalize_rpath " $libdir" ;;
- 	      esac
- 	      ;;
- 	    esac
--	    if test $linkmode = prog; then
--	      # We need to hardcode the library path
--	      if test -n "$shlibpath_var"; then
--		# Make sure the rpath contains only unique directories.
--		case "$temp_rpath " in
--		*" $dir "*) ;;
--		*" $absdir "*) ;;
--		*) temp_rpath="$temp_rpath $dir" ;;
--		esac
--	      fi
--	    fi
- 	  fi # $linkmode,$pass = prog,link...
- 
- 	  if test "$alldeplibs" = yes &&
-@@ -2044,26 +6665,89 @@
- 	    # We only need to search for static libraries
- 	    continue
- 	  fi
-+	fi
- 
--	  if test "$installed" = no; then
--	    notinst_deplibs="$notinst_deplibs $lib"
--	    need_relink=yes
-+	link_static=no # Whether the deplib will be linked statically
-+	use_static_libs=$prefer_static_libs
-+	if test "$use_static_libs" = built && test "$installed" = yes; then
-+	  use_static_libs=no
-+	fi
-+	if test -n "$library_names" &&
-+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
-+	  case $host in
-+	  *cygwin* | *mingw* | *cegcc*)
-+	      # No point in relinking DLLs because paths are not encoded
-+	      func_append notinst_deplibs " $lib"
-+	      need_relink=no
-+	    ;;
-+	  *)
-+	    if test "$installed" = no; then
-+	      func_append notinst_deplibs " $lib"
-+	      need_relink=yes
-+	    fi
-+	    ;;
-+	  esac
-+	  # This is a shared library
-+
-+	  # Warn about portability, can't link against -module's on some
-+	  # systems (darwin).  Don't bleat about dlopened modules though!
-+	  dlopenmodule=""
-+	  for dlpremoduletest in $dlprefiles; do
-+	    if test "X$dlpremoduletest" = "X$lib"; then
-+	      dlopenmodule="$dlpremoduletest"
-+	      break
-+	    fi
-+	  done
-+	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-+	    echo
-+	    if test "$linkmode" = prog; then
-+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
-+	    else
-+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
-+	    fi
-+	    $ECHO "*** $linklib is not portable!"
-+	  fi
-+	  if test "$linkmode" = lib &&
-+	     test "$hardcode_into_libs" = yes; then
-+	    # Hardcode the library path.
-+	    # Skip directories that are in the system default run-time
-+	    # search path.
-+	    case " $sys_lib_dlsearch_path " in
-+	    *" $absdir "*) ;;
-+	    *)
-+	      case "$compile_rpath " in
-+	      *" $absdir "*) ;;
-+	      *) func_append compile_rpath " $absdir" ;;
-+	      esac
-+	      ;;
-+	    esac
-+	    case " $sys_lib_dlsearch_path " in
-+	    *" $libdir "*) ;;
-+	    *)
-+	      case "$finalize_rpath " in
-+	      *" $libdir "*) ;;
-+	      *) func_append finalize_rpath " $libdir" ;;
-+	      esac
-+	      ;;
-+	    esac
- 	  fi
- 
- 	  if test -n "$old_archive_from_expsyms_cmds"; then
- 	    # figure out the soname
- 	    set dummy $library_names
--	    realname="$2"
--	    shift; shift
--	    libname=`eval \\$echo \"$libname_spec\"`
-+	    shift
-+	    realname="$1"
-+	    shift
-+	    libname=`eval "\\$ECHO \"$libname_spec\""`
- 	    # use dlname if we got it. it's perfectly good, no?
- 	    if test -n "$dlname"; then
- 	      soname="$dlname"
- 	    elif test -n "$soname_spec"; then
- 	      # bleh windows
- 	      case $host in
--	      *cygwin*)
--		major=`expr $current - $age`
-+	      *cygwin* | mingw* | *cegcc*)
-+	        func_arith $current - $age
-+		major=$func_arith_result
- 		versuffix="-$major"
- 		;;
- 	      esac
-@@ -2074,41 +6758,29 @@
- 
- 	    # Make a new name for the extract_expsyms_cmds to use
- 	    soroot="$soname"
--	    soname=`echo $soroot | sed -e 's/^.*\///'`
--	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
-+	    func_basename "$soroot"
-+	    soname="$func_basename_result"
-+	    func_stripname 'lib' '.dll' "$soname"
-+	    newlib=libimp-$func_stripname_result.a
- 
- 	    # If the library has no export list, then create one now
- 	    if test -f "$output_objdir/$soname-def"; then :
- 	    else
--	      $show "extracting exported symbol list from \`$soname'"
--	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	      eval cmds=\"$extract_expsyms_cmds\"
--	      for cmd in $cmds; do
--		IFS="$save_ifs"
--		$show "$cmd"
--		$run eval "$cmd" || exit $?
--	      done
--	      IFS="$save_ifs"
-+	      func_verbose "extracting exported symbol list from \`$soname'"
-+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
- 	    fi
- 
- 	    # Create $newlib
- 	    if test -f "$output_objdir/$newlib"; then :; else
--	      $show "generating import library for \`$soname'"
--	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	      eval cmds=\"$old_archive_from_expsyms_cmds\"
--	      for cmd in $cmds; do
--		IFS="$save_ifs"
--		$show "$cmd"
--		$run eval "$cmd" || exit $?
--	      done
--	      IFS="$save_ifs"
-+	      func_verbose "generating import library for \`$soname'"
-+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
- 	    fi
- 	    # make sure the library variables are pointing to the new library
- 	    dir=$output_objdir
- 	    linklib=$newlib
--	  fi # test -n $old_archive_from_expsyms_cmds
-+	  fi # test -n "$old_archive_from_expsyms_cmds"
- 
--	  if test $linkmode = prog || test "$mode" != relink; then
-+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
- 	    add_shlibpath=
- 	    add_dir=
- 	    add=
-@@ -2117,6 +6789,30 @@
- 	    immediate | unsupported)
- 	      if test "$hardcode_direct" = no; then
- 		add="$dir/$linklib"
-+		case $host in
-+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
-+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
-+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
-+		    *-*-unixware7*) add_dir="-L$dir" ;;
-+		  *-*-darwin* )
-+		    # if the lib is a (non-dlopened) module then we can not
-+		    # link against it, someone is ignoring the earlier warnings
-+		    if /usr/bin/file -L $add 2> /dev/null |
-+			 $GREP ": [^:]* bundle" >/dev/null ; then
-+		      if test "X$dlopenmodule" != "X$lib"; then
-+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
-+			if test -z "$old_library" ; then
-+			  echo
-+			  echo "*** And there doesn't seem to be a static archive available"
-+			  echo "*** The link will probably fail, sorry"
-+			else
-+			  add="$dir/$old_library"
-+			fi
-+		      elif test -n "$old_library"; then
-+			add="$dir/$old_library"
-+		      fi
-+		    fi
-+		esac
- 	      elif test "$hardcode_minus_L" = no; then
- 		case $host in
- 		*-*-sunos*) add_shlibpath="$dir" ;;
-@@ -2131,10 +6827,19 @@
- 	      fi
- 	      ;;
- 	    relink)
--	      if test "$hardcode_direct" = yes; then
-+	      if test "$hardcode_direct" = yes &&
-+	         test "$hardcode_direct_absolute" = no; then
- 		add="$dir/$linklib"
- 	      elif test "$hardcode_minus_L" = yes; then
- 		add_dir="-L$dir"
-+		# Try looking first in the location we're being installed to.
-+		if test -n "$inst_prefix_dir"; then
-+		  case $libdir in
-+		    [\\/]*)
-+		      func_append add_dir " -L$inst_prefix_dir$libdir"
-+		      ;;
-+		  esac
-+		fi
- 		add="-l$name"
- 	      elif test "$hardcode_shlibpath_var" = yes; then
- 		add_shlibpath="$dir"
-@@ -2147,39 +6852,39 @@
- 	    esac
- 
- 	    if test "$lib_linked" != yes; then
--	      $echo "$modename: configuration error: unsupported hardcode properties"
--	      exit 1
-+	      func_fatal_configuration "unsupported hardcode properties"
- 	    fi
- 
- 	    if test -n "$add_shlibpath"; then
- 	      case :$compile_shlibpath: in
- 	      *":$add_shlibpath:"*) ;;
--	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
- 	      esac
- 	    fi
--	    if test $linkmode = prog; then
-+	    if test "$linkmode" = prog; then
- 	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
- 	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
- 	    else
- 	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
- 	      test -n "$add" && deplibs="$add $deplibs"
--	      if test "$hardcode_direct" != yes && \
--		 test "$hardcode_minus_L" != yes && \
-+	      if test "$hardcode_direct" != yes &&
-+		 test "$hardcode_minus_L" != yes &&
- 		 test "$hardcode_shlibpath_var" = yes; then
- 		case :$finalize_shlibpath: in
- 		*":$libdir:"*) ;;
--		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-+		*) func_append finalize_shlibpath "$libdir:" ;;
- 		esac
- 	      fi
- 	    fi
- 	  fi
- 
--	  if test $linkmode = prog || test "$mode" = relink; then
-+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
- 	    add_shlibpath=
- 	    add_dir=
- 	    add=
- 	    # Finalize command for both is simple: just hardcode it.
--	    if test "$hardcode_direct" = yes; then
-+	    if test "$hardcode_direct" = yes &&
-+	       test "$hardcode_direct_absolute" = no; then
- 	      add="$libdir/$linklib"
- 	    elif test "$hardcode_minus_L" = yes; then
- 	      add_dir="-L$libdir"
-@@ -2187,16 +6892,31 @@
- 	    elif test "$hardcode_shlibpath_var" = yes; then
- 	      case :$finalize_shlibpath: in
- 	      *":$libdir:"*) ;;
--	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-+	      *) func_append finalize_shlibpath "$libdir:" ;;
- 	      esac
- 	      add="-l$name"
-+	    elif test "$hardcode_automatic" = yes; then
-+	      if test -n "$inst_prefix_dir" &&
-+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
-+		add="$inst_prefix_dir$libdir/$linklib"
-+	      else
-+		add="$libdir/$linklib"
-+	      fi
- 	    else
- 	      # We cannot seem to hardcode it, guess we'll fake it.
- 	      add_dir="-L$libdir"
-+	      # Try looking first in the location we're being installed to.
-+	      if test -n "$inst_prefix_dir"; then
-+		case $libdir in
-+		  [\\/]*)
-+		    func_append add_dir " -L$inst_prefix_dir$libdir"
-+		    ;;
-+		esac
-+	      fi
- 	      add="-l$name"
- 	    fi
- 
--	    if test $linkmode = prog; then
-+	    if test "$linkmode" = prog; then
- 	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
- 	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
- 	    else
-@@ -2204,16 +6924,7 @@
- 	      test -n "$add" && deplibs="$add $deplibs"
- 	    fi
- 	  fi
--	elif test $linkmode = prog; then
--	  if test "$alldeplibs" = yes &&
--	     { test "$deplibs_check_method" = pass_all ||
--	       { test "$build_libtool_libs" = yes &&
--		 test -n "$library_names"; }; }; then
--	    # We only need to search for static libraries
--	    continue
--	  fi
--
--	  # Try to link the static library
-+	elif test "$linkmode" = prog; then
- 	  # Here we assume that one of hardcode_direct or hardcode_minus_L
- 	  # is not unsupported.  This is valid on all known static and
- 	  # shared platforms.
-@@ -2234,101 +6945,133 @@
- 	    # Just print a warning and add the library to dependency_libs so
- 	    # that the program can be linked against the static library.
- 	    echo
--	    echo "*** Warning: This library needs some functionality provided by $lib."
-+	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
- 	    echo "*** I have the capability to make that library automatically link in when"
- 	    echo "*** you link to this library.  But I can only do this if you have a"
- 	    echo "*** shared version of the library, which you do not appear to have."
- 	    if test "$module" = yes; then
--	      echo "*** Therefore, libtool will create a static module, that should work "
--	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
-+	      echo "*** But as you try to build a module library, libtool will still create "
-+	      echo "*** a static module, that should work as long as the dlopening application"
-+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
- 	      if test -z "$global_symbol_pipe"; then
--	        echo
--	        echo "*** However, this would only work if libtool was able to extract symbol"
--	        echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
--	        echo "*** not find such a program.  So, this module is probably useless."
--	        echo "*** \`nm' from GNU binutils and a full rebuild may help."
-+		echo
-+		echo "*** However, this would only work if libtool was able to extract symbol"
-+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-+		echo "*** not find such a program.  So, this module is probably useless."
-+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
- 	      fi
- 	      if test "$build_old_libs" = no; then
--	        build_libtool_libs=module
--	        build_old_libs=yes
-+		build_libtool_libs=module
-+		build_old_libs=yes
- 	      else
--	        build_libtool_libs=no
-+		build_libtool_libs=no
- 	      fi
- 	    fi
- 	  else
--	    convenience="$convenience $dir/$old_library"
--	    old_convenience="$old_convenience $dir/$old_library"
- 	    deplibs="$dir/$old_library $deplibs"
- 	    link_static=yes
- 	  fi
- 	fi # link shared/static library?
- 
--	if test $linkmode = lib; then
-+	if test "$linkmode" = lib; then
- 	  if test -n "$dependency_libs" &&
--	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
--	       test $link_static = yes; }; then
-+	     { test "$hardcode_into_libs" != yes ||
-+	       test "$build_old_libs" = yes ||
-+	       test "$link_static" = yes; }; then
- 	    # Extract -R from dependency_libs
- 	    temp_deplibs=
- 	    for libdir in $dependency_libs; do
- 	      case $libdir in
--	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
-+	      -R*) func_stripname '-R' '' "$libdir"
-+	           temp_xrpath=$func_stripname_result
- 		   case " $xrpath " in
- 		   *" $temp_xrpath "*) ;;
--		   *) xrpath="$xrpath $temp_xrpath";;
-+		   *) func_append xrpath " $temp_xrpath";;
- 		   esac;;
--	      *) temp_deplibs="$temp_deplibs $libdir";;
-+	      *) func_append temp_deplibs " $libdir";;
- 	      esac
- 	    done
- 	    dependency_libs="$temp_deplibs"
- 	  fi
- 
--	  newlib_search_path="$newlib_search_path $absdir"
-+	  func_append newlib_search_path " $absdir"
- 	  # Link against this library
- 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
- 	  # ... and its dependency_libs
- 	  tmp_libs=
- 	  for deplib in $dependency_libs; do
- 	    newdependency_libs="$deplib $newdependency_libs"
--	    case "$tmp_libs " in
--	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
--	    esac
--	    tmp_libs="$tmp_libs $deplib"
-+	    case $deplib in
-+              -L*) func_stripname '-L' '' "$deplib"
-+                   func_resolve_sysroot "$func_stripname_result";;
-+              *) func_resolve_sysroot "$deplib" ;;
-+            esac
-+	    if $opt_preserve_dup_deps ; then
-+	      case "$tmp_libs " in
-+	      *" $func_resolve_sysroot_result "*)
-+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
-+	      esac
-+	    fi
-+	    func_append tmp_libs " $func_resolve_sysroot_result"
- 	  done
- 
--	  if test $link_all_deplibs != no; then
-+	  if test "$link_all_deplibs" != no; then
- 	    # Add the search paths of all dependency libraries
- 	    for deplib in $dependency_libs; do
-+	      path=
- 	      case $deplib in
- 	      -L*) path="$deplib" ;;
- 	      *.la)
--		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
--		test "X$dir" = "X$deplib" && dir="."
-+	        func_resolve_sysroot "$deplib"
-+	        deplib=$func_resolve_sysroot_result
-+	        func_dirname "$deplib" "" "."
-+		dir=$func_dirname_result
- 		# We need an absolute path.
- 		case $dir in
- 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- 		*)
- 		  absdir=`cd "$dir" && pwd`
- 		  if test -z "$absdir"; then
--		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-+		    func_warning "cannot determine absolute directory name of \`$dir'"
- 		    absdir="$dir"
- 		  fi
- 		  ;;
- 		esac
--		if grep "^installed=no" $deplib > /dev/null; then
-+		if $GREP "^installed=no" $deplib > /dev/null; then
-+		case $host in
-+		*-*-darwin*)
-+		  depdepl=
-+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-+		  if test -n "$deplibrary_names" ; then
-+		    for tmp in $deplibrary_names ; do
-+		      depdepl=$tmp
-+		    done
-+		    if test -f "$absdir/$objdir/$depdepl" ; then
-+		      depdepl="$absdir/$objdir/$depdepl"
-+		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
-+                      if test -z "$darwin_install_name"; then
-+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
-+                      fi
-+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
-+		      path=
-+		    fi
-+		  fi
-+		  ;;
-+		*)
- 		  path="-L$absdir/$objdir"
-+		  ;;
-+		esac
- 		else
--		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
--		  if test -z "$libdir"; then
--		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
--		    exit 1
--		  fi
--		  if test "$absdir" != "$libdir"; then
--		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
--		  fi
-+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-+		  test -z "$libdir" && \
-+		    func_fatal_error "\`$deplib' is not a valid libtool archive"
-+		  test "$absdir" != "$libdir" && \
-+		    func_warning "\`$deplib' seems to be moved"
-+
- 		  path="-L$absdir"
- 		fi
- 		;;
--	      *) continue ;;
- 	      esac
- 	      case " $deplibs " in
- 	      *" $path "*) ;;
-@@ -2338,21 +7081,29 @@
- 	  fi # link_all_deplibs != no
- 	fi # linkmode = lib
-       done # for deplib in $libs
--      if test $pass = dlpreopen; then
-+      if test "$pass" = link; then
-+	if test "$linkmode" = "prog"; then
-+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
-+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
-+	else
-+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-+	fi
-+      fi
-+      dependency_libs="$newdependency_libs"
-+      if test "$pass" = dlpreopen; then
- 	# Link the dlpreopened libraries before other libraries
- 	for deplib in $save_deplibs; do
- 	  deplibs="$deplib $deplibs"
- 	done
-       fi
--      if test $pass != dlopen; then
--	test $pass != scan && dependency_libs="$newdependency_libs"
--	if test $pass != conv; then
-+      if test "$pass" != dlopen; then
-+	if test "$pass" != conv; then
- 	  # Make sure lib_search_path contains only unique directories.
- 	  lib_search_path=
- 	  for dir in $newlib_search_path; do
- 	    case "$lib_search_path " in
- 	    *" $dir "*) ;;
--	    *) lib_search_path="$lib_search_path $dir" ;;
-+	    *) func_append lib_search_path " $dir" ;;
- 	    esac
- 	  done
- 	  newlib_search_path=
-@@ -2368,9 +7119,30 @@
- 	  eval tmp_libs=\"\$$var\"
- 	  new_libs=
- 	  for deplib in $tmp_libs; do
-+	    # FIXME: Pedantically, this is the right thing to do, so
-+	    #        that some nasty dependency loop isn't accidentally
-+	    #        broken:
-+	    #new_libs="$deplib $new_libs"
-+	    # Pragmatically, this seems to cause very few problems in
-+	    # practice:
- 	    case $deplib in
- 	    -L*) new_libs="$deplib $new_libs" ;;
-+	    -R*) ;;
- 	    *)
-+	      # And here is the reason: when a library appears more
-+	      # than once as an explicit dependence of a library, or
-+	      # is implicitly linked in more than once by the
-+	      # compiler, it is considered special, and multiple
-+	      # occurrences thereof are not removed.  Compare this
-+	      # with having the same library being listed as a
-+	      # dependency of multiple other libraries: in this case,
-+	      # we know (pedantically, we assume) the library does not
-+	      # need to be listed more than once, so we keep only the
-+	      # last copy.  This is not always right, but it is rare
-+	      # enough that we require users that really mean to play
-+	      # such unportable linking tricks to link the library
-+	      # using -Wl,-lname, so that libtool does not consider it
-+	      # for duplicate removal.
- 	      case " $specialdeplibs " in
- 	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
- 	      *)
-@@ -2389,171 +7161,216 @@
- 	    -L*)
- 	      case " $tmp_libs " in
- 	      *" $deplib "*) ;;
--	      *) tmp_libs="$tmp_libs $deplib" ;;
-+	      *) func_append tmp_libs " $deplib" ;;
- 	      esac
- 	      ;;
--	    *) tmp_libs="$tmp_libs $deplib" ;;
-+	    *) func_append tmp_libs " $deplib" ;;
- 	    esac
- 	  done
- 	  eval $var=\"$tmp_libs\"
- 	done # for var
-       fi
--      if test "$pass" = "conv" &&
--       { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
--	libs="$deplibs" # reset libs
--	deplibs=
--      fi
-+      # Last step: remove runtime libs from dependency_libs
-+      # (they stay in deplibs)
-+      tmp_libs=
-+      for i in $dependency_libs ; do
-+	case " $predeps $postdeps $compiler_lib_search_path " in
-+	*" $i "*)
-+	  i=""
-+	  ;;
-+	esac
-+	if test -n "$i" ; then
-+	  func_append tmp_libs " $i"
-+	fi
-+      done
-+      dependency_libs=$tmp_libs
-     done # for pass
--    if test $linkmode = prog; then
-+    if test "$linkmode" = prog; then
-       dlfiles="$newdlfiles"
-+    fi
-+    if test "$linkmode" = prog || test "$linkmode" = lib; then
-       dlprefiles="$newdlprefiles"
-     fi
- 
-     case $linkmode in
-     oldlib)
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
--	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-+	func_warning "\`-dlopen' is ignored for archives"
-       fi
- 
--      if test -n "$rpath"; then
--	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
--      fi
-+      case " $deplibs" in
-+      *\ -l* | *\ -L*)
-+	func_warning "\`-l' and \`-L' are ignored for archives" ;;
-+      esac
- 
--      if test -n "$xrpath"; then
--	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
--      fi
-+      test -n "$rpath" && \
-+	func_warning "\`-rpath' is ignored for archives"
- 
--      if test -n "$vinfo"; then
--	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
--      fi
-+      test -n "$xrpath" && \
-+	func_warning "\`-R' is ignored for archives"
- 
--      if test -n "$release"; then
--	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
--      fi
-+      test -n "$vinfo" && \
-+	func_warning "\`-version-info/-version-number' is ignored for archives"
- 
--      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
--	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
--      fi
-+      test -n "$release" && \
-+	func_warning "\`-release' is ignored for archives"
-+
-+      test -n "$export_symbols$export_symbols_regex" && \
-+	func_warning "\`-export-symbols' is ignored for archives"
- 
-       # Now set the variables for building old libraries.
-       build_libtool_libs=no
-       oldlibs="$output"
--      objs="$objs$old_deplibs"
-+      func_append objs "$old_deplibs"
-       ;;
- 
-     lib)
-       # Make sure we only generate libraries of the form `libNAME.la'.
-       case $outputname in
-       lib*)
--	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-+	func_stripname 'lib' '.la' "$outputname"
-+	name=$func_stripname_result
-+	eval shared_ext=\"$shrext_cmds\"
- 	eval libname=\"$libname_spec\"
- 	;;
-       *)
--	if test "$module" = no; then
--	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
--	  $echo "$help" 1>&2
--	  exit 1
--	fi
-+	test "$module" = no && \
-+	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
-+
- 	if test "$need_lib_prefix" != no; then
- 	  # Add the "lib" prefix for modules if required
--	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-+	  func_stripname '' '.la' "$outputname"
-+	  name=$func_stripname_result
-+	  eval shared_ext=\"$shrext_cmds\"
- 	  eval libname=\"$libname_spec\"
- 	else
--	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-+	  func_stripname '' '.la' "$outputname"
-+	  libname=$func_stripname_result
- 	fi
- 	;;
-       esac
- 
-       if test -n "$objs"; then
- 	if test "$deplibs_check_method" != pass_all; then
--	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
--	  exit 1
-+	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
- 	else
- 	  echo
--	  echo "*** Warning: Linking the shared library $output against the non-libtool"
--	  echo "*** objects $objs is not portable!"
--	  libobjs="$libobjs $objs"
-+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
-+	  $ECHO "*** objects $objs is not portable!"
-+	  func_append libobjs " $objs"
- 	fi
-       fi
- 
--      if test "$dlself" != no; then
--	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
--      fi
-+      test "$dlself" != no && \
-+	func_warning "\`-dlopen self' is ignored for libtool libraries"
- 
-       set dummy $rpath
--      if test $# -gt 2; then
--	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
--      fi
--      install_libdir="$2"
-+      shift
-+      test "$#" -gt 1 && \
-+	func_warning "ignoring multiple \`-rpath's for a libtool library"
-+
-+      install_libdir="$1"
- 
-       oldlibs=
-       if test -z "$rpath"; then
- 	if test "$build_libtool_libs" = yes; then
- 	  # Building a libtool convenience library.
- 	  # Some compilers have problems with a `.al' extension so
--          # convenience libraries should have the same extension an
--          # archive normally would.
-+	  # convenience libraries should have the same extension an
-+	  # archive normally would.
- 	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
- 	  build_libtool_libs=convenience
- 	  build_old_libs=yes
- 	fi
- 
--	if test -n "$vinfo"; then
--	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
--	fi
-+	test -n "$vinfo" && \
-+	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
- 
--	if test -n "$release"; then
--	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
--	fi
-+	test -n "$release" && \
-+	  func_warning "\`-release' is ignored for convenience libraries"
-       else
- 
- 	# Parse the version information argument.
--	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
-+	save_ifs="$IFS"; IFS=':'
- 	set dummy $vinfo 0 0 0
-+	shift
- 	IFS="$save_ifs"
- 
--	if test -n "$8"; then
--	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
--	  $echo "$help" 1>&2
--	  exit 1
--	fi
-+	test -n "$7" && \
-+	  func_fatal_help "too many parameters to \`-version-info'"
- 
--	current="$2"
--	revision="$3"
--	age="$4"
-+	# convert absolute version numbers to libtool ages
-+	# this retains compatibility with .la files and attempts
-+	# to make the code below a bit more comprehensible
-+
-+	case $vinfo_number in
-+	yes)
-+	  number_major="$1"
-+	  number_minor="$2"
-+	  number_revision="$3"
-+	  #
-+	  # There are really only two kinds -- those that
-+	  # use the current revision as the major version
-+	  # and those that subtract age and use age as
-+	  # a minor version.  But, then there is irix
-+	  # which has an extra 1 added just for fun
-+	  #
-+	  case $version_type in
-+	  darwin|linux|osf|windows|none)
-+	    func_arith $number_major + $number_minor
-+	    current=$func_arith_result
-+	    age="$number_minor"
-+	    revision="$number_revision"
-+	    ;;
-+	  freebsd-aout|freebsd-elf|qnx|sunos)
-+	    current="$number_major"
-+	    revision="$number_minor"
-+	    age="0"
-+	    ;;
-+	  irix|nonstopux)
-+	    func_arith $number_major + $number_minor
-+	    current=$func_arith_result
-+	    age="$number_minor"
-+	    revision="$number_minor"
-+	    lt_irix_increment=no
-+	    ;;
-+	  esac
-+	  ;;
-+	no)
-+	  current="$1"
-+	  revision="$2"
-+	  age="$3"
-+	  ;;
-+	esac
- 
- 	# Check that each of the things are valid numbers.
- 	case $current in
--	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- 	*)
--	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
--	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
--	  exit 1
-+	  func_error "CURRENT \`$current' must be a nonnegative integer"
-+	  func_fatal_error "\`$vinfo' is not valid version information"
- 	  ;;
- 	esac
- 
- 	case $revision in
--	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- 	*)
--	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
--	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
--	  exit 1
-+	  func_error "REVISION \`$revision' must be a nonnegative integer"
-+	  func_fatal_error "\`$vinfo' is not valid version information"
- 	  ;;
- 	esac
- 
- 	case $age in
--	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
- 	*)
--	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
--	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
--	  exit 1
-+	  func_error "AGE \`$age' must be a nonnegative integer"
-+	  func_fatal_error "\`$vinfo' is not valid version information"
- 	  ;;
- 	esac
- 
--	if test $age -gt $current; then
--	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
--	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
--	  exit 1
-+	if test "$age" -gt "$current"; then
-+	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
-+	  func_fatal_error "\`$vinfo' is not valid version information"
- 	fi
- 
- 	# Calculate the version variables.
-@@ -2566,10 +7383,13 @@
- 	darwin)
- 	  # Like Linux, but with the current version available in
- 	  # verstring for coding it into the library header
--	  major=.`expr $current - $age`
-+	  func_arith $current - $age
-+	  major=.$func_arith_result
- 	  versuffix="$major.$age.$revision"
- 	  # Darwin ld doesn't like 0 for these options...
--	  minor_current=`expr $current + 1`
-+	  func_arith $current + 1
-+	  minor_current=$func_arith_result
-+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
- 	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
- 	  ;;
- 
-@@ -2580,19 +7400,31 @@
- 
- 	freebsd-elf)
- 	  major=".$current"
--	  versuffix=".$current";
-+	  versuffix=".$current"
- 	  ;;
- 
--	irix)
--	  major=`expr $current - $age + 1`
--	  verstring="sgi$major.$revision"
-+	irix | nonstopux)
-+	  if test "X$lt_irix_increment" = "Xno"; then
-+	    func_arith $current - $age
-+	  else
-+	    func_arith $current - $age + 1
-+	  fi
-+	  major=$func_arith_result
-+
-+	  case $version_type in
-+	    nonstopux) verstring_prefix=nonstopux ;;
-+	    *)         verstring_prefix=sgi ;;
-+	  esac
-+	  verstring="$verstring_prefix$major.$revision"
- 
- 	  # Add in all the interfaces that we are compatible with.
- 	  loop=$revision
--	  while test $loop != 0; do
--	    iface=`expr $revision - $loop`
--	    loop=`expr $loop - 1`
--	    verstring="sgi$major.$iface:$verstring"
-+	  while test "$loop" -ne 0; do
-+	    func_arith $revision - $loop
-+	    iface=$func_arith_result
-+	    func_arith $loop - 1
-+	    loop=$func_arith_result
-+	    verstring="$verstring_prefix$major.$iface:$verstring"
- 	  done
- 
- 	  # Before this point, $major must not contain `.'.
-@@ -2601,25 +7433,34 @@
- 	  ;;
- 
- 	linux)
--	  major=.`expr $current - $age`
-+	  func_arith $current - $age
-+	  major=.$func_arith_result
- 	  versuffix="$major.$age.$revision"
- 	  ;;
- 
- 	osf)
--	  major=`expr $current - $age`
-+	  func_arith $current - $age
-+	  major=.$func_arith_result
- 	  versuffix=".$current.$age.$revision"
- 	  verstring="$current.$age.$revision"
- 
- 	  # Add in all the interfaces that we are compatible with.
- 	  loop=$age
--	  while test $loop != 0; do
--	    iface=`expr $current - $loop`
--	    loop=`expr $loop - 1`
-+	  while test "$loop" -ne 0; do
-+	    func_arith $current - $loop
-+	    iface=$func_arith_result
-+	    func_arith $loop - 1
-+	    loop=$func_arith_result
- 	    verstring="$verstring:${iface}.0"
- 	  done
- 
- 	  # Make executables depend on our current version.
--	  verstring="$verstring:${current}.0"
-+	  func_append verstring ":${current}.0"
-+	  ;;
-+
-+	qnx)
-+	  major=".$current"
-+	  versuffix=".$current"
- 	  ;;
- 
- 	sunos)
-@@ -2630,21 +7471,29 @@
- 	windows)
- 	  # Use '-' rather than '.', since we only want one
- 	  # extension on DOS 8.3 filesystems.
--	  major=`expr $current - $age`
-+	  func_arith $current - $age
-+	  major=$func_arith_result
- 	  versuffix="-$major"
- 	  ;;
- 
- 	*)
--	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
--	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
--	  exit 1
-+	  func_fatal_configuration "unknown library version type \`$version_type'"
- 	  ;;
- 	esac
- 
- 	# Clear the version info if we defaulted, and they specified a release.
- 	if test -z "$vinfo" && test -n "$release"; then
- 	  major=
--	  verstring="0.0"
-+	  case $version_type in
-+	  darwin)
-+	    # we can't check for "0.0" in archive_cmds due to quoting
-+	    # problems, so we reset it completely
-+	    verstring=
-+	    ;;
-+	  *)
-+	    verstring="0.0"
-+	    ;;
-+	  esac
- 	  if test "$need_version" = no; then
- 	    versuffix=
- 	  else
-@@ -2662,7 +7511,7 @@
- 	# Check to see if the archive will have undefined symbols.
- 	if test "$allow_undefined" = yes; then
- 	  if test "$allow_undefined_flag" = unsupported; then
--	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-+	    func_warning "undefined symbols not allowed in $host shared libraries"
- 	    build_libtool_libs=no
- 	    build_old_libs=yes
- 	  fi
-@@ -2670,55 +7519,65 @@
- 	  # Don't allow undefined symbols.
- 	  allow_undefined_flag="$no_undefined_flag"
- 	fi
-+
-       fi
- 
--      if test "$mode" != relink; then
-+      func_generate_dlsyms "$libname" "$libname" "yes"
-+      func_append libobjs " $symfileobj"
-+      test "X$libobjs" = "X " && libobjs=
-+
-+      if test "$opt_mode" != relink; then
- 	# Remove our outputs, but don't remove object files since they
--        # may have been created when compiling PIC objects.
--        removelist=
--        tempremovelist=`echo "$output_objdir/*"`
-+	# may have been created when compiling PIC objects.
-+	removelist=
-+	tempremovelist=`$ECHO "$output_objdir/*"`
- 	for p in $tempremovelist; do
--          case $p in
--            *.$objext)
--               ;;
--            $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
--               removelist="$removelist $p"
--               ;;
--            *) ;;
--          esac
--        done
--        if test -n "$removelist"; then
--	  $show "${rm}r $removelist"
--	  $run ${rm}r $removelist
--        fi
-+	  case $p in
-+	    *.$objext | *.gcno)
-+	       ;;
-+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-+	       if test "X$precious_files_regex" != "X"; then
-+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-+		 then
-+		   continue
-+		 fi
-+	       fi
-+	       func_append removelist " $p"
-+	       ;;
-+	    *) ;;
-+	  esac
-+	done
-+	test -n "$removelist" && \
-+	  func_show_eval "${RM}r \$removelist"
-       fi
- 
-       # Now set the variables for building old libraries.
-       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
--	oldlibs="$oldlibs $output_objdir/$libname.$libext"
-+	func_append oldlibs " $output_objdir/$libname.$libext"
- 
- 	# Transform .lo files to .o files.
--	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
-       fi
- 
-       # Eliminate all temporary directories.
--      for path in $notinst_path; do
--	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
--	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
--	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
--      done
-+      #for path in $notinst_path; do
-+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
-+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
-+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
-+      #done
- 
-       if test -n "$xrpath"; then
- 	# If the user specified any rpath flags, then add them.
- 	temp_xrpath=
- 	for libdir in $xrpath; do
--	  temp_xrpath="$temp_xrpath -R$libdir"
-+	  func_replace_sysroot "$libdir"
-+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
- 	  case "$finalize_rpath " in
- 	  *" $libdir "*) ;;
--	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-+	  *) func_append finalize_rpath " $libdir" ;;
- 	  esac
- 	done
--	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
-+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
- 	  dependency_libs="$temp_xrpath $dependency_libs"
- 	fi
-       fi
-@@ -2729,7 +7588,7 @@
-       for lib in $old_dlfiles; do
- 	case " $dlprefiles $dlfiles " in
- 	*" $lib "*) ;;
--	*) dlfiles="$dlfiles $lib" ;;
-+	*) func_append dlfiles " $lib" ;;
- 	esac
-       done
- 
-@@ -2739,27 +7598,36 @@
-       for lib in $old_dlprefiles; do
- 	case "$dlprefiles " in
- 	*" $lib "*) ;;
--	*) dlprefiles="$dlprefiles $lib" ;;
-+	*) func_append dlprefiles " $lib" ;;
- 	esac
-       done
- 
-       if test "$build_libtool_libs" = yes; then
- 	if test -n "$rpath"; then
- 	  case $host in
--	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
-+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
- 	    # these systems don't actually have a c library (as such)!
- 	    ;;
- 	  *-*-rhapsody* | *-*-darwin1.[012])
- 	    # Rhapsody C library is in the System framework
--	    deplibs="$deplibs -framework System"
-+	    func_append deplibs " System.ltframework"
- 	    ;;
- 	  *-*-netbsd*)
- 	    # Don't link with libc until the a.out ld.so is fixed.
- 	    ;;
-+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-+	    # Do not include libc due to us having libc/libc_r.
-+	    ;;
-+	  *-*-sco3.2v5* | *-*-sco5v6*)
-+	    # Causes problems with __ctype
-+	    ;;
-+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-+	    # Compiler inserts libc in the correct place for threads to work
-+	    ;;
- 	  *)
- 	    # Add libc to deplibs on all other systems if necessary.
--	    if test $build_libtool_need_lc = "yes"; then
--	      deplibs="$deplibs -lc"
-+	    if test "$build_libtool_need_lc" = "yes"; then
-+	      func_append deplibs " -lc"
- 	    fi
- 	    ;;
- 	  esac
-@@ -2785,7 +7653,7 @@
- 	  # This might be a little naive.  We might want to check
- 	  # whether the library exists or not.  But this is on
- 	  # osf3 & osf4 and I'm not really sure... Just
--	  # implementing what was already the behaviour.
-+	  # implementing what was already the behavior.
- 	  newdeplibs=$deplibs
- 	  ;;
- 	test_compile)
-@@ -2793,90 +7661,139 @@
- 	  # limits. Maybe even breaks it.  We compile a program, linking it
- 	  # against the deplibs as a proxy for the library.  Then we can check
- 	  # whether they linked in statically or dynamically with ldd.
--	  $rm conftest.c
-+	  $opt_dry_run || $RM conftest.c
- 	  cat > conftest.c <<EOF
- 	  int main() { return 0; }
- EOF
--	  $rm conftest
--	  $LTCC -o conftest conftest.c $deplibs
--	  if test $? -eq 0 ; then
-+	  $opt_dry_run || $RM conftest
-+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
- 	    ldd_output=`ldd conftest`
- 	    for i in $deplibs; do
--	      name="`expr $i : '-l\(.*\)'`"
--	      # If $name is empty we are operating on a -L argument.
--	      if test -n "$name" && test "$name" != "0"; then
--		libname=`eval \\$echo \"$libname_spec\"`
--		deplib_matches=`eval \\$echo \"$library_names_spec\"`
--		set dummy $deplib_matches
--		deplib_match=$2
--		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
--		  newdeplibs="$newdeplibs $i"
--		else
--		  droppeddeps=yes
--		  echo
--		  echo "*** Warning: This library needs some functionality provided by $i."
--		  echo "*** I have the capability to make that library automatically link in when"
--		  echo "*** you link to this library.  But I can only do this if you have a"
--		  echo "*** shared version of the library, which you do not appear to have."
-+	      case $i in
-+	      -l*)
-+		func_stripname -l '' "$i"
-+		name=$func_stripname_result
-+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+		  case " $predeps $postdeps " in
-+		  *" $i "*)
-+		    func_append newdeplibs " $i"
-+		    i=""
-+		    ;;
-+		  esac
- 		fi
--	      else
--		newdeplibs="$newdeplibs $i"
--	      fi
--	    done
--	  else
--	    # Error occured in the first compile.  Let's try to salvage the situation:
--	    # Compile a seperate program for each library.
--	    for i in $deplibs; do
--	      name="`expr $i : '-l\(.*\)'`"
--	     # If $name is empty we are operating on a -L argument.
--	      if test -n "$name" && test "$name" != "0"; then
--		$rm conftest
--		$LTCC -o conftest conftest.c $i
--		# Did it work?
--		if test $? -eq 0 ; then
--		  ldd_output=`ldd conftest`
--		  libname=`eval \\$echo \"$libname_spec\"`
--		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
--		  set dummy $deplib_matches
--		  deplib_match=$2
-+		if test -n "$i" ; then
-+		  libname=`eval "\\$ECHO \"$libname_spec\""`
-+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
-+		  set dummy $deplib_matches; shift
-+		  deplib_match=$1
- 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
--		    newdeplibs="$newdeplibs $i"
-+		    func_append newdeplibs " $i"
- 		  else
- 		    droppeddeps=yes
- 		    echo
--		    echo "*** Warning: This library needs some functionality provided by $i."
-+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
- 		    echo "*** I have the capability to make that library automatically link in when"
- 		    echo "*** you link to this library.  But I can only do this if you have a"
--		    echo "*** shared version of the library, which you do not appear to have."
-+		    echo "*** shared version of the library, which I believe you do not have"
-+		    echo "*** because a test_compile did reveal that the linker did not use it for"
-+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
-+		  fi
-+		fi
-+		;;
-+	      *)
-+		func_append newdeplibs " $i"
-+		;;
-+	      esac
-+	    done
-+	  else
-+	    # Error occurred in the first compile.  Let's try to salvage
-+	    # the situation: Compile a separate program for each library.
-+	    for i in $deplibs; do
-+	      case $i in
-+	      -l*)
-+		func_stripname -l '' "$i"
-+		name=$func_stripname_result
-+		$opt_dry_run || $RM conftest
-+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
-+		  ldd_output=`ldd conftest`
-+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+		    case " $predeps $postdeps " in
-+		    *" $i "*)
-+		      func_append newdeplibs " $i"
-+		      i=""
-+		      ;;
-+		    esac
-+		  fi
-+		  if test -n "$i" ; then
-+		    libname=`eval "\\$ECHO \"$libname_spec\""`
-+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
-+		    set dummy $deplib_matches; shift
-+		    deplib_match=$1
-+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-+		      func_append newdeplibs " $i"
-+		    else
-+		      droppeddeps=yes
-+		      echo
-+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-+		      echo "*** I have the capability to make that library automatically link in when"
-+		      echo "*** you link to this library.  But I can only do this if you have a"
-+		      echo "*** shared version of the library, which you do not appear to have"
-+		      echo "*** because a test_compile did reveal that the linker did not use this one"
-+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
-+		    fi
- 		  fi
- 		else
- 		  droppeddeps=yes
- 		  echo
--		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
--		  echo "***  make it link in!  You will probably need to install it or some"
-+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-+		  echo "*** make it link in!  You will probably need to install it or some"
- 		  echo "*** library that it depends on before this library will be fully"
- 		  echo "*** functional.  Installing it before continuing would be even better."
- 		fi
--	      else
--		newdeplibs="$newdeplibs $i"
--	      fi
-+		;;
-+	      *)
-+		func_append newdeplibs " $i"
-+		;;
-+	      esac
- 	    done
- 	  fi
- 	  ;;
- 	file_magic*)
--	  set dummy $deplibs_check_method
--	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-+	  set dummy $deplibs_check_method; shift
-+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- 	  for a_deplib in $deplibs; do
--	    name="`expr $a_deplib : '-l\(.*\)'`"
--	    # If $name is empty we are operating on a -L argument.
--	    if test -n "$name" && test "$name" != "0"; then
--	      libname=`eval \\$echo \"$libname_spec\"`
--	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
--		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
--		    for potent_lib in $potential_libs; do
-+	    case $a_deplib in
-+	    -l*)
-+	      func_stripname -l '' "$a_deplib"
-+	      name=$func_stripname_result
-+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+		case " $predeps $postdeps " in
-+		*" $a_deplib "*)
-+		  func_append newdeplibs " $a_deplib"
-+		  a_deplib=""
-+		  ;;
-+		esac
-+	      fi
-+	      if test -n "$a_deplib" ; then
-+		libname=`eval "\\$ECHO \"$libname_spec\""`
-+		if test -n "$file_magic_glob"; then
-+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
-+		else
-+		  libnameglob=$libname
-+		fi
-+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
-+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-+		  if test "$want_nocaseglob" = yes; then
-+		    shopt -s nocaseglob
-+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
-+		    $nocaseglob
-+		  else
-+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
-+		  fi
-+		  for potent_lib in $potential_libs; do
- 		      # Follow soft links.
--		      if ls -lLd "$potent_lib" 2>/dev/null \
--			 | grep " -> " >/dev/null; then
-+		      if ls -lLd "$potent_lib" 2>/dev/null |
-+			 $GREP " -> " >/dev/null; then
- 			continue
- 		      fi
- 		      # The statement above tries to avoid entering an
-@@ -2886,81 +7803,110 @@
- 		      # but so what?
- 		      potlib="$potent_lib"
- 		      while test -h "$potlib" 2>/dev/null; do
--			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
-+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
- 			case $potliblink in
- 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
--			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
- 			esac
- 		      done
--		      # It is ok to link against an archive when
--		      # building a shared library.
--		      if $AR -t $potlib > /dev/null 2>&1; then
--			newdeplibs="$newdeplibs $a_deplib"
--			a_deplib=""
--			break 2
--		      fi
--		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
--			 | sed 10q \
--			 | egrep "$file_magic_regex" > /dev/null; then
--			newdeplibs="$newdeplibs $a_deplib"
-+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
-+			 $SED -e 10q |
-+			 $EGREP "$file_magic_regex" > /dev/null; then
-+			func_append newdeplibs " $a_deplib"
- 			a_deplib=""
- 			break 2
- 		      fi
--		    done
--	      done
-+		  done
-+		done
-+	      fi
- 	      if test -n "$a_deplib" ; then
- 		droppeddeps=yes
- 		echo
--		echo "*** Warning: This library needs some functionality provided by $a_deplib."
-+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
- 		echo "*** I have the capability to make that library automatically link in when"
- 		echo "*** you link to this library.  But I can only do this if you have a"
--		echo "*** shared version of the library, which you do not appear to have."
-+		echo "*** shared version of the library, which you do not appear to have"
-+		echo "*** because I did check the linker path looking for a file starting"
-+		if test -z "$potlib" ; then
-+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
-+		else
-+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
-+		  $ECHO "*** using a file magic. Last file checked: $potlib"
-+		fi
- 	      fi
--	    else
-+	      ;;
-+	    *)
- 	      # Add a -L argument.
--	      newdeplibs="$newdeplibs $a_deplib"
--	    fi
-+	      func_append newdeplibs " $a_deplib"
-+	      ;;
-+	    esac
- 	  done # Gone through all deplibs.
- 	  ;;
- 	match_pattern*)
--	  set dummy $deplibs_check_method
--	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-+	  set dummy $deplibs_check_method; shift
-+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- 	  for a_deplib in $deplibs; do
--	    name="`expr $a_deplib : '-l\(.*\)'`"
--	    # If $name is empty we are operating on a -L argument.
--	    if test -n "$name" && test "$name" != "0"; then
--	      libname=`eval \\$echo \"$libname_spec\"`
--	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
--		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
--		for potent_lib in $potential_libs; do
--		  if eval echo \"$potent_lib\" 2>/dev/null \
--		      | sed 10q \
--		      | egrep "$match_pattern_regex" > /dev/null; then
--		    newdeplibs="$newdeplibs $a_deplib"
--		    a_deplib=""
--		    break 2
--		  fi
-+	    case $a_deplib in
-+	    -l*)
-+	      func_stripname -l '' "$a_deplib"
-+	      name=$func_stripname_result
-+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+		case " $predeps $postdeps " in
-+		*" $a_deplib "*)
-+		  func_append newdeplibs " $a_deplib"
-+		  a_deplib=""
-+		  ;;
-+		esac
-+	      fi
-+	      if test -n "$a_deplib" ; then
-+		libname=`eval "\\$ECHO \"$libname_spec\""`
-+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-+		  for potent_lib in $potential_libs; do
-+		    potlib="$potent_lib" # see symlink-check above in file_magic test
-+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
-+		       $EGREP "$match_pattern_regex" > /dev/null; then
-+		      func_append newdeplibs " $a_deplib"
-+		      a_deplib=""
-+		      break 2
-+		    fi
-+		  done
- 		done
--	      done
-+	      fi
- 	      if test -n "$a_deplib" ; then
- 		droppeddeps=yes
- 		echo
--		echo "*** Warning: This library needs some functionality provided by $a_deplib."
-+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
- 		echo "*** I have the capability to make that library automatically link in when"
- 		echo "*** you link to this library.  But I can only do this if you have a"
--		echo "*** shared version of the library, which you do not appear to have."
-+		echo "*** shared version of the library, which you do not appear to have"
-+		echo "*** because I did check the linker path looking for a file starting"
-+		if test -z "$potlib" ; then
-+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
-+		else
-+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
-+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
-+		fi
- 	      fi
--	    else
-+	      ;;
-+	    *)
- 	      # Add a -L argument.
--	      newdeplibs="$newdeplibs $a_deplib"
--	    fi
-+	      func_append newdeplibs " $a_deplib"
-+	      ;;
-+	    esac
- 	  done # Gone through all deplibs.
- 	  ;;
- 	none | unknown | *)
- 	  newdeplibs=""
--	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
--	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
--	     grep . >/dev/null; then
-+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
-+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+	    for i in $predeps $postdeps ; do
-+	      # can't use Xsed below, because $i might contain '/'
-+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
-+	    done
-+	  fi
-+	  case $tmp_deplibs in
-+	  *[!\	\ ]*)
- 	    echo
- 	    if test "X$deplibs_check_method" = "Xnone"; then
- 	      echo "*** Warning: inter-library dependencies are not supported in this platform."
-@@ -2969,7 +7915,8 @@
- 	    fi
- 	    echo "*** All declared inter-library dependencies are being dropped."
- 	    droppeddeps=yes
--	  fi
-+	    ;;
-+	  esac
- 	  ;;
- 	esac
- 	versuffix=$versuffix_save
-@@ -2980,8 +7927,8 @@
- 
- 	case $host in
- 	*-*-rhapsody* | *-*-darwin1.[012])
--	  # On Rhapsody replace the C library is the System framework
--	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
-+	  # On Rhapsody replace the C library with the System framework
-+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
- 	  ;;
- 	esac
- 
-@@ -2989,7 +7936,7 @@
- 	  if test "$module" = yes; then
- 	    echo
- 	    echo "*** Warning: libtool could not satisfy all declared inter-library"
--	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
-+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
- 	    echo "*** a static module, that should work as long as the dlopening"
- 	    echo "*** application is linked with the -dlopen flag."
- 	    if test -z "$global_symbol_pipe"; then
-@@ -3011,7 +7958,7 @@
- 	    echo "*** automatically added whenever a program is linked with this library"
- 	    echo "*** or is declared to -dlopen it."
- 
--	    if test $allow_undefined = no; then
-+	    if test "$allow_undefined" = no; then
- 	      echo
- 	      echo "*** Since this library must not contain undefined symbols,"
- 	      echo "*** because either the platform does not support them or"
-@@ -3030,6 +7977,41 @@
- 	# Done checking deplibs!
- 	deplibs=$newdeplibs
-       fi
-+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
-+      case $host in
-+	*-*-darwin*)
-+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-+	  ;;
-+      esac
-+
-+      # move library search paths that coincide with paths to not yet
-+      # installed libraries to the beginning of the library search list
-+      new_libs=
-+      for path in $notinst_path; do
-+	case " $new_libs " in
-+	*" -L$path/$objdir "*) ;;
-+	*)
-+	  case " $deplibs " in
-+	  *" -L$path/$objdir "*)
-+	    func_append new_libs " -L$path/$objdir" ;;
-+	  esac
-+	  ;;
-+	esac
-+      done
-+      for deplib in $deplibs; do
-+	case $deplib in
-+	-L*)
-+	  case " $new_libs " in
-+	  *" $deplib "*) ;;
-+	  *) func_append new_libs " $deplib" ;;
-+	  esac
-+	  ;;
-+	*) func_append new_libs " $deplib" ;;
-+	esac
-+      done
-+      deplibs="$new_libs"
- 
-       # All the library-specific variables (install_libdir is set above).
-       library_names=
-@@ -3038,15 +8020,17 @@
- 
-       # Test again, we may have decided not to build it any more
-       if test "$build_libtool_libs" = yes; then
--	if test $hardcode_into_libs = yes; then
-+	if test "$hardcode_into_libs" = yes; then
- 	  # Hardcode the library paths
- 	  hardcode_libdirs=
- 	  dep_rpath=
- 	  rpath="$finalize_rpath"
--	  test "$mode" != relink && rpath="$compile_rpath$rpath"
-+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
- 	  for libdir in $rpath; do
- 	    if test -n "$hardcode_libdir_flag_spec"; then
- 	      if test -n "$hardcode_libdir_separator"; then
-+		func_replace_sysroot "$libdir"
-+		libdir=$func_replace_sysroot_result
- 		if test -z "$hardcode_libdirs"; then
- 		  hardcode_libdirs="$libdir"
- 		else
-@@ -3055,18 +8039,18 @@
- 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		    ;;
- 		  *)
--		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- 		    ;;
- 		  esac
- 		fi
- 	      else
- 		eval flag=\"$hardcode_libdir_flag_spec\"
--		dep_rpath="$dep_rpath $flag"
-+		func_append dep_rpath " $flag"
- 	      fi
- 	    elif test -n "$runpath_var"; then
- 	      case "$perm_rpath " in
- 	      *" $libdir "*) ;;
--	      *) perm_rpath="$perm_rpath $libdir" ;;
-+	      *) func_append perm_rpath " $libdir" ;;
- 	      esac
- 	    fi
- 	  done
-@@ -3074,13 +8058,17 @@
- 	  if test -n "$hardcode_libdir_separator" &&
- 	     test -n "$hardcode_libdirs"; then
- 	    libdir="$hardcode_libdirs"
--	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-+	    else
-+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-+	    fi
- 	  fi
- 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
- 	    # We should set the runpath_var.
- 	    rpath=
- 	    for dir in $perm_rpath; do
--	      rpath="$rpath$dir:"
-+	      func_append rpath "$dir:"
- 	    done
- 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
- 	  fi
-@@ -3088,140 +8076,222 @@
- 	fi
- 
- 	shlibpath="$finalize_shlibpath"
--	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
- 	if test -n "$shlibpath"; then
- 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
- 	fi
- 
- 	# Get the real and link names of the library.
-+	eval shared_ext=\"$shrext_cmds\"
- 	eval library_names=\"$library_names_spec\"
- 	set dummy $library_names
--	realname="$2"
--	shift; shift
-+	shift
-+	realname="$1"
-+	shift
- 
- 	if test -n "$soname_spec"; then
- 	  eval soname=\"$soname_spec\"
- 	else
- 	  soname="$realname"
- 	fi
--	test -z "$dlname" && dlname=$soname
-+	if test -z "$dlname"; then
-+	  dlname=$soname
-+	fi
- 
- 	lib="$output_objdir/$realname"
-+	linknames=
- 	for link
- 	do
--	  linknames="$linknames $link"
-+	  func_append linknames " $link"
- 	done
- 
--#	# Ensure that we have .o objects for linkers which dislike .lo
--#	# (e.g. aix) in case we are running --disable-static
--#	for obj in $libobjs; do
--#	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
--#	  if test "X$xdir" = "X$obj"; then
--#	    xdir="."
--#	  else
--#	    xdir="$xdir"
--#	  fi
--#	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
--#	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
--#	  if test ! -f $xdir/$oldobj && test "$baseobj" != "$oldobj"; then
--#	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
--#	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
--#	  fi
--#	done
--
- 	# Use standard objects if they are pic
--	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
-+	test "X$libobjs" = "X " && libobjs=
-+
-+	delfiles=
-+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
-+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
-+	  export_symbols="$output_objdir/$libname.uexp"
-+	  func_append delfiles " $export_symbols"
-+	fi
-+
-+	orig_export_symbols=
-+	case $host_os in
-+	cygwin* | mingw* | cegcc*)
-+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
-+	    # exporting using user supplied symfile
-+	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
-+	      # and it's NOT already a .def file. Must figure out
-+	      # which of the given symbols are data symbols and tag
-+	      # them as such. So, trigger use of export_symbols_cmds.
-+	      # export_symbols gets reassigned inside the "prepare
-+	      # the list of exported symbols" if statement, so the
-+	      # include_expsyms logic still works.
-+	      orig_export_symbols="$export_symbols"
-+	      export_symbols=
-+	      always_export_symbols=yes
-+	    fi
-+	  fi
-+	  ;;
-+	esac
- 
- 	# Prepare the list of exported symbols
- 	if test -z "$export_symbols"; then
- 	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
--	    $show "generating symbol list for \`$libname.la'"
-+	    func_verbose "generating symbol list for \`$libname.la'"
- 	    export_symbols="$output_objdir/$libname.exp"
--	    $run $rm $export_symbols
--	    eval cmds=\"$export_symbols_cmds\"
--	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	    for cmd in $cmds; do
-+	    $opt_dry_run || $RM $export_symbols
-+	    cmds=$export_symbols_cmds
-+	    save_ifs="$IFS"; IFS='~'
-+	    for cmd1 in $cmds; do
- 	      IFS="$save_ifs"
--	      $show "$cmd"
--	      $run eval "$cmd" || exit $?
-+	      # Take the normal branch if the nm_file_list_spec branch
-+	      # doesn't work or if tool conversion is not needed.
-+	      case $nm_file_list_spec~$to_tool_file_cmd in
-+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
-+		  try_normal_branch=yes
-+		  eval cmd=\"$cmd1\"
-+		  func_len " $cmd"
-+		  len=$func_len_result
-+		  ;;
-+		*)
-+		  try_normal_branch=no
-+		  ;;
-+	      esac
-+	      if test "$try_normal_branch" = yes \
-+		 && { test "$len" -lt "$max_cmd_len" \
-+		      || test "$max_cmd_len" -le -1; }
-+	      then
-+		func_show_eval "$cmd" 'exit $?'
-+		skipped_export=false
-+	      elif test -n "$nm_file_list_spec"; then
-+		func_basename "$output"
-+		output_la=$func_basename_result
-+		save_libobjs=$libobjs
-+		save_output=$output
-+		output=${output_objdir}/${output_la}.nm
-+		func_to_tool_file "$output"
-+		libobjs=$nm_file_list_spec$func_to_tool_file_result
-+		func_append delfiles " $output"
-+		func_verbose "creating $NM input file list: $output"
-+		for obj in $save_libobjs; do
-+		  func_to_tool_file "$obj"
-+		  $ECHO "$func_to_tool_file_result"
-+		done > "$output"
-+		eval cmd=\"$cmd1\"
-+		func_show_eval "$cmd" 'exit $?'
-+		output=$save_output
-+		libobjs=$save_libobjs
-+		skipped_export=false
-+	      else
-+		# The command line is too long to execute in one step.
-+		func_verbose "using reloadable object file for export list..."
-+		skipped_export=:
-+		# Break out early, otherwise skipped_export may be
-+		# set to false by a later but shorter cmd.
-+		break
-+	      fi
- 	    done
- 	    IFS="$save_ifs"
--	    if test -n "$export_symbols_regex"; then
--	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
--	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
--	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
--	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
-+	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
-+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
- 	    fi
- 	  fi
- 	fi
- 
- 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
--	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-+	  tmp_export_symbols="$export_symbols"
-+	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
-+	fi
-+
-+	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
-+	  # The given exports_symbols file has to be filtered, so filter it.
-+	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
-+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
-+	  # 's' commands which not all seds can handle. GNU sed should be fine
-+	  # though. Also, the filter scales superlinearly with the number of
-+	  # global variables. join(1) would be nice here, but unfortunately
-+	  # isn't a blessed tool.
-+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
-+	  export_symbols=$output_objdir/$libname.def
-+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
- 	fi
- 
-+	tmp_deplibs=
-+	for test_deplib in $deplibs; do
-+	  case " $convenience " in
-+	  *" $test_deplib "*) ;;
-+	  *)
-+	    func_append tmp_deplibs " $test_deplib"
-+	    ;;
-+	  esac
-+	done
-+	deplibs="$tmp_deplibs"
-+
- 	if test -n "$convenience"; then
-+	  if test -n "$whole_archive_flag_spec" &&
-+	    test "$compiler_needs_object" = yes &&
-+	    test -z "$libobjs"; then
-+	    # extract the archives, so we have objects to list.
-+	    # TODO: could optimize this to just extract one archive.
-+	    whole_archive_flag_spec=
-+	  fi
- 	  if test -n "$whole_archive_flag_spec"; then
- 	    save_libobjs=$libobjs
- 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-+	    test "X$libobjs" = "X " && libobjs=
- 	  else
- 	    gentop="$output_objdir/${outputname}x"
--	    $show "${rm}r $gentop"
--	    $run ${rm}r "$gentop"
--	    $show "$mkdir $gentop"
--	    $run $mkdir "$gentop"
--	    status=$?
--	    if test $status -ne 0 && test ! -d "$gentop"; then
--	      exit $status
--	    fi
--	    generated="$generated $gentop"
--
--	    for xlib in $convenience; do
--	      # Extract the objects.
--	      case $xlib in
--	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
--	      *) xabs=`pwd`"/$xlib" ;;
--	      esac
--	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
--	      xdir="$gentop/$xlib"
--
--	      $show "${rm}r $xdir"
--	      $run ${rm}r "$xdir"
--	      $show "$mkdir $xdir"
--	      $run $mkdir "$xdir"
--	      status=$?
--	      if test $status -ne 0 && test ! -d "$xdir"; then
--		exit $status
--	      fi
--	      $show "(cd $xdir && $AR x $xabs)"
--	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-+	    func_append generated " $gentop"
- 
--	      libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
--	    done
-+	    func_extract_archives $gentop $convenience
-+	    func_append libobjs " $func_extract_archives_result"
-+	    test "X$libobjs" = "X " && libobjs=
- 	  fi
- 	fi
- 
- 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
- 	  eval flag=\"$thread_safe_flag_spec\"
--	  linker_flags="$linker_flags $flag"
-+	  func_append linker_flags " $flag"
- 	fi
- 
- 	# Make a backup of the uninstalled library when relinking
--	if test "$mode" = relink; then
--	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
-+	if test "$opt_mode" = relink; then
-+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
- 	fi
- 
- 	# Do each of the archive commands.
--	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
--	  eval cmds=\"$archive_expsym_cmds\"
-+	if test "$module" = yes && test -n "$module_cmds" ; then
-+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-+	    eval test_cmds=\"$module_expsym_cmds\"
-+	    cmds=$module_expsym_cmds
-+	  else
-+	    eval test_cmds=\"$module_cmds\"
-+	    cmds=$module_cmds
-+	  fi
- 	else
--	  eval cmds=\"$archive_cmds\"
-+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-+	    eval test_cmds=\"$archive_expsym_cmds\"
-+	    cmds=$archive_expsym_cmds
-+	  else
-+	    eval test_cmds=\"$archive_cmds\"
-+	    cmds=$archive_cmds
-+	  fi
- 	fi
--        if len=`expr "X$cmds" : ".*"` &&
--           test $len -le $max_cmd_len; then
--          :
--        else
--	  # The command line is too long to link in one step, link piecewise.
--          $echo "creating reloadable object files..."
-+
-+	if test "X$skipped_export" != "X:" &&
-+	   func_len " $test_cmds" &&
-+	   len=$func_len_result &&
-+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-+	  :
-+	else
-+	  # The command line is too long to link in one step, link piecewise
-+	  # or, if using GNU ld and skipped_export is not :, use a linker
-+	  # script.
- 
- 	  # Save the value of $output and $libobjs because we want to
- 	  # use them later.  If we have whole_archive_flag_spec, we
-@@ -3234,109 +8304,255 @@
- 	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
- 	    save_libobjs=$libobjs
- 	  fi
--          save_output=$output
-+	  save_output=$output
-+	  func_basename "$output"
-+	  output_la=$func_basename_result
- 
- 	  # Clear the reloadable object creation command queue and
- 	  # initialize k to one.
--          test_cmds=
--          concat_cmds=
--          objlist=
--          delfiles=
--          last_robj=
--          k=1
--          output=$output_objdir/$save_output-${k}.$objext
--	  # Loop over the list of objects to be linked.
--          for obj in $save_libobjs
--          do
--            eval test_cmds=\"$reload_cmds $objlist $last_robj\"
--            if test "X$objlist" = X ||
--	       { len=`expr "X$test_cmds" : ".*"` &&
--                 test $len -le $max_cmd_len; }; then
--              objlist="$objlist $obj"
--            else
--	      # The command $test_cmds is almost too long, add a
--	      # command to the queue.
--              if test $k -eq 1 ; then
--	        # The first file doesn't have a previous command to add.
--                eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
--              else
--	        # All subsequent reloadable object files will link in
--	        # the last one created.
--                eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
--              fi
--              last_robj=$output_objdir/$save_output-${k}.$objext
--              k=`expr $k + 1`
--              output=$output_objdir/$save_output-${k}.$objext
--              objlist=$obj
--              len=1
--            fi
--          done
--	  # Handle the remaining objects by creating one last
--	  # reloadable object file.  All subsequent reloadable object
--	  # files will link in the last one created.
--	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
--          eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-+	  test_cmds=
-+	  concat_cmds=
-+	  objlist=
-+	  last_robj=
-+	  k=1
- 
--	  # Set up a command to remove the reloadale object files
--	  # after they are used.
--          i=0
--          while test $i -lt $k
--          do
--            i=`expr $i + 1`
--            delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
--          done
-+	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
-+	    output=${output_objdir}/${output_la}.lnkscript
-+	    func_verbose "creating GNU ld script: $output"
-+	    echo 'INPUT (' > $output
-+	    for obj in $save_libobjs
-+	    do
-+	      func_to_tool_file "$obj"
-+	      $ECHO "$func_to_tool_file_result" >> $output
-+	    done
-+	    echo ')' >> $output
-+	    func_append delfiles " $output"
-+	    func_to_tool_file "$output"
-+	    output=$func_to_tool_file_result
-+	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
-+	    output=${output_objdir}/${output_la}.lnk
-+	    func_verbose "creating linker input file list: $output"
-+	    : > $output
-+	    set x $save_libobjs
-+	    shift
-+	    firstobj=
-+	    if test "$compiler_needs_object" = yes; then
-+	      firstobj="$1 "
-+	      shift
-+	    fi
-+	    for obj
-+	    do
-+	      func_to_tool_file "$obj"
-+	      $ECHO "$func_to_tool_file_result" >> $output
-+	    done
-+	    func_append delfiles " $output"
-+	    func_to_tool_file "$output"
-+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
-+	  else
-+	    if test -n "$save_libobjs"; then
-+	      func_verbose "creating reloadable object files..."
-+	      output=$output_objdir/$output_la-${k}.$objext
-+	      eval test_cmds=\"$reload_cmds\"
-+	      func_len " $test_cmds"
-+	      len0=$func_len_result
-+	      len=$len0
- 
--          $echo "creating a temporary reloadable object file: $output"
-+	      # Loop over the list of objects to be linked.
-+	      for obj in $save_libobjs
-+	      do
-+		func_len " $obj"
-+		func_arith $len + $func_len_result
-+		len=$func_arith_result
-+		if test "X$objlist" = X ||
-+		   test "$len" -lt "$max_cmd_len"; then
-+		  func_append objlist " $obj"
-+		else
-+		  # The command $test_cmds is almost too long, add a
-+		  # command to the queue.
-+		  if test "$k" -eq 1 ; then
-+		    # The first file doesn't have a previous command to add.
-+		    reload_objs=$objlist
-+		    eval concat_cmds=\"$reload_cmds\"
-+		  else
-+		    # All subsequent reloadable object files will link in
-+		    # the last one created.
-+		    reload_objs="$objlist $last_robj"
-+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
-+		  fi
-+		  last_robj=$output_objdir/$output_la-${k}.$objext
-+		  func_arith $k + 1
-+		  k=$func_arith_result
-+		  output=$output_objdir/$output_la-${k}.$objext
-+		  objlist=" $obj"
-+		  func_len " $last_robj"
-+		  func_arith $len0 + $func_len_result
-+		  len=$func_arith_result
-+		fi
-+	      done
-+	      # Handle the remaining objects by creating one last
-+	      # reloadable object file.  All subsequent reloadable object
-+	      # files will link in the last one created.
-+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-+	      reload_objs="$objlist $last_robj"
-+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
-+	      if test -n "$last_robj"; then
-+	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
-+	      fi
-+	      func_append delfiles " $output"
- 
--	  # Loop through the commands generated above and execute them.
--          IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--          for cmd in $concat_cmds; do
--            IFS="$save_ifs"
--            $show "$cmd"
--            $run eval "$cmd" || exit $?
--          done
--          IFS="$save_ifs"
-+	    else
-+	      output=
-+	    fi
- 
--          libobjs=$output
-+	    if ${skipped_export-false}; then
-+	      func_verbose "generating symbol list for \`$libname.la'"
-+	      export_symbols="$output_objdir/$libname.exp"
-+	      $opt_dry_run || $RM $export_symbols
-+	      libobjs=$output
-+	      # Append the command to create the export file.
-+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
-+	      if test -n "$last_robj"; then
-+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
-+	      fi
-+	    fi
-+
-+	    test -n "$save_libobjs" &&
-+	      func_verbose "creating a temporary reloadable object file: $output"
-+
-+	    # Loop through the commands generated above and execute them.
-+	    save_ifs="$IFS"; IFS='~'
-+	    for cmd in $concat_cmds; do
-+	      IFS="$save_ifs"
-+	      $opt_silent || {
-+		  func_quote_for_expand "$cmd"
-+		  eval "func_echo $func_quote_for_expand_result"
-+	      }
-+	      $opt_dry_run || eval "$cmd" || {
-+		lt_exit=$?
-+
-+		# Restore the uninstalled library and exit
-+		if test "$opt_mode" = relink; then
-+		  ( cd "$output_objdir" && \
-+		    $RM "${realname}T" && \
-+		    $MV "${realname}U" "$realname" )
-+		fi
-+
-+		exit $lt_exit
-+	      }
-+	    done
-+	    IFS="$save_ifs"
-+
-+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
-+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
-+	    fi
-+	  fi
-+
-+          if ${skipped_export-false}; then
-+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
-+	      tmp_export_symbols="$export_symbols"
-+	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
-+	    fi
-+
-+	    if test -n "$orig_export_symbols"; then
-+	      # The given exports_symbols file has to be filtered, so filter it.
-+	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
-+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
-+	      # 's' commands which not all seds can handle. GNU sed should be fine
-+	      # though. Also, the filter scales superlinearly with the number of
-+	      # global variables. join(1) would be nice here, but unfortunately
-+	      # isn't a blessed tool.
-+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
-+	      export_symbols=$output_objdir/$libname.def
-+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
-+	    fi
-+	  fi
-+
-+	  libobjs=$output
- 	  # Restore the value of output.
--          output=$save_output
-+	  output=$save_output
- 
- 	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
- 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-+	    test "X$libobjs" = "X " && libobjs=
- 	  fi
- 	  # Expand the library linking commands again to reset the
- 	  # value of $libobjs for piecewise linking.
- 
- 	  # Do each of the archive commands.
--          if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
--            eval cmds=\"$archive_expsym_cmds\"
--          else
--            eval cmds=\"$archive_cmds\"
--          fi
-+	  if test "$module" = yes && test -n "$module_cmds" ; then
-+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-+	      cmds=$module_expsym_cmds
-+	    else
-+	      cmds=$module_cmds
-+	    fi
-+	  else
-+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-+	      cmds=$archive_expsym_cmds
-+	    else
-+	      cmds=$archive_cmds
-+	    fi
-+	  fi
-+	fi
- 
--	  # Append the command to remove the reloadable object files
--	  # to the just-reset $cmds.
--          eval cmds=\"\$cmds~$rm $delfiles\"
--        fi
--        IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--        for cmd in $cmds; do
--          IFS="$save_ifs"
--          $show "$cmd"
--          $run eval "$cmd" || exit $?
--        done
--        IFS="$save_ifs"
-+	if test -n "$delfiles"; then
-+	  # Append the command to remove temporary files to $cmds.
-+	  eval cmds=\"\$cmds~\$RM $delfiles\"
-+	fi
-+
-+	# Add any objects from preloaded convenience libraries
-+	if test -n "$dlprefiles"; then
-+	  gentop="$output_objdir/${outputname}x"
-+	  func_append generated " $gentop"
-+
-+	  func_extract_archives $gentop $dlprefiles
-+	  func_append libobjs " $func_extract_archives_result"
-+	  test "X$libobjs" = "X " && libobjs=
-+	fi
-+
-+	save_ifs="$IFS"; IFS='~'
-+	for cmd in $cmds; do
-+	  IFS="$save_ifs"
-+	  eval cmd=\"$cmd\"
-+	  $opt_silent || {
-+	    func_quote_for_expand "$cmd"
-+	    eval "func_echo $func_quote_for_expand_result"
-+	  }
-+	  $opt_dry_run || eval "$cmd" || {
-+	    lt_exit=$?
-+
-+	    # Restore the uninstalled library and exit
-+	    if test "$opt_mode" = relink; then
-+	      ( cd "$output_objdir" && \
-+	        $RM "${realname}T" && \
-+		$MV "${realname}U" "$realname" )
-+	    fi
-+
-+	    exit $lt_exit
-+	  }
-+	done
-+	IFS="$save_ifs"
- 
- 	# Restore the uninstalled library and exit
--	if test "$mode" = relink; then
--	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
--	  exit 0
-+	if test "$opt_mode" = relink; then
-+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
-+
-+	  if test -n "$convenience"; then
-+	    if test -z "$whole_archive_flag_spec"; then
-+	      func_show_eval '${RM}r "$gentop"'
-+	    fi
-+	  fi
-+
-+	  exit $EXIT_SUCCESS
- 	fi
- 
- 	# Create links to the real library.
- 	for linkname in $linknames; do
- 	  if test "$realname" != "$linkname"; then
--	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
--	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
-+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
- 	  fi
- 	done
- 
-@@ -3349,38 +8565,35 @@
-       ;;
- 
-     obj)
--      if test -n "$deplibs"; then
--	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
--      fi
--
-       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
--	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-+	func_warning "\`-dlopen' is ignored for objects"
-       fi
- 
--      if test -n "$rpath"; then
--	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
--      fi
-+      case " $deplibs" in
-+      *\ -l* | *\ -L*)
-+	func_warning "\`-l' and \`-L' are ignored for objects" ;;
-+      esac
- 
--      if test -n "$xrpath"; then
--	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
--      fi
-+      test -n "$rpath" && \
-+	func_warning "\`-rpath' is ignored for objects"
- 
--      if test -n "$vinfo"; then
--	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
--      fi
-+      test -n "$xrpath" && \
-+	func_warning "\`-R' is ignored for objects"
- 
--      if test -n "$release"; then
--	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
--      fi
-+      test -n "$vinfo" && \
-+	func_warning "\`-version-info' is ignored for objects"
-+
-+      test -n "$release" && \
-+	func_warning "\`-release' is ignored for objects"
- 
-       case $output in
-       *.lo)
--	if test -n "$objs$old_deplibs"; then
--	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
--	  exit 1
--	fi
--	libobj="$output"
--	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-+	test -n "$objs$old_deplibs" && \
-+	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
-+
-+	libobj=$output
-+	func_lo2o "$libobj"
-+	obj=$func_lo2o_result
- 	;;
-       *)
- 	libobj=
-@@ -3389,7 +8602,7 @@
-       esac
- 
-       # Delete the old objects.
--      $run $rm $obj $libobj
-+      $opt_dry_run || $RM $obj $libobj
- 
-       # Objects from convenience libraries.  This assumes
-       # single-version convenience libraries.  Whenever we create
-@@ -3398,150 +8611,141 @@
-       reload_conv_objs=
-       gentop=
-       # reload_cmds runs $LD directly, so let us get rid of
--      # -Wl from whole_archive_flag_spec
-+      # -Wl from whole_archive_flag_spec and hope we can get by with
-+      # turning comma into space..
-       wl=
- 
-       if test -n "$convenience"; then
- 	if test -n "$whole_archive_flag_spec"; then
--	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
-+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
- 	else
- 	  gentop="$output_objdir/${obj}x"
--	  $show "${rm}r $gentop"
--	  $run ${rm}r "$gentop"
--	  $show "$mkdir $gentop"
--	  $run $mkdir "$gentop"
--	  status=$?
--	  if test $status -ne 0 && test ! -d "$gentop"; then
--	    exit $status
--	  fi
--	  generated="$generated $gentop"
--
--	  for xlib in $convenience; do
--	    # Extract the objects.
--	    case $xlib in
--	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
--	    *) xabs=`pwd`"/$xlib" ;;
--	    esac
--	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
--	    xdir="$gentop/$xlib"
--
--	    $show "${rm}r $xdir"
--	    $run ${rm}r "$xdir"
--	    $show "$mkdir $xdir"
--	    $run $mkdir "$xdir"
--	    status=$?
--	    if test $status -ne 0 && test ! -d "$xdir"; then
--	      exit $status
--	    fi
--	    $show "(cd $xdir && $AR x $xabs)"
--	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-+	  func_append generated " $gentop"
- 
--	    reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
--	  done
-+	  func_extract_archives $gentop $convenience
-+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
- 	fi
-       fi
- 
-+      # If we're not building shared, we need to use non_pic_objs
-+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
-+
-       # Create the old-style object.
--      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
- 
-       output="$obj"
--      eval cmds=\"$reload_cmds\"
--      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--      for cmd in $cmds; do
--	IFS="$save_ifs"
--	$show "$cmd"
--	$run eval "$cmd" || exit $?
--      done
--      IFS="$save_ifs"
-+      func_execute_cmds "$reload_cmds" 'exit $?'
- 
-       # Exit if we aren't doing a library object file.
-       if test -z "$libobj"; then
- 	if test -n "$gentop"; then
--	  $show "${rm}r $gentop"
--	  $run ${rm}r $gentop
-+	  func_show_eval '${RM}r "$gentop"'
- 	fi
- 
--	exit 0
-+	exit $EXIT_SUCCESS
-       fi
- 
-       if test "$build_libtool_libs" != yes; then
- 	if test -n "$gentop"; then
--	  $show "${rm}r $gentop"
--	  $run ${rm}r $gentop
-+	  func_show_eval '${RM}r "$gentop"'
- 	fi
- 
- 	# Create an invalid libtool object if no PIC, so that we don't
- 	# accidentally link it into a program.
- 	# $show "echo timestamp > $libobj"
--	# $run eval "echo timestamp > $libobj" || exit $?
--	exit 0
-+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
-+	exit $EXIT_SUCCESS
-       fi
+-	AC_MSG_CHECKING(for bfd_link_info.output_bfd)
+-	AC_TRY_RUN([#include <bfd.h>
++	AC_MSG_CHECKING([for bfd_link_info.output_bfd])
++	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++		    #include <bfd.h>
+ 		    #include <bfdlink.h>
+-		    int main() {struct bfd_link_info i;i.output_bfd=0;return 0;}],
++		    ]],[[struct bfd_link_info i;i.output_bfd=0;return 0;]])],
+ 		AC_MSG_RESULT(yes) 
+ 		AC_DEFINE(HAVE_OUTPUT_BFD),
+ 		AC_MSG_RESULT(no),
+@@ -1073,45 +1081,47 @@
+ # mechanism, in the PAGE macro.  This offset is subtracted from
+ # addresses, in calculating a page for an address in the heap.
  
-       if test -n "$pic_flag" || test "$pic_mode" != default; then
- 	# Only do commands if we really have different PIC objects.
- 	reload_objs="$libobjs $reload_conv_objs"
- 	output="$libobj"
--	eval cmds=\"$reload_cmds\"
--	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	for cmd in $cmds; do
--	  IFS="$save_ifs"
--	  $show "$cmd"
--	  $run eval "$cmd" || exit $?
--	done
--	IFS="$save_ifs"
--#     else
--#	# Just create a symlink.
--#	$show $rm $libobj
--#	$run $rm $libobj
--#	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
--#	if test "X$xdir" = "X$libobj"; then
--#	  xdir="."
--#	else
--#	  xdir="$xdir"
--#	fi
--#	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
--#	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
--#	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
--#	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
-+	func_execute_cmds "$reload_cmds" 'exit $?'
-       fi
+-AC_CHECK_SIZEOF(long,0)
++AC_CHECK_SIZEOF(long)
+ AC_MSG_CHECKING(sizeof struct contblock)
  
-       if test -n "$gentop"; then
--	$show "${rm}r $gentop"
--	$run ${rm}r $gentop
-+	func_show_eval '${RM}r "$gentop"'
-       fi
+ # work around MSYS pwd result incompatibility
+ if test "$use" = "mingw" ; then
+-AC_TRY_RUN([#include <stdio.h>
++AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++	#include <stdio.h>
+ 	#define EXTER
+ 	#include "$MP_INCLUDE"
+ 	#include "h/enum.h"
+ 	#include "h/object.h"
+-	int main(int argc,char **argv,char **envp) {
++	]],[[
+ 	FILE *f=fopen("conftest1","w");
+ 	fprintf(f,"%u",sizeof(struct contblock));
+ 	fclose(f);
+ 	return 0;
+-	}],sizeof_contblock=`cat conftest1`,
+-	   echo Cannot find sizeof struct contblock;exit 1,
+-	   echo Cannot find sizeof struct contblock;exit 1)
++	]])],sizeof_contblock=`cat conftest1`,
++	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1),
++	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1))
+ else
+-AC_TRY_RUN([#include <stdio.h>
++AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++	#include <stdio.h>
+ 	#define EXTER
+ 	#include "$MP_INCLUDE"
+ 	#include "`pwd`/h/enum.h"
+ 	#include "`pwd`/h/object.h"
+-	int main(int argc,char **argv,char **envp) {
++	]],[[
+ 	FILE *f=fopen("conftest1","w");
+ 	fprintf(f,"%u",sizeof(struct contblock));
+ 	fclose(f);
+ 	return 0;
+-	}],sizeof_contblock=`cat conftest1`,
+-	   echo Cannot find sizeof struct contblock;exit 1,
+-	   echo Cannot find sizeof struct contblock;exit 1)
++	]])],sizeof_contblock=`cat conftest1`,
++	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1),
++	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1))
+ fi
+ AC_MSG_RESULT($sizeof_contblock)
+ AC_DEFINE_UNQUOTED(SIZEOF_CONTBLOCK,$sizeof_contblock)
  
--      exit 0
-+      exit $EXIT_SUCCESS
-       ;;
  
-     prog)
-       case $host in
--	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
-+	*cygwin*) func_stripname '' '.exe' "$output"
-+	          output=$func_stripname_result.exe;;
-       esac
--      if test -n "$vinfo"; then
--	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
--      fi
-+      test -n "$vinfo" && \
-+	func_warning "\`-version-info' is ignored for programs"
+-AC_MSG_CHECKING(for word order)
+-AC_TRY_RUN([int main () {
++AC_MSG_CHECKING([for word order])
++AC_RUN_IFELSE([AC_LANG_PROGRAM([],[[
+   /* Are we little or big endian?  Adapted from Harbison&Steele.  */
+   union
+   {
+@@ -1120,7 +1130,7 @@
+   } u;
+   u.d = 1.0;
+   return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
+-}],AC_MSG_RESULT(little) 
++]])],AC_MSG_RESULT(little) 
+    AC_DEFINE(LITTLE_END),
+    AC_MSG_RESULT(big),
+    AC_MSG_RESULT([WARNING: ASSUMING LITTLE ENDIAN FOR CROSS COMPILING !!!]
+@@ -1133,15 +1143,16 @@
  
--      if test -n "$release"; then
--	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
--      fi
-+      test -n "$release" && \
-+	func_warning "\`-release' is ignored for programs"
+ AC_MSG_CHECKING([for sbrk])
+ HAVE_SBRK=""
+-AC_TRY_RUN([#include <unistd.h>
+-	    #include <stdio.h>
+-	    int main() {
++AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++		#include <unistd.h>
++		#include <stdio.h>
++		]],[[
+ 		FILE *f;
+ 		if (!(f=fopen("conftest1","w")))
+ 			return -1;
+ 		fprintf(f,"%u",sbrk(0));
+ 		return 0;
+-		}],
++		]])],
+ 		HAVE_SBRK=1
+ 		AC_MSG_RESULT(yes),
+ 		AC_MSG_RESULT([no: WARNING you must be able to emulate sbrk: as on mingw or macosx]),
+@@ -1153,14 +1164,15 @@
+ #		   AC_MSG_RESULT(sys/personality.h not found))
  
--      if test "$preload" = yes; then
--	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
--	   test "$dlopen_self_static" = unknown; then
--	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
--	fi
--      fi
-+      test "$preload" = yes \
-+        && test "$dlopen_support" = unknown \
-+	&& test "$dlopen_self" = unknown \
-+	&& test "$dlopen_self_static" = unknown && \
-+	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+ 	AC_MSG_CHECKING([for ADDR_NO_RANDOMIZE constant])
+-	AC_TRY_RUN([#include <sys/personality.h>
+-         	    #include <stdio.h>
+-		    int main(int argc,char *argv[],char *envp[]) {
++	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++			#include <sys/personality.h>
++			#include <stdio.h>
++			]],[[
+ 			FILE *f;
+ 			if (!(f=fopen("conftest1","w"))) return -1;
+ 			fprintf(f,"%x",ADDR_NO_RANDOMIZE);
+ 			return 0;
+-			}],
++			]])],
+ 			ADDR_NO_RANDOMIZE=`cat conftest1`,ADDR_NO_RANDOMIZE=0,ADDR_NO_RANDOMIZE=0)
+ 	if test "$ADDR_NO_RANDOMIZE" = "0" ; then
+ 		AC_MSG_RESULT([no, assuming 0x40000])
+@@ -1170,10 +1182,11 @@
+ 	fi
  
-       case $host in
-       *-*-rhapsody* | *-*-darwin1.[012])
- 	# On Rhapsody replace the C library is the System framework
--	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
--	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
-+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
- 	;;
-       esac
+ 	AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
+-	AC_TRY_RUN([void gprof_cleanup() {};
++	AC_RUN_IFELSE([AC_LANG_SOURCE([[
++		    void gprof_cleanup() {}
+ 		    int main(int argc,char *argv[],char *envp[]) {
+ 	            #include "h/unrandomize.h"
+-		    return 0;}],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
++		    return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
  
--      compile_command="$compile_command $compile_deplibs"
--      finalize_command="$finalize_command $finalize_deplibs"
-+      case $host in
-+      *-*-darwin*)
-+	# Don't allow lazy linking, it breaks C++ global constructors
-+	# But is supposedly fixed on 10.4 or later (yay!).
-+	if test "$tagname" = CXX ; then
-+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
-+	    10.[0123])
-+	      func_append compile_command " ${wl}-bind_at_load"
-+	      func_append finalize_command " ${wl}-bind_at_load"
-+	    ;;
-+	  esac
-+	fi
-+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
-+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-+	;;
-+      esac
-+
-+
-+      # move library search paths that coincide with paths to not yet
-+      # installed libraries to the beginning of the library search list
-+      new_libs=
-+      for path in $notinst_path; do
-+	case " $new_libs " in
-+	*" -L$path/$objdir "*) ;;
-+	*)
-+	  case " $compile_deplibs " in
-+	  *" -L$path/$objdir "*)
-+	    func_append new_libs " -L$path/$objdir" ;;
-+	  esac
-+	  ;;
-+	esac
-+      done
-+      for deplib in $compile_deplibs; do
-+	case $deplib in
-+	-L*)
-+	  case " $new_libs " in
-+	  *" $deplib "*) ;;
-+	  *) func_append new_libs " $deplib" ;;
-+	  esac
-+	  ;;
-+	*) func_append new_libs " $deplib" ;;
-+	esac
-+      done
-+      compile_deplibs="$new_libs"
-+
-+
-+      func_append compile_command " $compile_deplibs"
-+      func_append finalize_command " $finalize_deplibs"
+ 	if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
+ 		AC_MSG_RESULT(yes)
+@@ -1183,8 +1196,9 @@
+ 	fi
  
-       if test -n "$rpath$xrpath"; then
- 	# If the user specified any rpath flags, then add them.
-@@ -3549,7 +8753,7 @@
- 	  # This is the magic to use -rpath.
- 	  case "$finalize_rpath " in
- 	  *" $libdir "*) ;;
--	  *) finalize_rpath="$finalize_rpath $libdir" ;;
-+	  *) func_append finalize_rpath " $libdir" ;;
- 	  esac
- 	done
-       fi
-@@ -3568,25 +8772,32 @@
- 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		;;
- 	      *)
--		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- 		;;
- 	      esac
- 	    fi
- 	  else
- 	    eval flag=\"$hardcode_libdir_flag_spec\"
--	    rpath="$rpath $flag"
-+	    func_append rpath " $flag"
- 	  fi
- 	elif test -n "$runpath_var"; then
- 	  case "$perm_rpath " in
- 	  *" $libdir "*) ;;
--	  *) perm_rpath="$perm_rpath $libdir" ;;
-+	  *) func_append perm_rpath " $libdir" ;;
- 	  esac
+ 	AC_MSG_CHECKING([that sbrk is (now) non-random])
+-	AC_TRY_RUN([#include <stdio.h>
+-	            void gprof_cleanup() {};
++	AC_RUN_IFELSE([AC_LANG_SOURCE([[
++		    #include <stdio.h>
++	            void gprof_cleanup() {}
+ 		    int main(int argc,char * argv[],char * envp[]) {
+ 			FILE *f;
+ 			#ifdef CAN_UNRANDOMIZE_SBRK
+@@ -1192,13 +1206,13 @@
+ 			#endif
+ 			if (!(f=fopen("conftest1","w"))) return -1;
+ 			fprintf(f,"%u",sbrk(0));
+-			return 0;}],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
++			return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
+ 	if test "$SBRK" = "0" ; then
+-		AC_MSG_RESULT(cannot trap sbrk)
+-		exit 1
++		AC_MSG_ERROR([cannot trap sbrk], 1)
  	fi
- 	case $host in
--	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-+	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
- 	  case :$dllsearchpath: in
- 	  *":$libdir:"*) ;;
--	  *) dllsearchpath="$dllsearchpath:$libdir";;
-+	  ::) dllsearchpath=$libdir;;
-+	  *) func_append dllsearchpath ":$libdir";;
-+	  esac
-+	  case :$dllsearchpath: in
-+	  *":$testbindir:"*) ;;
-+	  ::) dllsearchpath=$testbindir;;
-+	  *) func_append dllsearchpath ":$testbindir";;
- 	  esac
- 	  ;;
- 	esac
-@@ -3612,18 +8823,18 @@
- 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
- 		;;
- 	      *)
--		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
- 		;;
- 	      esac
- 	    fi
- 	  else
- 	    eval flag=\"$hardcode_libdir_flag_spec\"
--	    rpath="$rpath $flag"
-+	    func_append rpath " $flag"
- 	  fi
- 	elif test -n "$runpath_var"; then
- 	  case "$finalize_perm_rpath " in
- 	  *" $libdir "*) ;;
--	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-+	  *) func_append finalize_perm_rpath " $libdir" ;;
- 	  esac
+-	AC_TRY_RUN([#include <stdio.h>
+-                    void gprof_cleanup() {};
++	AC_RUN_IFELSE([AC_LANG_SOURCE([[
++		    #include <stdio.h>
++                    void gprof_cleanup() {}
+ 		    int main(int argc,char * argv[],char * envp[]) {
+ 			FILE *f;
+ 			#ifdef CAN_UNRANDOMIZE_SBRK
+@@ -1206,10 +1220,9 @@
+ 			#endif
+ 			if (!(f=fopen("conftest1","w"))) return -1;
+ 			fprintf(f,"%u",sbrk(0));
+-			return 0;}],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
++			return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
+ 	if test "$SBRK1" = "0" ; then
+-		AC_MSG_RESULT(cannot trap sbrk)
+-		exit 1
++		AC_MSG_ERROR([cannot trap sbrk], 1)
  	fi
-       done
-@@ -3635,227 +8846,57 @@
-       fi
-       finalize_rpath="$rpath"
+ 	if test "$SBRK" = "$SBRK1" ; then
+ 		AC_MSG_RESULT(yes)
+@@ -1224,15 +1237,17 @@
+ fi
+ 
+ # pagewidth
+-AC_MSG_CHECKING(for pagewidth)
+-AC_TRY_RUN([#include <stdio.h>
++AC_MSG_CHECKING([for pagewidth])
++AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++	    #include <stdio.h>
+             #include <unistd.h>
+-int main() {size_t i=getpagesize(),j; 
++	    ]],[[
++	    size_t i=getpagesize(),j; 
+ 	    FILE *fp=fopen("conftest1","w");
+ 	    for (j=0;i>>=1;j++);
+ 	    if (j<12) {printf("pagewidth %u is too small\n",j);return -1;}
+ 	    fprintf(fp,"%u",j);
+-	    return 0;}],PAGEWIDTH=`cat conftest1`,PAGEWIDTH=0,PAGEWIDTH=0)
++	    return 0;]])],PAGEWIDTH=`cat conftest1`,PAGEWIDTH=0,PAGEWIDTH=0)
+ AC_MSG_RESULT($PAGEWIDTH)
+ AC_DEFINE_UNQUOTED(PAGEWIDTH,$PAGEWIDTH)
+ AC_SUBST(PAGEWIDTH)
+@@ -1240,11 +1255,12 @@
+ 
+ old_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$TLDFLAGS"
+-AC_MSG_CHECKING("finding DBEGIN")
+-AC_TRY_RUN([#include <stdio.h>
+-            #include <stdlib.h>
++AC_MSG_CHECKING([finding DBEGIN])
++AC_RUN_IFELSE([AC_LANG_SOURCE([[
++#include <stdio.h>
++#include <stdlib.h>
+ 
+-void gprof_cleanup() {};
++void gprof_cleanup() {}
+ int
+ main(int argc,char * argv[],char *envp[])
+ {
+@@ -1269,36 +1285,35 @@
+ #endif
+   fclose(fp);
+   return 0;
+-}],dbegin=`cat conftest1`,dbegin=0,dbegin=0)
++}]])],dbegin=`cat conftest1`,dbegin=0,dbegin=0)
+ AC_DEFINE_UNQUOTED(DBEGIN,$dbegin /* where data begins */)
+ AC_MSG_RESULT(got $dbegin)
+ LDFLAGS="$old_LDFLAGS"
  
--      dlsyms=
--      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
--	if test -n "$NM" && test -n "$global_symbol_pipe"; then
--	  dlsyms="${outputname}S.c"
--	else
--	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
--	fi
-+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
-+	# Transform all the library objects into standard objects.
-+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
-+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
-       fi
  
--      if test -n "$dlsyms"; then
--	case $dlsyms in
--	"") ;;
--	*.c)
--	  # Discover the nlist of each of the dlfiles.
--	  nlist="$output_objdir/${outputname}.nm"
--
--	  $show "$rm $nlist ${nlist}S ${nlist}T"
--	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
--
--	  # Parse the name list into a source file.
--	  $show "creating $output_objdir/$dlsyms"
--
--	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
--/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
--/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
--
--#ifdef __cplusplus
--extern \"C\" {
--#endif
--
--/* Prevent the only kind of declaration conflicts we can make. */
--#define lt_preloaded_symbols some_other_symbol
--
--/* External symbol declarations for the compiler. */\
--"
--
--	  if test "$dlself" = yes; then
--	    $show "generating symbol list for \`$output'"
--
--	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
--
--	    # Add our own program objects to the symbol list.
--	    progfiles="$objs$old_deplibs"
--	    for arg in $progfiles; do
--	      $show "extracting global C symbols from \`$arg'"
--	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
--	    done
--
--	    if test -n "$exclude_expsyms"; then
--	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
--	      $run eval '$mv "$nlist"T "$nlist"'
--	    fi
--
--	    if test -n "$export_symbols_regex"; then
--	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
--	      $run eval '$mv "$nlist"T "$nlist"'
--	    fi
--
--	    # Prepare the list of exported symbols
--	    if test -z "$export_symbols"; then
--	      export_symbols="$output_objdir/$output.exp"
--	      $run $rm $export_symbols
--	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
--	    else
--	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
--	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
--	      $run eval 'mv "$nlist"T "$nlist"'
--	    fi
--	  fi
--
--	  for arg in $dlprefiles; do
--	    $show "extracting global C symbols from \`$arg'"
--	    name=`echo "$arg" | sed -e 's%^.*/%%'`
--	    $run eval 'echo ": $name " >> "$nlist"'
--	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
--	  done
--
--	  if test -z "$run"; then
--	    # Make sure we have at least an empty file.
--	    test -f "$nlist" || : > "$nlist"
--
--	    if test -n "$exclude_expsyms"; then
--	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
--	      $mv "$nlist"T "$nlist"
--	    fi
--
--	    # Try sorting and uniquifying the output.
--	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
--	      :
--	    else
--	      grep -v "^: " < "$nlist" > "$nlist"S
--	    fi
--
--	    if test -f "$nlist"S; then
--	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
--	    else
--	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
--	    fi
--
--	    $echo >> "$output_objdir/$dlsyms" "\
--
--#undef lt_preloaded_symbols
--
--#if defined (__STDC__) && __STDC__
--# define lt_ptr_t void *
--#else
--# define lt_ptr_t char *
--# define const
--#endif
--
--/* The mapping between symbol names and symbols. */
--const struct {
--  const char *name;
--  lt_ptr_t address;
--}
--lt_preloaded_symbols[] =
--{\
--"
--
--	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
--		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
--		  < "$nlist" >> "$output_objdir/$dlsyms"
--
--	    $echo >> "$output_objdir/$dlsyms" "\
--  {0, (lt_ptr_t) 0}
--};
--
--/* This works around a problem in FreeBSD linker */
--#ifdef FREEBSD_WORKAROUND
--static const void *lt_preloaded_setup() {
--  return lt_preloaded_symbols;
--}
--#endif
--
--#ifdef __cplusplus
+-AC_MSG_CHECKING("finding CSTACK_ADDRESS")
+-AC_TRY_RUN([#include <stdio.h>
+-main()
+-{
++AC_MSG_CHECKING([finding CSTACK_ADDRESS])
++AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++#include <stdio.h>
++]],[[
+   char *b ;
+   FILE *fp = fopen("conftest1","w");
+   fprintf(fp,"%ld",((long) &b));
+   fclose(fp);
+   return 0;
+-}],cstack_address=`cat conftest1`,cstack_address=0,cstack_address=0)
++]])],cstack_address=`cat conftest1`,cstack_address=0,cstack_address=0)
+ AC_DEFINE_UNQUOTED(CSTACK_ADDRESS,$cstack_address \
+ )
+ AC_MSG_RESULT(got $cstack_address)
+ 
+ 
+ 
+-AC_MSG_CHECKING("sizeof long long int")
+-AC_TRY_RUN([#include <stdio.h>
+-main()
+-{
++AC_MSG_CHECKING([sizeof long long int])
++AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++#include <stdio.h>
++]],[[
+   if (sizeof(long long int) == 2*sizeof(long)) return 0;
+   return 1;
 -}
--#endif\
--"
--	  fi
--
--	  pic_flag_for_symtable=
--	  case $host in
--	  # compiling the symbol table file with pic_flag works around
--	  # a FreeBSD bug that causes programs to crash when -lm is
--	  # linked before any other PIC object.  But we must not use
--	  # pic_flag when linking with -static.  The problem exists in
--	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
--	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
--	    case "$compile_command " in
--	    *" -static "*) ;;
--	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
--	    esac;;
--	  *-*-hpux*)
--	    case "$compile_command " in
--	    *" -static "*) ;;
--	    *) pic_flag_for_symtable=" $pic_flag";;
--	    esac
--	  esac
--
--	  # Now compile the dynamic symbol file.
--	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
--	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
--
--	  # Clean up the generated files.
--	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
--	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
--
--	  # Transform the symbol file into the correct name.
--	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
--	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
--	  ;;
--	*)
--	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
--	  exit 1
--	  ;;
--	esac
--      else
--	# We keep going just in case the user didn't refer to
--	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
--	# really was required.
-+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+-],[AC_DEFINE(HAVE_LONG_LONG)
++]])],[AC_DEFINE(HAVE_LONG_LONG)
+ AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no),
+ AC_MSG_RESULT(no)
+@@ -1467,7 +1482,6 @@
+ #	   To get around this problem, check for both libraries together
+ #	   if -lsocket doesn't work by itself.
+ #--------------------------------------------------------------------
+-AC_MSG_CHECKING([for sockets])
+ tcl_checkBoth=0
+ AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
+ if test "$tcl_checkSocket" = 1; then
+@@ -1504,8 +1518,8 @@
+ AC_SUBST(RL_OBJS)
+ AC_SUBST(RL_LIB)
+ 
+-AC_MSG_CHECKING(For network code for nsocket.c)
+-AC_TRY_LINK([
++AC_MSG_CHECKING([for network code for nsocket.c])
++AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <sys/time.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -1522,24 +1536,25 @@
+ #include <netinet/in.h>		/* struct in_addr, struct sockaddr_in */
+ #include <arpa/inet.h>		/* inet_ntoa() */
+ #include <netdb.h>		/* gethostbyname() */
+-],[ connect(0,(struct sockaddr *)0,0);
++]],[[connect(0,(struct sockaddr *)0,0);
+     gethostbyname("jil");
+     socket(AF_INET, SOCK_STREAM, 0);
+-	],
++	]])],
+ [AC_DEFINE(HAVE_NSOCKET)
+  AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
+ 
+ 
+-AC_MSG_CHECKING(check for listen using fcntl)
+-AC_TRY_COMPILE([#include <stdio.h>
++AC_MSG_CHECKING([for listen using fcntl])
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
++#include <stdio.h>
+ #include <fcntl.h>
+-],
+-[FILE *fp=fopen("configure.in","r");
++]],
++[[FILE *fp=fopen("configure.in","r");
+   int orig;
+   orig = fcntl(fileno(fp), F_GETFL);
+   if (! (orig & O_NONBLOCK )) return 0;
+-],
++]])],
+ [AC_DEFINE(LISTEN_USE_FCNTL)
+  AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
+@@ -1560,7 +1575,7 @@
+ AC_SUBST(USE_CLEANUP)
+ gcl_ok=no
  
--	# Nullify the symbol file.
--	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
--	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-+      # template prelinking step
-+      if test -n "$prelink_cmds"; then
-+	func_execute_cmds "$prelink_cmds" 'exit $?'
-       fi
+-AC_HEADER_EGREP(LITTLE_ENDIAN, ctype.h, gcl_ok=yes, gcl_ok=noo)
++AC_EGREP_HEADER(LITTLE_ENDIAN, ctype.h, gcl_ok=yes, gcl_ok=no)
+ if test $gcl_ok = yes ; then
+ AC_DEFINE(ENDIAN_ALREADY_DEFINED)
+ fi
+@@ -1592,32 +1607,32 @@
+ esac
  
--      if test $need_relink = no || test "$build_libtool_libs" != yes; then
-+      wrappers_required=yes
-+      case $host in
-+      *cegcc* | *mingw32ce*)
-+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
-+        wrappers_required=no
-+        ;;
-+      *cygwin* | *mingw* )
-+        if test "$build_libtool_libs" != yes; then
-+          wrappers_required=no
-+        fi
-+        ;;
-+      *)
-+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-+          wrappers_required=no
-+        fi
-+        ;;
-+      esac
-+      if test "$wrappers_required" = no; then
- 	# Replace the output file specification.
--	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
- 	link_command="$compile_command$compile_rpath"
  
- 	# We have no uninstalled library dependencies, so finalize right now.
--	$show "$link_command"
--	$run eval "$link_command"
--	status=$?
-+	exit_status=0
-+	func_show_eval "$link_command" 'exit_status=$?'
+-AC_MSG_CHECKING(check for SV_ONSTACK)
+-AC_TRY_COMPILE([#include <signal.h>
+-int joe=SV_ONSTACK;
+-],
+-[],
++AC_MSG_CHECKING([for SV_ONSTACK])
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
++#include <signal.h>
++]],
++[[return SV_ONSTACK;]])],
+ [AC_DEFINE(HAVE_SV_ONSTACK)
+  AC_SUBST(HAVE_SV_ONSTACK)
+  AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
  
--	# Delete the generated files.
--	if test -n "$dlsyms"; then
--	  $show "$rm $output_objdir/${outputname}S.${objext}"
--	  $run $rm "$output_objdir/${outputname}S.${objext}"
-+	if test -n "$postlink_cmds"; then
-+	  func_to_tool_file "$output"
-+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-+	  func_execute_cmds "$postlink_cmds" 'exit $?'
- 	fi
+-AC_MSG_CHECKING(check for SIGSYS)
+-AC_TRY_COMPILE([#include <signal.h>
+-int joe=SIGSYS;
+-],
+-[],
++AC_MSG_CHECKING([for SIGSYS])
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
++#include <signal.h>
++]],
++[[return SIGSYS;]])],
+ [AC_DEFINE(HAVE_SIGSYS)
+  AC_SUBST(HAVE_SIGSYS)
+  AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
  
--	exit $status
--      fi
-+	# Delete the generated files.
-+	if test -f "$output_objdir/${outputname}S.${objext}"; then
-+	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
-+	fi
  
--      if test -n "$shlibpath_var"; then
--	# We should set the shlibpath_var
--	rpath=
--	for dir in $temp_rpath; do
--	  case $dir in
--	  [\\/]* | [A-Za-z]:[\\/]*)
--	    # Absolute path.
--	    rpath="$rpath$dir:"
--	    ;;
--	  *)
--	    # Relative path: add a thisdir entry.
--	    rpath="$rpath\$thisdir/$dir:"
--	    ;;
--	  esac
--	done
--	temp_rpath="$rpath"
-+	exit $exit_status
-       fi
+-AC_MSG_CHECKING(check for SIGEMT)
+-AC_TRY_COMPILE([#include <signal.h>
+-int joe=SIGEMT;
+-],
+-[],
++AC_MSG_CHECKING([for SIGEMT])
++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
++#include <signal.h>
++]],
++[[return SIGEMT;]])],
+ [AC_DEFINE(HAVE_SIGEMT)
+  AC_SUBST(HAVE_SIGEMT)
+  AC_MSG_RESULT(yes)],
+@@ -1629,12 +1644,13 @@
+ #if test $use = "386-linux" ; then
+ 	AC_CHECK_HEADERS(asm/sigcontext.h)
+ 	AC_CHECK_HEADERS(asm/signal.h)
+-	AC_MSG_CHECKING([for sigcontext...])
+-        AC_TRY_COMPILE([#include <signal.h>
+-       ],
+-       [
++	AC_MSG_CHECKING([for sigcontext])
++	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
++	#include <signal.h>
++       ]],
++       [[
+         struct sigcontext foo;
+-       ],
++       ]])],
+        [
+         sigcontext_works=1;
+         AC_DEFINE(SIGNAL_H_HAS_SIGCONTEXT)
+@@ -1645,18 +1661,19 @@
+          AC_MSG_RESULT(sigcontext NOT in signal.h)]
+        )
+        if test "$sigcontext_works" = 0 ; then
+-       AC_MSG_CHECKING([for sigcontext...])
+-       AC_TRY_COMPILE([#include <signal.h>
++       AC_MSG_CHECKING([for sigcontext])
++       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
++             #include <signal.h>
+              #ifdef HAVE_ASM_SIGCONTEXT_H     
+              #include <asm/sigcontext.h>
+              #endif
+              #ifdef HAVE_ASM_SIGNAL_H          
+              #include <asm/signal.h>
+              #endif
+-          ],
+-        [ 
++          ]],
++        [[
+         struct sigcontext foo;
+-        ],
++        ]])],
+         [
+         AC_DEFINE(HAVE_SIGCONTEXT)
+ 	AC_MSG_RESULT(sigcontext in asm files)
+@@ -1766,6 +1783,8 @@
  
-       if test -n "$compile_shlibpath$finalize_shlibpath"; then
-@@ -3872,7 +8913,7 @@
- 	  # We should set the runpath_var.
- 	  rpath=
- 	  for dir in $perm_rpath; do
--	    rpath="$rpath$dir:"
-+	    func_append rpath "$dir:"
- 	  done
- 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
- 	fi
-@@ -3880,7 +8921,7 @@
- 	  # We should set the runpath_var.
- 	  rpath=
- 	  for dir in $finalize_perm_rpath; do
--	    rpath="$rpath$dir:"
-+	    func_append rpath "$dir:"
- 	  done
- 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
- 	fi
-@@ -3890,13 +8931,19 @@
- 	# We don't need to create a wrapper script.
- 	link_command="$compile_var$compile_command$compile_rpath"
- 	# Replace the output file specification.
--	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
- 	# Delete the old output file.
--	$run $rm $output
-+	$opt_dry_run || $RM $output
- 	# Link the executable and exit
--	$show "$link_command"
--	$run eval "$link_command" || exit $?
--	exit 0
-+	func_show_eval "$link_command" 'exit $?'
-+
-+	if test -n "$postlink_cmds"; then
-+	  func_to_tool_file "$output"
-+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-+	  func_execute_cmds "$postlink_cmds" 'exit $?'
-+	fi
-+
-+	exit $EXIT_SUCCESS
-       fi
+ if test "$enable_tcltk" = "yes" ; then
  
-       if test "$hardcode_action" = relink; then
-@@ -3904,13 +8951,13 @@
- 	link_command="$compile_var$compile_command$compile_rpath"
- 	relink_command="$finalize_var$finalize_command$finalize_rpath"
++AC_CHECK_LIB(ieee,main,have_ieee=1,have_ieee=0)
++AC_CHECK_PROG(TCLSH,tclsh,tclsh,${TCLSH})
+ AC_MSG_CHECKING([for tcl/tk])
  
--	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
--	$echo "$modename: \`$output' will be relinked during installation" 1>&2
-+	func_warning "this platform does not like uninstalled shared libraries"
-+	func_warning "\`$output' will be relinked during installation"
-       else
- 	if test "$fast_install" != no; then
- 	  link_command="$finalize_var$compile_command$finalize_rpath"
- 	  if test "$fast_install" = yes; then
--	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
-+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
- 	  else
- 	    # fast_install is set to needless
- 	    relink_command=
-@@ -3922,246 +8969,99 @@
-       fi
  
-       # Replace the output file specification.
--      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+@@ -1786,9 +1805,6 @@
+ EOF
+ #cp conftest.tcl foo.tcl
+ 
+-AC_CHECK_PROG(TCLSH,tclsh,tclsh,${TCLSH})
+-#AC_CHECK_PROG(TCLSH,tclsh8.0,tclsh8.0,${TCLSH})
+-
+ if test "${TCLSH}" = "" ; then true ; else
+ TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
+ fi
+@@ -1862,7 +1878,6 @@
+ 
+ fi
  
-       # Delete the old output files.
--      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+-AC_CHECK_LIB(lieee,main,have_ieee=1,have_ieee=0)
+ if test "$have_ieee" = "0" ; then
+  TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
+ fi
+@@ -1906,15 +1921,18 @@
  
--      $show "$link_command"
--      $run eval "$link_command" || exit $?
-+      func_show_eval "$link_command" 'exit $?'
+ # the time handling for unixtime, add timezone
+ 
+-AC_MSG_CHECKING([alloca])
+-AC_TRY_RUN([int main() { exit(alloca(500) != NULL ? 0 : 1);}],
++# alloca
 +
-+      if test -n "$postlink_cmds"; then
-+	func_to_tool_file "$output_objdir/$outputname"
-+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
-+	func_execute_cmds "$postlink_cmds" 'exit $?'
-+      fi
++AC_MSG_CHECKING([for alloca])
++AC_RUN_IFELSE([AC_LANG_PROGRAM([],[[exit(alloca(500) != NULL ? 0 : 1);]])],
+   ,gcl_ok=yes, gcl_ok=no,gcl_ok=no)
+ if test $gcl_ok = yes ; then
+     AC_MSG_RESULT(yes)
+     AC_DEFINE(HAVE_ALLOCA)
+ else
+-  AC_TRY_RUN([#include <alloca.h>
+-  int main() { exit(alloca(500) != NULL ? 0 : 1);}],
++  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
++  #include <alloca.h>
++  ]],[[exit(alloca(500) != NULL ? 0 : 1);]])],
+   ,gcl_ok=yes, gcl_ok=no,gcl_ok=no)
+  if test $gcl_ok = yes ; then
+     AC_MSG_RESULT(yes)
+@@ -1933,8 +1951,6 @@
  
-       # Now create the wrapper script.
--      $show "creating $output"
-+      func_verbose "creating $output"
  
-       # Quote the relink command for shipping.
-       if test -n "$relink_command"; then
- 	# Preserve any variables that may affect compiler behavior
- 	for var in $variables_saved_for_relink; do
- 	  if eval test -z \"\${$var+set}\"; then
--	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
- 	  elif eval var_value=\$$var; test -z "$var_value"; then
- 	    relink_command="$var=; export $var; $relink_command"
- 	  else
--	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
--	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
-+	    func_quote_for_eval "$var_value"
-+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
- 	  fi
- 	done
--	relink_command="cd `pwd`; $relink_command"
--	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
--      fi
--
--      # Quote $echo for shipping.
--      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
--	case $0 in
--	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
--	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
--	esac
--	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
--      else
--	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-+	relink_command="(cd `pwd`; $relink_command)"
-+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-       fi
  
--      # Only actually do things if our run command is non-null.
--      if test -z "$run"; then
-+      # Only actually do things if not in dry run mode.
-+      $opt_dry_run || {
- 	# win32 will think the script is a binary if it has
- 	# a .exe suffix, so we strip it off here.
- 	case $output in
--	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
-+	  *.exe) func_stripname '' '.exe' "$output"
-+	         output=$func_stripname_result ;;
- 	esac
- 	# test for cygwin because mv fails w/o .exe extensions
- 	case $host in
--	  *cygwin*) exeext=.exe ;;
-+	  *cygwin*)
-+	    exeext=.exe
-+	    func_stripname '' '.exe' "$outputname"
-+	    outputname=$func_stripname_result ;;
- 	  *) exeext= ;;
- 	esac
--	$rm $output
--	trap "$rm $output; exit 1" 1 2 15
--
--	$echo > $output "\
--#! $SHELL
--
--# $output - temporary wrapper script for $objdir/$outputname
--# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
--#
--# The $output program cannot be directly executed until all the libtool
--# libraries that it depends on are installed.
--#
--# This wrapper script should never be moved out of the build directory.
--# If it is, it will not operate correctly.
--
--# Sed substitution that helps us do robust quoting.  It backslashifies
--# metacharacters that are still active within double-quoted strings.
--Xsed='sed -e 1s/^X//'
--sed_quote_subst='$sed_quote_subst'
--
--# The HP-UX ksh and POSIX shell print the target directory to stdout
--# if CDPATH is set.
--if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
--
--relink_command=\"$relink_command > /dev/null 2>&1\"
+-# alloca
 -
--# This environment variable determines our operation mode.
--if test \"\$libtool_install_magic\" = \"$magic\"; then
--  # install mode needs the following variable:
--  notinst_deplibs='$notinst_deplibs'
+ # dlopen etc
+ # idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
+ # then dlload("foo.o") a lisp file can refer to things in libX.so
+@@ -1958,7 +1974,7 @@
+ 
+ # redhat/cygnus released for some reason a buggy version of gcc,
+ # which no one else released.   Catch that here.
+-AC_MSG_CHECKING([Checking for buggy gcc version from redhat])
++AC_MSG_CHECKING([for buggy gcc version from redhat])
+ if  2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null 
+    then 
+         BROKEN_O4_OPT=1
+@@ -1993,7 +2009,8 @@
+ if test -f h/$use.defs  ; then
+ 
+   AC_SUBST(use)
+-  AC_OUTPUT(makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp )
++  AC_CONFIG_FILES(makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp )
++  AC_OUTPUT
+   echo makedefc
+   cat makedefc
+ 
+--- ./configure.orig	2012-01-18 07:52:04.000000000 -0700
++++ ./configure	2012-03-28 09:53:39.628412580 -0600
+@@ -651,10 +651,10 @@
+ XMKMF
+ GMPDIR
+ GMP
++MAKEINFO
+ HAVE_MALLOC_ZONE_MEMALIGN
+ EGREP
+ GREP
+-MAKEINFO
+ AWK
+ CPP
+ OBJEXT
+@@ -4023,7 +4023,14 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-int main() {return 0;}
++
++int
++main ()
++{
++return 0;
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   TCFLAGS="$TCFLAGS $TMPF";{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+@@ -4269,51 +4276,6 @@
+ $as_echo_n "checking system version (for dynamic loading)... " >&6; }
+ if machine=`uname -m` ; then true; else machine=unknown ; fi
+ 
+-for ac_prog in makeinfo
+-do
+-  # Extract the first word of "$ac_prog", so it can be a program name with args.
+-set dummy $ac_prog; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_prog_MAKEINFO+:} false; then :
+-  $as_echo_n "(cached) " >&6
 -else
--  # When we are sourced in execute mode, \$file and \$echo are already set.
--  if test \"\$libtool_execute_magic\" != \"$magic\"; then
--    echo=\"$qecho\"
--    file=\"\$0\"
--    # Make sure echo works.
--    if test \"X\$1\" = X--no-reexec; then
--      # Discard the --no-reexec flag, and continue.
--      shift
--    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
--      # Yippee, \$echo works!
--      :
--    else
--      # Restart under the correct shell, and then maybe \$echo will work.
--      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
--    fi
--  fi\
--"
--	$echo >> $output "\
--
--  # Find the directory that this script lives in.
--  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
--  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
--
--  # Follow symbolic links until we get to the real thisdir.
--  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
--  while test -n \"\$file\"; do
--    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
--
--    # If there was a directory component, then change thisdir.
--    if test \"x\$destdir\" != \"x\$file\"; then
--      case \"\$destdir\" in
--      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
--      *) thisdir=\"\$thisdir/\$destdir\" ;;
--      esac
--    fi
--
--    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
--    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
--  done
--
--  # Try to get the absolute directory name.
--  absdir=\`cd \"\$thisdir\" && pwd\`
--  test -n \"\$absdir\" && thisdir=\"\$absdir\"
--"
--
--	if test "$fast_install" = yes; then
--	  echo >> $output "\
--  program=lt-'$outputname'$exeext
--  progdir=\"\$thisdir/$objdir\"
--
--  if test ! -f \"\$progdir/\$program\" || \\
--     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
--       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
--
--    file=\"\$\$-\$program\"
--
--    if test ! -d \"\$progdir\"; then
--      $mkdir \"\$progdir\"
--    else
--      $rm \"\$progdir/\$file\"
--    fi"
--
--	  echo >> $output "\
--
--    # relink executable if necessary
--    if test -n \"\$relink_command\"; then
--      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
--      else
--        $echo \"\$relink_command_output\" >&2
--	$rm \"\$progdir/\$file\"
--	exit 1
--      fi
--    fi
+-  if test -n "$MAKEINFO"; then
+-  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+-  IFS=$as_save_IFS
+-  test -z "$as_dir" && as_dir=.
+-    for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+-    ac_cv_prog_MAKEINFO="$ac_prog"
+-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+-    break 2
+-  fi
+-done
+-  done
+-IFS=$as_save_IFS
 -
--    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
--    { $rm \"\$progdir/\$program\";
--      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
--    $rm \"\$progdir/\$file\"
--  fi"
--	else
--	  echo >> $output "\
--  program='$outputname'
--  progdir=\"\$thisdir/$objdir\"
--"
--	fi
+-fi
+-fi
+-MAKEINFO=$ac_cv_prog_MAKEINFO
+-if test -n "$MAKEINFO"; then
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
+-$as_echo "$MAKEINFO" >&6; }
+-else
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
 -
--	echo >> $output "\
 -
--  if test -f \"\$progdir/\$program\"; then"
+-  test -n "$MAKEINFO" && break
+-done
+-test -n "$MAKEINFO" || MAKEINFO=""false""
 -
--	# Export our shlibpath_var if we have one.
--	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
--	  $echo >> $output "\
--    # Add our own library path to $shlibpath_var
--    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
 -
--    # Some systems cannot cope with colon-terminated $shlibpath_var
--    # The second colon is a workaround for a bug in BeOS R4 sed
--    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
 -
--    export $shlibpath_var
--"
--	fi
-+	case $host in
-+	  *cygwin* | *mingw* )
-+	    func_dirname_and_basename "$output" "" "."
-+	    output_name=$func_basename_result
-+	    output_path=$func_dirname_result
-+	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
-+	    cwrapper="$output_path/$output_name.exe"
-+	    $RM $cwrappersource $cwrapper
-+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+ if test -f /usr/lib/NextStep/software_version; then
+     system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
+ else
+@@ -4711,22 +4673,29 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sysconf" >&5
+ $as_echo "$ac_cv_lib_c_sysconf" >&6; }
+ if test "x$ac_cv_lib_c_sysconf" = xyes; then :
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for _SC_CLK_TCK\"" >&5
+-$as_echo_n "checking \"for _SC_CLK_TCK\"... " >&6; }
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _SC_CLK_TCK" >&5
++$as_echo_n "checking for _SC_CLK_TCK... " >&6; }
+ 		if test "$cross_compiling" = yes; then :
+   hz=0
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <unistd.h>
++
++		            #include <unistd.h>
+ 		            #include <stdio.h>
+-		            int
+-			    main() {
++
++int
++main ()
++{
++
+ 			   	FILE *fp=fopen("conftest1","w");
+ 				fprintf(fp,"%lu\n",sysconf(_SC_CLK_TCK));
+ 				fclose(fp);
+ 			        return 0;
+-			    }
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   hz=`cat conftest1`
+@@ -4750,6 +4719,117 @@
+ 
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
++$as_echo_n "checking for egrep... " >&6; }
++if ${ac_cv_path_EGREP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
++   then ac_cv_path_EGREP="$GREP -E"
++   else
++     if test -z "$EGREP"; then
++  ac_path_EGREP_found=false
++  # Loop through the user's path and test for each of PROGNAME-LIST
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_prog in egrep; do
++    for ac_exec_ext in '' $ac_executable_extensions; do
++      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
++      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++# Check for GNU ac_path_EGREP and select it if it is found.
++  # Check for GNU $ac_path_EGREP
++case `"$ac_path_EGREP" --version 2>&1` in
++*GNU*)
++  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
++*)
++  ac_count=0
++  $as_echo_n 0123456789 >"conftest.in"
++  while :
++  do
++    cat "conftest.in" "conftest.in" >"conftest.tmp"
++    mv "conftest.tmp" "conftest.in"
++    cp "conftest.in" "conftest.nl"
++    $as_echo 'EGREP' >> "conftest.nl"
++    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++    as_fn_arith $ac_count + 1 && ac_count=$as_val
++    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
++      # Best one so far, save it but keep looking for a better one
++      ac_cv_path_EGREP="$ac_path_EGREP"
++      ac_path_EGREP_max=$ac_count
++    fi
++    # 10*(2^10) chars as input seems more than enough
++    test $ac_count -gt 10 && break
++  done
++  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++      $ac_path_EGREP_found && break 3
++    done
++  done
++  done
++IFS=$as_save_IFS
++  if test -z "$ac_cv_path_EGREP"; then
++    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++  fi
++else
++  ac_cv_path_EGREP=$EGREP
++fi
++
++   fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
++$as_echo "$ac_cv_path_EGREP" >&6; }
++ EGREP="$ac_cv_path_EGREP"
++
++
++for ac_prog in makeinfo
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if ${ac_cv_prog_MAKEINFO+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -n "$MAKEINFO"; then
++  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_MAKEINFO="$ac_prog"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++fi
++fi
++MAKEINFO=$ac_cv_prog_MAKEINFO
++if test -n "$MAKEINFO"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
++$as_echo "$MAKEINFO" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++  test -n "$MAKEINFO" && break
++done
++test -n "$MAKEINFO" || MAKEINFO=""false""
++
++
+ 
+ #MY_SUBDIRS=
+ 
+@@ -4803,25 +4883,36 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5
+ $as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; }
+ if test "x$ac_cv_lib_gmp___gmpz_init" = xyes; then :
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for external gmp version\"" >&5
+-$as_echo_n "checking \"for external gmp version\"... " >&6; }
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for external gmp version" >&5
++$as_echo_n "checking for external gmp version... " >&6; }
+ 			if test "$cross_compiling" = yes; then :
+-  echo "Cannot use dynamic gmp lib"
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cannot use dynamic gmp lib" >&5
++$as_echo "Cannot use dynamic gmp lib" >&6; }
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <gmp.h>
+-				    int main() {
++
++				    #include <gmp.h>
++
++int
++main ()
++{
++
+ 				    #if __GNU_MP_VERSION == 4 || __GNU_MP_VERSION == 5
+ 					return 0;
+ 				    #else
+ 					return -1;
+ 				    #endif
+-				    }
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   #				MPFILES=$GMPDIR/mpn/mul_n.o
+ #				PATCHED_SYMBOLS=__gmpn_toom3_mul_n
++				{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 4/5" >&5
++$as_echo "4/5" >&6; }
+ 				MPFILES=
+ 				PATCHED_SYMBOLS=
+ #				if test "$use" = "m68k-linux" ; then
+@@ -4834,7 +4925,8 @@
+ 				MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
+ 				rm -f foo.c
+ else
+-  echo "Cannot use dynamic gmp lib"
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cannot use dynamic gmp lib" >&5
++$as_echo "Cannot use dynamic gmp lib" >&6; }
+ fi
+ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+@@ -4894,8 +4986,8 @@
  
--	# fixup the dll searchpath if we need to.
--	if test -n "$dllsearchpath"; then
--	  $echo >> $output "\
--    # Add the dll search path components to the executable PATH
--    PATH=$dllsearchpath:\$PATH
--"
--	fi
-+	    func_emit_cwrapperexe_src > $cwrappersource
+ fi
  
--	$echo >> $output "\
--    if test \"\$libtool_execute_magic\" != \"$magic\"; then
--      # Run the actual program with our arguments.
--"
--	case $host in
--	# win32 systems need to use the prog path for dll
--	# lookup to work
--	*-*-cygwin* | *-*-pw32*)
--	  $echo >> $output "\
--      exec \$progdir/\$program \${1+\"\$@\"}
--"
--	  ;;
-+	    # The wrapper executable is built using the $host compiler,
-+	    # because it contains $host paths and files. If cross-
-+	    # compiling, it, like the target executable, must be
-+	    # executed on the $host or under an emulation environment.
-+	    $opt_dry_run || {
-+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
-+	      $STRIP $cwrapper
-+	    }
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for leading underscore in object symbols\"" >&5
+-$as_echo_n "checking \"for leading underscore in object symbols\"... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for leading underscore in object symbols" >&5
++$as_echo_n "checking for leading underscore in object symbols... " >&6; }
+ cat>foo.c <<EOFF
+ #include <math.h>
+ #include <stdio.h>
+@@ -4906,45 +4998,53 @@
+ 	LEADING_UNDERSCORE=1
+ 	$as_echo "#define LEADING_UNDERSCORE 1" >>confdefs.h
  
--	# Backslashes separate directories on plain windows
--	*-*-mingw | *-*-os2*)
--	  $echo >> $output "\
--      exec \$progdir\\\\\$program \${1+\"\$@\"}
--"
-+	    # Now, create the wrapper script for func_source use:
-+	    func_ltwrapper_scriptname $cwrapper
-+	    $RM $func_ltwrapper_scriptname_result
-+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
-+	    $opt_dry_run || {
-+	      # note: this script will not be executed, so do not chmod.
-+	      if test "x$build" = "x$host" ; then
-+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
-+	      else
-+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
-+	      fi
-+	    }
- 	  ;;
-+	  * )
-+	    $RM $output
-+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"yes\"" >&5
+-$as_echo "\"yes\"" >&6; }
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
+ else
+ 	LEADING_UNDERSCORE=""
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"no\"" >&5
+-$as_echo "\"no\"" >&6; }
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
+ fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for GNU ld option -Map\"" >&5
+-$as_echo_n "checking \"for GNU ld option -Map\"... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld option -Map" >&5
++$as_echo_n "checking for GNU ld option -Map... " >&6; }
+ touch map
+ $CC -o foo  -Wl,-Map  map foo.o >/dev/null 2>&1
+ if test `cat map | wc -l` != "0" ; then
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"yes\"" >&5
+-$as_echo "\"yes\"" >&6; }
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
+ 	$as_echo "#define HAVE_GNU_LD 1" >>confdefs.h
  
--	*)
--	  $echo >> $output "\
--      # Export the path to the program.
--      PATH=\"\$progdir:\$PATH\"
--      export PATH
--
--      exec \$program \${1+\"\$@\"}
--"
-+	    func_emit_wrapper no > $output
-+	    chmod +x $output
- 	  ;;
- 	esac
--	$echo >> $output "\
--      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
--      exit 1
--    fi
--  else
--    # The program doesn't exist.
--    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
--    \$echo \"This script is just a wrapper for \$program.\" 1>&2
--    echo \"See the $PACKAGE documentation for more information.\" 1>&2
--    exit 1
--  fi
--fi\
--"
--	chmod +x $output
--      fi
--      exit 0
-+      }
-+      exit $EXIT_SUCCESS
-       ;;
-     esac
+ 	GNU_LD=1
+ else
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"no\"" >&5
+-$as_echo "\"no\"" >&6; }
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
+ 	GNU_LD=
+ fi
+ rm -f foo.c foo.o foo map
  
-@@ -4169,7 +9069,7 @@
-     for oldlib in $oldlibs; do
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for size of gmp limbs\"" >&5
+-$as_echo_n "checking \"for size of gmp limbs\"... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of gmp limbs" >&5
++$as_echo_n "checking for size of gmp limbs... " >&6; }
+  if test "$cross_compiling" = yes; then :
+   mpsize=0
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
++
++	#include <stdio.h>
+ 	#include "$MP_INCLUDE"
+-	int main() {
++
++int
++main ()
++{
++
+ 	FILE *fp=fopen("conftest1","w");
+ 	fprintf(fp,"%u",sizeof(mp_limb_t));
+ 	fclose(fp);
+ 	return 0;
+-	}
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   mpsize=`cat conftest1`
+@@ -4956,8 +5056,7 @@
+ fi
  
-       if test "$build_libtool_libs" = convenience; then
--	oldobjs="$libobjs_save"
-+	oldobjs="$libobjs_save $symfileobj"
- 	addlibs="$convenience"
- 	build_libtool_libs=no
-       else
-@@ -4177,146 +9077,177 @@
- 	  oldobjs="$libobjs_save"
- 	  build_libtool_libs=no
- 	else
--	  oldobjs="$objs$old_deplibs $non_pic_objects"
-+	  oldobjs="$old_deplibs $non_pic_objects"
-+	  if test "$preload" = yes && test -f "$symfileobj"; then
-+	    func_append oldobjs " $symfileobj"
-+	  fi
- 	fi
- 	addlibs="$old_convenience"
-       fi
+  if test "$mpsize" = "0" ; then
+-	echo "Cannot determine mpsize"
+-	exit 1
++	as_fn_error 1 "Cannot determine mpsize" "$LINENO" 5
+  fi
+  cat >>confdefs.h <<_ACEOF
+ #define MP_LIMB_BYTES $mpsize
+@@ -4966,23 +5065,31 @@
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mpsize" >&5
+ $as_echo "$mpsize" >&6; }
  
-       if test -n "$addlibs"; then
- 	gentop="$output_objdir/${outputname}x"
--	$show "${rm}r $gentop"
--	$run ${rm}r "$gentop"
--	$show "$mkdir $gentop"
--	$run $mkdir "$gentop"
--	status=$?
--	if test $status -ne 0 && test ! -d "$gentop"; then
--	  exit $status
--	fi
--	generated="$generated $gentop"
--
--	# Add in members from convenience archives.
--	for xlib in $addlibs; do
--	  # Extract the objects.
--	  case $xlib in
--	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
--	  *) xabs=`pwd`"/$xlib" ;;
--	  esac
--	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
--	  xdir="$gentop/$xlib"
--
--	  $show "${rm}r $xdir"
--	  $run ${rm}r "$xdir"
--	  $show "$mkdir $xdir"
--	  $run $mkdir "$xdir"
--	  status=$?
--	  if test $status -ne 0 && test ! -d "$xdir"; then
--	    exit $status
--	  fi
--	  $show "(cd $xdir && $AR x $xabs)"
--	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-+	func_append generated " $gentop"
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"_SHORT_LIMB\"" >&5
+-$as_echo_n "checking \"_SHORT_LIMB\"... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking _SHORT_LIMB" >&5
++$as_echo_n "checking _SHORT_LIMB... " >&6; }
+  if test "$cross_compiling" = yes; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
++
++	#include <stdio.h>
+ 	#include "$MP_INCLUDE"
+-	int main() {
++
++int
++main ()
++{
++
+ 	#ifdef _SHORT_LIMB
+ 	return 0;
+ 	#else
+ 	return 1;
+ 	#endif
+-	}
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   $as_echo "#define __SHORT_LIMB 1" >>confdefs.h
+@@ -4996,23 +5103,31 @@
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
  
--	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print | $NL2SP`
--	done
-+	func_extract_archives $gentop $addlibs
-+	func_append oldobjs " $func_extract_archives_result"
-       fi
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"_LONG_LONG_LIMB\"" >&5
+-$as_echo_n "checking \"_LONG_LONG_LIMB\"... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking _LONG_LONG_LIMB" >&5
++$as_echo_n "checking _LONG_LONG_LIMB... " >&6; }
+  if test "$cross_compiling" = yes; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
++
++	#include <stdio.h>
+ 	#include "$MP_INCLUDE"
+-	int main() {
++
++int
++main ()
++{
++
+ 	#ifdef _LONG_LONG_LIMB
+ 	return 0;
+ 	#else
+ 	return 1;
+ 	#endif
+-	}
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   $as_echo "#define __LONG_LONG_LIMB 1" >>confdefs.h
+@@ -5351,8 +5466,7 @@
+ fi
  
-       # Do each command in the archive commands.
-       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
--	eval cmds=\"$old_archive_from_new_cmds\"
-+	cmds=$old_archive_from_new_cmds
-       else
--#	# Ensure that we have .o objects in place in case we decided
--#	# not to build a shared library, and have fallen back to building
--#	# static libs even though --disable-static was passed!
--#	for oldobj in $oldobjs; do
--#	  if test ! -f $oldobj; then
--#	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
--#	    if test "X$xdir" = "X$oldobj"; then
--#	      xdir="."
--#	    else
--#	      xdir="$xdir"
--#	    fi
--#	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
--#	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
--#	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
--#	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
--#	  fi
--#	done
+  	if test "$have_dl" = "0" ; then
+- 		echo "Cannot find dlopen in -dl"
+- 		exit 1
++ 		as_fn_error 1 "Cannot find dlopen in -dl" "$LINENO" 5
+  	fi
  
--        eval cmds=\"$old_archive_cmds\"
-+	# Add any objects from preloaded convenience libraries
-+	if test -n "$dlprefiles"; then
-+	  gentop="$output_objdir/${outputname}x"
-+	  func_append generated " $gentop"
+ 	TLIBS="$TLIBS -ldl -rdynamic"
+@@ -5410,9 +5524,17 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#define IN_GCC
++
++				    #define IN_GCC
+ 				    #include <bfd.h>
+-				    int main() { symbol_info t; return 0;}
++
++int
++main ()
++{
++symbol_info t; return 0;
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+@@ -5423,10 +5545,18 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#define CONST const
++
++					    #define CONST const
+                                             #define IN_GCC
+ 					    #include <bfd.h>
+-					    int main() {symbol_info t; return 0;}
++
++int
++main ()
++{
++symbol_info t; return 0;
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+@@ -5459,18 +5589,26 @@
+ # BFD boolean syntax
+ #
  
--        if len=`expr "X$cmds" : ".*"` &&
--             test $len -le $max_cmd_len; then
--          :
--        else
--          # the command line is too long to link in one step, link in parts
--          $echo "using piecewise archive linking..."
-+	  func_extract_archives $gentop $dlprefiles
-+	  func_append oldobjs " $func_extract_archives_result"
-+	fi
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for useable bfd_boolean" >&5
+-$as_echo_n "checking for useable bfd_boolean... " >&6; }
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable bfd_boolean" >&5
++$as_echo_n "checking for usable bfd_boolean... " >&6; }
+ 	if test "$cross_compiling" = yes; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#define IN_GCC
 +
-+	# POSIX demands no paths to be encoded in archives.  We have
-+	# to avoid creating archives with duplicate basenames if we
-+	# might have to extract them afterwards, e.g., when creating a
-+	# static archive out of a convenience library, or when linking
-+	# the entirety of a libtool archive into another (currently
-+	# not supported by libtool).
-+	if (for obj in $oldobjs
-+	    do
-+	      func_basename "$obj"
-+	      $ECHO "$func_basename_result"
-+	    done | sort | sort -uc >/dev/null 2>&1); then
-+	  :
-+	else
-+	  echo "copying selected object files to avoid basename conflicts..."
-+	  gentop="$output_objdir/${outputname}x"
-+	  func_append generated " $gentop"
-+	  func_mkdir_p "$gentop"
-+	  save_oldobjs=$oldobjs
-+	  oldobjs=
-+	  counter=1
-+	  for obj in $save_oldobjs
-+	  do
-+	    func_basename "$obj"
-+	    objbase="$func_basename_result"
-+	    case " $oldobjs " in
-+	    " ") oldobjs=$obj ;;
-+	    *[\ /]"$objbase "*)
-+	      while :; do
-+		# Make sure we don't pick an alternate name that also
-+		# overlaps.
-+		newobj=lt$counter-$objbase
-+		func_arith $counter + 1
-+		counter=$func_arith_result
-+		case " $oldobjs " in
-+		*[\ /]"$newobj "*) ;;
-+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
-+		esac
-+	      done
-+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-+	      func_append oldobjs " $gentop/$newobj"
-+	      ;;
-+	    *) func_append oldobjs " $obj" ;;
-+	    esac
-+	  done
-+	fi
-+	eval cmds=\"$old_archive_cmds\"
++		    #define IN_GCC
+ 		    #include <bfd.h>
+ 		    bfd_boolean foo() {return FALSE;}
+-		    int main() {return 0;}
++
++int
++main ()
++{
++return 0;
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+@@ -5499,9 +5637,17 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <bfd.h>
++
++		    #include <bfd.h>
+ 		    #include <bfdlink.h>
+-		    int main() {struct bfd_link_info i;i.output_bfd=0;return 0;}
++
++int
++main ()
++{
++struct bfd_link_info i;i.output_bfd=0;return 0;
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+@@ -5899,26 +6045,34 @@
+ # work around MSYS pwd result incompatibility
+ if test "$use" = "mingw" ; then
+ if test "$cross_compiling" = yes; then :
+-  echo Cannot find sizeof struct contblock;exit 1
++  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
++
++	#include <stdio.h>
+ 	#define EXTER
+ 	#include "$MP_INCLUDE"
+ 	#include "h/enum.h"
+ 	#include "h/object.h"
+-	int main(int argc,char **argv,char **envp) {
++
++int
++main ()
++{
++
+ 	FILE *f=fopen("conftest1","w");
+ 	fprintf(f,"%u",sizeof(struct contblock));
+ 	fclose(f);
+ 	return 0;
+-	}
 +
-+	func_len " $cmds"
-+	len=$func_len_result
-+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-+	  cmds=$old_archive_cmds
-+	elif test -n "$archiver_list_spec"; then
-+	  func_verbose "using command file archive linking..."
-+	  for obj in $oldobjs
-+	  do
-+	    func_to_tool_file "$obj"
-+	    $ECHO "$func_to_tool_file_result"
-+	  done > $output_objdir/$libname.libcmd
-+	  func_to_tool_file "$output_objdir/$libname.libcmd"
-+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
-+	  cmds=$old_archive_cmds
-+	else
-+	  # the command line is too long to link in one step, link in parts
-+	  func_verbose "using piecewise archive linking..."
- 	  save_RANLIB=$RANLIB
- 	  RANLIB=:
--          objlist=
--          concat_cmds=
--          save_oldobjs=$oldobjs
--          for obj in $save_oldobjs
--          do
--            oldobjs="$objlist $obj"
--            objlist="$objlist $obj"
--            eval test_cmds=\"$old_archive_cmds\"
--            if len=`expr "X$test_cmds" : ".*"` &&
--               test $len -le $max_cmd_len; then
--              :
--            else
--              # the above command should be used before it gets too long
--              oldobjs=$objlist
-+	  objlist=
-+	  concat_cmds=
-+	  save_oldobjs=$oldobjs
-+	  oldobjs=
-+	  # Is there a better way of finding the last object in the list?
-+	  for obj in $save_oldobjs
-+	  do
-+	    last_oldobj=$obj
-+	  done
-+	  eval test_cmds=\"$old_archive_cmds\"
-+	  func_len " $test_cmds"
-+	  len0=$func_len_result
-+	  len=$len0
-+	  for obj in $save_oldobjs
-+	  do
-+	    func_len " $obj"
-+	    func_arith $len + $func_len_result
-+	    len=$func_arith_result
-+	    func_append objlist " $obj"
-+	    if test "$len" -lt "$max_cmd_len"; then
-+	      :
-+	    else
-+	      # the above command should be used before it gets too long
-+	      oldobjs=$objlist
-+	      if test "$obj" = "$last_oldobj" ; then
-+		RANLIB=$save_RANLIB
-+	      fi
- 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
--              eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
--              objlist=
--            fi
--          done
-+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
-+	      objlist=
-+	      len=$len0
-+	    fi
-+	  done
- 	  RANLIB=$save_RANLIB
--          oldobjs=$objlist
--          eval cmds=\"\$concat_cmds~$old_archive_cmds\"
--        fi
-+	  oldobjs=$objlist
-+	  if test "X$oldobjs" = "X" ; then
-+	    eval cmds=\"\$concat_cmds\"
-+	  else
-+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-+	  fi
-+	fi
-       fi
--      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--      for cmd in $cmds; do
--	IFS="$save_ifs"
--	$show "$cmd"
--	$run eval "$cmd" || exit $?
--      done
--      IFS="$save_ifs"
-+      func_execute_cmds "$cmds" 'exit $?'
-     done
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   sizeof_contblock=`cat conftest1`
+ else
+-  echo Cannot find sizeof struct contblock;exit 1
++  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
+ fi
+ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+@@ -5926,26 +6080,34 @@
  
--    if test -n "$generated"; then
--      $show "${rm}r$generated"
--      $run ${rm}r$generated
--    fi
-+    test -n "$generated" && \
-+      func_show_eval "${RM}r$generated"
+ else
+ if test "$cross_compiling" = yes; then :
+-  echo Cannot find sizeof struct contblock;exit 1
++  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
++
++	#include <stdio.h>
+ 	#define EXTER
+ 	#include "$MP_INCLUDE"
+ 	#include "`pwd`/h/enum.h"
+ 	#include "`pwd`/h/object.h"
+-	int main(int argc,char **argv,char **envp) {
++
++int
++main ()
++{
++
+ 	FILE *f=fopen("conftest1","w");
+ 	fprintf(f,"%u",sizeof(struct contblock));
+ 	fclose(f);
+ 	return 0;
+-	}
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   sizeof_contblock=`cat conftest1`
+ else
+-  echo Cannot find sizeof struct contblock;exit 1
++  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
+ fi
+ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+@@ -5972,7 +6134,11 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-int main () {
++
++int
++main ()
++{
++
+   /* Are we little or big endian?  Adapted from Harbison&Steele.  */
+   union
+   {
+@@ -5981,6 +6147,9 @@
+   } u;
+   u.d = 1.0;
+   return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
++
++  ;
++  return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+@@ -6011,15 +6180,23 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <unistd.h>
+-	    #include <stdio.h>
+-	    int main() {
++
++		#include <unistd.h>
++		#include <stdio.h>
++
++int
++main ()
++{
++
+ 		FILE *f;
+ 		if (!(f=fopen("conftest1","w")))
+ 			return -1;
+ 		fprintf(f,"%u",sbrk(0));
+ 		return 0;
+-		}
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   HAVE_SBRK=1
+@@ -6046,14 +6223,22 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <sys/personality.h>
+-         	    #include <stdio.h>
+-		    int main(int argc,char *argv[],char *envp[]) {
++
++			#include <sys/personality.h>
++			#include <stdio.h>
++
++int
++main ()
++{
++
+ 			FILE *f;
+ 			if (!(f=fopen("conftest1","w"))) return -1;
+ 			fprintf(f,"%x",ADDR_NO_RANDOMIZE);
+ 			return 0;
+-			}
++
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   ADDR_NO_RANDOMIZE=`cat conftest1`
+@@ -6083,7 +6268,8 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-void gprof_cleanup() {};
++
++		    void gprof_cleanup() {}
+ 		    int main(int argc,char *argv[],char *envp[]) {
+ 	            #include "h/unrandomize.h"
+ 		    return 0;}
+@@ -6115,8 +6301,9 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
+-	            void gprof_cleanup() {};
++
++		    #include <stdio.h>
++	            void gprof_cleanup() {}
+ 		    int main(int argc,char * argv[],char * envp[]) {
+ 			FILE *f;
+ 			#ifdef CAN_UNRANDOMIZE_SBRK
+@@ -6136,17 +6323,16 @@
+ fi
  
-     # Now create the libtool archive.
-     case $output in
-     *.la)
-       old_library=
-       test "$build_old_libs" = yes && old_library="$libname.$libext"
--      $show "creating $output"
-+      func_verbose "creating $output"
+ 	if test "$SBRK" = "0" ; then
+-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot trap sbrk" >&5
+-$as_echo "cannot trap sbrk" >&6; }
+-		exit 1
++		as_fn_error 1 "cannot trap sbrk" "$LINENO" 5
+ 	fi
+ 	if test "$cross_compiling" = yes; then :
+   SBRK1=0
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
+-                    void gprof_cleanup() {};
++
++		    #include <stdio.h>
++                    void gprof_cleanup() {}
+ 		    int main(int argc,char * argv[],char * envp[]) {
+ 			FILE *f;
+ 			#ifdef CAN_UNRANDOMIZE_SBRK
+@@ -6166,9 +6352,7 @@
+ fi
  
-       # Preserve any variables that may affect compiler behavior
-       for var in $variables_saved_for_relink; do
- 	if eval test -z \"\${$var+set}\"; then
--	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
- 	elif eval var_value=\$$var; test -z "$var_value"; then
- 	  relink_command="$var=; export $var; $relink_command"
- 	else
--	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
--	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
-+	  func_quote_for_eval "$var_value"
-+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ 	if test "$SBRK1" = "0" ; then
+-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot trap sbrk" >&5
+-$as_echo "cannot trap sbrk" >&6; }
+-		exit 1
++		as_fn_error 1 "cannot trap sbrk" "$LINENO" 5
  	fi
-       done
-       # Quote the link command for shipping.
--      tagopts=
--      for tag in $taglist; do
--        tagopts="$tagopts --tag $tag"
--      done
--      relink_command="(cd `pwd`; $SHELL $0$tagopts --mode=relink $libtool_args)"
--      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-+      if test "$hardcode_automatic" = yes ; then
-+	relink_command=
-+      fi
+ 	if test "$SBRK" = "$SBRK1" ; then
+ 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+@@ -6192,14 +6376,23 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <stdio.h>
++
++	    #include <stdio.h>
+             #include <unistd.h>
+-int main() {size_t i=getpagesize(),j;
++
++int
++main ()
++{
++
++	    size_t i=getpagesize(),j;
+ 	    FILE *fp=fopen("conftest1","w");
+ 	    for (j=0;i>>=1;j++);
+ 	    if (j<12) {printf("pagewidth %u is too small\n",j);return -1;}
+ 	    fprintf(fp,"%u",j);
+-	    return 0;}
++	    return 0;
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   PAGEWIDTH=`cat conftest1`
+@@ -6221,17 +6414,18 @@
  
-       # Only create the output if not a dry run.
--      if test -z "$run"; then
-+      $opt_dry_run || {
- 	for installed in no yes; do
- 	  if test "$installed" = yes; then
- 	    if test -z "$install_libdir"; then
-@@ -4328,50 +9259,108 @@
- 	    for deplib in $dependency_libs; do
- 	      case $deplib in
- 	      *.la)
--		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
--		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
--		if test -z "$libdir"; then
--		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
--		  exit 1
--		fi
--		newdependency_libs="$newdependency_libs $libdir/$name"
-+		func_basename "$deplib"
-+		name="$func_basename_result"
-+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-+		test -z "$libdir" && \
-+		  func_fatal_error "\`$deplib' is not a valid libtool archive"
-+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
- 		;;
--	      *) newdependency_libs="$newdependency_libs $deplib" ;;
-+	      -L*)
-+		func_stripname -L '' "$deplib"
-+		func_replace_sysroot "$func_stripname_result"
-+		func_append newdependency_libs " -L$func_replace_sysroot_result"
-+		;;
-+	      -R*)
-+		func_stripname -R '' "$deplib"
-+		func_replace_sysroot "$func_stripname_result"
-+		func_append newdependency_libs " -R$func_replace_sysroot_result"
-+		;;
-+	      *) func_append newdependency_libs " $deplib" ;;
- 	      esac
- 	    done
- 	    dependency_libs="$newdependency_libs"
- 	    newdlfiles=
+ old_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$TLDFLAGS"
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"finding DBEGIN\"" >&5
+-$as_echo_n "checking \"finding DBEGIN\"... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking finding DBEGIN" >&5
++$as_echo_n "checking finding DBEGIN... " >&6; }
+ if test "$cross_compiling" = yes; then :
+   dbegin=0
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
 +
- 	    for lib in $dlfiles; do
--	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
--	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
--	      if test -z "$libdir"; then
--		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
--		exit 1
--	      fi
--	      newdlfiles="$newdlfiles $libdir/$name"
-+	      case $lib in
-+	      *.la)
-+	        func_basename "$lib"
-+		name="$func_basename_result"
-+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-+		test -z "$libdir" && \
-+		  func_fatal_error "\`$lib' is not a valid libtool archive"
-+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
-+		;;
-+	      *) func_append newdlfiles " $lib" ;;
-+	      esac
- 	    done
- 	    dlfiles="$newdlfiles"
- 	    newdlprefiles=
- 	    for lib in $dlprefiles; do
--	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
--	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
--	      if test -z "$libdir"; then
--		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
--		exit 1
--	      fi
--	      newdlprefiles="$newdlprefiles $libdir/$name"
-+	      case $lib in
-+	      *.la)
-+		# Only pass preopened files to the pseudo-archive (for
-+		# eventual linking with the app. that links it) if we
-+		# didn't already link the preopened objects directly into
-+		# the library:
-+		func_basename "$lib"
-+		name="$func_basename_result"
-+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-+		test -z "$libdir" && \
-+		  func_fatal_error "\`$lib' is not a valid libtool archive"
-+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
-+		;;
-+	      esac
-+	    done
-+	    dlprefiles="$newdlprefiles"
-+	  else
-+	    newdlfiles=
-+	    for lib in $dlfiles; do
-+	      case $lib in
-+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-+		*) abs=`pwd`"/$lib" ;;
-+	      esac
-+	      func_append newdlfiles " $abs"
-+	    done
-+	    dlfiles="$newdlfiles"
-+	    newdlprefiles=
-+	    for lib in $dlprefiles; do
-+	      case $lib in
-+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-+		*) abs=`pwd`"/$lib" ;;
-+	      esac
-+	      func_append newdlprefiles " $abs"
- 	    done
- 	    dlprefiles="$newdlprefiles"
- 	  fi
--	  $rm $output
-+	  $RM $output
- 	  # place dlname in correct position for cygwin
-+	  # In fact, it would be nice if we could use this code for all target
-+	  # systems that can't hard-code library paths into their executables
-+	  # and that have no shared library path variable independent of PATH,
-+	  # but it turns out we can't easily determine that from inspecting
-+	  # libtool variables, so we have to hard-code the OSs to which it
-+	  # applies here; at the moment, that means platforms that use the PE
-+	  # object format with DLL files.  See the long comment at the top of
-+	  # tests/bindir.at for full details.
- 	  tdlname=$dlname
- 	  case $host,$output,$installed,$module,$dlname in
--	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
-+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
-+	      # If a -bindir argument was supplied, place the dll there.
-+	      if test "x$bindir" != x ;
-+	      then
-+		func_relative_path "$install_libdir" "$bindir"
-+		tdlname=$func_relative_path_result$dlname
-+	      else
-+		# Otherwise fall back on heuristic.
-+		tdlname=../bin/$dlname
-+	      fi
-+	      ;;
- 	  esac
--	  $echo > $output "\
-+	  $ECHO > $output "\
- # $outputname - a libtool library file
--# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
- #
- # Please DO NOT delete this file!
- # It is necessary for linking the library.
-@@ -4385,9 +9374,15 @@
- # The name of the static archive.
- old_library='$old_library'
+ #include <stdio.h>
+-            #include <stdlib.h>
++#include <stdlib.h>
  
-+# Linker flags that can not go in dependency_libs.
-+inherited_linker_flags='$new_inherited_linker_flags'
+-void gprof_cleanup() {};
++void gprof_cleanup() {}
+ int
+ main(int argc,char * argv[],char *envp[])
+ {
+@@ -6276,21 +6470,28 @@
+ LDFLAGS="$old_LDFLAGS"
+ 
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"finding CSTACK_ADDRESS\"" >&5
+-$as_echo_n "checking \"finding CSTACK_ADDRESS\"... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking finding CSTACK_ADDRESS" >&5
++$as_echo_n "checking finding CSTACK_ADDRESS... " >&6; }
+ if test "$cross_compiling" = yes; then :
+   cstack_address=0
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
+ #include <stdio.h>
+-main()
++
++int
++main ()
+ {
 +
- # Libraries that this one depends upon.
- dependency_libs='$dependency_libs'
- 
-+# Names of additional weak libraries provided by this library
-+weak_library_names='$weak_libs'
+   char *b ;
+   FILE *fp = fopen("conftest1","w");
+   fprintf(fp,"%ld",((long) &b));
+   fclose(fp);
+   return 0;
 +
- # Version information for $libname.
- current=$current
- age=$age
-@@ -4396,692 +9391,39 @@
- # Is this an already installed library?
- installed=$installed
++  ;
++  return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+@@ -6312,8 +6513,8 @@
  
-+# Should we warn about portability when linking against -modules?
-+shouldnotlink=$module
-+
- # Files to dlopen/dlpreopen
- dlopen='$dlfiles'
- dlpreopen='$dlprefiles'
  
- # Directory that this library needs to be installed in:
- libdir='$install_libdir'"
--	  if test "$installed" = no && test $need_relink = yes; then
--	    $echo >> $output "\
-+	  if test "$installed" = no && test "$need_relink" = yes; then
-+	    $ECHO >> $output "\
- relink_command=\"$relink_command\""
- 	  fi
- 	done
--      fi
-+      }
  
-       # Do a symbolic link so that the libtool archive can be found in
-       # LD_LIBRARY_PATH before the program is installed.
--      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
--      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
--      ;;
--    esac
--    exit 0
--    ;;
--
--  # libtool install mode
--  install)
--    modename="$modename: install"
--
--    # There may be an optional sh(1) argument at the beginning of
--    # install_prog (especially on Windows NT).
--    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
--       # Allow the use of GNU shtool's install command.
--       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
--      # Aesthetically quote it.
--      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
--      case $arg in
--      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
--	arg="\"$arg\""
--	;;
--      esac
--      install_prog="$arg "
--      arg="$1"
--      shift
--    else
--      install_prog=
--      arg="$nonopt"
--    fi
--
--    # The real first argument should be the name of the installation program.
--    # Aesthetically quote it.
--    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
--    case $arg in
--    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
--      arg="\"$arg\""
--      ;;
--    esac
--    install_prog="$install_prog$arg"
--
--    # We need to accept at least all the BSD install flags.
--    dest=
--    files=
--    opts=
--    prev=
--    install_type=
--    isdir=no
--    stripme=
--    for arg
--    do
--      if test -n "$dest"; then
--	files="$files $dest"
--	dest="$arg"
--	continue
--      fi
--
--      case $arg in
--      -d) isdir=yes ;;
--      -f) prev="-f" ;;
--      -g) prev="-g" ;;
--      -m) prev="-m" ;;
--      -o) prev="-o" ;;
--      -s)
--	stripme=" -s"
--	continue
--	;;
--      -*) ;;
--
--      *)
--	# If the previous option needed an argument, then skip it.
--	if test -n "$prev"; then
--	  prev=
--	else
--	  dest="$arg"
--	  continue
--	fi
--	;;
--      esac
--
--      # Aesthetically quote the argument.
--      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
--      case $arg in
--      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
--	arg="\"$arg\""
--	;;
--      esac
--      install_prog="$install_prog $arg"
--    done
--
--    if test -z "$install_prog"; then
--      $echo "$modename: you must specify an install program" 1>&2
--      $echo "$help" 1>&2
--      exit 1
--    fi
--
--    if test -n "$prev"; then
--      $echo "$modename: the \`$prev' option requires an argument" 1>&2
--      $echo "$help" 1>&2
--      exit 1
--    fi
--
--    if test -z "$files"; then
--      if test -z "$dest"; then
--	$echo "$modename: no file or destination specified" 1>&2
--      else
--	$echo "$modename: you must specify a destination" 1>&2
--      fi
--      $echo "$help" 1>&2
--      exit 1
--    fi
--
--    # Strip any trailing slash from the destination.
--    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
--
--    # Check to see that the destination is a directory.
--    test -d "$dest" && isdir=yes
--    if test "$isdir" = yes; then
--      destdir="$dest"
--      destname=
--    else
--      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
--      test "X$destdir" = "X$dest" && destdir=.
--      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
--
--      # Not a directory, so check to see that there is only one file specified.
--      set dummy $files
--      if test $# -gt 2; then
--	$echo "$modename: \`$dest' is not a directory" 1>&2
--	$echo "$help" 1>&2
--	exit 1
--      fi
--    fi
--    case $destdir in
--    [\\/]* | [A-Za-z]:[\\/]*) ;;
--    *)
--      for file in $files; do
--	case $file in
--	*.lo) ;;
--	*)
--	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
--	  $echo "$help" 1>&2
--	  exit 1
--	  ;;
--	esac
--      done
-+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
-       ;;
-     esac
-+    exit $EXIT_SUCCESS
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"sizeof long long int\"" >&5
+-$as_echo_n "checking \"sizeof long long int\"... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking sizeof long long int" >&5
++$as_echo_n "checking sizeof long long int... " >&6; }
+ if test "$cross_compiling" = yes; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+@@ -6321,13 +6522,19 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
+ #include <stdio.h>
+-main()
++
++int
++main ()
+ {
++
+   if (sizeof(long long int) == 2*sizeof(long)) return 0;
+   return 1;
+-}
+ 
++  ;
++  return 0;
 +}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+   $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
+@@ -6833,8 +7040,6 @@
+ #	   To get around this problem, check for both libraries together
+ #	   if -lsocket doesn't work by itself.
+ #--------------------------------------------------------------------
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockets" >&5
+-$as_echo_n "checking for sockets... " >&6; }
+ tcl_checkBoth=0
+ ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+ if test "x$ac_cv_func_connect" = xyes; then :
+@@ -7046,8 +7251,8 @@
+ 
+ 
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking For network code for nsocket.c" >&5
+-$as_echo_n "checking For network code for nsocket.c... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for network code for nsocket.c" >&5
++$as_echo_n "checking for network code for nsocket.c... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+@@ -7071,7 +7276,7 @@
+ int
+ main ()
+ {
+- connect(0,(struct sockaddr *)0,0);
++connect(0,(struct sockaddr *)0,0);
+     gethostbyname("jil");
+     socket(AF_INET, SOCK_STREAM, 0);
+ 
+@@ -7092,10 +7297,11 @@
+     conftest$ac_exeext conftest.$ac_ext
+ 
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for listen using fcntl" >&5
+-$as_echo_n "checking check for listen using fcntl... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for listen using fcntl" >&5
++$as_echo_n "checking for listen using fcntl... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
+ #include <stdio.h>
+ #include <fcntl.h>
  
--    # This variable tells wrapper scripts just to set variables rather
--    # than running their programs.
--    libtool_install_magic="$magic"
--
--    staticlibs=
--    future_libdirs=
--    current_libdirs=
--    for file in $files; do
--
--      # Do each installation.
--      case $file in
--      *.$libext)
--	# Do the static libraries later.
--	staticlibs="$staticlibs $file"
--	;;
--
--      *.la)
--	# Check to see that this really is a libtool archive.
--	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
--	else
--	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
--	  $echo "$help" 1>&2
--	  exit 1
--	fi
--
--	library_names=
--	old_library=
--	relink_command=
--	# If there is no directory component, then add one.
--	case $file in
--	*/* | *\\*) . $file ;;
--	*) . ./$file ;;
--	esac
--
--	# Add the libdir to current_libdirs if it is the destination.
--	if test "X$destdir" = "X$libdir"; then
--	  case "$current_libdirs " in
--	  *" $libdir "*) ;;
--	  *) current_libdirs="$current_libdirs $libdir" ;;
--	  esac
--	else
--	  # Note the libdir as a future libdir.
--	  case "$future_libdirs " in
--	  *" $libdir "*) ;;
--	  *) future_libdirs="$future_libdirs $libdir" ;;
--	  esac
--	fi
--
--	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
--	test "X$dir" = "X$file/" && dir=
--	dir="$dir$objdir"
--
--	if test -n "$relink_command"; then
--	  $echo "$modename: warning: relinking \`$file'" 1>&2
--	  $show "$relink_command"
--	  if $run eval "$relink_command"; then :
--	  else
--	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
--	    exit 1
--	  fi
--	fi
--
--	# See the names of the shared library.
--	set dummy $library_names
--	if test -n "$2"; then
--	  realname="$2"
--	  shift
--	  shift
--
--	  srcname="$realname"
--	  test -n "$relink_command" && srcname="$realname"T
--
--	  # Install the shared library and build the symlinks.
--	  $show "$install_prog $dir/$srcname $destdir/$realname"
--	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
--	  if test -n "$stripme" && test -n "$striplib"; then
--	    $show "$striplib $destdir/$realname"
--	    $run eval "$striplib $destdir/$realname" || exit $?
--	  fi
--
--	  if test $# -gt 0; then
--	    # Delete the old symlinks, and create new ones.
--	    for linkname
--	    do
--	      if test "$linkname" != "$realname"; then
--		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
--		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
--	      fi
--	    done
--	  fi
--
--	  # Do each command in the postinstall commands.
--	  lib="$destdir/$realname"
--	  eval cmds=\"$postinstall_cmds\"
--	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	  for cmd in $cmds; do
--	    IFS="$save_ifs"
--	    $show "$cmd"
--	    $run eval "$cmd" || exit $?
--	  done
--	  IFS="$save_ifs"
--	fi
--
--	# Install the pseudo-library for information purposes.
--	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
--	instname="$dir/$name"i
--	$show "$install_prog $instname $destdir/$name"
--	$run eval "$install_prog $instname $destdir/$name" || exit $?
--
--	# Maybe install the static library, too.
--	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
--	;;
--
--      *.lo)
--	# Install (i.e. copy) a libtool object.
--
--	# Figure out destination file name, if it wasn't already specified.
--	if test -n "$destname"; then
--	  destfile="$destdir/$destname"
--	else
--	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
--	  destfile="$destdir/$destfile"
--	fi
--
--	# Deduce the name of the destination old-style object file.
--	case $destfile in
--	*.lo)
--	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
--	  ;;
--	*.$objext)
--	  staticdest="$destfile"
--	  destfile=
--	  ;;
--	*)
--	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
--	  $echo "$help" 1>&2
--	  exit 1
--	  ;;
--	esac
--
--	# Install the libtool object if requested.
--	if test -n "$destfile"; then
--	  $show "$install_prog $file $destfile"
--	  $run eval "$install_prog $file $destfile" || exit $?
--	fi
--
--	# Install the old object if enabled.
--	if test "$build_old_libs" = yes; then
--	  # Deduce the name of the old-style object file.
--	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+@@ -7171,7 +7377,7 @@
+   $EGREP "LITTLE_ENDIAN" >/dev/null 2>&1; then :
+   gcl_ok=yes
+ else
+-  gcl_ok=noo
++  gcl_ok=no
+ fi
+ rm -f conftest*
+ 
+@@ -7215,17 +7421,17 @@
+ esac
+ 
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for SV_ONSTACK" >&5
+-$as_echo_n "checking check for SV_ONSTACK... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SV_ONSTACK" >&5
++$as_echo_n "checking for SV_ONSTACK... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
+ #include <signal.h>
+-int joe=SV_ONSTACK;
+ 
+ int
+ main ()
+ {
 -
--	  $show "$install_prog $staticobj $staticdest"
--	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
--	fi
--	exit 0
--	;;
++return SV_ONSTACK;
+   ;
+   return 0;
+ }
+@@ -7242,17 +7448,17 @@
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for SIGSYS" >&5
+-$as_echo_n "checking check for SIGSYS... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGSYS" >&5
++$as_echo_n "checking for SIGSYS... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
+ #include <signal.h>
+-int joe=SIGSYS;
+ 
+ int
+ main ()
+ {
 -
--      *)
--	# Figure out destination file name, if it wasn't already specified.
--	if test -n "$destname"; then
--	  destfile="$destdir/$destname"
--	else
--	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
--	  destfile="$destdir/$destfile"
--	fi
++return SIGSYS;
+   ;
+   return 0;
+ }
+@@ -7270,17 +7476,17 @@
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ 
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for SIGEMT" >&5
+-$as_echo_n "checking check for SIGEMT... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGEMT" >&5
++$as_echo_n "checking for SIGEMT... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++
+ #include <signal.h>
+-int joe=SIGEMT;
+ 
+ int
+ main ()
+ {
 -
--	# Do a test to see if this is really a libtool program.
--	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
--	  notinst_deplibs=
--	  relink_command=
++return SIGEMT;
+   ;
+   return 0;
+ }
+@@ -7325,11 +7531,12 @@
+ 
+ done
+ 
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext..." >&5
+-$as_echo_n "checking for sigcontext...... " >&6; }
+-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext" >&5
++$as_echo_n "checking for sigcontext... " >&6; }
++	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <signal.h>
++
++	#include <signal.h>
+ 
+ int
+ main ()
+@@ -7357,11 +7564,12 @@
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        if test "$sigcontext_works" = 0 ; then
+-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext..." >&5
+-$as_echo_n "checking for sigcontext...... " >&6; }
++       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext" >&5
++$as_echo_n "checking for sigcontext... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <signal.h>
++
++             #include <signal.h>
+              #ifdef HAVE_ASM_SIGCONTEXT_H
+              #include <asm/sigcontext.h>
+              #endif
+@@ -7540,26 +7748,41 @@
+ 
+ if test "$enable_tcltk" = "yes" ; then
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcl/tk" >&5
+-$as_echo_n "checking for tcl/tk... " >&6; }
 -
--	  # If there is no directory component, then add one.
--	  case $file in
--	  */* | *\\*) . $file ;;
--	  *) . ./$file ;;
--	  esac
 -
--	  # Check the variables that should have been set.
--	  if test -z "$notinst_deplibs"; then
--	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
--	    exit 1
--	  fi
+-if test -d "${TCL_CONFIG_PREFIX}"  ; then true ; else
+-rm -f conftest.tcl
+-cat >> conftest.tcl <<EOF
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5
++$as_echo_n "checking for main in -lieee... " >&6; }
++if ${ac_cv_lib_ieee_main+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-lieee  $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
+ 
+-set dir [set tcl_library]
+-if { [file exists [file join [set dir] tclConfig.sh]] } {
+-      puts  [set dir]
+-      exit
+-  }
+-set dir [file dirname [set tcl_library]]
+-if { [file exists [file join [set dir] tclConfig.sh]] } {
+-      puts  [set dir]
+-  }
+ 
+-EOF
+-#cp conftest.tcl foo.tcl
++int
++main ()
++{
++return main ();
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++  ac_cv_lib_ieee_main=yes
++else
++  ac_cv_lib_ieee_main=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5
++$as_echo "$ac_cv_lib_ieee_main" >&6; }
++if test "x$ac_cv_lib_ieee_main" = xyes; then :
++  have_ieee=1
++else
++  have_ieee=0
++fi
+ 
+ # Extract the first word of "tclsh", so it can be a program name with args.
+ set dummy tclsh; ac_word=$2
+@@ -7599,7 +7822,26 @@
+ fi
+ 
+ 
+-#AC_CHECK_PROG(TCLSH,tclsh8.0,tclsh8.0,${TCLSH})
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcl/tk" >&5
++$as_echo_n "checking for tcl/tk... " >&6; }
++
++
++if test -d "${TCL_CONFIG_PREFIX}"  ; then true ; else
++rm -f conftest.tcl
++cat >> conftest.tcl <<EOF
++
++set dir [set tcl_library]
++if { [file exists [file join [set dir] tclConfig.sh]] } {
++      puts  [set dir]
++      exit
++  }
++set dir [file dirname [set tcl_library]]
++if { [file exists [file join [set dir] tclConfig.sh]] } {
++      puts  [set dir]
++  }
++
++EOF
++#cp conftest.tcl foo.tcl
+ 
+ if test "${TCLSH}" = "" ; then true ; else
+ TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
+@@ -7674,42 +7916,6 @@
+ 
+ fi
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -llieee" >&5
+-$as_echo_n "checking for main in -llieee... " >&6; }
+-if ${ac_cv_lib_lieee_main+:} false; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-  ac_check_lib_save_LIBS=$LIBS
+-LIBS="-llieee  $LIBS"
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
 -
--	  finalize=yes
--	  for lib in $notinst_deplibs; do
--	    # Check to see that each library is installed.
--	    libdir=
--	    if test -f "$lib"; then
--	      # If there is no directory component, then add one.
--	      case $lib in
--	      */* | *\\*) . $lib ;;
--	      *) . ./$lib ;;
--	      esac
--	    fi
--	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
--	    if test -n "$libdir" && test ! -f "$libfile"; then
--	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
--	      finalize=no
--	    fi
--	  done
 -
--	  relink_command=
--	  # If there is no directory component, then add one.
--	  case $file in
--	  */* | *\\*) . $file ;;
--	  *) . ./$file ;;
--	  esac
+-int
+-main ()
+-{
+-return main ();
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_link "$LINENO"; then :
+-  ac_cv_lib_lieee_main=yes
+-else
+-  ac_cv_lib_lieee_main=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+-    conftest$ac_exeext conftest.$ac_ext
+-LIBS=$ac_check_lib_save_LIBS
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lieee_main" >&5
+-$as_echo "$ac_cv_lib_lieee_main" >&6; }
+-if test "x$ac_cv_lib_lieee_main" = xyes; then :
+-  have_ieee=1
+-else
+-  have_ieee=0
+-fi
 -
--	  outputname=
--	  if test "$fast_install" = no && test -n "$relink_command"; then
--	    if test "$finalize" = yes && test -z "$run"; then
--	      tmpdir="/tmp"
--	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
--	      tmpdir="$tmpdir/libtool-$$"
--	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
--	      else
--		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
--		continue
--	      fi
--	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
--	      outputname="$tmpdir/$file"
--	      # Replace the output file specification.
--	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+ if test "$have_ieee" = "0" ; then
+  TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
+ fi
+@@ -7755,14 +7961,23 @@
+ 
+ # the time handling for unixtime, add timezone
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alloca" >&5
+-$as_echo_n "checking alloca... " >&6; }
++# alloca
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
++$as_echo_n "checking for alloca... " >&6; }
+ if test "$cross_compiling" = yes; then :
+   gcl_ok=no
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-int main() { exit(alloca(500) != NULL ? 0 : 1);}
++
++int
++main ()
++{
++exit(alloca(500) != NULL ? 0 : 1);
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+ 
+@@ -7784,8 +7999,16 @@
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+-#include <alloca.h>
+-  int main() { exit(alloca(500) != NULL ? 0 : 1);}
++
++  #include <alloca.h>
++
++int
++main ()
++{
++exit(alloca(500) != NULL ? 0 : 1);
++  ;
++  return 0;
++}
+ _ACEOF
+ if ac_fn_c_try_run "$LINENO"; then :
+ 
+@@ -7817,8 +8040,6 @@
+ 
+ 
+ 
+-# alloca
 -
--	      $show "$relink_command"
--	      if $run eval "$relink_command"; then :
--	      else
--		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
--		${rm}r "$tmpdir"
--		continue
--	      fi
--	      file="$outputname"
+ # dlopen etc
+ # idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
+ # then dlload("foo.o") a lisp file can refer to things in libX.so
+@@ -7842,8 +8063,8 @@
+ 
+ # redhat/cygnus released for some reason a buggy version of gcc,
+ # which no one else released.   Catch that here.
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking for buggy gcc version from redhat" >&5
+-$as_echo_n "checking Checking for buggy gcc version from redhat... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy gcc version from redhat" >&5
++$as_echo_n "checking for buggy gcc version from redhat... " >&6; }
+ if  2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null
+    then
+         BROKEN_O4_OPT=1
+@@ -7883,7 +8104,7 @@
+ 
+   ac_config_files="$ac_config_files makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp"
+ 
+-cat >confcache <<\_ACEOF
++  cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+ # scripts and configure runs, see configure's option --config-cache.
+--- ./install.sh.orig	1999-12-06 15:43:54.000000000 -0700
++++ ./install.sh	2012-01-09 20:36:31.000000000 -0700
+@@ -1,19 +1,38 @@
+-#! /bin/sh
+-#
++#!/bin/sh
+ # install - install a program, script, or datafile
+-# This comes from X11R5 (mit/util/scripts/install.sh).
++
++scriptversion=2009-04-28.21; # UTC
++
++# This originates from X11R5 (mit/util/scripts/install.sh), which was
++# later released in X11R6 (xc/config/util/install.sh) with the
++# following copyright and license.
+ #
+-# Copyright 1991 by the Massachusetts Institute of Technology
++# Copyright (C) 1994 X Consortium
+ #
+-# Permission to use, copy, modify, distribute, and sell this software and its
+-# documentation for any purpose is hereby granted without fee, provided that
+-# the above copyright notice appear in all copies and that both that
+-# copyright notice and this permission notice appear in supporting
+-# documentation, and that the name of M.I.T. not be used in advertising or
+-# publicity pertaining to distribution of the software without specific,
+-# written prior permission.  M.I.T. makes no representations about the
+-# suitability of this software for any purpose.  It is provided "as is"
+-# without express or implied warranty.
++# Permission is hereby granted, free of charge, to any person obtaining a copy
++# of this software and associated documentation files (the "Software"), to
++# deal in the Software without restriction, including without limitation the
++# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++# sell copies of the Software, and to permit persons to whom the Software is
++# furnished to do so, subject to the following conditions:
++#
++# The above copyright notice and this permission notice shall be included in
++# all copies or substantial portions of the Software.
++#
++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
++# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
++# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++#
++# Except as contained in this notice, the name of the X Consortium shall not
++# be used in advertising or otherwise to promote the sale, use or other deal-
++# ings in this Software without prior written authorization from the X Consor-
++# tium.
++#
++#
++# FSF changes to this file are in the public domain.
+ #
+ # Calling this script install-sh is preferred over install.sh, to prevent
+ # `make' implicit rules from creating a file called install from it
+@@ -21,230 +40,481 @@
+ #
+ # This script is compatible with the BSD install script, but was written
+ # from scratch.
+-#
+ 
++nl='
++'
++IFS=" ""	$nl"
+ 
+ # set DOITPROG to echo to test this script
+ 
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+-doit="${DOITPROG-}"
++doit=${DOITPROG-}
++if test -z "$doit"; then
++  doit_exec=exec
++else
++  doit_exec=$doit
++fi
+ 
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
+ 
+-# put in absolute paths if you don't have them in your path; or use env. vars.
++chgrpprog=${CHGRPPROG-chgrp}
++chmodprog=${CHMODPROG-chmod}
++chownprog=${CHOWNPROG-chown}
++cmpprog=${CMPPROG-cmp}
++cpprog=${CPPROG-cp}
++mkdirprog=${MKDIRPROG-mkdir}
++mvprog=${MVPROG-mv}
++rmprog=${RMPROG-rm}
++stripprog=${STRIPPROG-strip}
+ 
+-mvprog="${MVPROG-mv}"
+-cpprog="${CPPROG-cp}"
+-chmodprog="${CHMODPROG-chmod}"
+-chownprog="${CHOWNPROG-chown}"
+-chgrpprog="${CHGRPPROG-chgrp}"
+-stripprog="${STRIPPROG-strip}"
+-rmprog="${RMPROG-rm}"
+-mkdirprog="${MKDIRPROG-mkdir}"
++posix_glob='?'
++initialize_posix_glob='
++  test "$posix_glob" != "?" || {
++    if (set -f) 2>/dev/null; then
++      posix_glob=
++    else
++      posix_glob=:
++    fi
++  }
++'
+ 
+-transformbasename=""
+-transform_arg=""
+-instcmd="$mvprog"
+-chmodcmd="$chmodprog 0755"
+-chowncmd=""
+-chgrpcmd=""
+-stripcmd=""
++posix_mkdir=
++
++# Desired mode of installed file.
++mode=0755
++
++chgrpcmd=
++chmodcmd=$chmodprog
++chowncmd=
++mvcmd=$mvprog
+ rmcmd="$rmprog -f"
+-mvcmd="$mvprog"
+-src=""
+-dst=""
+-dir_arg=""
++stripcmd=
+ 
+-while [ x"$1" != x ]; do
+-    case $1 in
+-	-c) instcmd="$cpprog"
+-	    shift
+-	    continue;;
++src=
++dst=
++dir_arg=
++dst_arg=
+ 
+-	-d) dir_arg=true
+-	    shift
+-	    continue;;
++copy_on_change=false
++no_target_directory=
+ 
+-	-m) chmodcmd="$chmodprog $2"
+-	    shift
+-	    shift
+-	    continue;;
++usage="\
++Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
++   or: $0 [OPTION]... SRCFILES... DIRECTORY
++   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
++   or: $0 [OPTION]... -d DIRECTORIES...
+ 
+-	-o) chowncmd="$chownprog $2"
+-	    shift
+-	    shift
+-	    continue;;
++In the 1st form, copy SRCFILE to DSTFILE.
++In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
++In the 4th, create DIRECTORIES.
+ 
+-	-g) chgrpcmd="$chgrpprog $2"
+-	    shift
+-	    shift
+-	    continue;;
++Options:
++     --help     display this help and exit.
++     --version  display version info and exit.
+ 
+-	-s) stripcmd="$stripprog"
+-	    shift
+-	    continue;;
++  -c            (ignored)
++  -C            install only if different (preserve the last data modification time)
++  -d            create directories instead of installing files.
++  -g GROUP      $chgrpprog installed files to GROUP.
++  -m MODE       $chmodprog installed files to MODE.
++  -o USER       $chownprog installed files to USER.
++  -s            $stripprog installed files.
++  -t DIRECTORY  install into DIRECTORY.
++  -T            report an error if DSTFILE is a directory.
+ 
+-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+-	    shift
+-	    continue;;
++Environment variables override the default commands:
++  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
++  RMPROG STRIPPROG
++"
+ 
+-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+-	    shift
+-	    continue;;
++while test $# -ne 0; do
++  case $1 in
++    -c) ;;
+ 
+-	*)  if [ x"$src" = x ]
+-	    then
+-		src=$1
 -	    else
--	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
+-		# this colon is to work around a 386BSD /bin/sh bug
+-		:
+-		dst=$1
 -	    fi
--	  else
--	    # Install the binary that we compiled earlier.
--	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
--	  fi
+-	    shift
+-	    continue;;
+-    esac
++    -C) copy_on_change=true;;
++
++    -d) dir_arg=true;;
++
++    -g) chgrpcmd="$chgrpprog $2"
++	shift;;
++
++    --help) echo "$usage"; exit $?;;
++
++    -m) mode=$2
++	case $mode in
++	  *' '* | *'	'* | *'
++'*	  | *'*'* | *'?'* | *'['*)
++	    echo "$0: invalid mode: $mode" >&2
++	    exit 1;;
++	esac
++	shift;;
++
++    -o) chowncmd="$chownprog $2"
++	shift;;
++
++    -s) stripcmd=$stripprog;;
++
++    -t) dst_arg=$2
++	shift;;
++
++    -T) no_target_directory=true;;
++
++    --version) echo "$0 $scriptversion"; exit $?;;
++
++    --)	shift
++	break;;
++
++    -*)	echo "$0: invalid option: $1" >&2
++	exit 1;;
++
++    *)  break;;
++  esac
++  shift
+ done
+ 
+-if [ x"$src" = x ]
+-then
+-	echo "install:	no input file specified"
+-	exit 1
+-else
+-	true
++if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
++  # When -d is used, all remaining arguments are directories to create.
++  # When -t is used, the destination is already specified.
++  # Otherwise, the last argument is the destination.  Remove it from $@.
++  for arg
++  do
++    if test -n "$dst_arg"; then
++      # $@ is not empty: it contains at least $arg.
++      set fnord "$@" "$dst_arg"
++      shift # fnord
++    fi
++    shift # arg
++    dst_arg=$arg
++  done
+ fi
+ 
+-if [ x"$dir_arg" != x ]; then
+-	dst=$src
+-	src=""
+-	
+-	if [ -d $dst ]; then
+-		instcmd=:
+-	else
+-		instcmd=mkdir
 -	fi
+-else
 -
--
--	# remove .exe since cygwin /usr/bin/install will append another
--	# one anyways
--	case $install_prog,$host in
--	*/usr/bin/install*,*cygwin*)
--	  case $file:$destfile in
--	  *.exe:*.exe)
--	    # this is ok
--	    ;;
--	  *.exe:*)
--	    destfile=$destfile.exe
--	    ;;
--	  *:*.exe)
--	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
--	    ;;
--	  esac
--	  ;;
--	esac
--
--	$show "$install_prog$stripme $file $destfile"
--	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
--	test -n "$outputname" && ${rm}r "$tmpdir"
--	;;
--      esac
--    done
--
--    for file in $staticlibs; do
--      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
--
--      # Set up the ranlib parameters.
--      oldlib="$destdir/$name"
--
--      $show "$install_prog $file $oldlib"
--      $run eval "$install_prog \$file \$oldlib" || exit $?
--
--      if test -n "$stripme" && test -n "$striplib"; then
--	$show "$old_striplib $oldlib"
--	$run eval "$old_striplib $oldlib" || exit $?
--      fi
--
--      # Do each command in the postinstall commands.
--      eval cmds=\"$old_postinstall_cmds\"
--      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--      for cmd in $cmds; do
--	IFS="$save_ifs"
--	$show "$cmd"
--	$run eval "$cmd" || exit $?
--      done
--      IFS="$save_ifs"
--    done
--
--    if test -n "$future_libdirs"; then
--      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
--    fi
--
--    if test -n "$current_libdirs"; then
--      # Maybe just do a dry run.
--      test -n "$run" && current_libdirs=" -n$current_libdirs"
--      exec_cmd='$SHELL $0 --finish$current_libdirs'
--    else
--      exit 0
--    fi
--    ;;
--
--  # libtool finish mode
--  finish)
--    modename="$modename: finish"
--    libdirs="$nonopt"
--    admincmds=
--
--    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
--      for dir
--      do
--	libdirs="$libdirs $dir"
--      done
--
--      for libdir in $libdirs; do
--	if test -n "$finish_cmds"; then
--	  # Do each command in the finish commands.
--	  eval cmds=\"$finish_cmds\"
--	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	  for cmd in $cmds; do
--	    IFS="$save_ifs"
--	    $show "$cmd"
--	    $run eval "$cmd" || admincmds="$admincmds
--       $cmd"
--	  done
--	  IFS="$save_ifs"
--	fi
--	if test -n "$finish_eval"; then
--	  # Do the single finish_eval.
--	  eval cmds=\"$finish_eval\"
--	  $run eval "$cmds" || admincmds="$admincmds
--       $cmds"
+-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+-# might cause directories to be created, which would be especially bad 
+-# if $src (and thus $dsttmp) contains '*'.
++if test $# -eq 0; then
++  if test -z "$dir_arg"; then
++    echo "$0: no input file specified." >&2
++    exit 1
++  fi
++  # It's OK to call `install-sh -d' without argument.
++  # This can happen when creating conditional directories.
++  exit 0
++fi
+ 
+-	if [ -f $src -o -d $src ]
+-	then
+-		true
+-	else
+-		echo "install:  $src does not exist"
+-		exit 1
 -	fi
--      done
--    fi
--
--    # Exit here if they wanted silent mode.
--    test "$show" = ":" && exit 0
--
--    echo "----------------------------------------------------------------------"
--    echo "Libraries have been installed in:"
--    for libdir in $libdirs; do
--      echo "   $libdir"
--    done
--    echo
--    echo "If you ever happen to want to link against installed libraries"
--    echo "in a given directory, LIBDIR, you must either use libtool, and"
--    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
--    echo "flag during linking and do at least one of the following:"
--    if test -n "$shlibpath_var"; then
--      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
--      echo "     during execution"
--    fi
--    if test -n "$runpath_var"; then
--      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
--      echo "     during linking"
--    fi
--    if test -n "$hardcode_libdir_flag_spec"; then
--      libdir=LIBDIR
--      eval flag=\"$hardcode_libdir_flag_spec\"
--
--      echo "   - use the \`$flag' linker flag"
--    fi
--    if test -n "$admincmds"; then
--      echo "   - have your system administrator run these commands:$admincmds"
--    fi
--    if test -f /etc/ld.so.conf; then
--      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
--    fi
--    echo
--    echo "See any operating system documentation about shared libraries for"
--    echo "more information, such as the ld(1) and ld.so(8) manual pages."
--    echo "----------------------------------------------------------------------"
--    exit 0
--    ;;
--
--  # libtool execute mode
--  execute)
--    modename="$modename: execute"
--
--    # The first argument is the command name.
--    cmd="$nonopt"
--    if test -z "$cmd"; then
--      $echo "$modename: you must specify a COMMAND" 1>&2
--      $echo "$help"
--      exit 1
--    fi
--
--    # Handle -dlopen flags immediately.
--    for file in $execute_dlfiles; do
--      if test ! -f "$file"; then
--	$echo "$modename: \`$file' is not a file" 1>&2
--	$echo "$help" 1>&2
--	exit 1
--      fi
--
--      dir=
--      case $file in
--      *.la)
--	# Check to see that this really is a libtool archive.
--	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+-	
+-	if [ x"$dst" = x ]
+-	then
+-		echo "install:	no destination specified"
+-		exit 1
 -	else
--	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
--	  $echo "$help" 1>&2
--	  exit 1
+-		true
 -	fi
--
--	# Read the libtool library.
--	dlname=
--	library_names=
--
--	# If there is no directory component, then add one.
--	case $file in
--	*/* | *\\*) . $file ;;
--	*) . ./$file ;;
--	esac
--
--	# Skip this library if it cannot be dlopened.
--	if test -z "$dlname"; then
--	  # Warn if it was a shared library.
--	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
--	  continue
++if test -z "$dir_arg"; then
++  trap '(exit $?); exit' 1 2 13 15
+ 
+-# If destination is a directory, append the input filename; if your system
+-# does not like double slashes in filenames, you may need to add some logic
++  # Set umask so as not to create temps with too-generous modes.
++  # However, 'strip' requires both read and write access to temps.
++  case $mode in
++    # Optimize common cases.
++    *644) cp_umask=133;;
++    *755) cp_umask=22;;
+ 
+-	if [ -d $dst ]
+-	then
+-		dst="$dst"/`basename $src`
+-	else
+-		true
 -	fi
--
--	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
--	test "X$dir" = "X$file" && dir=.
--
--	if test -f "$dir/$objdir/$dlname"; then
--	  dir="$dir/$objdir"
++    *[0-7])
++      if test -z "$stripcmd"; then
++	u_plus_rw=
++      else
++	u_plus_rw='% 200'
++      fi
++      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++    *)
++      if test -z "$stripcmd"; then
++	u_plus_rw=
++      else
++	u_plus_rw=,u+rw
++      fi
++      cp_umask=$mode$u_plus_rw;;
++  esac
+ fi
+ 
+-## this sed command emulates the dirname command
+-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
++for src
++do
++  # Protect names starting with `-'.
++  case $src in
++    -*) src=./$src;;
++  esac
+ 
+-# Make sure that the destination directory exists.
+-#  this part is taken from Noah Friedman's mkinstalldirs script
++  if test -n "$dir_arg"; then
++    dst=$src
++    dstdir=$dst
++    test -d "$dstdir"
++    dstdir_status=$?
++  else
+ 
+-# Skip lots of stat calls in the usual case.
+-if [ ! -d "$dstdir" ]; then
+-defaultIFS='	
+-'
+-IFS="${IFS-${defaultIFS}}"
++    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
++    # might cause directories to be created, which would be especially bad
++    # if $src (and thus $dsttmp) contains '*'.
++    if test ! -f "$src" && test ! -d "$src"; then
++      echo "$0: $src does not exist." >&2
++      exit 1
++    fi
+ 
+-oIFS="${IFS}"
+-# Some sh's can't handle IFS=/ for some reason.
+-IFS='%'
+-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+-IFS="${oIFS}"
++    if test -z "$dst_arg"; then
++      echo "$0: no destination specified." >&2
++      exit 1
++    fi
+ 
+-pathcomp=''
++    dst=$dst_arg
++    # Protect names starting with `-'.
++    case $dst in
++      -*) dst=./$dst;;
++    esac
+ 
+-while [ $# -ne 0 ] ; do
+-	pathcomp="${pathcomp}${1}"
+-	shift
++    # If destination is a directory, append the input filename; won't work
++    # if double slashes aren't ignored.
++    if test -d "$dst"; then
++      if test -n "$no_target_directory"; then
++	echo "$0: $dst_arg: Is a directory" >&2
++	exit 1
++      fi
++      dstdir=$dst
++      dst=$dstdir/`basename "$src"`
++      dstdir_status=0
++    else
++      # Prefer dirname, but fall back on a substitute if dirname fails.
++      dstdir=`
++	(dirname "$dst") 2>/dev/null ||
++	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	     X"$dst" : 'X\(//\)[^/]' \| \
++	     X"$dst" : 'X\(//\)$' \| \
++	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++	echo X"$dst" |
++	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\/\)[^/].*/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\/\)$/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\).*/{
++		   s//\1/
++		   q
++		 }
++		 s/.*/./; q'
++      `
+ 
+-	if [ ! -d "${pathcomp}" ] ;
+-        then
+-		$mkdirprog "${pathcomp}"
++      test -d "$dstdir"
++      dstdir_status=$?
++    fi
++  fi
++
++  obsolete_mkdir_used=false
++
++  if test $dstdir_status != 0; then
++    case $posix_mkdir in
++      '')
++	# Create intermediate dirs using mode 755 as modified by the umask.
++	# This is like FreeBSD 'install' as of 1997-10-28.
++	umask=`umask`
++	case $stripcmd.$umask in
++	  # Optimize common cases.
++	  *[2367][2367]) mkdir_umask=$umask;;
++	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++
++	  *[0-7])
++	    mkdir_umask=`expr $umask + 22 \
++	      - $umask % 100 % 40 + $umask % 20 \
++	      - $umask % 10 % 4 + $umask % 2
++	    `;;
++	  *) mkdir_umask=$umask,go-w;;
++	esac
++
++	# With -d, create the new directory with the user-specified mode.
++	# Otherwise, rely on $mkdir_umask.
++	if test -n "$dir_arg"; then
++	  mkdir_mode=-m$mode
+ 	else
+-		true
++	  mkdir_mode=
+ 	fi
+ 
+-	pathcomp="${pathcomp}/"
+-done
+-fi
++	posix_mkdir=false
++	case $umask in
++	  *[123567][0-7][0-7])
++	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
++	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++	    ;;
++	  *)
++	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+ 
+-if [ x"$dir_arg" != x ]
+-then
+-	$doit $instcmd $dst &&
++	    if (umask $mkdir_umask &&
++		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++	    then
++	      if test -z "$dir_arg" || {
++		   # Check for POSIX incompatibilities with -m.
++		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++		   # other-writeable bit of parent directory when it shouldn't.
++		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
++		   case $ls_ld_tmpdir in
++		     d????-?r-*) different_mode=700;;
++		     d????-?--*) different_mode=755;;
++		     *) false;;
++		   esac &&
++		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++		   }
++		 }
++	      then posix_mkdir=:
++	      fi
++	      rmdir "$tmpdir/d" "$tmpdir"
++	    else
++	      # Remove any dirs left behind by ancient mkdir implementations.
++	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++	    fi
++	    trap '' 0;;
++	esac;;
++    esac
+ 
+-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+-else
++    if
++      $posix_mkdir && (
++	umask $mkdir_umask &&
++	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++      )
++    then :
++    else
+ 
+-# If we're going to rename the final executable, determine the name now.
++      # The umask is ridiculous, or mkdir does not conform to POSIX,
++      # or it failed possibly due to a race condition.  Create the
++      # directory the slow way, step by step, checking for races as we go.
+ 
+-	if [ x"$transformarg" = x ] 
+-	then
+-		dstfile=`basename $dst`
 -	else
--	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
--	  exit 1
+-		dstfile=`basename $dst $transformbasename | 
+-			sed $transformarg`$transformbasename
 -	fi
--	;;
--
--      *.lo)
--	# Just add the directory containing the .lo file.
--	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
--	test "X$dir" = "X$file" && dir=.
--	;;
--
--      *)
--	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
--	continue
--	;;
--      esac
--
--      # Get the absolute pathname.
--      absdir=`cd "$dir" && pwd`
--      test -n "$absdir" && dir="$absdir"
--
--      # Now add the directory to shlibpath_var.
--      if eval "test -z \"\$$shlibpath_var\""; then
--	eval "$shlibpath_var=\"\$dir\""
--      else
--	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
--      fi
--    done
--
--    # This variable tells wrapper scripts just to set shlibpath_var
--    # rather than running their programs.
--    libtool_execute_magic="$magic"
++      case $dstdir in
++	/*) prefix='/';;
++	-*) prefix='./';;
++	*)  prefix='';;
++      esac
+ 
+-# don't allow the sed command to completely eliminate the filename
++      eval "$initialize_posix_glob"
+ 
+-	if [ x"$dstfile" = x ] 
+-	then
+-		dstfile=`basename $dst`
++      oIFS=$IFS
++      IFS=/
++      $posix_glob set -f
++      set fnord $dstdir
++      shift
++      $posix_glob set +f
++      IFS=$oIFS
++
++      prefixes=
++
++      for d
++      do
++	test -z "$d" && continue
++
++	prefix=$prefix$d
++	if test -d "$prefix"; then
++	  prefixes=
+ 	else
+-		true
++	  if $posix_mkdir; then
++	    (umask=$mkdir_umask &&
++	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++	    # Don't fail if two instances are running concurrently.
++	    test -d "$prefix" || exit 1
++	  else
++	    case $prefix in
++	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++	      *) qprefix=$prefix;;
++	    esac
++	    prefixes="$prefixes '$qprefix'"
++	  fi
+ 	fi
++	prefix=$prefix/
++      done
+ 
+-# Make a temp file name in the proper directory.
++      if test -n "$prefixes"; then
++	# Don't fail if two instances are running concurrently.
++	(umask $mkdir_umask &&
++	 eval "\$doit_exec \$mkdirprog $prefixes") ||
++	  test -d "$dstdir" || exit 1
++	obsolete_mkdir_used=true
++      fi
++    fi
++  fi
+ 
+-	dsttmp=$dstdir/#inst.$$#
++  if test -n "$dir_arg"; then
++    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
++  else
+ 
+-# Move or copy the file name to the temp name
++    # Make a couple of temp file names in the proper directory.
++    dsttmp=$dstdir/_inst.$$_
++    rmtmp=$dstdir/_rm.$$_
+ 
+-	$doit $instcmd $src $dsttmp &&
++    # Trap to clean up those temp files at exit.
++    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+ 
+-	trap "rm -f ${dsttmp}" 0 &&
++    # Copy the file name to the temp name.
++    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+ 
+-# and set any options; do chmod last to preserve setuid bits
++    # and set any options; do chmod last to preserve setuid bits.
++    #
++    # If any of these fail, we abort the whole thing.  If we want to
++    # ignore errors from any of these, just make sure not to ignore
++    # errors from the above "$doit $cpprog $src $dsttmp" command.
++    #
++    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
++    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
++    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+ 
+-# If any of these fail, we abort the whole thing.  If we want to
+-# ignore errors from any of these, just make sure not to ignore
+-# errors from the above "$doit $instcmd $src $dsttmp" command.
++    # If -C, don't bother to copy if it wouldn't change the file.
++    if $copy_on_change &&
++       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
++       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+ 
+-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
++       eval "$initialize_posix_glob" &&
++       $posix_glob set -f &&
++       set X $old && old=:$2:$4:$5:$6 &&
++       set X $new && new=:$2:$4:$5:$6 &&
++       $posix_glob set +f &&
+ 
+-# Now rename the file to the real destination.
++       test "$old" = "$new" &&
++       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
++    then
++      rm -f "$dsttmp"
++    else
++      # Rename the file to the real destination.
++      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+ 
+-	$doit $rmcmd -f $dstdir/$dstfile &&
+-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
++      # The rename failed, perhaps because mv can't rename something else
++      # to itself, or perhaps because mv is so ancient that it does not
++      # support -f.
++      {
++	# Now remove or move aside any old file at destination location.
++	# We try this two ways since rm can't unlink itself on some
++	# systems and the destination file might be busy for other
++	# reasons.  In this case, the final cleanup might fail but the new
++	# file should still install successfully.
++	{
++	  test ! -f "$dst" ||
++	  $doit $rmcmd -f "$dst" 2>/dev/null ||
++	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
++	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
++	  } ||
++	  { echo "$0: cannot unlink or rename $dst" >&2
++	    (exit 1); exit 1
++	  }
++	} &&
+ 
+-fi &&
++	# Now rename the file to the real destination.
++	$doit $mvcmd "$dsttmp" "$dst"
++      }
++    fi || exit 1
+ 
++    trap '' 0
++  fi
++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:
+--- ./info/texinfo.tex.orig	2002-10-26 09:14:15.000000000 -0600
++++ ./info/texinfo.tex	2012-01-09 20:36:31.000000000 -0700
+@@ -3,15 +3,16 @@
+ % Load plain if necessary, i.e., if running under initex.
+ \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+ %
+-\def\texinfoversion{1999-09-25.10}
++\def\texinfoversion{2008-04-18.10}
+ %
+-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
+-% Free Software Foundation, Inc.
++% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
++% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
++% 2007, 2008 Free Software Foundation, Inc.
+ %
+-% This texinfo.tex file is free software; you can redistribute it and/or
++% This texinfo.tex file is free software: you can redistribute it and/or
+ % modify it under the terms of the GNU General Public License as
+-% published by the Free Software Foundation; either version 2, or (at
+-% your option) any later version.
++% published by the Free Software Foundation, either version 3 of the
++% License, or (at your option) any later version.
+ %
+ % This texinfo.tex file is distributed in the hope that it will be
+ % useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+@@ -19,25 +20,19 @@
+ % General Public License for more details.
+ %
+ % You should have received a copy of the GNU General Public License
+-% along with this texinfo.tex file; see the file COPYING.  If not, write
+-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+-% Boston, MA 02111-1307, USA.
++% along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ %
+-% In other words, you are welcome to use, share and improve this program.
+-% You are forbidden to forbid anyone else to use, share and improve
+-% what you give them.   Help stamp out software-hoarding!
++% As a special exception, when this file is read by TeX when processing
++% a Texinfo source document, you may use the result without
++% restriction.  (This has been our intent since Texinfo was invented.)
+ %
+ % Please try the latest version of texinfo.tex before submitting bug
+ % reports; you can get the latest version from:
+-%   ftp://ftp.gnu.org/gnu/texinfo.tex
+-%   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+-%   ftp://texinfo.org/tex/texinfo.tex
+-%   ftp://us.ctan.org/macros/texinfo/texinfo.tex
+-%   (and all CTAN mirrors, finger ctan at us.ctan.org for a list).
+-%   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+-% The texinfo.tex in any given Texinfo distribution could well be out
++%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
++%   ftp://tug.org/tex/texinfo.tex
++%     (and all CTAN mirrors, see http://www.ctan.org).
++% The texinfo.tex in any given distribution could well be out
+ % of date, so if that's what you're using, please check.
+-% Texinfo has a small home page at http://texinfo.org/.
+ %
+ % Send bug reports to bug-texinfo at gnu.org.  Please include including a
+ % complete document in each bug report with which we can reproduce the
+@@ -50,13 +45,17 @@
+ %   texindex foo.??
+ %   tex foo.texi
+ %   tex foo.texi
+-%   dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
+-% The extra runs of TeX get the cross-reference information correct.
++%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
++% The extra TeX runs get the cross-reference information correct.
+ % Sometimes one run after texindex suffices, and sometimes you need more
+ % than two; texi2dvi does it as many times as necessary.
+ %
+-% It is possible to adapt texinfo.tex for other languages.  You can get
+-% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
++% It is possible to adapt texinfo.tex for other languages, to some
++% extent.  You can get the existing language-specific files from the
++% full Texinfo distribution.
++%
++% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
++
+ 
+ \message{Loading texinfo [version \texinfoversion]:}
+ 
+@@ -66,7 +65,14 @@
+ \everyjob{\message{[Texinfo version \texinfoversion]}%
+   \catcode`+=\active \catcode`\_=\active}
+ 
+-% Save some parts of plain tex whose names we will redefine.
++
++\chardef\other=12
++
++% We never want plain's \outer definition of \+ in Texinfo.
++% For @tex, we can use \tabalign.
++\let\+ = \relax
++
++% Save some plain tex macros whose names we will redefine.
+ \let\ptexb=\b
+ \let\ptexbullet=\bullet
+ \let\ptexc=\c
+@@ -76,23 +82,36 @@
+ \let\ptexend=\end
+ \let\ptexequiv=\equiv
+ \let\ptexexclam=\!
++\let\ptexfootnote=\footnote
++\let\ptexgtr=>
++\let\ptexhat=^
+ \let\ptexi=\i
++\let\ptexindent=\indent
++\let\ptexinsert=\insert
+ \let\ptexlbrace=\{
++\let\ptexless=<
++\let\ptexnewwrite\newwrite
++\let\ptexnoindent=\noindent
++\let\ptexplus=+
+ \let\ptexrbrace=\}
++\let\ptexslash=\/
+ \let\ptexstar=\*
+ \let\ptext=\t
 -
--    # Check if any of the arguments is a wrapper script.
--    args=
--    for file
--    do
--      case $file in
--      -*) ;;
--      *)
--	# Do a test to see if this is really a libtool program.
--	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
--	  # If there is no directory component, then add one.
--	  case $file in
--	  */* | *\\*) . $file ;;
--	  *) . ./$file ;;
--	  esac
+-% We never want plain's outer \+ definition in Texinfo.
+-% For @tex, we can use \tabalign.
+-\let\+ = \relax
 -
--	  # Transform arg to wrapped name.
--	  file="$progdir/$program"
--	fi
--	;;
--      esac
--      # Quote arguments (to preserve shell metacharacters).
--      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
--      args="$args \"$file\""
--    done
+-\message{Basics,}
+-\chardef\other=12
++\let\ptextop=\top
+ 
+ % If this character appears in an error message or help string, it
+ % starts a new line in the output.
+ \newlinechar = `^^J
+ 
++% Use TeX 3.0's \inputlineno to get the line number, for better error
++% messages, but if we're using an old version of TeX, don't do anything.
++%
++\ifx\inputlineno\thisisundefined
++  \let\linenumber = \empty % Pre-3.0.
++\else
++  \def\linenumber{l.\the\inputlineno:\space}
++\fi
++
+ % Set up fixed words for English if not already set.
+ \ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+ \ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+@@ -131,44 +150,119 @@
+ \ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+ \ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+ \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+-\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
+ \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
+-\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
++
++% Since the category of space is not known, we have to be careful.
++\chardef\spacecat = 10
++\def\spaceisspace{\catcode`\ =\spacecat}
++
++% sometimes characters are active, so we need control sequences.
++\chardef\colonChar = `\:
++\chardef\commaChar = `\,
++\chardef\dashChar  = `\-
++\chardef\dotChar   = `\.
++\chardef\exclamChar= `\!
++\chardef\lquoteChar= `\`
++\chardef\questChar = `\?
++\chardef\rquoteChar= `\'
++\chardef\semiChar  = `\;
++\chardef\underChar = `\_
+ 
+ % Ignore a token.
+ %
+ \def\gobble#1{}
+ 
+-\hyphenation{ap-pen-dix}
+-\hyphenation{mini-buf-fer mini-buf-fers}
+-\hyphenation{eshell}
+-\hyphenation{white-space}
++% The following is used inside several \edef's.
++\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
++
++% Hyphenation fixes.
++\hyphenation{
++  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
++  ap-pen-dix bit-map bit-maps
++  data-base data-bases eshell fall-ing half-way long-est man-u-script
++  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
++  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
++  spell-ing spell-ings
++  stand-alone strong-est time-stamp time-stamps which-ever white-space
++  wide-spread wrap-around
++}
+ 
+ % Margin to add to right of even pages, to left of odd pages.
+-\newdimen \bindingoffset
+-\newdimen \normaloffset
++\newdimen\bindingoffset
++\newdimen\normaloffset
+ \newdimen\pagewidth \newdimen\pageheight
+ 
++% For a final copy, take out the rectangles
++% that mark overfull boxes (in case you have decided
++% that the text looks ok even though it passes the margin).
++%
++\def\finalout{\overfullrule=0pt}
++
++% @| inserts a changebar to the left of the current line.  It should
++% surround any changed text.  This approach does *not* work if the
++% change spans more than two lines of output.  To handle that, we would
++% have adopt a much more difficult approach (putting marks into the main
++% vertical list for the beginning and end of each change).
++%
++\def\|{%
++  % \vadjust can only be used in horizontal mode.
++  \leavevmode
++  %
++  % Append this vertical mode material after the current line in the output.
++  \vadjust{%
++    % We want to insert a rule with the height and depth of the current
++    % leading; that is exactly what \strutbox is supposed to record.
++    \vskip-\baselineskip
++    %
++    % \vadjust-items are inserted at the left edge of the type.  So
++    % the \llap here moves out into the left-hand margin.
++    \llap{%
++      %
++      % For a thicker or thinner bar, change the `1pt'.
++      \vrule height\baselineskip width1pt
++      %
++      % This is the space between the bar and the text.
++      \hskip 12pt
++    }%
++  }%
++}
++
+ % Sometimes it is convenient to have everything in the transcript file
+ % and nothing on the terminal.  We don't just call \tracingall here,
+-% since that produces some useless output on the terminal.
++% since that produces some useless output on the terminal.  We also make
++% some effort to order the tracing commands to reduce output in the log
++% file; cf. trace.sty in LaTeX.
+ %
+ \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+-\ifx\eTeXversion\undefined
+-\def\loggingall{\tracingcommands2 \tracingstats2
+-   \tracingpages1 \tracingoutput1 \tracinglostchars1
+-   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+-   \showboxbreadth\maxdimen\showboxdepth\maxdimen
+-}%
+-\else
+-\def\loggingall{\tracingcommands3 \tracingstats2
+-   \tracingpages1 \tracingoutput1 \tracinglostchars1
+-   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
+-   \tracingscantokens1 \tracingassigns1 \tracingifs1
+-   \tracinggroups1 \tracingnesting2
+-   \showboxbreadth\maxdimen\showboxdepth\maxdimen
++\def\loggingall{%
++  \tracingstats2
++  \tracingpages1
++  \tracinglostchars2  % 2 gives us more in etex
++  \tracingparagraphs1
++  \tracingoutput1
++  \tracingmacros2
++  \tracingrestores1
++  \showboxbreadth\maxdimen \showboxdepth\maxdimen
++  \ifx\eTeXversion\undefined\else % etex gives us more logging
++    \tracingscantokens1
++    \tracingifs1
++    \tracinggroups1
++    \tracingnesting2
++    \tracingassigns1
++  \fi
++  \tracingcommands3  % 3 gives us more in etex
++  \errorcontextlines16
+ }%
+-\fi
++
++% add check for \lastpenalty to plain's definitions.  If the last thing
++% we did was a \nobreak, we don't want to insert more space.
++%
++\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
++  \removelastskip\penalty-50\smallskip\fi\fi}
++\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
++  \removelastskip\penalty-100\medskip\fi\fi}
++\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
++  \removelastskip\penalty-200\bigskip\fi\fi}
+ 
+ % For @cropmarks command.
+ % Do @cropmarks to get crop marks.
+@@ -184,6 +278,50 @@
+ \newdimen\cornerthick \cornerthick=.3pt
+ \newdimen\topandbottommargin \topandbottommargin=.75in
+ 
++% Output a mark which sets \thischapter, \thissection and \thiscolor.
++% We dump everything together because we only have one kind of mark.
++% This works because we only use \botmark / \topmark, not \firstmark.
++%
++% A mark contains a subexpression of the \ifcase ... \fi construct.
++% \get*marks macros below extract the needed part using \ifcase.
++%
++% Another complication is to let the user choose whether \thischapter
++% (\thissection) refers to the chapter (section) in effect at the top
++% of a page, or that at the bottom of a page.  The solution is
++% described on page 260 of The TeXbook.  It involves outputting two
++% marks for the sectioning macros, one before the section break, and
++% one after.  I won't pretend I can describe this better than DEK...
++\def\domark{%
++  \toks0=\expandafter{\lastchapterdefs}%
++  \toks2=\expandafter{\lastsectiondefs}%
++  \toks4=\expandafter{\prevchapterdefs}%
++  \toks6=\expandafter{\prevsectiondefs}%
++  \toks8=\expandafter{\lastcolordefs}%
++  \mark{%
++                   \the\toks0 \the\toks2
++      \noexpand\or \the\toks4 \the\toks6
++    \noexpand\else \the\toks8
++  }%
++}
++% \topmark doesn't work for the very first chapter (after the title
++% page or the contents), so we use \firstmark there -- this gets us
++% the mark with the chapter defs, unless the user sneaks in, e.g.,
++% @setcolor (or @url, or @link, etc.) between @contents and the very
++% first @chapter.
++\def\gettopheadingmarks{%
++  \ifcase0\topmark\fi
++  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
++}
++\def\getbottomheadingmarks{\ifcase1\botmark\fi}
++\def\getcolormarks{\ifcase2\topmark\fi}
++
++% Avoid "undefined control sequence" errors.
++\def\lastchapterdefs{}
++\def\lastsectiondefs{}
++\def\prevchapterdefs{}
++\def\prevsectiondefs{}
++\def\lastcolordefs{}
++
+ % Main output routine.
+ \chardef\PAGE = 255
+ \output = {\onepageout{\pagecontents\PAGE}}
+@@ -201,7 +339,9 @@
+   %
+   % Do this outside of the \shipout so @code etc. will be expanded in
+   % the headline as they should be, not taken literally (outputting ''code).
++  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+   \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
++  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+   \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+   %
+   {%
+@@ -209,11 +349,18 @@
+     % take effect in \write's, yet the group defined by the \vbox ends
+     % before the \shipout runs.
+     %
+-    \escapechar = `\\     % use backslash in output files.
+     \indexdummies         % don't expand commands in the output.
+     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
+-                   % the page break happens to be in the middle of an example.
++               % the page break happens to be in the middle of an example.
++               % We don't want .vr (or whatever) entries like this:
++               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
++               % "\acronym" won't work when it's read back in;
++               % it needs to be 
++               % {\code {{\tt \backslashcurfont }acronym}
+     \shipout\vbox{%
++      % Do this early so pdf references go to the beginning of the page.
++      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
++      %
+       \ifcropmarks \vbox to \outervsize\bgroup
+         \hsize = \outerhsize
+         \vskip-\topandbottommargin
+@@ -237,14 +384,12 @@
+       \pagebody{#1}%
+       \ifdim\ht\footlinebox > 0pt
+         % Only leave this space if the footline is nonempty.
+-        % (We lessened \vsize for it in \oddfootingxxx.)
++        % (We lessened \vsize for it in \oddfootingyyy.)
+         % The \baselineskip=24pt in plain's \makefootline has no effect.
+-        \vskip 2\baselineskip
++        \vskip 24pt
+         \unvbox\footlinebox
+       \fi
+       %
+-      \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
+-      %
+       \ifcropmarks
+           \egroup % end of \vbox\bgroup
+         \hfil\egroup % end of (centering) \line\bgroup
+@@ -262,7 +407,7 @@
+       \egroup % \vbox from first cropmarks clause
+       \fi
+     }% end of \shipout\vbox
+-  }% end of group with \turnoffactive
++  }% end of group with \indexdummies
+   \advancepageno
+   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+ }
+@@ -275,7 +420,7 @@
+ % marginal hacks, juha at viisa.uucp (Juha Takala)
+ \ifvoid\margin\else % marginal info is present
+   \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+-\dimen@=\dp#1 \unvbox#1
++\dimen@=\dp#1\relax \unvbox#1\relax
+ \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+ \ifr at ggedbottom \kern-\dimen@ \vfil \fi}
+ }
+@@ -295,143 +440,161 @@
+ % the input line (except we remove a trailing comment).  #1 should be a
+ % macro which expects an ordinary undelimited TeX argument.
+ %
+-\def\parsearg#1{%
+-  \let\next = #1%
++\def\parsearg{\parseargusing{}}
++\def\parseargusing#1#2{%
++  \def\argtorun{#2}%
+   \begingroup
+     \obeylines
+-    \futurelet\temp\parseargx
+-}
 -
--    if test -z "$run"; then
--      if test -n "$shlibpath_var"; then
--	# Export the shlibpath_var.
--	eval "export $shlibpath_var"
--      fi
+-% If the next token is an obeyed space (from an @example environment or
+-% the like), remove it and recurse.  Otherwise, we're done.
+-\def\parseargx{%
+-  % \obeyedspace is defined far below, after the definition of \sepspaces.
+-  \ifx\obeyedspace\temp
+-    \expandafter\parseargdiscardspace
+-  \else
+-    \expandafter\parseargline
+-  \fi
++    \spaceisspace
++    #1%
++    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+ }
+ 
+-% Remove a single space (as the delimiter token to the macro call).
+-{\obeyspaces %
+- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
 -
--      # Restore saved enviroment variables
--      if test "${save_LC_ALL+set}" = set; then
--	LC_ALL="$save_LC_ALL"; export LC_ALL
--      fi
--      if test "${save_LANG+set}" = set; then
--	LANG="$save_LANG"; export LANG
--      fi
-+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
-+    func_mode_link ${1+"$@"}
+ {\obeylines %
+   \gdef\parseargline#1^^M{%
+     \endgroup % End of the group started in \parsearg.
+-    %
+-    % First remove any @c comment, then any @comment.
+-    % Result of each macro is put in \toks0.
+-    \argremovec #1\c\relax %
+-    \expandafter\argremovecomment \the\toks0 \comment\relax %
+-    %
+-    % Call the caller's macro, saved as \next in \parsearg.
+-    \expandafter\next\expandafter{\the\toks0}%
++    \argremovecomment #1\comment\ArgTerm%
+   }%
+ }
  
--      # Now prepare to actually exec the command.
--      exec_cmd='"$cmd"$args'
--    else
--      # Display what would be done.
--      if test -n "$shlibpath_var"; then
--	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
--	$echo "export $shlibpath_var"
--      fi
--      $echo "$cmd$args"
--      exit 0
--    fi
--    ;;
+-% Since all \c{,omment} does is throw away the argument, we can let TeX
+-% do that for us.  The \relax here is matched by the \relax in the call
+-% in \parseargline; it could be more or less anything, its purpose is
+-% just to delimit the argument to the \c.
+-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
+-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
++% First remove any @comment, then any @c comment.
++\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
++\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
  
--  # libtool clean and uninstall mode
--  clean | uninstall)
--    modename="$modename: $mode"
--    rm="$nonopt"
-+# func_mode_uninstall arg...
-+func_mode_uninstall ()
+-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+-%    @end itemize  @c foo
+-% will have two active spaces as part of the argument with the
+-% `itemize'.  Here we remove all active spaces from #1, and assign the
+-% result to \toks0.
++% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+ %
+-% This loses if there are any *other* active characters besides spaces
+-% in the argument -- _ ^ +, for example -- since they get expanded.
+-% Fortunately, Texinfo does not define any such commands.  (If it ever
+-% does, the catcode of the characters in questionwill have to be changed
+-% here.)  But this means we cannot call \removeactivespaces as part of
+-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
+-% that \parsearg gets might well have any character at all in it.
++% \argremovec might leave us with trailing space, e.g.,
++%    @end itemize  @c foo
++% This space token undergoes the same procedure and is eventually removed
++% by \finishparsearg.
+ %
+-\def\removeactivespaces#1{%
+-  \begingroup
+-    \ignoreactivespaces
+-    \edef\temp{#1}%
+-    \global\toks0 = \expandafter{\temp}%
+-  \endgroup
++\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
++\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
++\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
++  \def\temp{#3}%
++  \ifx\temp\empty
++    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
++    \let\temp\finishparsearg
++  \else
++    \let\temp\argcheckspaces
++  \fi
++  % Put the space token in:
++  \temp#1 #3\ArgTerm
+ }
+ 
+-% Change the active space to expand to nothing.
++% If a _delimited_ argument is enclosed in braces, they get stripped; so
++% to get _exactly_ the rest of the line, we had to prevent such situation.
++% We prepended an \empty token at the very beginning and we expand it now,
++% just before passing the control to \argtorun.
++% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
++% either the null string, or it ends with \^^M---thus there is no danger
++% that a pair of braces would be stripped.
+ %
+-\begingroup
++% But first, we have to remove the trailing space token.
++%
++\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
++
++% \parseargdef\foo{...}
++%	is roughly equivalent to
++% \def\foo{\parsearg\Xfoo}
++% \def\Xfoo#1{...}
++%
++% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
++% favourite TeX trick.  --kasal, 16nov03
++
++\def\parseargdef#1{%
++  \expandafter \doparseargdef \csname\string#1\endcsname #1%
++}
++\def\doparseargdef#1#2{%
++  \def#2{\parsearg#1}%
++  \def#1##1%
++}
++
++% Several utility definitions with active space:
 +{
-+    $opt_debug
-+    RM="$nonopt"
-     files=
-     rmforce=
-     exit_status=0
-@@ -5093,49 +9435,47 @@
-     for arg
-     do
-       case $arg in
--      -f) rm="$rm $arg"; rmforce=yes ;;
--      -*) rm="$rm $arg" ;;
--      *) files="$files $arg" ;;
-+      -f) func_append RM " $arg"; rmforce=yes ;;
-+      -*) func_append RM " $arg" ;;
-+      *) func_append files " $arg" ;;
-       esac
-     done
+   \obeyspaces
+-  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
+-\endgroup
++  \gdef\obeyedspace{ }
++
++  % Make each space character in the input produce a normal interword
++  % space in the output.  Don't allow a line break at this space, as this
++  % is used only in environments like @example, where each line of input
++  % should produce a line of output anyway.
++  %
++  \gdef\sepspaces{\obeyspaces\let =\tie}
++
++  % If an index command is used in an @example environment, any spaces
++  % therein should become regular spaces in the raw index file, not the
++  % expansion of \tie (\leavevmode \penalty \@M \ ).
++  \gdef\unsepspaces{\let =\space}
++}
+ 
+ 
+ \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+ 
+-%% These are used to keep @begin/@end levels from running away
+-%% Call \inENV within environments (after a \begingroup)
+-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
+-\def\ENVcheck{%
+-\ifENV\errmessage{Still within an environment; press RETURN to continue}
+-\endgroup\fi} % This is not perfect, but it should reduce lossage
++% Define the framework for environments in texinfo.tex.  It's used like this:
++%
++%   \envdef\foo{...}
++%   \def\Efoo{...}
++%
++% It's the responsibility of \envdef to insert \begingroup before the
++% actual body; @end closes the group after calling \Efoo.  \envdef also
++% defines \thisenv, so the current environment is known; @end checks
++% whether the environment name matches.  The \checkenv macro can also be
++% used to check whether the current environment is the one expected.
++%
++% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
++% are not treated as environments; they don't open a group.  (The
++% implementation of @end takes care not to call \endgroup in this
++% special case.)
  
--    if test -z "$rm"; then
--      $echo "$modename: you must specify an RM program" 1>&2
--      $echo "$help" 1>&2
--      exit 1
--    fi
-+    test -z "$RM" && \
-+      func_fatal_help "you must specify an RM program"
+-% @begin foo  is the same as @foo, for now.
+-\newhelp\EMsimple{Press RETURN to continue.}
  
-     rmdirs=
+-\outer\def\begin{\parsearg\beginxxx}
++% At run-time, environments start with this:
++\def\startenvironment#1{\begingroup\def\thisenv{#1}}
++% initialize
++\let\thisenv\empty
  
-     for file in $files; do
--      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
--      if test "X$dir" = "X$file"; then
--	dir=.
--	objdir="$objdir"
-+      func_dirname "$file" "" "."
-+      dir="$func_dirname_result"
-+      if test "X$dir" = X.; then
-+	odir="$objdir"
-       else
--	objdir="$dir/$objdir"
-+	odir="$dir/$objdir"
-       fi
--      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
--      test $mode = uninstall && objdir="$dir"
-+      func_basename "$file"
-+      name="$func_basename_result"
-+      test "$opt_mode" = uninstall && odir="$dir"
+-\def\beginxxx #1{%
+-\expandafter\ifx\csname #1\endcsname\relax
+-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
+-\csname #1\endcsname\fi}
++% ... but they get defined via ``\envdef\foo{...}'':
++\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
++\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
  
--      # Remember objdir for removal later, being careful to avoid duplicates
--      if test $mode = clean; then
-+      # Remember odir for removal later, being careful to avoid duplicates
-+      if test "$opt_mode" = clean; then
- 	case " $rmdirs " in
--	  *" $objdir "*) ;;
--	  *) rmdirs="$rmdirs $objdir" ;;
-+	  *" $odir "*) ;;
-+	  *) func_append rmdirs " $odir" ;;
- 	esac
-       fi
+-% @end foo executes the definition of \Efoo.
+-%
+-\def\end{\parsearg\endxxx}
+-\def\endxxx #1{%
+-  \removeactivespaces{#1}%
+-  \edef\endthing{\the\toks0}%
+-  %
+-  \expandafter\ifx\csname E\endthing\endcsname\relax
+-    \expandafter\ifx\csname \endthing\endcsname\relax
+-      % There's no \foo, i.e., no ``environment'' foo.
+-      \errhelp = \EMsimple
+-      \errmessage{Undefined command `@end \endthing'}%
+-    \else
+-      \unmatchedenderror\endthing
+-    \fi
++% Check whether we're in the right environment:
++\def\checkenv#1{%
++  \def\temp{#1}%
++  \ifx\thisenv\temp
+   \else
+-    % Everything's ok; the right environment has been started.
+-    \csname E\endthing\endcsname
++    \badenverr
+   \fi
+ }
  
-       # Don't error if the file doesn't exist and rm -f was used.
--      if (test -L "$file") >/dev/null 2>&1 \
--        || (test -h "$file") >/dev/null 2>&1 \
--	|| test -f "$file"; then
--        :
-+      if { test -L "$file"; } >/dev/null 2>&1 ||
-+	 { test -h "$file"; } >/dev/null 2>&1 ||
-+	 test -f "$file"; then
-+	:
-       elif test -d "$file"; then
--        exit_status=1
-+	exit_status=1
- 	continue
-       elif test "$rmforce" = yes; then
--        continue
-+	continue
-       fi
+-% There is an environment #1, but it hasn't been started.  Give an error.
+-%
+-\def\unmatchedenderror#1{%
++% Environment mismatch, #1 expected:
++\def\badenverr{%
+   \errhelp = \EMsimple
+-  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
++  \errmessage{This command can appear only \inenvironment\temp,
++    not \inenvironment\thisenv}%
++}
++\def\inenvironment#1{%
++  \ifx#1\empty
++    out of any environment%
++  \else
++    in environment \expandafter\string#1%
++  \fi
+ }
  
-       rmfiles="$file"
-@@ -5143,312 +9483,130 @@
-       case $name in
-       *.la)
- 	# Possibly a libtool archive, so verify it.
--	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
--	  . $dir/$name
-+	if func_lalib_p "$file"; then
-+	  func_source $dir/$name
+-% Define the control sequence \E#1 to give an unmatched @end error.
++% @end foo executes the definition of \Efoo.
++% But first, it executes a specialized version of \checkenv
+ %
+-\def\defineunmatchedend#1{%
+-  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
++\parseargdef\end{%
++  \if 1\csname iscond.#1\endcsname
++  \else
++    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
++    \expandafter\checkenv\csname#1\endcsname
++    \csname E#1\endcsname
++    \endgroup
++  \fi
+ }
  
- 	  # Delete the libtool libraries and symlinks.
- 	  for n in $library_names; do
--	    rmfiles="$rmfiles $objdir/$n"
-+	    func_append rmfiles " $odir/$n"
- 	  done
--	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
--	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
++\newhelp\EMsimple{Press RETURN to continue.}
  
--	  if test $mode = uninstall; then
-+	  case "$opt_mode" in
-+	  clean)
-+	    case " $library_names " in
-+	    *" $dlname "*) ;;
-+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
-+	    esac
-+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
-+	    ;;
-+	  uninstall)
- 	    if test -n "$library_names"; then
- 	      # Do each command in the postuninstall commands.
--	      eval cmds=\"$postuninstall_cmds\"
--	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	      for cmd in $cmds; do
--		IFS="$save_ifs"
--		$show "$cmd"
--		$run eval "$cmd"
--		if test $? != 0 && test "$rmforce" != yes; then
--		  exit_status=1
--		fi
--	      done
--	      IFS="$save_ifs"
-+	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
- 	    fi
+-% Single-spacing is done by various environments (specifically, in
+-% \nonfillstart and \quotations).
+-\newskip\singlespaceskip \singlespaceskip = 12.5pt
+-\def\singlespace{%
+-  % Why was this kern here?  It messes up equalizing space above and below
+-  % environments.  --karl, 6may93
+-  %{\advance \baselineskip by -\singlespaceskip
+-  %\kern \baselineskip}%
+-  \setleading \singlespaceskip
+-}
  
- 	    if test -n "$old_library"; then
- 	      # Do each command in the old_postuninstall commands.
--	      eval cmds=\"$old_postuninstall_cmds\"
--	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
--	      for cmd in $cmds; do
--		IFS="$save_ifs"
--		$show "$cmd"
--		$run eval "$cmd"
--		if test $? != 0 && test "$rmforce" != yes; then
--		  exit_status=1
--		fi
--	      done
--	      IFS="$save_ifs"
-+	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
- 	    fi
- 	    # FIXME: should reinstall the best remaining shared library.
--	  fi
-+	    ;;
-+	  esac
- 	fi
- 	;;
+ %% Simple single-character @ commands
  
-       *.lo)
- 	# Possibly a libtool object, so verify it.
--	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+	if func_lalib_p "$file"; then
+@@ -452,16 +615,22 @@
+ \let\{=\mylbrace
+ \let\}=\myrbrace
+ \begingroup
+-  % Definitions to produce actual \{ & \} command in an index.
+-  \catcode`\{ = 12 \catcode`\} = 12
++  % Definitions to produce \{ and \} commands for indices,
++  % and @{ and @} for the aux/toc files.
++  \catcode`\{ = \other \catcode`\} = \other
+   \catcode`\[ = 1 \catcode`\] = 2
+-  \catcode`\@ = 0 \catcode`\\ = 12
+-  @gdef at lbracecmd[\{]%
+-  @gdef at rbracecmd[\}]%
+- at endgroup
++  \catcode`\! = 0 \catcode`\\ = \other
++  !gdef!lbracecmd[\{]%
++  !gdef!rbracecmd[\}]%
++  !gdef!lbraceatcmd[@{]%
++  !gdef!rbraceatcmd[@}]%
++!endgroup
++
++% @comma{} to avoid , parsing problems.
++\let\comma = ,
  
--          # Read the .lo file
--          . $dir/$name
-+	  # Read the .lo file
-+	  func_source $dir/$name
+ % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+-% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
++% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+ \let\, = \c
+ \let\dotaccent = \.
+ \def\ringaccent#1{{\accent23 #1}}
+@@ -469,22 +638,43 @@
+ \let\ubaraccent = \b
+ \let\udotaccent = \d
  
- 	  # Add PIC object to the list of files to remove.
--          if test -n "$pic_object" \
--             && test "$pic_object" != none; then
--	    rmfiles="$rmfiles $dir/$pic_object"
--          fi
-+	  if test -n "$pic_object" &&
-+	     test "$pic_object" != none; then
-+	    func_append rmfiles " $dir/$pic_object"
-+	  fi
+-% Other special characters: @questiondown @exclamdown
+-% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
++% Other special characters: @questiondown @exclamdown @ordf @ordm
++% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+ \def\questiondown{?`}
+ \def\exclamdown{!`}
++\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
++\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
  
- 	  # Add non-PIC object to the list of files to remove.
--          if test -n "$non_pic_object" \
--             && test "$non_pic_object" != none; then
--	    rmfiles="$rmfiles $dir/$non_pic_object"
--          fi
-+	  if test -n "$non_pic_object" &&
-+	     test "$non_pic_object" != none; then
-+	    func_append rmfiles " $dir/$non_pic_object"
-+	  fi
- 	fi
- 	;;
+ % Dotless i and dotless j, used for accents.
+ \def\imacro{i}
+ \def\jmacro{j}
+ \def\dotless#1{%
+   \def\temp{#1}%
+-  \ifx\temp\imacro \ptexi
+-  \else\ifx\temp\jmacro \j
++  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
++  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+   \else \errmessage{@dotless can be used only with i or j}%
+   \fi\fi
+ }
  
-       *)
--	# Do a test to see if this is a libtool program.
--	if test $mode = clean &&
--	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
--	  relink_command=
--	  . $dir/$file
-+	if test "$opt_mode" = clean ; then
-+	  noexename=$name
-+	  case $file in
-+	  *.exe)
-+	    func_stripname '' '.exe' "$file"
-+	    file=$func_stripname_result
-+	    func_stripname '' '.exe' "$name"
-+	    noexename=$func_stripname_result
-+	    # $file with .exe has already been added to rmfiles,
-+	    # add $file without .exe
-+	    func_append rmfiles " $file"
-+	    ;;
-+	  esac
-+	  # Do a test to see if this is a libtool program.
-+	  if func_ltwrapper_p "$file"; then
-+	    if func_ltwrapper_executable_p "$file"; then
-+	      func_ltwrapper_scriptname "$file"
-+	      relink_command=
-+	      func_source $func_ltwrapper_scriptname_result
-+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
-+	    else
-+	      relink_command=
-+	      func_source $dir/$noexename
-+	    fi
++% The \TeX{} logo, as in plain, but resetting the spacing so that a
++% period following counts as ending a sentence.  (Idea found in latex.)
++%
++\edef\TeX{\TeX \spacefactor=1000 }
++
++% @LaTeX{} logo.  Not quite the same results as the definition in
++% latex.ltx, since we use a different font for the raised A; it's most
++% convenient for us to use an explicitly smaller font, rather than using
++% the \scriptstyle font (since we don't reset \scriptstyle and
++% \scriptscriptstyle).
++%
++\def\LaTeX{%
++  L\kern-.36em
++  {\setbox0=\hbox{T}%
++   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
++  \kern-.15em
++  \TeX
++}
++
+ % Be sure we're in horizontal mode when doing a tie, since we make space
+ % equivalent to this in @example-like environments. Otherwise, a space
+ % at the beginning of a line will start with \penalty -- and
+@@ -503,14 +693,32 @@
+ % @* forces a line break.
+ \def\*{\hfil\break\hbox{}\ignorespaces}
  
--	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
--	  if test "$fast_install" = yes && test -n "$relink_command"; then
--	    rmfiles="$rmfiles $objdir/lt-$name"
-+	    # note $name still contains .exe if it was in $file originally
-+	    # as does the version of $file that was added into $rmfiles
-+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
-+	    if test "$fast_install" = yes && test -n "$relink_command"; then
-+	      func_append rmfiles " $odir/lt-$name"
-+	    fi
-+	    if test "X$noexename" != "X$name" ; then
-+	      func_append rmfiles " $odir/lt-${noexename}.c"
-+	    fi
- 	  fi
- 	fi
- 	;;
-       esac
--      $show "$rm $rmfiles"
--      $run $rm $rmfiles || exit_status=1
-+      func_show_eval "$RM $rmfiles" 'exit_status=1'
-     done
++% @/ allows a line break.
++\let\/=\allowbreak
++
+ % @. is an end-of-sentence period.
+-\def\.{.\spacefactor=3000 }
++\def\.{.\spacefactor=\endofsentencespacefactor\space}
  
-     # Try to remove the ${objdir}s in the directories where we deleted files
-     for dir in $rmdirs; do
-       if test -d "$dir"; then
--	$show "rmdir $dir"
--	$run rmdir $dir >/dev/null 2>&1
-+	func_show_eval "rmdir $dir >/dev/null 2>&1"
-       fi
-     done
+ % @! is an end-of-sentence bang.
+-\def\!{!\spacefactor=3000 }
++\def\!{!\spacefactor=\endofsentencespacefactor\space}
  
-     exit $exit_status
--    ;;
+ % @? is an end-of-sentence query.
+-\def\?{?\spacefactor=3000 }
++\def\?{?\spacefactor=\endofsentencespacefactor\space}
++
++% @frenchspacing on|off  says whether to put extra space after punctuation.
++% 
++\def\onword{on}
++\def\offword{off}
++%
++\parseargdef\frenchspacing{%
++  \def\temp{#1}%
++  \ifx\temp\onword \plainfrenchspacing
++  \else\ifx\temp\offword \plainnonfrenchspacing
++  \else
++    \errhelp = \EMsimple
++    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
++  \fi\fi
 +}
  
--  "")
--    $echo "$modename: you must specify a MODE" 1>&2
--    $echo "$generic_help" 1>&2
--    exit 1
--    ;;
--  esac
-+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
-+    func_mode_uninstall ${1+"$@"}
- 
--  if test -z "$exec_cmd"; then
--    $echo "$modename: invalid operation mode \`$mode'" 1>&2
--    $echo "$generic_help" 1>&2
--    exit 1
--  fi
--fi # test -z "$show_help"
-+test -z "$opt_mode" && {
-+  help="$generic_help"
-+  func_fatal_help "you must specify a MODE"
+ % @w prevents a word break.  Without the \leavevmode, @w at the
+ % beginning of a paragraph, when TeX is still in vertical mode, would
+@@ -525,47 +733,24 @@
+ % therefore, no glue is inserted, and the space between the headline and
+ % the text is small, which looks bad.
+ %
+-\def\group{\begingroup
+-  \ifnum\catcode13=\active \else
++% Another complication is that the group might be very large.  This can
++% cause the glue on the previous page to be unduly stretched, because it
++% does not have much material.  In this case, it's better to add an
++% explicit \vfill so that the extra space is at the bottom.  The
++% threshold for doing this is if the group is more than \vfilllimit
++% percent of a page (\vfilllimit can be changed inside of @tex).
++%
++\newbox\groupbox
++\def\vfilllimit{0.7}
++%
++\envdef\group{%
++  \ifnum\catcode`\^^M=\active \else
+     \errhelp = \groupinvalidhelp
+     \errmessage{@group invalid in context where filling is enabled}%
+   \fi
++  \startsavinginserts
+   %
+-  % The \vtop we start below produces a box with normal height and large
+-  % depth; thus, TeX puts \baselineskip glue before it, and (when the
+-  % next line of text is done) \lineskip glue after it.  (See p.82 of
+-  % the TeXbook.)  Thus, space below is not quite equal to space
+-  % above.  But it's pretty close.
+-  \def\Egroup{%
+-    \egroup           % End the \vtop.
+-    \endgroup         % End the \group.
+-  }%
+-  %
+-  \vtop\bgroup
+-    % We have to put a strut on the last line in case the @group is in
+-    % the midst of an example, rather than completely enclosing it.
+-    % Otherwise, the interline space between the last line of the group
+-    % and the first line afterwards is too small.  But we can't put the
+-    % strut in \Egroup, since there it would be on a line by itself.
+-    % Hence this just inserts a strut at the beginning of each line.
+-    \everypar = {\strut}%
+-    %
+-    % Since we have a strut on every line, we don't need any of TeX's
+-    % normal interline spacing.
+-    \offinterlineskip
+-    %
+-    % OK, but now we have to do something about blank
+-    % lines in the input in @example-like environments, which normally
+-    % just turn into \lisppar, which will insert no space now that we've
+-    % turned off the interline space.  Simplest is to make them be an
+-    % empty paragraph.
+-    \ifx\par\lisppar
+-      \edef\par{\leavevmode \par}%
+-      %
+-      % Reset ^^M's definition to new definition of \par.
+-      \obeylines
+-    \fi
+-    %
++  \setbox\groupbox = \vtop\bgroup
+     % Do @comment since we are called inside an environment such as
+     % @example, where each end-of-line in the input causes an
+     % end-of-line in the output.  We don't want the end-of-line after
+@@ -575,6 +760,32 @@
+     \comment
+ }
+ %
++% The \vtop produces a box with normal height and large depth; thus, TeX puts
++% \baselineskip glue before it, and (when the next line of text is done)
++% \lineskip glue after it.  Thus, space below is not quite equal to space
++% above.  But it's pretty close.
++\def\Egroup{%
++    % To get correct interline space between the last line of the group
++    % and the first line afterwards, we have to propagate \prevdepth.
++    \endgraf % Not \par, as it may have been set to \lisppar.
++    \global\dimen1 = \prevdepth
++  \egroup           % End the \vtop.
++  % \dimen0 is the vertical size of the group's box.
++  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
++  % \dimen2 is how much space is left on the page (more or less).
++  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
++  % if the group doesn't fit on the current page, and it's a big big
++  % group, force a page break.
++  \ifdim \dimen0 > \dimen2
++    \ifdim \pagetotal < \vfilllimit\pageheight
++      \page
++    \fi
++  \fi
++  \box\groupbox
++  \prevdepth = \dimen1
++  \checkinserts
 +}
-+
-+test -z "$exec_cmd" && \
-+  func_fatal_help "invalid operation mode \`$opt_mode'"
++%
+ % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+ % message, so this ends up printing `@group can only ...'.
+ %
+@@ -587,10 +798,8 @@
  
- if test -n "$exec_cmd"; then
--  eval exec $exec_cmd
--  exit 1
-+  eval exec "$exec_cmd"
-+  exit $EXIT_FAILURE
- fi
+ \newdimen\mil  \mil=0.001in
  
--# We need to display help for each of the modes.
--case $mode in
--"") $echo \
--"Usage: $modename [OPTION]... [MODE-ARG]...
--
--Provide generalized library-building support services.
--
--    --config          show all configuration variables
--    --debug           enable verbose shell tracing
---n, --dry-run         display commands without modifying any files
--    --features        display basic configuration information and exit
--    --finish          same as \`--mode=finish'
--    --help            display this help message and exit
--    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
--    --quiet           same as \`--silent'
--    --silent          don't print informational messages
--    --tag=TAG         use configuration variables from tag TAG
--    --version         print version information
--
--MODE must be one of the following:
--
--      clean           remove files from the build directory
--      compile         compile a source file into a libtool object
--      execute         automatically set library path, then run a program
--      finish          complete the installation of libtool libraries
--      install         install libraries or executables
--      link            create a library or an executable
--      uninstall       remove libraries from an installed directory
--
--MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
--a more detailed description of MODE."
--  exit 0
--  ;;
--
--clean)
--  $echo \
--"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
--
--Remove files from the build directory.
--
--RM is the name of the program to use to delete files associated with each FILE
--(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
--to RM.
--
--If FILE is a libtool library, object or program, all the files associated
--with it are deleted. Otherwise, only FILE itself is deleted using RM."
--  ;;
--
--compile)
--  $echo \
--"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
--
--Compile a source file into a libtool library object.
--
--This mode accepts the following additional options:
--
--  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
--  -prefer-pic       try to building PIC objects only
--  -prefer-non-pic   try to building non-PIC objects only
--  -static           always build a \`.o' file suitable for static linking
--
--COMPILE-COMMAND is a command to be used in creating a \`standard' object file
--from the given SOURCEFILE.
--
--The output file name is determined by removing the directory component from
--SOURCEFILE, then substituting the C source code suffix \`.c' with the
--library object suffix, \`.lo'."
--  ;;
--
--execute)
--  $echo \
--"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
--
--Automatically set library path, then run a program.
--
--This mode accepts the following additional options:
--
--  -dlopen FILE      add the directory containing FILE to the library path
--
--This mode sets the library path environment variable according to \`-dlopen'
--flags.
--
--If any of the ARGS are libtool executable wrappers, then they are translated
--into their corresponding uninstalled binary, and any of their required library
--directories are added to the library path.
--
--Then, COMMAND is executed, with ARGS as arguments."
--  ;;
--
--finish)
--  $echo \
--"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
--
--Complete the installation of libtool libraries.
--
--Each LIBDIR is a directory that contains libtool libraries.
--
--The commands that this mode executes may require superuser privileges.  Use
--the \`--dry-run' option if you just want to see what would be executed."
--  ;;
--
--install)
--  $echo \
--"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
--
--Install executables or libraries.
--
--INSTALL-COMMAND is the installation command.  The first component should be
--either the \`install' or \`cp' program.
--
--The rest of the components are interpreted as arguments to that command (only
--BSD-compatible install options are recognized)."
--  ;;
--
--link)
--  $echo \
--"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
--
--Link object files or libraries together to form another library, or to
--create an executable program.
--
--LINK-COMMAND is a command using the C compiler that you would use to create
--a program from several object files.
--
--The following components of LINK-COMMAND are treated specially:
--
--  -all-static       do not do any dynamic linking at all
--  -avoid-version    do not add a version suffix if possible
--  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
--  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
--  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
--  -export-symbols SYMFILE
--		    try to export only the symbols listed in SYMFILE
--  -export-symbols-regex REGEX
--		    try to export only the symbols matching REGEX
--  -LLIBDIR          search LIBDIR for required installed libraries
--  -lNAME            OUTPUT-FILE requires the installed library libNAME
--  -module           build a library that can dlopened
--  -no-fast-install  disable the fast-install mode
--  -no-install       link a not-installable executable
--  -no-undefined     declare that a library does not refer to external symbols
--  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
--  -objectlist FILE  Use a list of object files found in FILE to specify objects
--  -release RELEASE  specify package release information
--  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
--  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
--  -static           do not do any dynamic linking of libtool libraries
--  -version-info CURRENT[:REVISION[:AGE]]
--		    specify library version info [each variable defaults to 0]
--
--All other options (arguments beginning with \`-') are ignored.
--
--Every other argument is treated as a filename.  Files ending in \`.la' are
--treated as uninstalled libtool libraries, other files are standard or library
--object files.
--
--If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
--only library objects (\`.lo' files) may be specified, and \`-rpath' is
--required, except when creating a convenience library.
--
--If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
--using \`ar' and \`ranlib', or on Windows using \`lib'.
--
--If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
--is created, otherwise an executable program is created."
--  ;;
+-\def\need{\parsearg\needx}
 -
--uninstall)
--  $echo \
--"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+ % Old definition--didn't work.
+-%\def\needx #1{\par %
++%\parseargdef\need{\par %
+ %% This method tries to make TeX break the page naturally
+ %% if the depth of the box does not fit.
+ %{\baselineskip=0pt%
+@@ -598,7 +807,7 @@
+ %\prevdepth=-1000pt
+ %}}
+ 
+-\def\needx#1{%
++\parseargdef\need{%
+   % Ensure vertical mode, so we don't make a big box in the middle of a
+   % paragraph.
+   \par
+@@ -637,37 +846,11 @@
+   \fi
+ }
+ 
+-% @br   forces paragraph break
++% @br   forces paragraph break (and is undocumented).
+ 
+ \let\br = \par
+ 
+-% @dots{} output an ellipsis using the current font.
+-% We do .5em per period so that it has the same spacing in a typewriter
+-% font as three actual period characters.
+-%
+-\def\dots{%
+-  \leavevmode
+-  \hbox to 1.5em{%
+-    \hskip 0pt plus 0.25fil minus 0.25fil
+-    .\hss.\hss.%
+-    \hskip 0pt plus 0.5fil minus 0.5fil
+-  }%
+-}
 -
--Remove libraries from an installation directory.
+-% @enddots{} is an end-of-sentence ellipsis.
+-%
+-\def\enddots{%
+-  \leavevmode
+-  \hbox to 2em{%
+-    \hskip 0pt plus 0.25fil minus 0.25fil
+-    .\hss.\hss.\hss.%
+-    \hskip 0pt plus 0.5fil minus 0.5fil
+-  }%
+-  \spacefactor=3000
+-}
 -
--RM is the name of the program to use to delete files associated with each FILE
--(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
--to RM.
 -
--If FILE is a libtool library, all the files associated with it are deleted.
--Otherwise, only FILE itself is deleted using RM."
--  ;;
+-% @page    forces the start of a new page
++% @page forces the start of a new page.
+ %
+ \def\page{\par\vfill\supereject}
+ 
+@@ -679,57 +862,131 @@
+ \newskip\exdentamount
+ 
+ % This defn is used inside fill environments such as @defun.
+-\def\exdent{\parsearg\exdentyyy}
+-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
++\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+ 
+ % This defn is used inside nofill environments such as @example.
+-\def\nofillexdent{\parsearg\nofillexdentyyy}
+-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+-\leftline{\hskip\leftskip{\rm#1}}}}
 -
--*)
--  $echo "$modename: invalid operation mode \`$mode'" 1>&2
--  $echo "$help" 1>&2
--  exit 1
--  ;;
--esac
+-% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
++\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
++  \leftline{\hskip\leftskip{\rm#1}}}}
+ 
+-\def\inmargin#1{%
+-\strut\vadjust{\nobreak\kern-\strutdepth
+-  \vtop to \strutdepth{\baselineskip\strutdepth\vss
+-  \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
++% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
++% paragraph.  For more general purposes, use the \margin insertion
++% class.  WHICH is `l' or `r'.
++%
+ \newskip\inmarginspacing \inmarginspacing=1cm
+ \def\strutdepth{\dp\strutbox}
++%
++\def\doinmargin#1#2{\strut\vadjust{%
++  \nobreak
++  \kern-\strutdepth
++  \vtop to \strutdepth{%
++    \baselineskip=\strutdepth
++    \vss
++    % if you have multiple lines of stuff to put here, you'll need to
++    % make the vbox yourself of the appropriate size.
++    \ifx#1l%
++      \llap{\ignorespaces #2\hskip\inmarginspacing}%
++    \else
++      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
++    \fi
++    \null
++  }%
++}}
++\def\inleftmargin{\doinmargin l}
++\def\inrightmargin{\doinmargin r}
++%
++% @inmargin{TEXT [, RIGHT-TEXT]}
++% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
++% else use TEXT for both).
++%
++\def\inmargin#1{\parseinmargin #1,,\finish}
++\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
++  \setbox0 = \hbox{\ignorespaces #2}%
++  \ifdim\wd0 > 0pt
++    \def\lefttext{#1}%  have both texts
++    \def\righttext{#2}%
++  \else
++    \def\lefttext{#1}%  have only one text
++    \def\righttext{#1}%
++  \fi
++  %
++  \ifodd\pageno
++    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
++  \else
++    \def\temp{\inleftmargin\lefttext}%
++  \fi
++  \temp
++}
+ 
+-%\hbox{{\rm#1}}\hfil\break}}
 -
--echo
--$echo "Try \`$modename --help' for more information about other modes."
-+exit $exit_status
+-% @include file    insert text of that file as input.
+-% Allow normal characters that  we make active in the argument (a file name).
+-\def\include{\begingroup
+-  \catcode`\\=12
+-  \catcode`~=12
+-  \catcode`^=12
+-  \catcode`_=12
+-  \catcode`|=12
+-  \catcode`<=12
+-  \catcode`>=12
+-  \catcode`+=12
+-  \parsearg\includezzz}
+-% Restore active chars for included file.
+-\def\includezzz#1{\endgroup\begingroup
+-  % Read the included file in a group so nested @include's work.
++% @include FILE -- \input text of FILE.
++%
++\def\include{\parseargusing\filenamecatcodes\includezzz}
++\def\includezzz#1{%
++  \pushthisfilestack
+   \def\thisfile{#1}%
+-  \input\thisfile
+-\endgroup}
++  {%
++    \makevalueexpandable  % we want to expand any @value in FILE.
++    \turnoffactive        % and allow special characters in the expansion
++    \edef\temp{\noexpand\input #1 }%
++    %
++    % This trickery is to read FILE outside of a group, in case it makes
++    % definitions, etc.
++    \expandafter
++  }\temp
++  \popthisfilestack
++}
++\def\filenamecatcodes{%
++  \catcode`\\=\other
++  \catcode`~=\other
++  \catcode`^=\other
++  \catcode`_=\other
++  \catcode`|=\other
++  \catcode`<=\other
++  \catcode`>=\other
++  \catcode`+=\other
++  \catcode`-=\other
++}
  
--exit 0
+-\def\thisfile{}
++\def\pushthisfilestack{%
++  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
++}
++\def\pushthisfilestackX{%
++  \expandafter\pushthisfilestackY\thisfile\StackTerm
++}
++\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
++  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
++}
  
- # The TAGs below are defined such that we never get into a situation
- # in which we disable both kinds of libraries.  Given conflicting
-@@ -5461,16 +9619,18 @@
- # If a disable-shared tag is given, we'll fallback to a static-only
- # configuration.  But we'll never go from static-only to shared-only.
+-% @center line   outputs that line, centered
++\def\popthisfilestack{\errthisfilestackempty}
++\def\errthisfilestackempty{\errmessage{Internal error:
++  the stack of filenames is empty.}}
  
--### BEGIN LIBTOOL TAG CONFIG: disable-shared
-+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
- build_libtool_libs=no
- build_old_libs=yes
--### END LIBTOOL TAG CONFIG: disable-shared
-+# ### END LIBTOOL TAG CONFIG: disable-shared
+-\def\center{\parsearg\centerzzz}
+-\def\centerzzz #1{{\advance\hsize by -\leftskip
+-\advance\hsize by -\rightskip
+-\centerline{#1}}}
++\def\thisfile{}
++
++% @center line
++% outputs that line, centered.
++%
++\parseargdef\center{%
++  \ifhmode
++    \let\next\centerH
++  \else
++    \let\next\centerV
++  \fi
++  \next{\hfil \ignorespaces#1\unskip \hfil}%
++}
++\def\centerH#1{%
++  {%
++    \hfil\break
++    \advance\hsize by -\leftskip
++    \advance\hsize by -\rightskip
++    \line{#1}%
++    \break
++  }%
++}
++\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
  
--### BEGIN LIBTOOL TAG CONFIG: disable-static
-+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
- build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
--### END LIBTOOL TAG CONFIG: disable-static
-+# ### END LIBTOOL TAG CONFIG: disable-static
+ % @sp n   outputs n lines of vertical space
  
- # Local Variables:
- # mode:shell-script
- # sh-indentation:2
- # End:
-+# vi:sw=2
+-\def\sp{\parsearg\spxxx}
+-\def\spxxx #1{\vskip #1\baselineskip}
++\parseargdef\sp{\vskip #1\baselineskip}
+ 
+ % @comment ...line which is ignored...
+ % @c is the same as @comment
+@@ -744,13 +1001,13 @@
+ 
+ % @paragraphindent NCHARS
+ % We'll use ems for NCHARS, close enough.
+-% We cannot implement @paragraphindent asis, though.
+-% 
++% NCHARS can also be the word `asis' or `none'.
++% We cannot feasibly implement @paragraphindent asis, though.
++%
+ \def\asisword{asis} % no translation, these are keywords
+ \def\noneword{none}
+ %
+-\def\paragraphindent{\parsearg\doparagraphindent}
+-\def\doparagraphindent#1{%
++\parseargdef\paragraphindent{%
+   \def\temp{#1}%
+   \ifx\temp\asisword
+   \else
+@@ -767,8 +1024,7 @@
+ % We'll use ems for NCHARS like @paragraphindent.
+ % It seems @exampleindent asis isn't necessary, but
+ % I preserve it to make it similar to @paragraphindent.
+-\def\exampleindent{\parsearg\doexampleindent}
+-\def\doexampleindent#1{%
++\parseargdef\exampleindent{%
+   \def\temp{#1}%
+   \ifx\temp\asisword
+   \else
+@@ -780,26 +1036,159 @@
+   \fi
+ }
+ 
++% @firstparagraphindent WORD
++% If WORD is `none', then suppress indentation of the first paragraph
++% after a section heading.  If WORD is `insert', then do indent at such
++% paragraphs.
++%
++% The paragraph indentation is suppressed or not by calling
++% \suppressfirstparagraphindent, which the sectioning commands do.
++% We switch the definition of this back and forth according to WORD.
++% By default, we suppress indentation.
++%
++\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
++\def\insertword{insert}
++%
++\parseargdef\firstparagraphindent{%
++  \def\temp{#1}%
++  \ifx\temp\noneword
++    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
++  \else\ifx\temp\insertword
++    \let\suppressfirstparagraphindent = \relax
++  \else
++    \errhelp = \EMsimple
++    \errmessage{Unknown @firstparagraphindent option `\temp'}%
++  \fi\fi
++}
++
++% Here is how we actually suppress indentation.  Redefine \everypar to
++% \kern backwards by \parindent, and then reset itself to empty.
++%
++% We also make \indent itself not actually do anything until the next
++% paragraph.
++%
++\gdef\dosuppressfirstparagraphindent{%
++  \gdef\indent{%
++    \restorefirstparagraphindent
++    \indent
++  }%
++  \gdef\noindent{%
++    \restorefirstparagraphindent
++    \noindent
++  }%
++  \global\everypar = {%
++    \kern -\parindent
++    \restorefirstparagraphindent
++  }%
++}
 +
---- ./install.sh.orig	1999-12-06 15:43:54.000000000 -0700
-+++ ./install.sh	2012-01-09 20:36:31.871118727 -0700
-@@ -1,19 +1,38 @@
--#! /bin/sh
--#
-+#!/bin/sh
- # install - install a program, script, or datafile
--# This comes from X11R5 (mit/util/scripts/install.sh).
++\gdef\restorefirstparagraphindent{%
++  \global \let \indent = \ptexindent
++  \global \let \noindent = \ptexnoindent
++  \global \everypar = {}%
++}
 +
-+scriptversion=2009-04-28.21; # UTC
 +
-+# This originates from X11R5 (mit/util/scripts/install.sh), which was
-+# later released in X11R6 (xc/config/util/install.sh) with the
-+# following copyright and license.
- #
--# Copyright 1991 by the Massachusetts Institute of Technology
-+# Copyright (C) 1994 X Consortium
- #
--# Permission to use, copy, modify, distribute, and sell this software and its
--# documentation for any purpose is hereby granted without fee, provided that
--# the above copyright notice appear in all copies and that both that
--# copyright notice and this permission notice appear in supporting
--# documentation, and that the name of M.I.T. not be used in advertising or
--# publicity pertaining to distribution of the software without specific,
--# written prior permission.  M.I.T. makes no representations about the
--# suitability of this software for any purpose.  It is provided "as is"
--# without express or implied warranty.
-+# Permission is hereby granted, free of charge, to any person obtaining a copy
-+# of this software and associated documentation files (the "Software"), to
-+# deal in the Software without restriction, including without limitation the
-+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-+# sell copies of the Software, and to permit persons to whom the Software is
-+# furnished to do so, subject to the following conditions:
-+#
-+# The above copyright notice and this permission notice shall be included in
-+# all copies or substantial portions of the Software.
-+#
-+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+#
-+# Except as contained in this notice, the name of the X Consortium shall not
-+# be used in advertising or otherwise to promote the sale, use or other deal-
-+# ings in this Software without prior written authorization from the X Consor-
-+# tium.
-+#
-+#
-+# FSF changes to this file are in the public domain.
- #
- # Calling this script install-sh is preferred over install.sh, to prevent
- # `make' implicit rules from creating a file called install from it
-@@ -21,230 +40,481 @@
- #
- # This script is compatible with the BSD install script, but was written
- # from scratch.
--#
- 
-+nl='
-+'
-+IFS=" ""	$nl"
- 
- # set DOITPROG to echo to test this script
- 
- # Don't use :- since 4.3BSD and earlier shells don't like it.
--doit="${DOITPROG-}"
-+doit=${DOITPROG-}
-+if test -z "$doit"; then
-+  doit_exec=exec
-+else
-+  doit_exec=$doit
-+fi
- 
-+# Put in absolute file names if you don't have them in your path;
-+# or use environment vars.
+ % @asis just yields its argument.  Used with @table, for example.
+ %
+ \def\asis#1{#1}
  
--# put in absolute paths if you don't have them in your path; or use env. vars.
-+chgrpprog=${CHGRPPROG-chgrp}
-+chmodprog=${CHMODPROG-chmod}
-+chownprog=${CHOWNPROG-chown}
-+cmpprog=${CMPPROG-cmp}
-+cpprog=${CPPROG-cp}
-+mkdirprog=${MKDIRPROG-mkdir}
-+mvprog=${MVPROG-mv}
-+rmprog=${RMPROG-rm}
-+stripprog=${STRIPPROG-strip}
+-% @math means output in math mode.
+-% We don't use $'s directly in the definition of \math because control
+-% sequences like \math are expanded when the toc file is written.  Then,
+-% we read the toc file back, the $'s will be normal characters (as they
+-% should be, according to the definition of Texinfo).  So we must use a
+-% control sequence to switch into and out of math mode.
++% @math outputs its argument in math mode.
+ %
+-% This isn't quite enough for @math to work properly in indices, but it
+-% seems unlikely it will ever be needed there.
++% One complication: _ usually means subscripts, but it could also mean
++% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
++% _ active, and distinguish by seeing if the current family is \slfam,
++% which is what @var uses.
++{
++  \catcode`\_ = \active
++  \gdef\mathunderscore{%
++    \catcode`\_=\active
++    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
++  }
++}
++% Another complication: we want \\ (and @\) to output a \ character.
++% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
++% this is not advertised and we don't care.  Texinfo does not
++% otherwise define @\.
+ %
+-\let\implicitmath = $
+-\def\math#1{\implicitmath #1\implicitmath}
++% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
++\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
++%
++\def\math{%
++  \tex
++  \mathunderscore
++  \let\\ = \mathbackslash
++  \mathactive
++  % make the texinfo accent commands work in math mode
++  \let\"=\ddot
++  \let\'=\acute
++  \let\==\bar
++  \let\^=\hat
++  \let\`=\grave
++  \let\u=\breve
++  \let\v=\check
++  \let\~=\tilde
++  \let\dotaccent=\dot
++  $\finishmath
++}
++\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
  
--mvprog="${MVPROG-mv}"
--cpprog="${CPPROG-cp}"
--chmodprog="${CHMODPROG-chmod}"
--chownprog="${CHOWNPROG-chown}"
--chgrpprog="${CHGRPPROG-chgrp}"
--stripprog="${STRIPPROG-strip}"
--rmprog="${RMPROG-rm}"
--mkdirprog="${MKDIRPROG-mkdir}"
-+posix_glob='?'
-+initialize_posix_glob='
-+  test "$posix_glob" != "?" || {
-+    if (set -f) 2>/dev/null; then
-+      posix_glob=
-+    else
-+      posix_glob=:
-+    fi
+-% @bullet and @minus need the same treatment as @math, just above.
+-\def\bullet{\implicitmath\ptexbullet\implicitmath}
+-\def\minus{\implicitmath-\implicitmath}
++% Some active characters (such as <) are spaced differently in math.
++% We have to reset their definitions in case the @math was an argument
++% to a command which sets the catcodes (such as @item or @section).
++%
++{
++  \catcode`^ = \active
++  \catcode`< = \active
++  \catcode`> = \active
++  \catcode`+ = \active
++  \gdef\mathactive{%
++    \let^ = \ptexhat
++    \let< = \ptexless
++    \let> = \ptexgtr
++    \let+ = \ptexplus
 +  }
-+'
++}
++
++% Some math mode symbols.
++\def\bullet{$\ptexbullet$}
++\def\geq{\ifmmode \ge\else $\ge$\fi}
++\def\leq{\ifmmode \le\else $\le$\fi}
++\def\minus{\ifmmode -\else $-$\fi}
++
++% @dots{} outputs an ellipsis using the current font.
++% We do .5em per period so that it has the same spacing in the cm
++% typewriter fonts as three actual period characters; on the other hand,
++% in other typewriter fonts three periods are wider than 1.5em.  So do
++% whichever is larger.
++%
++\def\dots{%
++  \leavevmode
++  \setbox0=\hbox{...}% get width of three periods
++  \ifdim\wd0 > 1.5em
++    \dimen0 = \wd0
++  \else
++    \dimen0 = 1.5em
++  \fi
++  \hbox to \dimen0{%
++    \hskip 0pt plus.25fil
++    .\hskip 0pt plus1fil
++    .\hskip 0pt plus1fil
++    .\hskip 0pt plus.5fil
++  }%
++}
++
++% @enddots{} is an end-of-sentence ellipsis.
++%
++\def\enddots{%
++  \dots
++  \spacefactor=\endofsentencespacefactor
++}
++
++% @comma{} is so commas can be inserted into text without messing up
++% Texinfo's parsing.
++%
++\let\comma = ,
+ 
+ % @refill is a no-op.
+ \let\refill=\relax
+@@ -815,20 +1204,20 @@
+ % So open here the files we need to have open while reading the input.
+ % This makes it possible to make a .fmt file for texinfo.
+ \def\setfilename{%
++   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+    \iflinks
+-     \readauxfile
++     \tryauxfile
++     % Open the new aux file.  TeX will close it automatically at exit.
++     \immediate\openout\auxfile=\jobname.aux
+    \fi % \openindices needs to do some work in any case.
+    \openindices
+-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
++   \let\setfilename=\comment % Ignore extra @setfilename cmds.
+    %
+    % If texinfo.cnf is present on the system, read it.
+    % Useful for site-wide @afourpaper, etc.
+-   % Just to be on the safe side, close the input stream before the \input.
+    \openin 1 texinfo.cnf
+-   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
+-   \closein1
+-   \temp
++   \ifeof 1 \else \input texinfo.cnf \fi
++   \closein 1
+    %
+    \comment % Ignore the actual filename.
+ }
+@@ -864,111 +1253,294 @@
+ \newif\ifpdf
+ \newif\ifpdfmakepagedest
  
--transformbasename=""
--transform_arg=""
--instcmd="$mvprog"
--chmodcmd="$chmodprog 0755"
--chowncmd=""
--chgrpcmd=""
--stripcmd=""
-+posix_mkdir=
++% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
++% can be set).  So we test for \relax and 0 as well as \undefined,
++% borrowed from ifpdf.sty.
+ \ifx\pdfoutput\undefined
+-  \pdffalse
+-  \let\pdfmkdest = \gobble
+-  \let\pdfurl = \gobble
+-  \let\endlink = \relax
+-  \let\linkcolor = \relax
+-  \let\pdfmakeoutlines = \relax
+ \else
+-  \pdftrue
+-  \pdfoutput = 1
+-  \input pdfcolor
++  \ifx\pdfoutput\relax
++  \else
++    \ifcase\pdfoutput
++    \else
++      \pdftrue
++    \fi
++  \fi
++\fi
 +
-+# Desired mode of installed file.
-+mode=0755
++% PDF uses PostScript string constants for the names of xref targets,
++% for display in the outlines, and in other places.  Thus, we have to
++% double any backslashes.  Otherwise, a name like "\node" will be
++% interpreted as a newline (\n), followed by o, d, e.  Not good.
++% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
++% (and related messages, the final outcome is that it is up to the TeX
++% user to double the backslashes and otherwise make the string valid, so
++% that's what we do).
 +
-+chgrpcmd=
-+chmodcmd=$chmodprog
-+chowncmd=
-+mvcmd=$mvprog
- rmcmd="$rmprog -f"
--mvcmd="$mvprog"
--src=""
--dst=""
--dir_arg=""
-+stripcmd=
- 
--while [ x"$1" != x ]; do
--    case $1 in
--	-c) instcmd="$cpprog"
--	    shift
--	    continue;;
-+src=
-+dst=
-+dir_arg=
-+dst_arg=
- 
--	-d) dir_arg=true
--	    shift
--	    continue;;
-+copy_on_change=false
-+no_target_directory=
- 
--	-m) chmodcmd="$chmodprog $2"
--	    shift
--	    shift
--	    continue;;
-+usage="\
-+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-+   or: $0 [OPTION]... SRCFILES... DIRECTORY
-+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-+   or: $0 [OPTION]... -d DIRECTORIES...
- 
--	-o) chowncmd="$chownprog $2"
--	    shift
--	    shift
--	    continue;;
-+In the 1st form, copy SRCFILE to DSTFILE.
-+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-+In the 4th, create DIRECTORIES.
- 
--	-g) chgrpcmd="$chgrpprog $2"
--	    shift
--	    shift
--	    continue;;
-+Options:
-+     --help     display this help and exit.
-+     --version  display version info and exit.
- 
--	-s) stripcmd="$stripprog"
--	    shift
--	    continue;;
-+  -c            (ignored)
-+  -C            install only if different (preserve the last data modification time)
-+  -d            create directories instead of installing files.
-+  -g GROUP      $chgrpprog installed files to GROUP.
-+  -m MODE       $chmodprog installed files to MODE.
-+  -o USER       $chownprog installed files to USER.
-+  -s            $stripprog installed files.
-+  -t DIRECTORY  install into DIRECTORY.
-+  -T            report an error if DSTFILE is a directory.
- 
--	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
--	    shift
--	    continue;;
-+Environment variables override the default commands:
-+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-+  RMPROG STRIPPROG
-+"
++% double active backslashes.
++% 
++{\catcode`\@=0 \catcode`\\=\active
++ @gdef at activebackslashdouble{%
++   @catcode`@\=@active
++   @let\=@doublebackslash}
++}
++
++% To handle parens, we must adopt a different approach, since parens are
++% not active characters.  hyperref.dtx (which has the same problem as
++% us) handles it with this amazing macro to replace tokens, with minor
++% changes for Texinfo.  It is included here under the GPL by permission
++% from the author, Heiko Oberdiek.
++% 
++% #1 is the tokens to replace.
++% #2 is the replacement.
++% #3 is the control sequence with the string.
++% 
++\def\HyPsdSubst#1#2#3{%
++  \def\HyPsdReplace##1#1##2\END{%
++    ##1%
++    \ifx\\##2\\%
++    \else
++      #2%
++      \HyReturnAfterFi{%
++        \HyPsdReplace##2\END
++      }%
++    \fi
++  }%
++  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
++}
++\long\def\HyReturnAfterFi#1\fi{\fi#1}
++
++% #1 is a control sequence in which to do the replacements.
++\def\backslashparens#1{%
++  \xdef#1{#1}% redefine it as its expansion; the definition is simply
++             % \lastnode when called from \setref -> \pdfmkdest.
++  \HyPsdSubst{(}{\realbackslash(}{#1}%
++  \HyPsdSubst{)}{\realbackslash)}{#1}%
++}
++
++\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
++with PDF output, and none of those formats could be found.  (.eps cannot
++be supported due to the design of the PDF format; use regular TeX (DVI
++output) for that.)}
++
++\ifpdf
++  %
++  % Color manipulation macros based on pdfcolor.tex.
++  \def\cmykDarkRed{0.28 1 1 0.35}
++  \def\cmykBlack{0 0 0 1}
++  %
++  \def\pdfsetcolor#1{\pdfliteral{#1 k}}
++  % Set color, and create a mark which defines \thiscolor accordingly,
++  % so that \makeheadline knows which color to restore.
++  \def\setcolor#1{%
++    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
++    \domark
++    \pdfsetcolor{#1}%
++  }
++  %
++  \def\maincolor{\cmykBlack}
++  \pdfsetcolor{\maincolor}
++  \edef\thiscolor{\maincolor}
++  \def\lastcolordefs{}
++  %
++  \def\makefootline{%
++    \baselineskip24pt
++    \line{\pdfsetcolor{\maincolor}\the\footline}%
++  }
++  %
++  \def\makeheadline{%
++    \vbox to 0pt{%
++      \vskip-22.5pt
++      \line{%
++        \vbox to8.5pt{}%
++        % Extract \thiscolor definition from the marks.
++        \getcolormarks
++        % Typeset the headline with \maincolor, then restore the color.
++        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
++      }%
++      \vss
++    }%
++    \nointerlineskip
++  }
++  %
++  %
++  \pdfcatalog{/PageMode /UseOutlines}
++  %
++  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+   \def\dopdfimage#1#2#3{%
+-    \def\imagewidth{#2}%
+-    \def\imageheight{#3}%
++    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
++    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
++    %
++    % pdftex (and the PDF format) support .png, .jpg, .pdf (among
++    % others).  Let's try in that order.
++    \let\pdfimgext=\empty
++    \begingroup
++      \openin 1 #1.png \ifeof 1
++        \openin 1 #1.jpg \ifeof 1
++          \openin 1 #1.jpeg \ifeof 1
++            \openin 1 #1.JPG \ifeof 1
++              \openin 1 #1.pdf \ifeof 1
++                \openin 1 #1.PDF \ifeof 1
++                  \errhelp = \nopdfimagehelp
++                  \errmessage{Could not find image file #1 for pdf}%
++                \else \gdef\pdfimgext{PDF}%
++                \fi
++              \else \gdef\pdfimgext{pdf}%
++              \fi
++            \else \gdef\pdfimgext{JPG}%
++            \fi
++          \else \gdef\pdfimgext{jpeg}%
++          \fi
++        \else \gdef\pdfimgext{jpg}%
++        \fi
++      \else \gdef\pdfimgext{png}%
++      \fi
++      \closein 1
++    \endgroup
++    %
++    % without \immediate, ancient pdftex seg faults when the same image is
++    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
+     \ifnum\pdftexversion < 14
+-      \pdfimage
++      \immediate\pdfimage
+     \else
+-      \pdfximage
++      \immediate\pdfximage
+     \fi
+-      \ifx\empty\imagewidth\else width \imagewidth \fi
+-      \ifx\empty\imageheight\else height \imageheight \fi
+-      {#1.pdf}%
++      \ifdim \wd0 >0pt width \imagewidth \fi
++      \ifdim \wd2 >0pt height \imageheight \fi
++      \ifnum\pdftexversion<13
++         #1.\pdfimgext
++       \else
++         {#1.\pdfimgext}%
++       \fi
+     \ifnum\pdftexversion < 14 \else
+       \pdfrefximage \pdflastximage
+     \fi}
+-  \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
+-  \def\pdfmkpgn#1{#1@}
+-  \let\linkcolor = \Cyan
+-  \def\endlink{\Black\pdfendlink}
++  %
++  \def\pdfmkdest#1{{%
++    % We have to set dummies so commands such as @code, and characters
++    % such as \, aren't expanded when present in a section title.
++    \indexnofonts
++    \turnoffactive
++    \activebackslashdouble
++    \makevalueexpandable
++    \def\pdfdestname{#1}%
++    \backslashparens\pdfdestname
++    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
++  }}
++  %
++  % used to mark target names; must be expandable.
++  \def\pdfmkpgn#1{#1}
++  %
++  % by default, use a color that is dark enough to print on paper as
++  % nearly black, but still distinguishable for online viewing.
++  \def\urlcolor{\cmykDarkRed}
++  \def\linkcolor{\cmykDarkRed}
++  \def\endlink{\setcolor{\maincolor}\pdfendlink}
++  %
+   % Adding outlines to PDF; macros for calculating structure of outlines
+   % come from Petr Olsak
+   \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+     \else \csname#1\endcsname \fi}
+   \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+-    \advance\tempnum by1
++    \advance\tempnum by 1
+     \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+-  \def\pdfmakeoutlines{{%
+-    \openin 1 \jobname.toc
+-    \ifeof 1\else\bgroup
+-      \closein 1 
+-      \indexnofonts
+-      \def\tt{}
+-      % thanh's hack / proper braces in bookmarks  
+-      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+-      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+-      %
+-      \def\chapentry ##1##2##3{}
+-      \def\unnumbchapentry ##1##2{}
+-      \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
+-      \def\unnumbsecentry ##1##2{}
+-      \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
+-      \def\unnumbsubsecentry ##1##2{}
+-      \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
+-      \def\unnumbsubsubsecentry ##1##2{}
+-      \input \jobname.toc
+-      \def\chapentry ##1##2##3{%
+-        \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+-      \def\unnumbchapentry ##1##2{%
+-        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+-      \def\secentry ##1##2##3##4{%
+-        \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
+-      \def\unnumbsecentry ##1##2{%
+-        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+-      \def\subsecentry ##1##2##3##4##5{%
+-        \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
+-      \def\unnumbsubsecentry ##1##2{%
+-        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+-      \def\subsubsecentry ##1##2##3##4##5##6{%
+-        \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
+-      \def\unnumbsubsubsecentry ##1##2{%
+-        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
+-      \input \jobname.toc
+-    \egroup\fi
+-  }}
+-  \def\makelinks #1,{%
+-    \def\params{#1}\def\E{END}%
+-    \ifx\params\E
+-      \let\nextmakelinks=\relax
++  %
++  % #1 is the section text, which is what will be displayed in the
++  % outline by the pdf viewer.  #2 is the pdf expression for the number
++  % of subentries (or empty, for subsubsections).  #3 is the node text,
++  % which might be empty if this toc entry had no corresponding node.
++  % #4 is the page number
++  %
++  \def\dopdfoutline#1#2#3#4{%
++    % Generate a link to the node text if that exists; else, use the
++    % page number.  We could generate a destination for the section
++    % text in the case where a section has no node, but it doesn't
++    % seem worth the trouble, since most documents are normally structured.
++    \def\pdfoutlinedest{#3}%
++    \ifx\pdfoutlinedest\empty
++      \def\pdfoutlinedest{#4}%
+     \else
+-      \let\nextmakelinks=\makelinks
+-      \ifnum\lnkcount>0,\fi
+-      \picknum{#1}%
+-      \startlink attr{/Border [0 0 0]} 
+-        goto name{\pdfmkpgn{\the\pgn}}%
+-      \linkcolor #1%
+-      \advance\lnkcount by 1%
+-      \endlink
++      % Doubled backslashes in the name.
++      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
++       \backslashparens\pdfoutlinedest}%
+     \fi
+-    \nextmakelinks
++    %
++    % Also double the backslashes in the display string.
++    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
++     \backslashparens\pdfoutlinetext}%
++    %
++    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+   }
+-  \def\picknum#1{\expandafter\pn#1}
+-  \def\pn#1{%
+-    \def\p{#1}%
+-    \ifx\p\lbrace
+-      \let\nextpn=\ppn
+-    \else
+-      \let\nextpn=\ppnn
+-      \def\first{#1}
+-    \fi
+-    \nextpn
++  %
++  \def\pdfmakeoutlines{%
++    \begingroup
++      % Thanh's hack / proper braces in bookmarks
++      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
++      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
++      %
++      % Read toc silently, to get counts of subentries for \pdfoutline.
++      \def\numchapentry##1##2##3##4{%
++	\def\thischapnum{##2}%
++	\def\thissecnum{0}%
++	\def\thissubsecnum{0}%
++      }%
++      \def\numsecentry##1##2##3##4{%
++	\advancenumber{chap\thischapnum}%
++	\def\thissecnum{##2}%
++	\def\thissubsecnum{0}%
++      }%
++      \def\numsubsecentry##1##2##3##4{%
++	\advancenumber{sec\thissecnum}%
++	\def\thissubsecnum{##2}%
++      }%
++      \def\numsubsubsecentry##1##2##3##4{%
++	\advancenumber{subsec\thissubsecnum}%
++      }%
++      \def\thischapnum{0}%
++      \def\thissecnum{0}%
++      \def\thissubsecnum{0}%
++      %
++      % use \def rather than \let here because we redefine \chapentry et
++      % al. a second time, below.
++      \def\appentry{\numchapentry}%
++      \def\appsecentry{\numsecentry}%
++      \def\appsubsecentry{\numsubsecentry}%
++      \def\appsubsubsecentry{\numsubsubsecentry}%
++      \def\unnchapentry{\numchapentry}%
++      \def\unnsecentry{\numsecentry}%
++      \def\unnsubsecentry{\numsubsecentry}%
++      \def\unnsubsubsecentry{\numsubsubsecentry}%
++      \readdatafile{toc}%
++      %
++      % Read toc second time, this time actually producing the outlines.
++      % The `-' means take the \expnumber as the absolute number of
++      % subentries, which we calculated on our first read of the .toc above.
++      %
++      % We use the node names as the destinations.
++      \def\numchapentry##1##2##3##4{%
++        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
++      \def\numsecentry##1##2##3##4{%
++        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
++      \def\numsubsecentry##1##2##3##4{%
++        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
++      \def\numsubsubsecentry##1##2##3##4{% count is always zero
++        \dopdfoutline{##1}{}{##3}{##4}}%
++      %
++      % PDF outlines are displayed using system fonts, instead of
++      % document fonts.  Therefore we cannot use special characters,
++      % since the encoding is unknown.  For example, the eogonek from
++      % Latin 2 (0xea) gets translated to a | character.  Info from
++      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
++      %
++      % xx to do this right, we have to translate 8-bit characters to
++      % their "best" equivalent, based on the @documentencoding.  Right
++      % now, I guess we'll just let the pdf reader have its way.
++      \indexnofonts
++      \setupdatafile
++      \catcode`\\=\active \otherbackslash
++      \input \tocreadfilename
++    \endgroup
+   }
+-  \def\ppn#1{\pgn=#1\gobble}
+-  \def\ppnn{\pgn=\first}
+-  \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+-  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
++  %
+   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+     \ifx\PP\D\let\nextsp\relax
+     \else\let\nextsp\skipspaces
+@@ -983,24 +1555,32 @@
+   \else
+     \let \startlink \pdfstartlink
+   \fi
++  % make a live url in pdf output.
+   \def\pdfurl#1{%
+     \begingroup
+-      \normalturnoffactive\def\@{@}%
+-      \leavevmode\Red
++      % it seems we really need yet another set of dummies; have not
++      % tried to figure out what each command should do in the context
++      % of @url.  for now, just make @/ a no-op, that's the only one
++      % people have actually reported a problem with.
++      % 
++      \normalturnoffactive
++      \def\@{@}%
++      \let\/=\empty
++      \makevalueexpandable
++      \leavevmode\setcolor{\urlcolor}%
+       \startlink attr{/Border [0 0 0]}%
+         user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+-        % #1
+     \endgroup}
+   \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+   \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+   \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+   \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+   \def\maketoks{%
+-    \expandafter\poptoks\the\toksA|ENDTOKS|
++    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+     \ifx\first0\adn0
+     \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+     \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+-    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 
++    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+     \else
+       \ifnum0=\countA\else\makelink\fi
+       \ifx\first.\let\next=\done\else
+@@ -1013,33 +1593,348 @@
+   \def\makelink{\addtokens{\toksB}%
+     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+   \def\pdflink#1{%
+-    \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
+-    \linkcolor #1\endlink}
+-  \def\mkpgn#1{#1@} 
++    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
++    \setcolor{\linkcolor}#1\endlink}
+   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+-\fi % \ifx\pdfoutput
++\else
++  \let\pdfmkdest = \gobble
++  \let\pdfurl = \gobble
++  \let\endlink = \relax
++  \let\setcolor = \gobble
++  \let\pdfsetcolor = \gobble
++  \let\pdfmakeoutlines = \relax
++\fi  % \ifx\pdfoutput
  
--	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
--	    shift
--	    continue;;
-+while test $# -ne 0; do
-+  case $1 in
-+    -c) ;;
  
--	*)  if [ x"$src" = x ]
--	    then
--		src=$1
--	    else
--		# this colon is to work around a 386BSD /bin/sh bug
--		:
--		dst=$1
--	    fi
--	    shift
--	    continue;;
--    esac
-+    -C) copy_on_change=true;;
-+
-+    -d) dir_arg=true;;
-+
-+    -g) chgrpcmd="$chgrpprog $2"
-+	shift;;
-+
-+    --help) echo "$usage"; exit $?;;
-+
-+    -m) mode=$2
-+	case $mode in
-+	  *' '* | *'	'* | *'
-+'*	  | *'*'* | *'?'* | *'['*)
-+	    echo "$0: invalid mode: $mode" >&2
-+	    exit 1;;
-+	esac
-+	shift;;
+ \message{fonts,}
+-% Font-change commands.
 +
-+    -o) chowncmd="$chownprog $2"
-+	shift;;
++% Change the current font style to #1, remembering it in \curfontstyle.
++% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
++% italics, not bold italics.
++%
++\def\setfontstyle#1{%
++  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
++  \csname ten#1\endcsname  % change the current font
++}
 +
-+    -s) stripcmd=$stripprog;;
++% Select #1 fonts with the current style.
++%
++\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
 +
-+    -t) dst_arg=$2
-+	shift;;
++\def\rm{\fam=0 \setfontstyle{rm}}
++\def\it{\fam=\itfam \setfontstyle{it}}
++\def\sl{\fam=\slfam \setfontstyle{sl}}
++\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
++\def\tt{\fam=\ttfam \setfontstyle{tt}}
+ 
+ % Texinfo sort of supports the sans serif font style, which plain TeX does not.
+-% So we set up a \sf analogous to plain's \rm, etc.
++% So we set up a \sf.
+ \newfam\sffam
+-\def\sf{\fam=\sffam \tensf}
++\def\sf{\fam=\sffam \setfontstyle{sf}}
+ \let\li = \sf % Sometimes we call it \li, not \sf.
+ 
+-% We don't need math for this one.
+-\def\ttsl{\tenttsl}
++% We don't need math for this font style.
++\def\ttsl{\setfontstyle{ttsl}}
 +
-+    -T) no_target_directory=true;;
 +
-+    --version) echo "$0 $scriptversion"; exit $?;;
++% Default leading.
++\newdimen\textleading  \textleading = 13.2pt
 +
-+    --)	shift
-+	break;;
++% Set the baselineskip to #1, and the lineskip and strut size
++% correspondingly.  There is no deep meaning behind these magic numbers
++% used as factors; they just match (closely enough) what Knuth defined.
++%
++\def\lineskipfactor{.08333}
++\def\strutheightpercent{.70833}
++\def\strutdepthpercent {.29167}
++%
++% can get a sort of poor man's double spacing by redefining this.
++\def\baselinefactor{1}
++%
++\def\setleading#1{%
++  \dimen0 = #1\relax
++  \normalbaselineskip = \baselinefactor\dimen0
++  \normallineskip = \lineskipfactor\normalbaselineskip
++  \normalbaselines
++  \setbox\strutbox =\hbox{%
++    \vrule width0pt height\strutheightpercent\baselineskip
++                    depth \strutdepthpercent \baselineskip
++  }%
++}
 +
-+    -*)	echo "$0: invalid option: $1" >&2
-+	exit 1;;
++% PDF CMaps.  See also LaTeX's t1.cmap.
++%
++% do nothing with this by default.
++\expandafter\let\csname cmapOT1\endcsname\gobble
++\expandafter\let\csname cmapOT1IT\endcsname\gobble
++\expandafter\let\csname cmapOT1TT\endcsname\gobble
 +
-+    *)  break;;
-+  esac
-+  shift
- done
- 
--if [ x"$src" = x ]
--then
--	echo "install:	no input file specified"
--	exit 1
--else
--	true
-+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-+  # When -d is used, all remaining arguments are directories to create.
-+  # When -t is used, the destination is already specified.
-+  # Otherwise, the last argument is the destination.  Remove it from $@.
-+  for arg
-+  do
-+    if test -n "$dst_arg"; then
-+      # $@ is not empty: it contains at least $arg.
-+      set fnord "$@" "$dst_arg"
-+      shift # fnord
-+    fi
-+    shift # arg
-+    dst_arg=$arg
-+  done
- fi
- 
--if [ x"$dir_arg" != x ]; then
--	dst=$src
--	src=""
--	
--	if [ -d $dst ]; then
--		instcmd=:
--	else
--		instcmd=mkdir
--	fi
--else
--
--# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
--# might cause directories to be created, which would be especially bad 
--# if $src (and thus $dsttmp) contains '*'.
-+if test $# -eq 0; then
-+  if test -z "$dir_arg"; then
-+    echo "$0: no input file specified." >&2
-+    exit 1
-+  fi
-+  # It's OK to call `install-sh -d' without argument.
-+  # This can happen when creating conditional directories.
-+  exit 0
-+fi
++% if we are producing pdf, and we have \pdffontattr, then define cmaps.
++% (\pdffontattr was introduced many years ago, but people still run
++% older pdftex's; it's easy to conditionalize, so we do.)
++\ifpdf \ifx\pdffontattr\undefined \else
++  \begingroup
++    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
++    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
++%%DocumentNeededResources: ProcSet (CIDInit)
++%%IncludeResource: ProcSet (CIDInit)
++%%BeginResource: CMap (TeX-OT1-0)
++%%Title: (TeX-OT1-0 TeX OT1 0)
++%%Version: 1.000
++%%EndComments
++/CIDInit /ProcSet findresource begin
++12 dict begin
++begincmap
++/CIDSystemInfo
++<< /Registry (TeX)
++/Ordering (OT1)
++/Supplement 0
++>> def
++/CMapName /TeX-OT1-0 def
++/CMapType 2 def
++1 begincodespacerange
++<00> <7F>
++endcodespacerange
++8 beginbfrange
++<00> <01> <0393>
++<09> <0A> <03A8>
++<23> <26> <0023>
++<28> <3B> <0028>
++<3F> <5B> <003F>
++<5D> <5E> <005D>
++<61> <7A> <0061>
++<7B> <7C> <2013>
++endbfrange
++40 beginbfchar
++<02> <0398>
++<03> <039B>
++<04> <039E>
++<05> <03A0>
++<06> <03A3>
++<07> <03D2>
++<08> <03A6>
++<0B> <00660066>
++<0C> <00660069>
++<0D> <0066006C>
++<0E> <006600660069>
++<0F> <00660066006C>
++<10> <0131>
++<11> <0237>
++<12> <0060>
++<13> <00B4>
++<14> <02C7>
++<15> <02D8>
++<16> <00AF>
++<17> <02DA>
++<18> <00B8>
++<19> <00DF>
++<1A> <00E6>
++<1B> <0153>
++<1C> <00F8>
++<1D> <00C6>
++<1E> <0152>
++<1F> <00D8>
++<21> <0021>
++<22> <201D>
++<27> <2019>
++<3C> <00A1>
++<3D> <003D>
++<3E> <00BF>
++<5C> <201C>
++<5F> <02D9>
++<60> <2018>
++<7D> <02DD>
++<7E> <007E>
++<7F> <00A8>
++endbfchar
++endcmap
++CMapName currentdict /CMap defineresource pop
++end
++end
++%%EndResource
++%%EOF
++    }\endgroup
++  \expandafter\edef\csname cmapOT1\endcsname#1{%
++    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
++  }%
++%
++% \cmapOT1IT
++  \begingroup
++    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
++    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
++%%DocumentNeededResources: ProcSet (CIDInit)
++%%IncludeResource: ProcSet (CIDInit)
++%%BeginResource: CMap (TeX-OT1IT-0)
++%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
++%%Version: 1.000
++%%EndComments
++/CIDInit /ProcSet findresource begin
++12 dict begin
++begincmap
++/CIDSystemInfo
++<< /Registry (TeX)
++/Ordering (OT1IT)
++/Supplement 0
++>> def
++/CMapName /TeX-OT1IT-0 def
++/CMapType 2 def
++1 begincodespacerange
++<00> <7F>
++endcodespacerange
++8 beginbfrange
++<00> <01> <0393>
++<09> <0A> <03A8>
++<25> <26> <0025>
++<28> <3B> <0028>
++<3F> <5B> <003F>
++<5D> <5E> <005D>
++<61> <7A> <0061>
++<7B> <7C> <2013>
++endbfrange
++42 beginbfchar
++<02> <0398>
++<03> <039B>
++<04> <039E>
++<05> <03A0>
++<06> <03A3>
++<07> <03D2>
++<08> <03A6>
++<0B> <00660066>
++<0C> <00660069>
++<0D> <0066006C>
++<0E> <006600660069>
++<0F> <00660066006C>
++<10> <0131>
++<11> <0237>
++<12> <0060>
++<13> <00B4>
++<14> <02C7>
++<15> <02D8>
++<16> <00AF>
++<17> <02DA>
++<18> <00B8>
++<19> <00DF>
++<1A> <00E6>
++<1B> <0153>
++<1C> <00F8>
++<1D> <00C6>
++<1E> <0152>
++<1F> <00D8>
++<21> <0021>
++<22> <201D>
++<23> <0023>
++<24> <00A3>
++<27> <2019>
++<3C> <00A1>
++<3D> <003D>
++<3E> <00BF>
++<5C> <201C>
++<5F> <02D9>
++<60> <2018>
++<7D> <02DD>
++<7E> <007E>
++<7F> <00A8>
++endbfchar
++endcmap
++CMapName currentdict /CMap defineresource pop
++end
++end
++%%EndResource
++%%EOF
++    }\endgroup
++  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
++    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
++  }%
++%
++% \cmapOT1TT
++  \begingroup
++    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
++    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
++%%DocumentNeededResources: ProcSet (CIDInit)
++%%IncludeResource: ProcSet (CIDInit)
++%%BeginResource: CMap (TeX-OT1TT-0)
++%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
++%%Version: 1.000
++%%EndComments
++/CIDInit /ProcSet findresource begin
++12 dict begin
++begincmap
++/CIDSystemInfo
++<< /Registry (TeX)
++/Ordering (OT1TT)
++/Supplement 0
++>> def
++/CMapName /TeX-OT1TT-0 def
++/CMapType 2 def
++1 begincodespacerange
++<00> <7F>
++endcodespacerange
++5 beginbfrange
++<00> <01> <0393>
++<09> <0A> <03A8>
++<21> <26> <0021>
++<28> <5F> <0028>
++<61> <7E> <0061>
++endbfrange
++32 beginbfchar
++<02> <0398>
++<03> <039B>
++<04> <039E>
++<05> <03A0>
++<06> <03A3>
++<07> <03D2>
++<08> <03A6>
++<0B> <2191>
++<0C> <2193>
++<0D> <0027>
++<0E> <00A1>
++<0F> <00BF>
++<10> <0131>
++<11> <0237>
++<12> <0060>
++<13> <00B4>
++<14> <02C7>
++<15> <02D8>
++<16> <00AF>
++<17> <02DA>
++<18> <00B8>
++<19> <00DF>
++<1A> <00E6>
++<1B> <0153>
++<1C> <00F8>
++<1D> <00C6>
++<1E> <0152>
++<1F> <00D8>
++<20> <2423>
++<27> <2019>
++<60> <2018>
++<7F> <00A8>
++endbfchar
++endcmap
++CMapName currentdict /CMap defineresource pop
++end
++end
++%%EndResource
++%%EOF
++    }\endgroup
++  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
++    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
++  }%
++\fi\fi
  
--	if [ -f $src -o -d $src ]
--	then
--		true
--	else
--		echo "install:  $src does not exist"
--		exit 1
--	fi
--	
--	if [ x"$dst" = x ]
--	then
--		echo "install:	no destination specified"
--		exit 1
--	else
--		true
--	fi
-+if test -z "$dir_arg"; then
-+  trap '(exit $?); exit' 1 2 13 15
+-% Use Computer Modern fonts at \magstephalf (11pt).
+-\newcount\mainmagstep
+-\mainmagstep=\magstephalf
  
--# If destination is a directory, append the input filename; if your system
--# does not like double slashes in filenames, you may need to add some logic
-+  # Set umask so as not to create temps with too-generous modes.
-+  # However, 'strip' requires both read and write access to temps.
-+  case $mode in
-+    # Optimize common cases.
-+    *644) cp_umask=133;;
-+    *755) cp_umask=22;;
+ % Set the font macro #1 to the font named #2, adding on the
+ % specified font prefix (normally `cm').
+-% #3 is the font's design size, #4 is a scale factor
+-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
++% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
++% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
++% empty to omit).
++\def\setfont#1#2#3#4#5{%
++  \font#1=\fontprefix#2#3 scaled #4
++  \csname cmap#5\endcsname#1%
++}
++% This is what gets called when #5 of \setfont is empty.
++\let\cmap\gobble
++% emacs-page end of cmaps
  
--	if [ -d $dst ]
--	then
--		dst="$dst"/`basename $src`
--	else
--		true
--	fi
-+    *[0-7])
-+      if test -z "$stripcmd"; then
-+	u_plus_rw=
-+      else
-+	u_plus_rw='% 200'
-+      fi
-+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-+    *)
-+      if test -z "$stripcmd"; then
-+	u_plus_rw=
-+      else
-+	u_plus_rw=,u+rw
-+      fi
-+      cp_umask=$mode$u_plus_rw;;
-+  esac
- fi
+ % Use cm as the default font prefix.
+ % To specify the font prefix, you must define \fontprefix
+@@ -1064,165 +1959,409 @@
+ \def\scshape{csc}
+ \def\scbshape{csc}
  
--## this sed command emulates the dirname command
--dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-+for src
-+do
-+  # Protect names starting with `-'.
-+  case $src in
-+    -*) src=./$src;;
-+  esac
+-\ifx\bigger\relax
+-\let\mainmagstep=\magstep1
+-\setfont\textrm\rmshape{12}{1000}
+-\setfont\texttt\ttshape{12}{1000}
+-\else
+-\setfont\textrm\rmshape{10}{\mainmagstep}
+-\setfont\texttt\ttshape{10}{\mainmagstep}
+-\fi
+-% Instead of cmb10, you many want to use cmbx10.
+-% cmbx10 is a prettier font on its own, but cmb10
+-% looks better when embedded in a line with cmr10.
+-\setfont\textbf\bfshape{10}{\mainmagstep}
+-\setfont\textit\itshape{10}{\mainmagstep}
+-\setfont\textsl\slshape{10}{\mainmagstep}
+-\setfont\textsf\sfshape{10}{\mainmagstep}
+-\setfont\textsc\scshape{10}{\mainmagstep}
+-\setfont\textttsl\ttslshape{10}{\mainmagstep}
++% Definitions for a main text size of 11pt.  This is the default in
++% Texinfo.
++% 
++\def\definetextfontsizexi{%
++% Text fonts (11.2pt, magstep1).
++\def\textnominalsize{11pt}
++\edef\mainmagstep{\magstephalf}
++\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
++\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
++\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
++\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
++\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
++\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
++\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
++\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+ \font\texti=cmmi10 scaled \mainmagstep
+ \font\textsy=cmsy10 scaled \mainmagstep
++\def\textecsize{1095}
  
--# Make sure that the destination directory exists.
--#  this part is taken from Noah Friedman's mkinstalldirs script
-+  if test -n "$dir_arg"; then
-+    dst=$src
-+    dstdir=$dst
-+    test -d "$dstdir"
-+    dstdir_status=$?
-+  else
+-% A few fonts for @defun, etc.
+-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
+-\setfont\deftt\ttshape{10}{\magstep1}
+-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
++% A few fonts for @defun names and args.
++\setfont\defbf\bfshape{10}{\magstep1}{OT1}
++\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
++\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
++\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
  
--# Skip lots of stat calls in the usual case.
--if [ ! -d "$dstdir" ]; then
--defaultIFS='	
--'
--IFS="${IFS-${defaultIFS}}"
-+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-+    # might cause directories to be created, which would be especially bad
-+    # if $src (and thus $dsttmp) contains '*'.
-+    if test ! -f "$src" && test ! -d "$src"; then
-+      echo "$0: $src does not exist." >&2
-+      exit 1
-+    fi
+ % Fonts for indices, footnotes, small examples (9pt).
+-\setfont\smallrm\rmshape{9}{1000}
+-\setfont\smalltt\ttshape{9}{1000}
+-\setfont\smallbf\bfshape{10}{900}
+-\setfont\smallit\itshape{9}{1000}
+-\setfont\smallsl\slshape{9}{1000}
+-\setfont\smallsf\sfshape{9}{1000}
+-\setfont\smallsc\scshape{10}{900}
+-\setfont\smallttsl\ttslshape{10}{900}
++\def\smallnominalsize{9pt}
++\setfont\smallrm\rmshape{9}{1000}{OT1}
++\setfont\smalltt\ttshape{9}{1000}{OT1TT}
++\setfont\smallbf\bfshape{10}{900}{OT1}
++\setfont\smallit\itshape{9}{1000}{OT1IT}
++\setfont\smallsl\slshape{9}{1000}{OT1}
++\setfont\smallsf\sfshape{9}{1000}{OT1}
++\setfont\smallsc\scshape{10}{900}{OT1}
++\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+ \font\smalli=cmmi9
+ \font\smallsy=cmsy9
++\def\smallecsize{0900}
  
--oIFS="${IFS}"
--# Some sh's can't handle IFS=/ for some reason.
--IFS='%'
--set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
--IFS="${oIFS}"
-+    if test -z "$dst_arg"; then
-+      echo "$0: no destination specified." >&2
-+      exit 1
-+    fi
+-% Fonts for title page:
+-\setfont\titlerm\rmbshape{12}{\magstep3}
+-\setfont\titleit\itbshape{10}{\magstep4}
+-\setfont\titlesl\slbshape{10}{\magstep4}
+-\setfont\titlett\ttbshape{12}{\magstep3}
+-\setfont\titlettsl\ttslshape{10}{\magstep4}
+-\setfont\titlesf\sfbshape{17}{\magstep1}
++% Fonts for small examples (8pt).
++\def\smallernominalsize{8pt}
++\setfont\smallerrm\rmshape{8}{1000}{OT1}
++\setfont\smallertt\ttshape{8}{1000}{OT1TT}
++\setfont\smallerbf\bfshape{10}{800}{OT1}
++\setfont\smallerit\itshape{8}{1000}{OT1IT}
++\setfont\smallersl\slshape{8}{1000}{OT1}
++\setfont\smallersf\sfshape{8}{1000}{OT1}
++\setfont\smallersc\scshape{10}{800}{OT1}
++\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
++\font\smalleri=cmmi8
++\font\smallersy=cmsy8
++\def\smallerecsize{0800}
++
++% Fonts for title page (20.4pt):
++\def\titlenominalsize{20pt}
++\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
++\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
++\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
++\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
++\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
++\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+ \let\titlebf=\titlerm
+-\setfont\titlesc\scbshape{10}{\magstep4}
++\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+ \font\titlei=cmmi12 scaled \magstep3
+ \font\titlesy=cmsy10 scaled \magstep4
+ \def\authorrm{\secrm}
++\def\authortt{\sectt}
++\def\titleecsize{2074}
  
--pathcomp=''
-+    dst=$dst_arg
-+    # Protect names starting with `-'.
-+    case $dst in
-+      -*) dst=./$dst;;
-+    esac
+ % Chapter (and unnumbered) fonts (17.28pt).
+-\setfont\chaprm\rmbshape{12}{\magstep2}
+-\setfont\chapit\itbshape{10}{\magstep3}
+-\setfont\chapsl\slbshape{10}{\magstep3}
+-\setfont\chaptt\ttbshape{12}{\magstep2}
+-\setfont\chapttsl\ttslshape{10}{\magstep3}
+-\setfont\chapsf\sfbshape{17}{1000}
++\def\chapnominalsize{17pt}
++\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
++\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
++\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
++\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
++\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
++\setfont\chapsf\sfbshape{17}{1000}{OT1}
+ \let\chapbf=\chaprm
+-\setfont\chapsc\scbshape{10}{\magstep3}
++\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+ \font\chapi=cmmi12 scaled \magstep2
+ \font\chapsy=cmsy10 scaled \magstep3
++\def\chapecsize{1728}
  
--while [ $# -ne 0 ] ; do
--	pathcomp="${pathcomp}${1}"
--	shift
-+    # If destination is a directory, append the input filename; won't work
-+    # if double slashes aren't ignored.
-+    if test -d "$dst"; then
-+      if test -n "$no_target_directory"; then
-+	echo "$0: $dst_arg: Is a directory" >&2
-+	exit 1
-+      fi
-+      dstdir=$dst
-+      dst=$dstdir/`basename "$src"`
-+      dstdir_status=0
-+    else
-+      # Prefer dirname, but fall back on a substitute if dirname fails.
-+      dstdir=`
-+	(dirname "$dst") 2>/dev/null ||
-+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+	     X"$dst" : 'X\(//\)[^/]' \| \
-+	     X"$dst" : 'X\(//\)$' \| \
-+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-+	echo X"$dst" |
-+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-+		   s//\1/
-+		   q
-+		 }
-+		 /^X\(\/\/\)[^/].*/{
-+		   s//\1/
-+		   q
-+		 }
-+		 /^X\(\/\/\)$/{
-+		   s//\1/
-+		   q
-+		 }
-+		 /^X\(\/\).*/{
-+		   s//\1/
-+		   q
-+		 }
-+		 s/.*/./; q'
-+      `
+ % Section fonts (14.4pt).
+-\setfont\secrm\rmbshape{12}{\magstep1}
+-\setfont\secit\itbshape{10}{\magstep2}
+-\setfont\secsl\slbshape{10}{\magstep2}
+-\setfont\sectt\ttbshape{12}{\magstep1}
+-\setfont\secttsl\ttslshape{10}{\magstep2}
+-\setfont\secsf\sfbshape{12}{\magstep1}
++\def\secnominalsize{14pt}
++\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
++\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
++\setfont\secsl\slbshape{10}{\magstep2}{OT1}
++\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
++\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
++\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+ \let\secbf\secrm
+-\setfont\secsc\scbshape{10}{\magstep2}
++\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+ \font\seci=cmmi12 scaled \magstep1
+ \font\secsy=cmsy10 scaled \magstep2
+-
+-% \setfont\ssecrm\bxshape{10}{\magstep1}    % This size an font looked bad.
+-% \setfont\ssecit\itshape{10}{\magstep1}    % The letters were too crowded.
+-% \setfont\ssecsl\slshape{10}{\magstep1}
+-% \setfont\ssectt\ttshape{10}{\magstep1}
+-% \setfont\ssecsf\sfshape{10}{\magstep1}
+-
+-%\setfont\ssecrm\bfshape{10}{1315}      % Note the use of cmb rather than cmbx.
+-%\setfont\ssecit\itshape{10}{1315}      % Also, the size is a little larger than
+-%\setfont\ssecsl\slshape{10}{1315}      % being scaled magstep1.
+-%\setfont\ssectt\ttshape{10}{1315}
+-%\setfont\ssecsf\sfshape{10}{1315}
+-
+-%\let\ssecbf=\ssecrm
++\def\sececsize{1440}
  
--	if [ ! -d "${pathcomp}" ] ;
--        then
--		$mkdirprog "${pathcomp}"
-+      test -d "$dstdir"
-+      dstdir_status=$?
-+    fi
-+  fi
+ % Subsection fonts (13.15pt).
+-\setfont\ssecrm\rmbshape{12}{\magstephalf}
+-\setfont\ssecit\itbshape{10}{1315}
+-\setfont\ssecsl\slbshape{10}{1315}
+-\setfont\ssectt\ttbshape{12}{\magstephalf}
+-\setfont\ssecttsl\ttslshape{10}{1315}
+-\setfont\ssecsf\sfbshape{12}{\magstephalf}
++\def\ssecnominalsize{13pt}
++\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
++\setfont\ssecit\itbshape{10}{1315}{OT1IT}
++\setfont\ssecsl\slbshape{10}{1315}{OT1}
++\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
++\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
++\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+ \let\ssecbf\ssecrm
+-\setfont\ssecsc\scbshape{10}{\magstep1}
++\setfont\ssecsc\scbshape{10}{1315}{OT1}
+ \font\sseci=cmmi12 scaled \magstephalf
+ \font\ssecsy=cmsy10 scaled 1315
+-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+-% but that is not a standard magnification.
++\def\ssececsize{1200}
++
++% Reduced fonts for @acro in text (10pt).
++\def\reducednominalsize{10pt}
++\setfont\reducedrm\rmshape{10}{1000}{OT1}
++\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
++\setfont\reducedbf\bfshape{10}{1000}{OT1}
++\setfont\reducedit\itshape{10}{1000}{OT1IT}
++\setfont\reducedsl\slshape{10}{1000}{OT1}
++\setfont\reducedsf\sfshape{10}{1000}{OT1}
++\setfont\reducedsc\scshape{10}{1000}{OT1}
++\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
++\font\reducedi=cmmi10
++\font\reducedsy=cmsy10
++\def\reducedecsize{1000}
++
++% reset the current fonts
++\textfonts
++\rm
++} % end of 11pt text font size definitions
 +
-+  obsolete_mkdir_used=false
 +
-+  if test $dstdir_status != 0; then
-+    case $posix_mkdir in
-+      '')
-+	# Create intermediate dirs using mode 755 as modified by the umask.
-+	# This is like FreeBSD 'install' as of 1997-10-28.
-+	umask=`umask`
-+	case $stripcmd.$umask in
-+	  # Optimize common cases.
-+	  *[2367][2367]) mkdir_umask=$umask;;
-+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++% Definitions to make the main text be 10pt Computer Modern, with
++% section, chapter, etc., sizes following suit.  This is for the GNU
++% Press printing of the Emacs 22 manual.  Maybe other manuals in the
++% future.  Used with @smallbook, which sets the leading to 12pt.
++% 
++\def\definetextfontsizex{%
++% Text fonts (10pt).
++\def\textnominalsize{10pt}
++\edef\mainmagstep{1000}
++\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
++\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
++\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
++\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
++\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
++\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
++\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
++\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
++\font\texti=cmmi10 scaled \mainmagstep
++\font\textsy=cmsy10 scaled \mainmagstep
++\def\textecsize{1000}
 +
-+	  *[0-7])
-+	    mkdir_umask=`expr $umask + 22 \
-+	      - $umask % 100 % 40 + $umask % 20 \
-+	      - $umask % 10 % 4 + $umask % 2
-+	    `;;
-+	  *) mkdir_umask=$umask,go-w;;
-+	esac
++% A few fonts for @defun names and args.
++\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
++\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
++\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
++\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
++
++% Fonts for indices, footnotes, small examples (9pt).
++\def\smallnominalsize{9pt}
++\setfont\smallrm\rmshape{9}{1000}{OT1}
++\setfont\smalltt\ttshape{9}{1000}{OT1TT}
++\setfont\smallbf\bfshape{10}{900}{OT1}
++\setfont\smallit\itshape{9}{1000}{OT1IT}
++\setfont\smallsl\slshape{9}{1000}{OT1}
++\setfont\smallsf\sfshape{9}{1000}{OT1}
++\setfont\smallsc\scshape{10}{900}{OT1}
++\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
++\font\smalli=cmmi9
++\font\smallsy=cmsy9
++\def\smallecsize{0900}
++
++% Fonts for small examples (8pt).
++\def\smallernominalsize{8pt}
++\setfont\smallerrm\rmshape{8}{1000}{OT1}
++\setfont\smallertt\ttshape{8}{1000}{OT1TT}
++\setfont\smallerbf\bfshape{10}{800}{OT1}
++\setfont\smallerit\itshape{8}{1000}{OT1IT}
++\setfont\smallersl\slshape{8}{1000}{OT1}
++\setfont\smallersf\sfshape{8}{1000}{OT1}
++\setfont\smallersc\scshape{10}{800}{OT1}
++\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
++\font\smalleri=cmmi8
++\font\smallersy=cmsy8
++\def\smallerecsize{0800}
++
++% Fonts for title page (20.4pt):
++\def\titlenominalsize{20pt}
++\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
++\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
++\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
++\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
++\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
++\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
++\let\titlebf=\titlerm
++\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
++\font\titlei=cmmi12 scaled \magstep3
++\font\titlesy=cmsy10 scaled \magstep4
++\def\authorrm{\secrm}
++\def\authortt{\sectt}
++\def\titleecsize{2074}
++
++% Chapter fonts (14.4pt).
++\def\chapnominalsize{14pt}
++\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
++\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
++\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
++\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
++\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
++\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
++\let\chapbf\chaprm
++\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
++\font\chapi=cmmi12 scaled \magstep1
++\font\chapsy=cmsy10 scaled \magstep2
++\def\chapecsize{1440}
++
++% Section fonts (12pt).
++\def\secnominalsize{12pt}
++\setfont\secrm\rmbshape{12}{1000}{OT1}
++\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
++\setfont\secsl\slbshape{10}{\magstep1}{OT1}
++\setfont\sectt\ttbshape{12}{1000}{OT1TT}
++\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
++\setfont\secsf\sfbshape{12}{1000}{OT1}
++\let\secbf\secrm
++\setfont\secsc\scbshape{10}{\magstep1}{OT1}
++\font\seci=cmmi12 
++\font\secsy=cmsy10 scaled \magstep1
++\def\sececsize{1200}
++
++% Subsection fonts (10pt).
++\def\ssecnominalsize{10pt}
++\setfont\ssecrm\rmbshape{10}{1000}{OT1}
++\setfont\ssecit\itbshape{10}{1000}{OT1IT}
++\setfont\ssecsl\slbshape{10}{1000}{OT1}
++\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
++\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
++\setfont\ssecsf\sfbshape{10}{1000}{OT1}
++\let\ssecbf\ssecrm
++\setfont\ssecsc\scbshape{10}{1000}{OT1}
++\font\sseci=cmmi10
++\font\ssecsy=cmsy10
++\def\ssececsize{1000}
++
++% Reduced fonts for @acro in text (9pt).
++\def\reducednominalsize{9pt}
++\setfont\reducedrm\rmshape{9}{1000}{OT1}
++\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
++\setfont\reducedbf\bfshape{10}{900}{OT1}
++\setfont\reducedit\itshape{9}{1000}{OT1IT}
++\setfont\reducedsl\slshape{9}{1000}{OT1}
++\setfont\reducedsf\sfshape{9}{1000}{OT1}
++\setfont\reducedsc\scshape{10}{900}{OT1}
++\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
++\font\reducedi=cmmi9
++\font\reducedsy=cmsy9
++\def\reducedecsize{0900}
++
++% reduce space between paragraphs
++\divide\parskip by 2
++
++% reset the current fonts
++\textfonts
++\rm
++} % end of 10pt text font size definitions
++
++
++% We provide the user-level command
++%   @fonttextsize 10
++% (or 11) to redefine the text font size.  pt is assumed.
++% 
++\def\xword{10}
++\def\xiword{11}
++%
++\parseargdef\fonttextsize{%
++  \def\textsizearg{#1}%
++  \wlog{doing @fonttextsize \textsizearg}%
++  %
++  % Set \globaldefs so that documents can use this inside @tex, since
++  % makeinfo 4.8 does not support it, but we need it nonetheless.
++  % 
++ \begingroup \globaldefs=1
++  \ifx\textsizearg\xword \definetextfontsizex
++  \else \ifx\textsizearg\xiword \definetextfontsizexi
++  \else
++    \errhelp=\EMsimple
++    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
++  \fi\fi
++ \endgroup
++}
 +
-+	# With -d, create the new directory with the user-specified mode.
-+	# Otherwise, rely on $mkdir_umask.
-+	if test -n "$dir_arg"; then
-+	  mkdir_mode=-m$mode
- 	else
--		true
-+	  mkdir_mode=
- 	fi
- 
--	pathcomp="${pathcomp}/"
--done
--fi
-+	posix_mkdir=false
-+	case $umask in
-+	  *[123567][0-7][0-7])
-+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
-+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-+	    ;;
-+	  *)
-+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
- 
--if [ x"$dir_arg" != x ]
--then
--	$doit $instcmd $dst &&
-+	    if (umask $mkdir_umask &&
-+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-+	    then
-+	      if test -z "$dir_arg" || {
-+		   # Check for POSIX incompatibilities with -m.
-+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-+		   # other-writeable bit of parent directory when it shouldn't.
-+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-+		   case $ls_ld_tmpdir in
-+		     d????-?r-*) different_mode=700;;
-+		     d????-?--*) different_mode=755;;
-+		     *) false;;
-+		   esac &&
-+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-+		   }
-+		 }
-+	      then posix_mkdir=:
-+	      fi
-+	      rmdir "$tmpdir/d" "$tmpdir"
-+	    else
-+	      # Remove any dirs left behind by ancient mkdir implementations.
-+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-+	    fi
-+	    trap '' 0;;
-+	esac;;
-+    esac
- 
--	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
--	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
--	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
--	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
--else
-+    if
-+      $posix_mkdir && (
-+	umask $mkdir_umask &&
-+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-+      )
-+    then :
-+    else
- 
--# If we're going to rename the final executable, determine the name now.
-+      # The umask is ridiculous, or mkdir does not conform to POSIX,
-+      # or it failed possibly due to a race condition.  Create the
-+      # directory the slow way, step by step, checking for races as we go.
- 
--	if [ x"$transformarg" = x ] 
--	then
--		dstfile=`basename $dst`
--	else
--		dstfile=`basename $dst $transformbasename | 
--			sed $transformarg`$transformbasename
--	fi
-+      case $dstdir in
-+	/*) prefix='/';;
-+	-*) prefix='./';;
-+	*)  prefix='';;
-+      esac
  
--# don't allow the sed command to completely eliminate the filename
-+      eval "$initialize_posix_glob"
+ % In order for the font changes to affect most math symbols and letters,
+ % we have to define the \textfont of the standard families.  Since
+-% texinfo doesn't allow for producing subscripts and superscripts, we
+-% don't bother to reset \scriptfont and \scriptscriptfont (which would
+-% also require loading a lot more fonts).
++% texinfo doesn't allow for producing subscripts and superscripts except
++% in the main text, we don't bother to reset \scriptfont and
++% \scriptscriptfont (which would also require loading a lot more fonts).
+ %
+ \def\resetmathfonts{%
+-  \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
+-  \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
+-  \textfont\ttfam = \tentt \textfont\sffam = \tensf
++  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
++  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
++  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+ }
  
--	if [ x"$dstfile" = x ] 
--	then
--		dstfile=`basename $dst`
-+      oIFS=$IFS
-+      IFS=/
-+      $posix_glob set -f
-+      set fnord $dstdir
-+      shift
-+      $posix_glob set +f
-+      IFS=$oIFS
-+
-+      prefixes=
+-
+ % The font-changing commands redefine the meanings of \tenSTYLE, instead
+-% of just \STYLE.  We do this so that font changes will continue to work
+-% in math mode, where it is the current \fam that is relevant in most
+-% cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
+-% \tenbf}, for example.  By redefining \tenbf, we obviate the need to
+-% redefine \bf itself.
++% of just \STYLE.  We do this because \STYLE needs to also set the
++% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
++% \tenSTYLE to set the current font.
++%
++% Each font-changing command also sets the names \lsize (one size lower)
++% and \lllsize (three sizes lower).  These relative commands are used in
++% the LaTeX logo and acronyms.
++%
++% This all needs generalizing, badly.
++%
+ \def\textfonts{%
+   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+-  \resetmathfonts}
++  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
++  \let\tenttsl=\textttsl
++  \def\curfontsize{text}%
++  \def\lsize{reduced}\def\lllsize{smaller}%
++  \resetmathfonts \setleading{\textleading}}
+ \def\titlefonts{%
+   \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+   \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+   \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+   \let\tenttsl=\titlettsl
++  \def\curfontsize{title}%
++  \def\lsize{chap}\def\lllsize{subsec}%
+   \resetmathfonts \setleading{25pt}}
+ \def\titlefont#1{{\titlefonts\rm #1}}
+ \def\chapfonts{%
+   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
++  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
++  \let\tenttsl=\chapttsl
++  \def\curfontsize{chap}%
++  \def\lsize{sec}\def\lllsize{text}%
+   \resetmathfonts \setleading{19pt}}
+ \def\secfonts{%
+   \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+   \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
++  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
++  \let\tenttsl=\secttsl
++  \def\curfontsize{sec}%
++  \def\lsize{subsec}\def\lllsize{reduced}%
+   \resetmathfonts \setleading{16pt}}
+ \def\subsecfonts{%
+   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
++  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
++  \let\tenttsl=\ssecttsl
++  \def\curfontsize{ssec}%
++  \def\lsize{text}\def\lllsize{small}%
+   \resetmathfonts \setleading{15pt}}
+-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
++\let\subsubsecfonts = \subsecfonts
++\def\reducedfonts{%
++  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
++  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
++  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
++  \let\tenttsl=\reducedttsl
++  \def\curfontsize{reduced}%
++  \def\lsize{small}\def\lllsize{smaller}%
++  \resetmathfonts \setleading{10.5pt}}
+ \def\smallfonts{%
+   \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+   \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+   \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+   \let\tenttsl=\smallttsl
+-  \resetmathfonts \setleading{11pt}}
++  \def\curfontsize{small}%
++  \def\lsize{smaller}\def\lllsize{smaller}%
++  \resetmathfonts \setleading{10.5pt}}
++\def\smallerfonts{%
++  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
++  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
++  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
++  \let\tenttsl=\smallerttsl
++  \def\curfontsize{smaller}%
++  \def\lsize{smaller}\def\lllsize{smaller}%
++  \resetmathfonts \setleading{9.5pt}}
 +
-+      for d
-+      do
-+	test -z "$d" && continue
++% Set the fonts to use with the @small... environments.
++\let\smallexamplefonts = \smallfonts
++
++% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
++% can fit this many characters:
++%   8.5x11=86   smallbook=72  a4=90  a5=69
++% If we use \scriptfonts (8pt), then we can fit this many characters:
++%   8.5x11=90+  smallbook=80  a4=90+  a5=77
++% For me, subjectively, the few extra characters that fit aren't worth
++% the additional smallness of 8pt.  So I'm making the default 9pt.
++%
++% By the way, for comparison, here's what fits with @example (10pt):
++%   8.5x11=71  smallbook=60  a4=75  a5=58
++%
++% I wish the USA used A4 paper.
++% --karl, 24jan03.
 +
-+	prefix=$prefix$d
-+	if test -d "$prefix"; then
-+	  prefixes=
- 	else
--		true
-+	  if $posix_mkdir; then
-+	    (umask=$mkdir_umask &&
-+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-+	    # Don't fail if two instances are running concurrently.
-+	    test -d "$prefix" || exit 1
-+	  else
-+	    case $prefix in
-+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-+	      *) qprefix=$prefix;;
-+	    esac
-+	    prefixes="$prefixes '$qprefix'"
-+	  fi
- 	fi
-+	prefix=$prefix/
-+      done
- 
--# Make a temp file name in the proper directory.
-+      if test -n "$prefixes"; then
-+	# Don't fail if two instances are running concurrently.
-+	(umask $mkdir_umask &&
-+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
-+	  test -d "$dstdir" || exit 1
-+	obsolete_mkdir_used=true
-+      fi
-+    fi
-+  fi
- 
--	dsttmp=$dstdir/#inst.$$#
-+  if test -n "$dir_arg"; then
-+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-+  else
- 
--# Move or copy the file name to the temp name
-+    # Make a couple of temp file names in the proper directory.
-+    dsttmp=$dstdir/_inst.$$_
-+    rmtmp=$dstdir/_rm.$$_
- 
--	$doit $instcmd $src $dsttmp &&
-+    # Trap to clean up those temp files at exit.
-+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
- 
--	trap "rm -f ${dsttmp}" 0 &&
-+    # Copy the file name to the temp name.
-+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
- 
--# and set any options; do chmod last to preserve setuid bits
-+    # and set any options; do chmod last to preserve setuid bits.
-+    #
-+    # If any of these fail, we abort the whole thing.  If we want to
-+    # ignore errors from any of these, just make sure not to ignore
-+    # errors from the above "$doit $cpprog $src $dsttmp" command.
-+    #
-+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
- 
--# If any of these fail, we abort the whole thing.  If we want to
--# ignore errors from any of these, just make sure not to ignore
--# errors from the above "$doit $instcmd $src $dsttmp" command.
-+    # If -C, don't bother to copy if it wouldn't change the file.
-+    if $copy_on_change &&
-+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
-+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
- 
--	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
--	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
--	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
--	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-+       eval "$initialize_posix_glob" &&
-+       $posix_glob set -f &&
-+       set X $old && old=:$2:$4:$5:$6 &&
-+       set X $new && new=:$2:$4:$5:$6 &&
-+       $posix_glob set +f &&
- 
--# Now rename the file to the real destination.
-+       test "$old" = "$new" &&
-+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-+    then
-+      rm -f "$dsttmp"
-+    else
-+      # Rename the file to the real destination.
-+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
- 
--	$doit $rmcmd -f $dstdir/$dstfile &&
--	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-+      # The rename failed, perhaps because mv can't rename something else
-+      # to itself, or perhaps because mv is so ancient that it does not
-+      # support -f.
-+      {
-+	# Now remove or move aside any old file at destination location.
-+	# We try this two ways since rm can't unlink itself on some
-+	# systems and the destination file might be busy for other
-+	# reasons.  In this case, the final cleanup might fail but the new
-+	# file should still install successfully.
-+	{
-+	  test ! -f "$dst" ||
-+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
-+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-+	  } ||
-+	  { echo "$0: cannot unlink or rename $dst" >&2
-+	    (exit 1); exit 1
-+	  }
-+	} &&
  
--fi &&
-+	# Now rename the file to the real destination.
-+	$doit $mvcmd "$dsttmp" "$dst"
-+      }
-+    fi || exit 1
+ % Set up the default fonts, so we can use them for creating boxes.
+ %
+-\textfonts
++\definetextfontsizexi
  
-+    trap '' 0
-+  fi
-+done
+ % Define these so they can be easily changed for other fonts.
+ \def\angleleft{$\langle$}
+@@ -1232,28 +2371,42 @@
+ \newcount\fontdepth \fontdepth=0
  
--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:
---- ./info/texinfo.tex.orig	2002-10-26 09:14:15.000000000 -0600
-+++ ./info/texinfo.tex	2012-01-09 20:36:31.879118561 -0700
-@@ -3,15 +3,16 @@
- % Load plain if necessary, i.e., if running under initex.
- \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
- %
--\def\texinfoversion{1999-09-25.10}
-+\def\texinfoversion{2008-04-18.10}
- %
--% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
--% Free Software Foundation, Inc.
-+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-+% 2007, 2008 Free Software Foundation, Inc.
- %
--% This texinfo.tex file is free software; you can redistribute it and/or
-+% This texinfo.tex file is free software: you can redistribute it and/or
- % modify it under the terms of the GNU General Public License as
--% published by the Free Software Foundation; either version 2, or (at
--% your option) any later version.
-+% published by the Free Software Foundation, either version 3 of the
-+% License, or (at your option) any later version.
- %
- % This texinfo.tex file is distributed in the hope that it will be
- % useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-@@ -19,25 +20,19 @@
- % General Public License for more details.
- %
- % You should have received a copy of the GNU General Public License
--% along with this texinfo.tex file; see the file COPYING.  If not, write
--% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
--% Boston, MA 02111-1307, USA.
-+% along with this program.  If not, see <http://www.gnu.org/licenses/>.
- %
--% In other words, you are welcome to use, share and improve this program.
--% You are forbidden to forbid anyone else to use, share and improve
--% what you give them.   Help stamp out software-hoarding!
-+% As a special exception, when this file is read by TeX when processing
-+% a Texinfo source document, you may use the result without
-+% restriction.  (This has been our intent since Texinfo was invented.)
- %
- % Please try the latest version of texinfo.tex before submitting bug
- % reports; you can get the latest version from:
--%   ftp://ftp.gnu.org/gnu/texinfo.tex
--%   (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
--%   ftp://texinfo.org/tex/texinfo.tex
--%   ftp://us.ctan.org/macros/texinfo/texinfo.tex
--%   (and all CTAN mirrors, finger ctan at us.ctan.org for a list).
--%   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
--% The texinfo.tex in any given Texinfo distribution could well be out
-+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
-+%   ftp://tug.org/tex/texinfo.tex
-+%     (and all CTAN mirrors, see http://www.ctan.org).
-+% The texinfo.tex in any given distribution could well be out
- % of date, so if that's what you're using, please check.
--% Texinfo has a small home page at http://texinfo.org/.
- %
- % Send bug reports to bug-texinfo at gnu.org.  Please include including a
- % complete document in each bug report with which we can reproduce the
-@@ -50,13 +45,17 @@
- %   texindex foo.??
- %   tex foo.texi
- %   tex foo.texi
--%   dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
--% The extra runs of TeX get the cross-reference information correct.
-+%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
-+% The extra TeX runs get the cross-reference information correct.
- % Sometimes one run after texindex suffices, and sometimes you need more
- % than two; texi2dvi does it as many times as necessary.
- %
--% It is possible to adapt texinfo.tex for other languages.  You can get
--% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
-+% It is possible to adapt texinfo.tex for other languages, to some
-+% extent.  You can get the existing language-specific files from the
-+% full Texinfo distribution.
-+%
-+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+ % Fonts for short table of contents.
+-\setfont\shortcontrm\rmshape{12}{1000}
+-\setfont\shortcontbf\bxshape{12}{1000}
+-\setfont\shortcontsl\slshape{12}{1000}
++\setfont\shortcontrm\rmshape{12}{1000}{OT1}
++\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
++\setfont\shortcontsl\slshape{12}{1000}{OT1}
++\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+ 
+ %% Add scribe-like font environments, plus @l for inline lisp (usually sans
+ %% serif) and @ii for TeX italic
+ 
+ % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+ % unless the following character is such as not to need one.
+-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+-\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
+-\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
++\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
++                    \ptexslash\fi\fi\fi}
++\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
++\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
++
++% like \smartslanted except unconditionally uses \ttsl.
++% @var is set to this for defun arguments.
++\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
 +
++% like \smartslanted except unconditionally use \sl.  We never want
++% ttsl for book titles, do we?
++\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
  
- \message{Loading texinfo [version \texinfoversion]:}
+ \let\i=\smartitalic
++\let\slanted=\smartslanted
+ \let\var=\smartslanted
+ \let\dfn=\smartslanted
+ \let\emph=\smartitalic
+-\let\cite=\smartslanted
  
-@@ -66,7 +65,14 @@
- \everyjob{\message{[Texinfo version \texinfoversion]}%
-   \catcode`+=\active \catcode`\_=\active}
++% @b, explicit bold.
+ \def\b#1{{\bf #1}}
+ \let\strong=\b
  
--% Save some parts of plain tex whose names we will redefine.
-+
-+\chardef\other=12
++% @sansserif, explicit sans.
++\def\sansserif#1{{\sf #1}}
 +
-+% We never want plain's \outer definition of \+ in Texinfo.
-+% For @tex, we can use \tabalign.
-+\let\+ = \relax
+ % We can't just use \exhyphenpenalty, because that only has effect at
+ % the end of a paragraph.  Restore normal hyphenation at the end of the
+ % group within which \nohyphenation is presumably called.
+@@ -1261,13 +2414,30 @@
+ \def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
+ \def\restorehyphenation{\hyphenchar\font = `- }
+ 
++% Set sfcode to normal for the chars that usually have another value.
++% Can't use plain's \frenchspacing because it uses the `\x notation, and
++% sometimes \x has an active definition that messes things up.
++%
++\catcode`@=11
++  \def\plainfrenchspacing{%
++    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
++    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
++    \def\endofsentencespacefactor{1000}% for @. and friends
++  }
++  \def\plainnonfrenchspacing{%
++    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
++    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
++    \def\endofsentencespacefactor{3000}% for @. and friends
++  }
++\catcode`@=\other
++\def\endofsentencespacefactor{3000}% default
 +
-+% Save some plain tex macros whose names we will redefine.
- \let\ptexb=\b
- \let\ptexbullet=\bullet
- \let\ptexc=\c
-@@ -76,23 +82,36 @@
- \let\ptexend=\end
- \let\ptexequiv=\equiv
- \let\ptexexclam=\!
-+\let\ptexfootnote=\footnote
-+\let\ptexgtr=>
-+\let\ptexhat=^
- \let\ptexi=\i
-+\let\ptexindent=\indent
-+\let\ptexinsert=\insert
- \let\ptexlbrace=\{
-+\let\ptexless=<
-+\let\ptexnewwrite\newwrite
-+\let\ptexnoindent=\noindent
-+\let\ptexplus=+
- \let\ptexrbrace=\}
-+\let\ptexslash=\/
- \let\ptexstar=\*
- \let\ptext=\t
--
--% We never want plain's outer \+ definition in Texinfo.
--% For @tex, we can use \tabalign.
--\let\+ = \relax
--
--\message{Basics,}
--\chardef\other=12
-+\let\ptextop=\top
+ \def\t#1{%
+-  {\tt \rawbackslash \frenchspacing #1}%
++  {\tt \rawbackslash \plainfrenchspacing #1}%
+   \null
+ }
+-\let\ttfont=\t
+ \def\samp#1{`\tclose{#1}'\null}
+-\setfont\keyrm\rmshape{8}{1000}
++\setfont\keyrm\rmshape{8}{1000}{OT1}
+ \font\keysy=cmsy9
+ \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+   \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+@@ -1275,6 +2445,7 @@
+      \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+     \kern-0.4pt\hrule}%
+   \kern-.06em\raise0.4pt\hbox{\angleright}}}}
++\def\key #1{{\nohyphenation \uppercase{#1}}\null}
+ % The old definition, with no lozenge:
+ %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+ \def\ctrl #1{{\tt \rawbackslash \hat}#1}
+@@ -1300,13 +2471,13 @@
+     \nohyphenation
+     %
+     \rawbackslash
+-    \frenchspacing
++    \plainfrenchspacing
+     #1%
+   }%
+   \null
+ }
+ 
+-% We *must* turn on hyphenation at `-' and `_' in \code.
++% We *must* turn on hyphenation at `-' and `_' in @code.
+ % Otherwise, it is too hard to avoid overfull hboxes
+ % in the Emacs manual, the Library manual, etc.
+ 
+@@ -1316,26 +2487,61 @@
+ % and arrange explicitly to hyphenate at a dash.
+ %  -- rms.
+ {
+-  \catcode`\-=\active
+-  \catcode`\_=\active
++  \catcode`\-=\active \catcode`\_=\active
++  \catcode`\'=\active \catcode`\`=\active
+   %
+   \global\def\code{\begingroup
+-    \catcode`\-=\active \let-\codedash
+-    \catcode`\_=\active \let_\codeunder
++    \catcode\rquoteChar=\active \catcode\lquoteChar=\active
++    \let'\codequoteright \let`\codequoteleft
++    %
++    \catcode\dashChar=\active  \catcode\underChar=\active
++    \ifallowcodebreaks
++     \let-\codedash
++     \let_\codeunder
++    \else
++     \let-\realdash
++     \let_\realunder
++    \fi
+     \codex
+   }
+-  %
+-  % If we end up with any active - characters when handling the index,
+-  % just treat them as a normal -.
+-  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
+ }
  
- % If this character appears in an error message or help string, it
- % starts a new line in the output.
- \newlinechar = `^^J
+ \def\realdash{-}
+ \def\codedash{-\discretionary{}{}{}}
+-\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
++\def\codeunder{%
++  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
++  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
++  % will therefore expand the active definition of _, which is us
++  % (inside @code that is), therefore an endless loop.
++  \ifusingtt{\ifmmode
++               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
++             \else\normalunderscore \fi
++             \discretionary{}{}{}}%
++            {\_}%
++}
+ \def\codex #1{\tclose{#1}\endgroup}
  
-+% Use TeX 3.0's \inputlineno to get the line number, for better error
-+% messages, but if we're using an old version of TeX, don't do anything.
-+%
-+\ifx\inputlineno\thisisundefined
-+  \let\linenumber = \empty % Pre-3.0.
-+\else
-+  \def\linenumber{l.\the\inputlineno:\space}
-+\fi
-+
- % Set up fixed words for English if not already set.
- \ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
- \ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
-@@ -131,44 +150,119 @@
- \ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
- \ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
- \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
--\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
- \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
--\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
+-%\let\exp=\tclose  %Was temporary
++% An additional complication: the above will allow breaks after, e.g.,
++% each of the four underscores in __typeof__.  This is undesirable in
++% some manuals, especially if they don't have long identifiers in
++% general.  @allowcodebreaks provides a way to control this.
++% 
++\newif\ifallowcodebreaks  \allowcodebreakstrue
 +
-+% Since the category of space is not known, we have to be careful.
-+\chardef\spacecat = 10
-+\def\spaceisspace{\catcode`\ =\spacecat}
++\def\keywordtrue{true}
++\def\keywordfalse{false}
 +
-+% sometimes characters are active, so we need control sequences.
-+\chardef\colonChar = `\:
-+\chardef\commaChar = `\,
-+\chardef\dashChar  = `\-
-+\chardef\dotChar   = `\.
-+\chardef\exclamChar= `\!
-+\chardef\lquoteChar= `\`
-+\chardef\questChar = `\?
-+\chardef\rquoteChar= `\'
-+\chardef\semiChar  = `\;
-+\chardef\underChar = `\_
++\parseargdef\allowcodebreaks{%
++  \def\txiarg{#1}%
++  \ifx\txiarg\keywordtrue
++    \allowcodebreakstrue
++  \else\ifx\txiarg\keywordfalse
++    \allowcodebreaksfalse
++  \else
++    \errhelp = \EMsimple
++    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
++  \fi\fi
++}
  
- % Ignore a token.
- %
- \def\gobble#1{}
+ % @kbd is like @code, except that if the argument is just one @key command,
+ % then @kbd has no effect.
+@@ -1343,24 +2549,25 @@
+ % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+ %   `example' (@kbd uses ttsl only inside of @example and friends),
+ %   or `code' (@kbd uses normal tty font always).
+-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
+-\def\kbdinputstylexxx#1{%
+-  \def\arg{#1}%
+-  \ifx\arg\worddistinct
++\parseargdef\kbdinputstyle{%
++  \def\txiarg{#1}%
++  \ifx\txiarg\worddistinct
+     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+-  \else\ifx\arg\wordexample
++  \else\ifx\txiarg\wordexample
+     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+-  \else\ifx\arg\wordcode
++  \else\ifx\txiarg\wordcode
+     \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
++  \else
++    \errhelp = \EMsimple
++    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
+   \fi\fi\fi
+ }
+ \def\worddistinct{distinct}
+ \def\wordexample{example}
+ \def\wordcode{code}
  
--\hyphenation{ap-pen-dix}
--\hyphenation{mini-buf-fer mini-buf-fers}
--\hyphenation{eshell}
--\hyphenation{white-space}
-+% The following is used inside several \edef's.
-+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
-+
-+% Hyphenation fixes.
-+\hyphenation{
-+  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
-+  ap-pen-dix bit-map bit-maps
-+  data-base data-bases eshell fall-ing half-way long-est man-u-script
-+  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
-+  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
-+  spell-ing spell-ings
-+  stand-alone strong-est time-stamp time-stamps which-ever white-space
-+  wide-spread wrap-around
-+}
+-% Default is kbdinputdistinct.  (Too much of a hassle to call the macro,
+-% the catcodes are wrong for parsearg to work.)
+-\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
++% Default is `distinct.'
++\kbdinputstyle distinct
  
- % Margin to add to right of even pages, to left of odd pages.
--\newdimen \bindingoffset
--\newdimen \normaloffset
-+\newdimen\bindingoffset
-+\newdimen\normaloffset
- \newdimen\pagewidth \newdimen\pageheight
+ \def\xkey{\key}
+ \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+@@ -1368,11 +2575,18 @@
+ \else{\tclose{\kbdfont\look}}\fi
+ \else{\tclose{\kbdfont\look}}\fi}
  
-+% For a final copy, take out the rectangles
-+% that mark overfull boxes (in case you have decided
-+% that the text looks ok even though it passes the margin).
-+%
-+\def\finalout{\overfullrule=0pt}
+-% For @url, @env, @command quotes seem unnecessary, so use \code.
+-\let\url=\code
++% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
++\let\indicateurl=\code
+ \let\env=\code
+ \let\command=\code
+ 
++% @clicksequence{File @click{} Open ...}
++\def\clicksequence#1{\begingroup #1\endgroup}
 +
-+% @| inserts a changebar to the left of the current line.  It should
-+% surround any changed text.  This approach does *not* work if the
-+% change spans more than two lines of output.  To handle that, we would
-+% have adopt a much more difficult approach (putting marks into the main
-+% vertical list for the beginning and end of each change).
-+%
-+\def\|{%
-+  % \vadjust can only be used in horizontal mode.
-+  \leavevmode
-+  %
-+  % Append this vertical mode material after the current line in the output.
-+  \vadjust{%
-+    % We want to insert a rule with the height and depth of the current
-+    % leading; that is exactly what \strutbox is supposed to record.
-+    \vskip-\baselineskip
-+    %
-+    % \vadjust-items are inserted at the left edge of the type.  So
-+    % the \llap here moves out into the left-hand margin.
-+    \llap{%
-+      %
-+      % For a thicker or thinner bar, change the `1pt'.
-+      \vrule height\baselineskip width1pt
-+      %
-+      % This is the space between the bar and the text.
-+      \hskip 12pt
-+    }%
-+  }%
-+}
++% @clickstyle @arrow   (by default)
++\parseargdef\clickstyle{\def\click{#1}}
++\def\click{\arrow}
 +
- % Sometimes it is convenient to have everything in the transcript file
- % and nothing on the terminal.  We don't just call \tracingall here,
--% since that produces some useless output on the terminal.
-+% since that produces some useless output on the terminal.  We also make
-+% some effort to order the tracing commands to reduce output in the log
-+% file; cf. trace.sty in LaTeX.
- %
- \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
--\ifx\eTeXversion\undefined
--\def\loggingall{\tracingcommands2 \tracingstats2
--   \tracingpages1 \tracingoutput1 \tracinglostchars1
--   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
--   \showboxbreadth\maxdimen\showboxdepth\maxdimen
--}%
--\else
--\def\loggingall{\tracingcommands3 \tracingstats2
--   \tracingpages1 \tracingoutput1 \tracinglostchars1
--   \tracingmacros2 \tracingparagraphs1 \tracingrestores1
--   \tracingscantokens1 \tracingassigns1 \tracingifs1
--   \tracinggroups1 \tracingnesting2
--   \showboxbreadth\maxdimen\showboxdepth\maxdimen
-+\def\loggingall{%
-+  \tracingstats2
-+  \tracingpages1
-+  \tracinglostchars2  % 2 gives us more in etex
-+  \tracingparagraphs1
-+  \tracingoutput1
-+  \tracingmacros2
-+  \tracingrestores1
-+  \showboxbreadth\maxdimen \showboxdepth\maxdimen
-+  \ifx\eTeXversion\undefined\else % etex gives us more logging
-+    \tracingscantokens1
-+    \tracingifs1
-+    \tracinggroups1
-+    \tracingnesting2
-+    \tracingassigns1
-+  \fi
-+  \tracingcommands3  % 3 gives us more in etex
-+  \errorcontextlines16
- }%
--\fi
+ % @uref (abbreviation for `urlref') takes an optional (comma-separated)
+ % second argument specifying the text to display and an optional third
+ % arg as text to display instead of (rather than in addition to) the url
+@@ -1401,9 +2615,13 @@
+   \endlink
+ \endgroup}
+ 
++% @url synonym for @uref, since that's how everyone uses it.
++%
++\let\url=\uref
 +
-+% add check for \lastpenalty to plain's definitions.  If the last thing
-+% we did was a \nobreak, we don't want to insert more space.
+ % rms does not like angle brackets --karl, 17may97.
+ % So now @email is just like @uref, unless we are pdf.
+-% 
 +%
-+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
-+  \removelastskip\penalty-50\smallskip\fi\fi}
-+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
-+  \removelastskip\penalty-100\medskip\fi\fi}
-+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
-+  \removelastskip\penalty-200\bigskip\fi\fi}
+ %\def\email#1{\angleleft{\tt #1}\angleright}
+ \ifpdf
+   \def\email#1{\doemail#1,,\finish}
+@@ -1442,12 +2660,140 @@
+ \def\sc#1{{\smallcaps#1}}       % smallcaps font
+ \def\ii#1{{\it #1}}             % italic font
  
- % For @cropmarks command.
- % Do @cropmarks to get crop marks.
-@@ -184,6 +278,50 @@
- \newdimen\cornerthick \cornerthick=.3pt
- \newdimen\topandbottommargin \topandbottommargin=.75in
+-% @acronym downcases the argument and prints in smallcaps.
+-\def\acronym#1{{\smallcaps \lowercase{#1}}}
++% @acronym for "FBI", "NATO", and the like.
++% We print this one point size smaller, since it's intended for
++% all-uppercase.
++% 
++\def\acronym#1{\doacronym #1,,\finish}
++\def\doacronym#1,#2,#3\finish{%
++  {\selectfonts\lsize #1}%
++  \def\temp{#2}%
++  \ifx\temp\empty \else
++    \space ({\unsepspaces \ignorespaces \temp \unskip})%
++  \fi
++}
  
-+% Output a mark which sets \thischapter, \thissection and \thiscolor.
-+% We dump everything together because we only have one kind of mark.
-+% This works because we only use \botmark / \topmark, not \firstmark.
+-% @pounds{} is a sterling sign.
++% @abbr for "Comput. J." and the like.
++% No font change, but don't do end-of-sentence spacing.
++% 
++\def\abbr#1{\doabbr #1,,\finish}
++\def\doabbr#1,#2,#3\finish{%
++  {\plainfrenchspacing #1}%
++  \def\temp{#2}%
++  \ifx\temp\empty \else
++    \space ({\unsepspaces \ignorespaces \temp \unskip})%
++  \fi
++}
++
++% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
 +%
-+% A mark contains a subexpression of the \ifcase ... \fi construct.
-+% \get*marks macros below extract the needed part using \ifcase.
+ \def\pounds{{\it\$}}
+ 
++% @euro{} comes from a separate font, depending on the current style.
++% We use the free feym* fonts from the eurosym package by Henrik
++% Theiling, which support regular, slanted, bold and bold slanted (and
++% "outlined" (blackboard board, sort of) versions, which we don't need).
++% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
++% 
++% Although only regular is the truly official Euro symbol, we ignore
++% that.  The Euro is designed to be slightly taller than the regular
++% font height.
++% 
++% feymr - regular
++% feymo - slanted
++% feybr - bold
++% feybo - bold slanted
++% 
++% There is no good (free) typewriter version, to my knowledge.
++% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
++% Hmm.
++% 
++% Also doesn't work in math.  Do we need to do math with euro symbols?
++% Hope not.
++% 
++% 
++\def\euro{{\eurofont e}}
++\def\eurofont{%
++  % We set the font at each command, rather than predefining it in
++  % \textfonts and the other font-switching commands, so that
++  % installations which never need the symbol don't have to have the
++  % font installed.
++  % 
++  % There is only one designed size (nominal 10pt), so we always scale
++  % that to the current nominal size.
++  % 
++  % By the way, simply using "at 1em" works for cmr10 and the like, but
++  % does not work for cmbx10 and other extended/shrunken fonts.
++  % 
++  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
++  %
++  \ifx\curfontstyle\bfstylename 
++    % bold:
++    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
++  \else 
++    % regular:
++    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
++  \fi
++  \thiseurofont
++}
++
++% Hacks for glyphs from the EC fonts similar to \euro.  We don't
++% use \let for the aliases, because sometimes we redefine the original
++% macro, and the alias should reflect the redefinition.
++\def\guillemetleft{{\ecfont \char"13}}
++\def\guillemotleft{\guillemetleft}
++\def\guillemetright{{\ecfont \char"14}}
++\def\guillemotright{\guillemetright}
++\def\guilsinglleft{{\ecfont \char"0E}}
++\def\guilsinglright{{\ecfont \char"0F}}
++\def\quotedblbase{{\ecfont \char"12}}
++\def\quotesinglbase{{\ecfont \char"0D}}
 +%
-+% Another complication is to let the user choose whether \thischapter
-+% (\thissection) refers to the chapter (section) in effect at the top
-+% of a page, or that at the bottom of a page.  The solution is
-+% described on page 260 of The TeXbook.  It involves outputting two
-+% marks for the sectioning macros, one before the section break, and
-+% one after.  I won't pretend I can describe this better than DEK...
-+\def\domark{%
-+  \toks0=\expandafter{\lastchapterdefs}%
-+  \toks2=\expandafter{\lastsectiondefs}%
-+  \toks4=\expandafter{\prevchapterdefs}%
-+  \toks6=\expandafter{\prevsectiondefs}%
-+  \toks8=\expandafter{\lastcolordefs}%
-+  \mark{%
-+                   \the\toks0 \the\toks2
-+      \noexpand\or \the\toks4 \the\toks6
-+    \noexpand\else \the\toks8
-+  }%
++\def\ecfont{%
++  % We can't distinguish serif/sanserif and italic/slanted, but this
++  % is used for crude hacks anyway (like adding French and German
++  % quotes to documents typeset with CM, where we lose kerning), so
++  % hopefully nobody will notice/care.
++  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
++  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
++  \ifx\curfontstyle\bfstylename
++    % bold:
++    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
++  \else
++    % regular:
++    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
++  \fi
++  \thisecfont
 +}
-+% \topmark doesn't work for the very first chapter (after the title
-+% page or the contents), so we use \firstmark there -- this gets us
-+% the mark with the chapter defs, unless the user sneaks in, e.g.,
-+% @setcolor (or @url, or @link, etc.) between @contents and the very
-+% first @chapter.
-+\def\gettopheadingmarks{%
-+  \ifcase0\topmark\fi
-+  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
++
++% @registeredsymbol - R in a circle.  The font for the R should really
++% be smaller yet, but lllsize is the best we can do for now.
++% Adapted from the plain.tex definition of \copyright.
++%
++\def\registeredsymbol{%
++  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
++               \hfil\crcr\Orb}}%
++    }$%
 +}
-+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
-+\def\getcolormarks{\ifcase2\topmark\fi}
 +
-+% Avoid "undefined control sequence" errors.
-+\def\lastchapterdefs{}
-+\def\lastsectiondefs{}
-+\def\prevchapterdefs{}
-+\def\prevsectiondefs{}
-+\def\lastcolordefs{}
++% @textdegree - the normal degrees sign.
++%
++\def\textdegree{$^\circ$}
 +
- % Main output routine.
- \chardef\PAGE = 255
- \output = {\onepageout{\pagecontents\PAGE}}
-@@ -201,7 +339,9 @@
-   %
-   % Do this outside of the \shipout so @code etc. will be expanded in
-   % the headline as they should be, not taken literally (outputting ''code).
-+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
-   \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
-+  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
-   \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
-   %
-   {%
-@@ -209,11 +349,18 @@
-     % take effect in \write's, yet the group defined by the \vbox ends
-     % before the \shipout runs.
-     %
--    \escapechar = `\\     % use backslash in output files.
-     \indexdummies         % don't expand commands in the output.
-     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
--                   % the page break happens to be in the middle of an example.
-+               % the page break happens to be in the middle of an example.
-+               % We don't want .vr (or whatever) entries like this:
-+               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
-+               % "\acronym" won't work when it's read back in;
-+               % it needs to be 
-+               % {\code {{\tt \backslashcurfont }acronym}
-     \shipout\vbox{%
-+      % Do this early so pdf references go to the beginning of the page.
-+      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
-+      %
-       \ifcropmarks \vbox to \outervsize\bgroup
-         \hsize = \outerhsize
-         \vskip-\topandbottommargin
-@@ -237,14 +384,12 @@
-       \pagebody{#1}%
-       \ifdim\ht\footlinebox > 0pt
-         % Only leave this space if the footline is nonempty.
--        % (We lessened \vsize for it in \oddfootingxxx.)
-+        % (We lessened \vsize for it in \oddfootingyyy.)
-         % The \baselineskip=24pt in plain's \makefootline has no effect.
--        \vskip 2\baselineskip
-+        \vskip 24pt
-         \unvbox\footlinebox
-       \fi
-       %
--      \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
--      %
-       \ifcropmarks
-           \egroup % end of \vbox\bgroup
-         \hfil\egroup % end of (centering) \line\bgroup
-@@ -262,7 +407,7 @@
-       \egroup % \vbox from first cropmarks clause
++% Laurent Siebenmann reports \Orb undefined with:
++%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
++% so we'll define it if necessary.
++% 
++\ifx\Orb\undefined
++\def\Orb{\mathhexbox20D}
++\fi
++
++% Quotes.
++\chardef\quotedblleft="5C
++\chardef\quotedblright=`\"
++\chardef\quoteleft=`\`
++\chardef\quoteright=`\'
++
+ 
+ \message{page headings,}
+ 
+@@ -1466,86 +2812,103 @@
+ \newif\ifsetshortcontentsaftertitlepage
+  \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+ 
+-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
+-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
++\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+         \endgroup\page\hbox{}\page}
+ 
+-\def\titlepage{\begingroup \parindent=0pt \textfonts
+-   \let\subtitlerm=\tenrm
+-   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
+-   %
+-   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+-   %
+-   % Leave some space at the very top of the page.
+-   \vglue\titlepagetopglue
+-   %
+-   % Now you can print the title using @title.
+-   \def\title{\parsearg\titlezzz}%
+-   \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
+-                    % print a rule at the page bottom also.
+-                    \finishedtitlepagefalse
+-                    \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+-   % No rule at page bottom unless we print one at the top with @title.
+-   \finishedtitlepagetrue
+-   %
+-   % Now you can put text using @subtitle.
+-   \def\subtitle{\parsearg\subtitlezzz}%
+-   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
+-   %
+-   % @author should come last, but may come many times.
+-   \def\author{\parsearg\authorzzz}%
+-   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
+-      {\authorfont \leftline{##1}}}%
+-   %
+-   % Most title ``pages'' are actually two pages long, with space
+-   % at the top of the second.  We don't want the ragged left on the second.
+-   \let\oldpage = \page
+-   \def\page{%
++\envdef\titlepage{%
++  % Open one extra group, as we want to close it in the middle of \Etitlepage.
++  \begingroup
++    \parindent=0pt \textfonts
++    % Leave some space at the very top of the page.
++    \vglue\titlepagetopglue
++    % No rule at page bottom unless we print one at the top with @title.
++    \finishedtitlepagetrue
++    %
++    % Most title ``pages'' are actually two pages long, with space
++    % at the top of the second.  We don't want the ragged left on the second.
++    \let\oldpage = \page
++    \def\page{%
+       \iffinishedtitlepage\else
+-         \finishtitlepage
++	 \finishtitlepage
        \fi
-     }% end of \shipout\vbox
--  }% end of group with \turnoffactive
-+  }% end of group with \indexdummies
-   \advancepageno
-   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
- }
-@@ -275,7 +420,7 @@
- % marginal hacks, juha at viisa.uucp (Juha Takala)
- \ifvoid\margin\else % marginal info is present
-   \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
--\dimen@=\dp#1 \unvbox#1
-+\dimen@=\dp#1\relax \unvbox#1\relax
- \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
- \ifr at ggedbottom \kern-\dimen@ \vfil \fi}
- }
-@@ -295,143 +440,161 @@
- % the input line (except we remove a trailing comment).  #1 should be a
- % macro which expects an ordinary undelimited TeX argument.
- %
--\def\parsearg#1{%
--  \let\next = #1%
-+\def\parsearg{\parseargusing{}}
-+\def\parseargusing#1#2{%
-+  \def\argtorun{#2}%
-   \begingroup
-     \obeylines
--    \futurelet\temp\parseargx
--}
--
--% If the next token is an obeyed space (from an @example environment or
--% the like), remove it and recurse.  Otherwise, we're done.
--\def\parseargx{%
--  % \obeyedspace is defined far below, after the definition of \sepspaces.
--  \ifx\obeyedspace\temp
--    \expandafter\parseargdiscardspace
--  \else
--    \expandafter\parseargline
--  \fi
-+    \spaceisspace
-+    #1%
-+    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+-      \oldpage
+       \let\page = \oldpage
+-      \hbox{}}%
+-%   \def\page{\oldpage \hbox{}}
++      \page
++      \null
++    }%
  }
  
--% Remove a single space (as the delimiter token to the macro call).
--{\obeyspaces %
-- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
--
- {\obeylines %
-   \gdef\parseargline#1^^M{%
-     \endgroup % End of the group started in \parsearg.
--    %
--    % First remove any @c comment, then any @comment.
--    % Result of each macro is put in \toks0.
--    \argremovec #1\c\relax %
--    \expandafter\argremovecomment \the\toks0 \comment\relax %
--    %
--    % Call the caller's macro, saved as \next in \parsearg.
--    \expandafter\next\expandafter{\the\toks0}%
-+    \argremovecomment #1\comment\ArgTerm%
-   }%
+ \def\Etitlepage{%
+-   \iffinishedtitlepage\else
+-      \finishtitlepage
+-   \fi
+-   % It is important to do the page break before ending the group,
+-   % because the headline and footline are only empty inside the group.
+-   % If we use the new definition of \page, we always get a blank page
+-   % after the title page, which we certainly don't want.
+-   \oldpage
+-   \endgroup
+-   %
+-   % If they want short, they certainly want long too.
+-   \ifsetshortcontentsaftertitlepage
+-     \shortcontents
+-     \contents
+-     \global\let\shortcontents = \relax
+-     \global\let\contents = \relax
+-   \fi
+-   %
+-   \ifsetcontentsaftertitlepage
+-     \contents
+-     \global\let\contents = \relax
+-     \global\let\shortcontents = \relax
+-   \fi
+-   %
+-   \ifpdf \pdfmakepagedesttrue \fi
+-   %
+-   \HEADINGSon
++    \iffinishedtitlepage\else
++	\finishtitlepage
++    \fi
++    % It is important to do the page break before ending the group,
++    % because the headline and footline are only empty inside the group.
++    % If we use the new definition of \page, we always get a blank page
++    % after the title page, which we certainly don't want.
++    \oldpage
++  \endgroup
++  %
++  % Need this before the \...aftertitlepage checks so that if they are
++  % in effect the toc pages will come out with page numbers.
++  \HEADINGSon
++  %
++  % If they want short, they certainly want long too.
++  \ifsetshortcontentsaftertitlepage
++    \shortcontents
++    \contents
++    \global\let\shortcontents = \relax
++    \global\let\contents = \relax
++  \fi
++  %
++  \ifsetcontentsaftertitlepage
++    \contents
++    \global\let\contents = \relax
++    \global\let\shortcontents = \relax
++  \fi
  }
  
--% Since all \c{,omment} does is throw away the argument, we can let TeX
--% do that for us.  The \relax here is matched by the \relax in the call
--% in \parseargline; it could be more or less anything, its purpose is
--% just to delimit the argument to the \c.
--\def\argremovec#1\c#2\relax{\toks0 = {#1}}
--\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-+% First remove any @comment, then any @c comment.
-+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
- 
--% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
--%    @end itemize  @c foo
--% will have two active spaces as part of the argument with the
--% `itemize'.  Here we remove all active spaces from #1, and assign the
--% result to \toks0.
-+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
- %
--% This loses if there are any *other* active characters besides spaces
--% in the argument -- _ ^ +, for example -- since they get expanded.
--% Fortunately, Texinfo does not define any such commands.  (If it ever
--% does, the catcode of the characters in questionwill have to be changed
--% here.)  But this means we cannot call \removeactivespaces as part of
--% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
--% that \parsearg gets might well have any character at all in it.
-+% \argremovec might leave us with trailing space, e.g.,
-+%    @end itemize  @c foo
-+% This space token undergoes the same procedure and is eventually removed
-+% by \finishparsearg.
- %
--\def\removeactivespaces#1{%
--  \begingroup
--    \ignoreactivespaces
--    \edef\temp{#1}%
--    \global\toks0 = \expandafter{\temp}%
--  \endgroup
-+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
-+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
-+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
-+  \def\temp{#3}%
-+  \ifx\temp\empty
-+    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
-+    \let\temp\finishparsearg
-+  \else
-+    \let\temp\argcheckspaces
-+  \fi
-+  % Put the space token in:
-+  \temp#1 #3\ArgTerm
+ \def\finishtitlepage{%
+-   \vskip4pt \hrule height 2pt width \hsize
+-   \vskip\titlepagebottomglue
+-   \finishedtitlepagetrue
++  \vskip4pt \hrule height 2pt width \hsize
++  \vskip\titlepagebottomglue
++  \finishedtitlepagetrue
  }
  
--% Change the active space to expand to nothing.
-+% If a _delimited_ argument is enclosed in braces, they get stripped; so
-+% to get _exactly_ the rest of the line, we had to prevent such situation.
-+% We prepended an \empty token at the very beginning and we expand it now,
-+% just before passing the control to \argtorun.
-+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
-+% either the null string, or it ends with \^^M---thus there is no danger
-+% that a pair of braces would be stripped.
- %
--\begingroup
-+% But first, we have to remove the trailing space token.
-+%
-+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
++%%% Macros to be used within @titlepage:
 +
-+% \parseargdef\foo{...}
-+%	is roughly equivalent to
-+% \def\foo{\parsearg\Xfoo}
-+% \def\Xfoo#1{...}
-+%
-+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-+% favourite TeX trick.  --kasal, 16nov03
++\let\subtitlerm=\tenrm
++\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
 +
-+\def\parseargdef#1{%
-+  \expandafter \doparseargdef \csname\string#1\endcsname #1%
++\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
++		\let\tt=\authortt}
++
++\parseargdef\title{%
++  \checkenv\titlepage
++  \leftline{\titlefonts\rm #1}
++  % print a rule at the page bottom also.
++  \finishedtitlepagefalse
++  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
 +}
-+\def\doparseargdef#1#2{%
-+  \def#2{\parsearg#1}%
-+  \def#1##1%
++
++\parseargdef\subtitle{%
++  \checkenv\titlepage
++  {\subtitlefont \rightline{#1}}%
 +}
 +
-+% Several utility definitions with active space:
-+{
-   \obeyspaces
--  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
--\endgroup
-+  \gdef\obeyedspace{ }
++% @author should come last, but may come many times.
++% It can also be used inside @quotation.
++%
++\parseargdef\author{%
++  \def\temp{\quotation}%
++  \ifx\thisenv\temp
++    \def\quotationauthor{#1}% printed in \Equotation.
++  \else
++    \checkenv\titlepage
++    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
++    {\authorfont \leftline{#1}}%
++  \fi
++}
 +
-+  % Make each space character in the input produce a normal interword
-+  % space in the output.  Don't allow a line break at this space, as this
-+  % is used only in environments like @example, where each line of input
-+  % should produce a line of output anyway.
-+  %
-+  \gdef\sepspaces{\obeyspaces\let =\tie}
 +
-+  % If an index command is used in an @example environment, any spaces
-+  % therein should become regular spaces in the raw index file, not the
-+  % expansion of \tie (\leavevmode \penalty \@M \ ).
-+  \gdef\unsepspaces{\let =\space}
-+}
+ %%% Set up page headings and footings.
  
+ \let\thispage=\folio
+@@ -1555,7 +2918,7 @@
+ \newtoks\evenfootline    % footline on even pages
+ \newtoks\oddfootline     % footline on odd pages
  
- \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+-% Now make Tex use those variables
++% Now make TeX use those variables
+ \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+                             \else \the\evenheadline \fi}}
+ \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+@@ -1569,43 +2932,64 @@
+ % @evenfooting @thisfile||
+ % @oddfooting ||@thisfile
  
--%% These are used to keep @begin/@end levels from running away
--%% Call \inENV within environments (after a \begingroup)
--\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
--\def\ENVcheck{%
--\ifENV\errmessage{Still within an environment; press RETURN to continue}
--\endgroup\fi} % This is not perfect, but it should reduce lossage
-+% Define the framework for environments in texinfo.tex.  It's used like this:
-+%
-+%   \envdef\foo{...}
-+%   \def\Efoo{...}
-+%
-+% It's the responsibility of \envdef to insert \begingroup before the
-+% actual body; @end closes the group after calling \Efoo.  \envdef also
-+% defines \thisenv, so the current environment is known; @end checks
-+% whether the environment name matches.  The \checkenv macro can also be
-+% used to check whether the current environment is the one expected.
-+%
-+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
-+% are not treated as environments; they don't open a group.  (The
-+% implementation of @end takes care not to call \endgroup in this
-+% special case.)
+-\def\evenheading{\parsearg\evenheadingxxx}
+-\def\oddheading{\parsearg\oddheadingxxx}
+-\def\everyheading{\parsearg\everyheadingxxx}
  
--% @begin foo  is the same as @foo, for now.
--\newhelp\EMsimple{Press RETURN to continue.}
+-\def\evenfooting{\parsearg\evenfootingxxx}
+-\def\oddfooting{\parsearg\oddfootingxxx}
+-\def\everyfooting{\parsearg\everyfootingxxx}
+-
+-{\catcode`\@=0 %
+-
+-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
+-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
++\def\evenheading{\parsearg\evenheadingxxx}
++\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
++\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+ \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  
--\outer\def\begin{\parsearg\beginxxx}
-+% At run-time, environments start with this:
-+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
-+% initialize
-+\let\thisenv\empty
+-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
+-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
++\def\oddheading{\parsearg\oddheadingxxx}
++\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
++\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  
--\def\beginxxx #1{%
--\expandafter\ifx\csname #1\endcsname\relax
--{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
--\csname #1\endcsname\fi}
-+% ... but they get defined via ``\envdef\foo{...}'':
-+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
-+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
++\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
  
--% @end foo executes the definition of \Efoo.
--%
--\def\end{\parsearg\endxxx}
--\def\endxxx #1{%
--  \removeactivespaces{#1}%
--  \edef\endthing{\the\toks0}%
--  %
--  \expandafter\ifx\csname E\endthing\endcsname\relax
--    \expandafter\ifx\csname \endthing\endcsname\relax
--      % There's no \foo, i.e., no ``environment'' foo.
--      \errhelp = \EMsimple
--      \errmessage{Undefined command `@end \endthing'}%
--    \else
--      \unmatchedenderror\endthing
--    \fi
-+% Check whether we're in the right environment:
-+\def\checkenv#1{%
-+  \def\temp{#1}%
-+  \ifx\thisenv\temp
-   \else
--    % Everything's ok; the right environment has been started.
--    \csname E\endthing\endcsname
-+    \badenverr
-   \fi
- }
+-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
+-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
++\def\evenfooting{\parsearg\evenfootingxxx}
++\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
++\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
  
--% There is an environment #1, but it hasn't been started.  Give an error.
--%
--\def\unmatchedenderror#1{%
-+% Environment mismatch, #1 expected:
-+\def\badenverr{%
-   \errhelp = \EMsimple
--  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-+  \errmessage{This command can appear only \inenvironment\temp,
-+    not \inenvironment\thisenv}%
-+}
-+\def\inenvironment#1{%
-+  \ifx#1\empty
-+    out of any environment%
-+  \else
-+    in environment \expandafter\string#1%
-+  \fi
+-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
+-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
++\def\oddfooting{\parsearg\oddfootingxxx}
++\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
++\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+   \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+   %
+   % Leave some space for the footline.  Hopefully ok to assume
+   % @evenfooting will not be used by itself.
+-  \global\advance\pageheight by -\baselineskip
+-  \global\advance\vsize by -\baselineskip
++  \global\advance\pageheight by -12pt
++  \global\advance\vsize by -12pt
  }
  
--% Define the control sequence \E#1 to give an unmatched @end error.
-+% @end foo executes the definition of \Efoo.
-+% But first, it executes a specialized version of \checkenv
+-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
++\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
++
++% @evenheadingmarks top     \thischapter <- chapter at the top of a page
++% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
  %
--\def\defineunmatchedend#1{%
--  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-+\parseargdef\end{%
-+  \if 1\csname iscond.#1\endcsname
-+  \else
-+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
-+    \expandafter\checkenv\csname#1\endcsname
-+    \csname E#1\endcsname
-+    \endgroup
-+  \fi
+-}% unbind the catcode of @.
++% The same set of arguments for:
++%
++% @oddheadingmarks
++% @evenfootingmarks
++% @oddfootingmarks
++% @everyheadingmarks
++% @everyfootingmarks
++
++\def\evenheadingmarks{\headingmarks{even}{heading}}
++\def\oddheadingmarks{\headingmarks{odd}{heading}}
++\def\evenfootingmarks{\headingmarks{even}{footing}}
++\def\oddfootingmarks{\headingmarks{odd}{footing}}
++\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
++                          \headingmarks{odd}{heading}{#1} }
++\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
++                          \headingmarks{odd}{footing}{#1} }
++% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
++\def\headingmarks#1#2#3 {%
++  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
++  \global\expandafter\let\csname get#1#2marks\endcsname \temp
++}
++
++\everyheadingmarks bottom
++\everyfootingmarks bottom
+ 
+ % @headings double      turns headings on for double-sided printing.
+ % @headings single      turns headings on for single-sided printing.
+@@ -1619,7 +3003,7 @@
+ 
+ \def\headings #1 {\csname HEADINGS#1\endcsname}
+ 
+-\def\HEADINGSoff{
++\def\HEADINGSoff{%
+ \global\evenheadline={\hfil} \global\evenfootline={\hfil}
+ \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+ \HEADINGSoff
+@@ -1628,7 +3012,7 @@
+ % chapter name on inside top of right hand pages, document
+ % title on inside top of left hand pages, and page numbers on outside top
+ % edge of all pages.
+-\def\HEADINGSdouble{
++\def\HEADINGSdouble{%
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+@@ -1640,7 +3024,7 @@
+ 
+ % For single-sided printing, chapter title goes across top left of page,
+ % page number on top right.
+-\def\HEADINGSsingle{
++\def\HEADINGSsingle{%
+ \global\pageno=1
+ \global\evenfootline={\hfil}
+ \global\oddfootline={\hfil}
+@@ -1670,7 +3054,10 @@
  }
  
-+\newhelp\EMsimple{Press RETURN to continue.}
+ % Subroutines used in generating headings
+-% Produces Day Month Year style of output.
++% This produces Day Month Year style of output.
++% Only define if not already defined, in case a txi-??.tex file has set
++% up a different format (e.g., txi-cs.tex does this).
++\ifx\today\undefined
+ \def\today{%
+   \number\day\space
+   \ifcase\month
+@@ -1679,16 +3066,16 @@
+   \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+   \fi
+   \space\number\year}
++\fi
+ 
+ % @settitle line...  specifies the title of the document, for headings.
+ % It generates no output of its own.
+ \def\thistitle{\putwordNoTitle}
+-\def\settitle{\parsearg\settitlezzz}
+-\def\settitlezzz #1{\gdef\thistitle{#1}}
++\def\settitle{\parsearg{\gdef\thistitle}}
+ 
  
--% Single-spacing is done by various environments (specifically, in
--% \nonfillstart and \quotations).
--\newskip\singlespaceskip \singlespaceskip = 12.5pt
--\def\singlespace{%
--  % Why was this kern here?  It messes up equalizing space above and below
--  % environments.  --karl, 6may93
--  %{\advance \baselineskip by -\singlespaceskip
--  %\kern \baselineskip}%
--  \setleading \singlespaceskip
--}
+ \message{tables,}
+-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
++% Tables -- @table, @ftable, @vtable, @item(x).
  
- %% Simple single-character @ commands
+ % default indentation of table text
+ \newdimen\tableindent \tableindent=.8in
+@@ -1700,7 +3087,7 @@
+ % used internally for \itemindent minus \itemmargin
+ \newdimen\itemmax
  
-@@ -452,16 +615,22 @@
- \let\{=\mylbrace
- \let\}=\myrbrace
- \begingroup
--  % Definitions to produce actual \{ & \} command in an index.
--  \catcode`\{ = 12 \catcode`\} = 12
-+  % Definitions to produce \{ and \} commands for indices,
-+  % and @{ and @} for the aux/toc files.
-+  \catcode`\{ = \other \catcode`\} = \other
-   \catcode`\[ = 1 \catcode`\] = 2
--  \catcode`\@ = 0 \catcode`\\ = 12
--  @gdef at lbracecmd[\{]%
--  @gdef at rbracecmd[\}]%
-- at endgroup
-+  \catcode`\! = 0 \catcode`\\ = \other
-+  !gdef!lbracecmd[\{]%
-+  !gdef!rbracecmd[\}]%
-+  !gdef!lbraceatcmd[@{]%
-+  !gdef!rbraceatcmd[@}]%
-+!endgroup
-+
-+% @comma{} to avoid , parsing problems.
-+\let\comma = ,
+-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
++% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+ % these defs.
+ % They also define \itemindex
+ % to index the item name in whatever manner is desired (perhaps none).
+@@ -1712,22 +3099,10 @@
+ \def\internalBitem{\smallbreak \parsearg\itemzzz}
+ \def\internalBitemx{\itemxpar \parsearg\itemzzz}
  
- % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
--% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H.
-+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
- \let\, = \c
- \let\dotaccent = \.
- \def\ringaccent#1{{\accent23 #1}}
-@@ -469,22 +638,43 @@
- \let\ubaraccent = \b
- \let\udotaccent = \d
+-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
+-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
+-
+-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
+-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
+-
+-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
+-                 \itemzzz {#1}}
+-
+-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
+-                 \itemzzz {#1}}
+-
+ \def\itemzzz #1{\begingroup %
+   \advance\hsize by -\rightskip
+   \advance\hsize by -\tableindent
+-  \setbox0=\hbox{\itemfont{#1}}%
++  \setbox0=\hbox{\itemindicate{#1}}%
+   \itemindex{#1}%
+   \nobreak % This prevents a break before @itemx.
+   %
+@@ -1751,10 +3126,14 @@
+     % \parskip glue -- logically it's part of the @item we just started.
+     \nobreak \vskip-\parskip
+     %
+-    % Stop a page break at the \parskip glue coming up.  Unfortunately
+-    % we can't prevent a possible page break at the following
+-    % \baselineskip glue.
+-    \nobreak
++    % Stop a page break at the \parskip glue coming up.  However, if
++    % what follows is an environment such as @example, there will be no
++    % \parskip glue; then the negative vskip we just inserted would
++    % cause the example and the item to crash together.  So we use this
++    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
++    % \parskip glue after all.  Section titles are handled this way also.
++    % 
++    \penalty 10001
+     \endgroup
+     \itemxneedsnegativevskipfalse
+   \else
+@@ -1773,97 +3152,106 @@
+   \fi
+ }
  
--% Other special characters: @questiondown @exclamdown
--% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss.
-+% Other special characters: @questiondown @exclamdown @ordf @ordm
-+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
- \def\questiondown{?`}
- \def\exclamdown{!`}
-+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
-+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+-\def\item{\errmessage{@item while not in a table}}
+-\def\itemx{\errmessage{@itemx while not in a table}}
+-\def\kitem{\errmessage{@kitem while not in a table}}
+-\def\kitemx{\errmessage{@kitemx while not in a table}}
+-\def\xitem{\errmessage{@xitem while not in a table}}
+-\def\xitemx{\errmessage{@xitemx while not in a table}}
+-
+-% Contains a kludge to get @end[description] to work.
+-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
++\def\item{\errmessage{@item while not in a list environment}}
++\def\itemx{\errmessage{@itemx while not in a list environment}}
  
- % Dotless i and dotless j, used for accents.
- \def\imacro{i}
- \def\jmacro{j}
- \def\dotless#1{%
-   \def\temp{#1}%
--  \ifx\temp\imacro \ptexi
--  \else\ifx\temp\jmacro \j
-+  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
-+  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
-   \else \errmessage{@dotless can be used only with i or j}%
-   \fi\fi
+ % @table, @ftable, @vtable.
+-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
+-{\obeylines\obeyspaces%
+-\gdef\tablex #1^^M{%
+-\tabley\dontindex#1        \endtabley}}
+-
+-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
+-{\obeylines\obeyspaces%
+-\gdef\ftablex #1^^M{%
+-\tabley\fnitemindex#1        \endtabley
+-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
+-\let\Etable=\relax}}
+-
+-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
+-{\obeylines\obeyspaces%
+-\gdef\vtablex #1^^M{%
+-\tabley\vritemindex#1        \endtabley
+-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
+-\let\Etable=\relax}}
+-
+-\def\dontindex #1{}
+-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
+-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
+-
+-{\obeyspaces %
+-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
+-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
+-
+-\def\tablez #1#2#3#4#5#6{%
+-\aboveenvbreak %
+-\begingroup %
+-\def\Edescription{\Etable}% Necessary kludge.
+-\let\itemindex=#1%
+-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+-\ifnum 0#4>0 \tableindent=#4\mil \fi %
+-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
+-\def\itemfont{#2}%
+-\itemmax=\tableindent %
+-\advance \itemmax by -\itemmargin %
+-\advance \leftskip by \tableindent %
+-\exdentamount=\tableindent
+-\parindent = 0pt
+-\parskip = \smallskipamount
+-\ifdim \parskip=0pt \parskip=2pt \fi%
+-\def\Etable{\endgraf\afterenvbreak\endgroup}%
+-\let\item = \internalBitem %
+-\let\itemx = \internalBitemx %
+-\let\kitem = \internalBkitem %
+-\let\kitemx = \internalBkitemx %
+-\let\xitem = \internalBxitem %
+-\let\xitemx = \internalBxitemx %
++\envdef\table{%
++  \let\itemindex\gobble
++  \tablecheck{table}%
++}
++\envdef\ftable{%
++  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
++  \tablecheck{ftable}%
++}
++\envdef\vtable{%
++  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
++  \tablecheck{vtable}%
++}
++\def\tablecheck#1{%
++  \ifnum \the\catcode`\^^M=\active
++    \endgroup
++    \errmessage{This command won't work in this context; perhaps the problem is
++      that we are \inenvironment\thisenv}%
++    \def\next{\doignore{#1}}%
++  \else
++    \let\next\tablex
++  \fi
++  \next
++}
++\def\tablex#1{%
++  \def\itemindicate{#1}%
++  \parsearg\tabley
  }
- 
-+% The \TeX{} logo, as in plain, but resetting the spacing so that a
-+% period following counts as ending a sentence.  (Idea found in latex.)
-+%
-+\edef\TeX{\TeX \spacefactor=1000 }
-+
-+% @LaTeX{} logo.  Not quite the same results as the definition in
-+% latex.ltx, since we use a different font for the raised A; it's most
-+% convenient for us to use an explicitly smaller font, rather than using
-+% the \scriptstyle font (since we don't reset \scriptstyle and
-+% \scriptscriptstyle).
-+%
-+\def\LaTeX{%
-+  L\kern-.36em
-+  {\setbox0=\hbox{T}%
-+   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
-+  \kern-.15em
-+  \TeX
++\def\tabley#1{%
++  {%
++    \makevalueexpandable
++    \edef\temp{\noexpand\tablez #1\space\space\space}%
++    \expandafter
++  }\temp \endtablez
 +}
-+
- % Be sure we're in horizontal mode when doing a tie, since we make space
- % equivalent to this in @example-like environments. Otherwise, a space
- % at the beginning of a line will start with \penalty -- and
-@@ -503,14 +693,32 @@
- % @* forces a line break.
- \def\*{\hfil\break\hbox{}\ignorespaces}
++\def\tablez #1 #2 #3 #4\endtablez{%
++  \aboveenvbreak
++  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
++  \ifnum 0#2>0 \tableindent=#2\mil \fi
++  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
++  \itemmax=\tableindent
++  \advance \itemmax by -\itemmargin
++  \advance \leftskip by \tableindent
++  \exdentamount=\tableindent
++  \parindent = 0pt
++  \parskip = \smallskipamount
++  \ifdim \parskip=0pt \parskip=2pt \fi
++  \let\item = \internalBitem
++  \let\itemx = \internalBitemx
++}
++\def\Etable{\endgraf\afterenvbreak}
++\let\Eftable\Etable
++\let\Evtable\Etable
++\let\Eitemize\Etable
++\let\Eenumerate\Etable
  
-+% @/ allows a line break.
-+\let\/=\allowbreak
-+
- % @. is an end-of-sentence period.
--\def\.{.\spacefactor=3000 }
-+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+ % This is the counter used by @enumerate, which is really @itemize
  
- % @! is an end-of-sentence bang.
--\def\!{!\spacefactor=3000 }
-+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+ \newcount \itemno
  
- % @? is an end-of-sentence query.
--\def\?{?\spacefactor=3000 }
-+\def\?{?\spacefactor=\endofsentencespacefactor\space}
-+
-+% @frenchspacing on|off  says whether to put extra space after punctuation.
-+% 
-+\def\onword{on}
-+\def\offword{off}
+-\def\itemize{\parsearg\itemizezzz}
++\envdef\itemize{\parsearg\doitemize}
+ 
+-\def\itemizezzz #1{%
+-  \begingroup % ended by the @end itemize
+-  \itemizey {#1}{\Eitemize}
++\def\doitemize#1{%
++  \aboveenvbreak
++  \itemmax=\itemindent
++  \advance\itemmax by -\itemmargin
++  \advance\leftskip by \itemindent
++  \exdentamount=\itemindent
++  \parindent=0pt
++  \parskip=\smallskipamount
++  \ifdim\parskip=0pt \parskip=2pt \fi
++  \def\itemcontents{#1}%
++  % @itemize with no arg is equivalent to @itemize @bullet.
++  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
++  \let\item=\itemizeitem
+ }
+ 
+-\def\itemizey #1#2{%
+-\aboveenvbreak %
+-\itemmax=\itemindent %
+-\advance \itemmax by -\itemmargin %
+-\advance \leftskip by \itemindent %
+-\exdentamount=\itemindent
+-\parindent = 0pt %
+-\parskip = \smallskipamount %
+-\ifdim \parskip=0pt \parskip=2pt \fi%
+-\def#2{\endgraf\afterenvbreak\endgroup}%
+-\def\itemcontents{#1}%
+-\let\item=\itemizeitem}
+-
+-% Set sfcode to normal for the chars that usually have another value.
+-% These are `.?!:;,'
+-\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
+-  \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
++% Definition of @item while inside @itemize and @enumerate.
 +%
-+\parseargdef\frenchspacing{%
-+  \def\temp{#1}%
-+  \ifx\temp\onword \plainfrenchspacing
-+  \else\ifx\temp\offword \plainnonfrenchspacing
-+  \else
-+    \errhelp = \EMsimple
-+    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
-+  \fi\fi
++\def\itemizeitem{%
++  \advance\itemno by 1  % for enumerations
++  {\let\par=\endgraf \smallbreak}% reasonable place to break
++  {%
++   % If the document has an @itemize directly after a section title, a
++   % \nobreak will be last on the list, and \sectionheading will have
++   % done a \vskip-\parskip.  In that case, we don't want to zero
++   % parskip, or the item text will crash with the heading.  On the
++   % other hand, when there is normal text preceding the item (as there
++   % usually is), we do want to zero parskip, or there would be too much
++   % space.  In that case, we won't have a \nobreak before.  At least
++   % that's the theory.
++   \ifnum\lastpenalty<10000 \parskip=0in \fi
++   \noindent
++   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
++   \vadjust{\penalty 1200}}% not good to break after first line of item.
++  \flushcr
 +}
  
- % @w prevents a word break.  Without the \leavevmode, @w at the
- % beginning of a paragraph, when TeX is still in vertical mode, would
-@@ -525,47 +733,24 @@
- % therefore, no glue is inserted, and the space between the headline and
- % the text is small, which looks bad.
+ % \splitoff TOKENS\endmark defines \first to be the first token in
+ % TOKENS, and \rest to be the remainder.
+@@ -1874,11 +3262,8 @@
+ % or number, to specify the first label in the enumerated list.  No
+ % argument is the same as `1'.
  %
--\def\group{\begingroup
--  \ifnum\catcode13=\active \else
-+% Another complication is that the group might be very large.  This can
-+% cause the glue on the previous page to be unduly stretched, because it
-+% does not have much material.  In this case, it's better to add an
-+% explicit \vfill so that the extra space is at the bottom.  The
-+% threshold for doing this is if the group is more than \vfilllimit
-+% percent of a page (\vfilllimit can be changed inside of @tex).
-+%
-+\newbox\groupbox
-+\def\vfilllimit{0.7}
-+%
-+\envdef\group{%
-+  \ifnum\catcode`\^^M=\active \else
-     \errhelp = \groupinvalidhelp
-     \errmessage{@group invalid in context where filling is enabled}%
-   \fi
-+  \startsavinginserts
-   %
--  % The \vtop we start below produces a box with normal height and large
--  % depth; thus, TeX puts \baselineskip glue before it, and (when the
--  % next line of text is done) \lineskip glue after it.  (See p.82 of
--  % the TeXbook.)  Thus, space below is not quite equal to space
--  % above.  But it's pretty close.
--  \def\Egroup{%
--    \egroup           % End the \vtop.
--    \endgroup         % End the \group.
--  }%
+-\def\enumerate{\parsearg\enumeratezzz}
+-\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
++\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
+ \def\enumeratey #1 #2\endenumeratey{%
+-  \begingroup % ended by the @end enumerate
 -  %
--  \vtop\bgroup
--    % We have to put a strut on the last line in case the @group is in
--    % the midst of an example, rather than completely enclosing it.
--    % Otherwise, the interline space between the last line of the group
--    % and the first line afterwards is too small.  But we can't put the
--    % strut in \Egroup, since there it would be on a line by itself.
--    % Hence this just inserts a strut at the beginning of each line.
--    \everypar = {\strut}%
--    %
--    % Since we have a strut on every line, we don't need any of TeX's
--    % normal interline spacing.
--    \offinterlineskip
--    %
--    % OK, but now we have to do something about blank
--    % lines in the input in @example-like environments, which normally
--    % just turn into \lisppar, which will insert no space now that we've
--    % turned off the interline space.  Simplest is to make them be an
--    % empty paragraph.
--    \ifx\par\lisppar
--      \edef\par{\leavevmode \par}%
--      %
--      % Reset ^^M's definition to new definition of \par.
--      \obeylines
--    \fi
--    %
-+  \setbox\groupbox = \vtop\bgroup
-     % Do @comment since we are called inside an environment such as
-     % @example, where each end-of-line in the input causes an
-     % end-of-line in the output.  We don't want the end-of-line after
-@@ -575,6 +760,32 @@
-     \comment
+   % If we were given no argument, pretend we were given `1'.
+   \def\thearg{#1}%
+   \ifx\thearg\empty \def\thearg{1}\fi
+@@ -1949,13 +3334,13 @@
+   }%
  }
+ 
+-% Call itemizey, adding a period to the first argument and supplying the
++% Call \doitemize, adding a period to the first argument and supplying the
+ % common last two arguments.  Also subtract one from the initial value in
+ % \itemno, since @item increments \itemno.
  %
-+% The \vtop produces a box with normal height and large depth; thus, TeX puts
-+% \baselineskip glue before it, and (when the next line of text is done)
-+% \lineskip glue after it.  Thus, space below is not quite equal to space
-+% above.  But it's pretty close.
-+\def\Egroup{%
-+    % To get correct interline space between the last line of the group
-+    % and the first line afterwards, we have to propagate \prevdepth.
-+    \endgraf % Not \par, as it may have been set to \lisppar.
-+    \global\dimen1 = \prevdepth
-+  \egroup           % End the \vtop.
-+  % \dimen0 is the vertical size of the group's box.
-+  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
-+  % \dimen2 is how much space is left on the page (more or less).
-+  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
-+  % if the group doesn't fit on the current page, and it's a big big
-+  % group, force a page break.
-+  \ifdim \dimen0 > \dimen2
-+    \ifdim \pagetotal < \vfilllimit\pageheight
-+      \page
-+    \fi
-+  \fi
-+  \box\groupbox
-+  \prevdepth = \dimen1
-+  \checkinserts
-+}
-+%
- % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
- % message, so this ends up printing `@group can only ...'.
- %
-@@ -587,10 +798,8 @@
+ \def\startenumeration#1{%
+   \advance\itemno by -1
+-  \itemizey{#1.}\Eenumerate\flushcr
++  \doitemize{#1.}\flushcr
+ }
  
- \newdimen\mil  \mil=0.001in
+ % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+@@ -1966,16 +3351,6 @@
+ \def\Ealphaenumerate{\Eenumerate}
+ \def\Ecapsenumerate{\Eenumerate}
  
--\def\need{\parsearg\needx}
+-% Definition of @item while inside @itemize.
 -
- % Old definition--didn't work.
--%\def\needx #1{\par %
-+%\parseargdef\need{\par %
- %% This method tries to make TeX break the page naturally
- %% if the depth of the box does not fit.
- %{\baselineskip=0pt%
-@@ -598,7 +807,7 @@
- %\prevdepth=-1000pt
- %}}
+-\def\itemizeitem{%
+-\advance\itemno by 1
+-{\let\par=\endgraf \smallbreak}%
+-\ifhmode \errmessage{In hmode at itemizeitem}\fi
+-{\parskip=0in \hskip 0pt
+-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+-\vadjust{\penalty 1200}}%
+-\flushcr}
  
--\def\needx#1{%
-+\parseargdef\need{%
-   % Ensure vertical mode, so we don't make a big box in the middle of a
-   % paragraph.
-   \par
-@@ -637,37 +846,11 @@
-   \fi
- }
+ % @multitable macros
+ % Amy Hendrickson, 8/18/94, 3/6/96
+@@ -2002,24 +3377,14 @@
+ %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+ %   @item ...
+ %   using the widest term desired in each column.
+-%
+-% For those who want to use more than one line's worth of words in
+-% the preamble, break the line within one argument and it
+-% will parse correctly, i.e.,
+-%
+-%     @multitable {Column 1 template} {Column 2 template} {Column 3
+-%      template}
+-% Not:
+-%     @multitable {Column 1 template} {Column 2 template}
+-%      {Column 3 template}
  
--% @br   forces paragraph break
-+% @br   forces paragraph break (and is undocumented).
+ % Each new table line starts with @item, each subsequent new column
+ % starts with @tab. Empty columns may be produced by supplying @tab's
+ % with nothing between them for as many times as empty columns are needed,
+ % ie, @tab at tab@tab will produce two empty columns.
  
- \let\br = \par
+-% @item, @tab, @multitable or @end multitable do not need to be on their
+-% own lines, but it will not hurt if they are.
++% @item, @tab do not need to be on their own lines, but it will not hurt
++% if they are.
  
--% @dots{} output an ellipsis using the current font.
--% We do .5em per period so that it has the same spacing in a typewriter
--% font as three actual period characters.
--%
--\def\dots{%
--  \leavevmode
--  \hbox to 1.5em{%
--    \hskip 0pt plus 0.25fil minus 0.25fil
--    .\hss.\hss.%
--    \hskip 0pt plus 0.5fil minus 0.5fil
--  }%
--}
--
--% @enddots{} is an end-of-sentence ellipsis.
--%
--\def\enddots{%
--  \leavevmode
--  \hbox to 2em{%
--    \hskip 0pt plus 0.25fil minus 0.25fil
--    .\hss.\hss.\hss.%
--    \hskip 0pt plus 0.5fil minus 0.5fil
--  }%
--  \spacefactor=3000
--}
--
--
--% @page    forces the start of a new page
-+% @page forces the start of a new page.
- %
- \def\page{\par\vfill\supereject}
+ % Sample multitable:
  
-@@ -679,57 +862,131 @@
- \newskip\exdentamount
+@@ -2063,13 +3428,12 @@
+ \def\xcolumnfractions{\columnfractions}
+ \newif\ifsetpercent
  
- % This defn is used inside fill environments such as @defun.
--\def\exdent{\parsearg\exdentyyy}
--\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+-% #1 is the part of the @columnfraction before the decimal point, which
+-% is presumably either 0 or the empty string (but we don't check, we
+-% just throw it away).  #2 is the decimal part, which we use as the
+-% percent of \hsize for this column.
+-\def\pickupwholefraction#1.#2 {%
++% #1 is the @columnfraction, usually a decimal number like .5, but might
++% be just 1.  We just use it, whatever it is.
++%
++\def\pickupwholefraction#1 {%
+   \global\advance\colcount by 1
+-  \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
++  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+   \setuptable
+ }
  
- % This defn is used inside nofill environments such as @example.
--\def\nofillexdent{\parsearg\nofillexdentyyy}
--\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
--\leftline{\hskip\leftskip{\rm#1}}}}
--
--% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
-+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
-+  \leftline{\hskip\leftskip{\rm#1}}}}
+@@ -2086,8 +3450,8 @@
+          \let\go\pickupwholefraction
+       \else
+          \global\advance\colcount by 1
+-         \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
+-                            % typically that is always in the input, anyway.
++         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
++                   % separator; typically that is always in the input, anyway.
+          \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+       \fi
+     \fi
+@@ -2102,18 +3466,33 @@
+   \go
+ }
  
--\def\inmargin#1{%
--\strut\vadjust{\nobreak\kern-\strutdepth
--  \vtop to \strutdepth{\baselineskip\strutdepth\vss
--  \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
-+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-+% paragraph.  For more general purposes, use the \margin insertion
-+% class.  WHICH is `l' or `r'.
-+%
- \newskip\inmarginspacing \inmarginspacing=1cm
- \def\strutdepth{\dp\strutbox}
-+%
-+\def\doinmargin#1#2{\strut\vadjust{%
-+  \nobreak
-+  \kern-\strutdepth
-+  \vtop to \strutdepth{%
-+    \baselineskip=\strutdepth
-+    \vss
-+    % if you have multiple lines of stuff to put here, you'll need to
-+    % make the vbox yourself of the appropriate size.
-+    \ifx#1l%
-+      \llap{\ignorespaces #2\hskip\inmarginspacing}%
-+    \else
-+      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
-+    \fi
-+    \null
-+  }%
-+}}
-+\def\inleftmargin{\doinmargin l}
-+\def\inrightmargin{\doinmargin r}
+-% This used to have \hskip1sp.  But then the space in a template line is
+-% not enough.  That is bad.  So let's go back to just & until we
+-% encounter the problem it was intended to solve again.
+-% --karl, nathan at acm.org, 20apr99.
+-\def\tab{&}
++% multitable-only commands.
 +%
-+% @inmargin{TEXT [, RIGHT-TEXT]}
-+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-+% else use TEXT for both).
++% @headitem starts a heading row, which we typeset in bold.
++% Assignments have to be global since we are inside the implicit group
++% of an alignment entry.  Note that \everycr resets \everytab.
++\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
 +%
-+\def\inmargin#1{\parseinmargin #1,,\finish}
-+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-+  \setbox0 = \hbox{\ignorespaces #2}%
-+  \ifdim\wd0 > 0pt
-+    \def\lefttext{#1}%  have both texts
-+    \def\righttext{#2}%
-+  \else
-+    \def\lefttext{#1}%  have only one text
-+    \def\righttext{#1}%
-+  \fi
-+  %
-+  \ifodd\pageno
-+    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
-+  \else
-+    \def\temp{\inleftmargin\lefttext}%
-+  \fi
-+  \temp
-+}
++% A \tab used to include \hskip1sp.  But then the space in a template
++% line is not enough.  That is bad.  So let's go back to just `&' until
++% we encounter the problem it was intended to solve again.
++%					--karl, nathan at acm.org, 20apr99.
++\def\tab{\checkenv\multitable &\the\everytab}%
  
--%\hbox{{\rm#1}}\hfil\break}}
--
--% @include file    insert text of that file as input.
--% Allow normal characters that  we make active in the argument (a file name).
--\def\include{\begingroup
--  \catcode`\\=12
--  \catcode`~=12
--  \catcode`^=12
--  \catcode`_=12
--  \catcode`|=12
--  \catcode`<=12
--  \catcode`>=12
--  \catcode`+=12
--  \parsearg\includezzz}
--% Restore active chars for included file.
--\def\includezzz#1{\endgroup\begingroup
--  % Read the included file in a group so nested @include's work.
-+% @include FILE -- \input text of FILE.
+ % @multitable ... @end multitable definitions:
+ %
+-\def\multitable{\parsearg\dotable}
+-\def\dotable#1{\bgroup
++\newtoks\everytab  % insert after every tab.
 +%
-+\def\include{\parseargusing\filenamecatcodes\includezzz}
-+\def\includezzz#1{%
-+  \pushthisfilestack
-   \def\thisfile{#1}%
--  \input\thisfile
--\endgroup}
-+  {%
-+    \makevalueexpandable  % we want to expand any @value in FILE.
-+    \turnoffactive        % and allow special characters in the expansion
-+    \edef\temp{\noexpand\input #1 }%
-+    %
-+    % This trickery is to read FILE outside of a group, in case it makes
-+    % definitions, etc.
-+    \expandafter
-+  }\temp
-+  \popthisfilestack
-+}
-+\def\filenamecatcodes{%
-+  \catcode`\\=\other
-+  \catcode`~=\other
-+  \catcode`^=\other
-+  \catcode`_=\other
-+  \catcode`|=\other
-+  \catcode`<=\other
-+  \catcode`>=\other
-+  \catcode`+=\other
-+  \catcode`-=\other
-+}
- 
--\def\thisfile{}
-+\def\pushthisfilestack{%
-+  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
-+}
-+\def\pushthisfilestackX{%
-+  \expandafter\pushthisfilestackY\thisfile\StackTerm
++\envdef\multitable{%
+   \vskip\parskip
+-  \let\item\crcr
++  \startsavinginserts
++  %
++  % @item within a multitable starts a normal row.
++  % We use \def instead of \let so that if one of the multitable entries
++  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
++  % \endtemplate) expanding \doitemize.
++  \def\item{\crcr}%
++  %
+   \tolerance=9500
+   \hbadness=9500
+   \setmultitablespacing
+@@ -2121,81 +3500,93 @@
+   \parindent=\multitableparindent
+   \overfullrule=0pt
+   \global\colcount=0
+-  \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
+   %
++  \everycr = {%
++    \noalign{%
++      \global\everytab={}%
++      \global\colcount=0 % Reset the column counter.
++      % Check for saved footnotes, etc.
++      \checkinserts
++      % Keeps underfull box messages off when table breaks over pages.
++      %\filbreak
++	% Maybe so, but it also creates really weird page breaks when the
++	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
++	% problem manifests itself, so it can be fixed for real --karl.
++    }%
++  }%
++  %
++  \parsearg\domultitable
 +}
-+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
-+  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
++\def\domultitable#1{%
+   % To parse everything between @multitable and @item:
+   \setuptable#1 \endsetuptable
+   %
+-  % \everycr will reset column counter, \colcount, at the end of
+-  % each line. Every column entry will cause \colcount to advance by one.
+-  % The table preamble
+-  % looks at the current \colcount to find the correct column width.
+-  \everycr{\noalign{%
+-  %
+-  % \filbreak%% keeps underfull box messages off when table breaks over pages.
+-  % Maybe so, but it also creates really weird page breaks when the table
+-  % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
+-  % manifests itself, so it can be fixed for real --karl.
+-    \global\colcount=0\relax}}%
+-  %
+   % This preamble sets up a generic column definition, which will
+   % be used as many times as user calls for columns.
+   % \vtop will set a single line and will also let text wrap and
+   % continue for many paragraphs if desired.
+-  \halign\bgroup&\global\advance\colcount by 1\relax
+-    \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+-  %
+-  % In order to keep entries from bumping into each other
+-  % we will add a \leftskip of \multitablecolspace to all columns after
+-  % the first one.
+-  %
+-  % If a template has been used, we will add \multitablecolspace
+-  % to the width of each template entry.
+-  %
+-  % If the user has set preamble in terms of percent of \hsize we will
+-  % use that dimension as the width of the column, and the \leftskip
+-  % will keep entries from bumping into each other.  Table will start at
+-  % left margin and final column will justify at right margin.
+-  %
+-  % Make sure we don't inherit \rightskip from the outer environment.
+-  \rightskip=0pt
+-  \ifnum\colcount=1
+-    % The first column will be indented with the surrounding text.
+-    \advance\hsize by\leftskip
+-  \else
+-    \ifsetpercent \else
+-      % If user has not set preamble in terms of percent of \hsize
+-      % we will advance \hsize by \multitablecolspace.
+-      \advance\hsize by \multitablecolspace
+-    \fi
+-   % In either case we will make \leftskip=\multitablecolspace:
+-  \leftskip=\multitablecolspace
+-  \fi
+-  % Ignoring space at the beginning and end avoids an occasional spurious
+-  % blank line, when TeX decides to break the line at the space before the
+-  % box from the multistrut, so the strut ends up on a line by itself.
+-  % For example:
+-  % @multitable @columnfractions .11 .89
+-  % @item @code{#}
+-  % @tab Legal holiday which is valid in major parts of the whole country.
+-  % Is automatically provided with highlighting sequences respectively marking
+-  % characters.
+-  \noindent\ignorespaces##\unskip\multistrut}\cr
++  \halign\bgroup &%
++    \global\advance\colcount by 1
++    \multistrut
++    \vtop{%
++      % Use the current \colcount to find the correct column width:
++      \hsize=\expandafter\csname col\the\colcount\endcsname
++      %
++      % In order to keep entries from bumping into each other
++      % we will add a \leftskip of \multitablecolspace to all columns after
++      % the first one.
++      %
++      % If a template has been used, we will add \multitablecolspace
++      % to the width of each template entry.
++      %
++      % If the user has set preamble in terms of percent of \hsize we will
++      % use that dimension as the width of the column, and the \leftskip
++      % will keep entries from bumping into each other.  Table will start at
++      % left margin and final column will justify at right margin.
++      %
++      % Make sure we don't inherit \rightskip from the outer environment.
++      \rightskip=0pt
++      \ifnum\colcount=1
++	% The first column will be indented with the surrounding text.
++	\advance\hsize by\leftskip
++      \else
++	\ifsetpercent \else
++	  % If user has not set preamble in terms of percent of \hsize
++	  % we will advance \hsize by \multitablecolspace.
++	  \advance\hsize by \multitablecolspace
++	\fi
++       % In either case we will make \leftskip=\multitablecolspace:
++      \leftskip=\multitablecolspace
++      \fi
++      % Ignoring space at the beginning and end avoids an occasional spurious
++      % blank line, when TeX decides to break the line at the space before the
++      % box from the multistrut, so the strut ends up on a line by itself.
++      % For example:
++      % @multitable @columnfractions .11 .89
++      % @item @code{#}
++      % @tab Legal holiday which is valid in major parts of the whole country.
++      % Is automatically provided with highlighting sequences respectively
++      % marking characters.
++      \noindent\ignorespaces##\unskip\multistrut
++    }\cr
 +}
++\def\Emultitable{%
++  \crcr
++  \egroup % end the \halign
++  \global\setpercentfalse
+ }
  
--% @center line   outputs that line, centered
-+\def\popthisfilestack{\errthisfilestackempty}
-+\def\errthisfilestackempty{\errmessage{Internal error:
-+  the stack of filenames is empty.}}
+-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
+-% If so, do nothing. If not, give it an appropriate dimension based on
+-% current baselineskip.
++\def\setmultitablespacing{%
++  \def\multistrut{\strut}% just use the standard line spacing
++  %
++  % Compute \multitablelinespace (if not defined by user) for use in
++  % \multitableparskip calculation.  We used define \multistrut based on
++  % this, but (ironically) that caused the spacing to be off.
++  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+ \ifdim\multitablelinespace=0pt
+ \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+ \global\advance\multitablelinespace by-\ht0
+-%% strut to put in table in case some entry doesn't have descenders,
+-%% to keep lines equally spaced
+-\let\multistrut = \strut
+-\else
+-%% FIXME: what is \box0 supposed to be?
+-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
+-width0pt\relax} \fi
++\fi
+ %% Test to see if parskip is larger than space between lines of
+ %% table. If not, do nothing.
+ %%        If so, set to same dimension as multitablelinespace.
+@@ -2212,282 +3603,178 @@
  
--\def\center{\parsearg\centerzzz}
--\def\centerzzz #1{{\advance\hsize by -\leftskip
--\advance\hsize by -\rightskip
--\centerline{#1}}}
-+\def\thisfile{}
-+
-+% @center line
-+% outputs that line, centered.
-+%
-+\parseargdef\center{%
-+  \ifhmode
-+    \let\next\centerH
-+  \else
-+    \let\next\centerV
-+  \fi
-+  \next{\hfil \ignorespaces#1\unskip \hfil}%
-+}
-+\def\centerH#1{%
-+  {%
-+    \hfil\break
-+    \advance\hsize by -\leftskip
-+    \advance\hsize by -\rightskip
-+    \line{#1}%
-+    \break
-+  }%
-+}
-+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
  
- % @sp n   outputs n lines of vertical space
+ \message{conditionals,}
+-% Prevent errors for section commands.
+-% Used in @ignore and in failing conditionals.
+-\def\ignoresections{%
+-  \let\chapter=\relax
+-  \let\unnumbered=\relax
+-  \let\top=\relax
+-  \let\unnumberedsec=\relax
+-  \let\unnumberedsection=\relax
+-  \let\unnumberedsubsec=\relax
+-  \let\unnumberedsubsection=\relax
+-  \let\unnumberedsubsubsec=\relax
+-  \let\unnumberedsubsubsection=\relax
+-  \let\section=\relax
+-  \let\subsec=\relax
+-  \let\subsubsec=\relax
+-  \let\subsection=\relax
+-  \let\subsubsection=\relax
+-  \let\appendix=\relax
+-  \let\appendixsec=\relax
+-  \let\appendixsection=\relax
+-  \let\appendixsubsec=\relax
+-  \let\appendixsubsection=\relax
+-  \let\appendixsubsubsec=\relax
+-  \let\appendixsubsubsection=\relax
+-  \let\contents=\relax
+-  \let\smallbook=\relax
+-  \let\titlepage=\relax
+-}
  
--\def\sp{\parsearg\spxxx}
--\def\spxxx #1{\vskip #1\baselineskip}
-+\parseargdef\sp{\vskip #1\baselineskip}
+-% Used in nested conditionals, where we have to parse the Texinfo source
+-% and so want to turn off most commands, in case they are used
+-% incorrectly.
++% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
++% @ifnotxml always succeed.  They currently do nothing; we don't
++% attempt to check whether the conditionals are properly nested.  But we
++% have to remember that they are conditionals, so that @end doesn't
++% attempt to close an environment group.
+ %
+-\def\ignoremorecommands{%
+-  \let\defcodeindex = \relax
+-  \let\defcv = \relax
+-  \let\deffn = \relax
+-  \let\deffnx = \relax
+-  \let\defindex = \relax
+-  \let\defivar = \relax
+-  \let\defmac = \relax
+-  \let\defmethod = \relax
+-  \let\defop = \relax
+-  \let\defopt = \relax
+-  \let\defspec = \relax
+-  \let\deftp = \relax
+-  \let\deftypefn = \relax
+-  \let\deftypefun = \relax
+-  \let\deftypeivar = \relax
+-  \let\deftypeop = \relax
+-  \let\deftypevar = \relax
+-  \let\deftypevr = \relax
+-  \let\defun = \relax
+-  \let\defvar = \relax
+-  \let\defvr = \relax
+-  \let\ref = \relax
+-  \let\xref = \relax
+-  \let\printindex = \relax
+-  \let\pxref = \relax
+-  \let\settitle = \relax
+-  \let\setchapternewpage = \relax
+-  \let\setchapterstyle = \relax
+-  \let\everyheading = \relax
+-  \let\evenheading = \relax
+-  \let\oddheading = \relax
+-  \let\everyfooting = \relax
+-  \let\evenfooting = \relax
+-  \let\oddfooting = \relax
+-  \let\headings = \relax
+-  \let\include = \relax
+-  \let\lowersections = \relax
+-  \let\down = \relax
+-  \let\raisesections = \relax
+-  \let\up = \relax
+-  \let\set = \relax
+-  \let\clear = \relax
+-  \let\item = \relax
++\def\makecond#1{%
++  \expandafter\let\csname #1\endcsname = \relax
++  \expandafter\let\csname iscond.#1\endcsname = 1
+ }
++\makecond{iftex}
++\makecond{ifnotdocbook}
++\makecond{ifnothtml}
++\makecond{ifnotinfo}
++\makecond{ifnotplaintext}
++\makecond{ifnotxml}
  
- % @comment ...line which is ignored...
- % @c is the same as @comment
-@@ -744,13 +1001,13 @@
+-% Ignore @ignore ... @end ignore.
+-%
+-\def\ignore{\doignore{ignore}}
+-
+-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
++% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+ %
+-\def\ifinfo{\doignore{ifinfo}}
++\def\direntry{\doignore{direntry}}
++\def\documentdescription{\doignore{documentdescription}}
++\def\docbook{\doignore{docbook}}
++\def\html{\doignore{html}}
++\def\ifdocbook{\doignore{ifdocbook}}
+ \def\ifhtml{\doignore{ifhtml}}
++\def\ifinfo{\doignore{ifinfo}}
+ \def\ifnottex{\doignore{ifnottex}}
+-\def\html{\doignore{html}}
++\def\ifplaintext{\doignore{ifplaintext}}
++\def\ifxml{\doignore{ifxml}}
++\def\ignore{\doignore{ignore}}
+ \def\menu{\doignore{menu}}
+-\def\direntry{\doignore{direntry}}
+-
+-% @dircategory CATEGORY  -- specify a category of the dir file
+-% which this file should belong to.  Ignore this in TeX.
+-\let\dircategory = \comment
++\def\xml{\doignore{xml}}
  
- % @paragraphindent NCHARS
- % We'll use ems for NCHARS, close enough.
--% We cannot implement @paragraphindent asis, though.
--% 
-+% NCHARS can also be the word `asis' or `none'.
-+% We cannot feasibly implement @paragraphindent asis, though.
-+%
- \def\asisword{asis} % no translation, these are keywords
- \def\noneword{none}
+-% Ignore text until a line `@end #1'.
++% Ignore text until a line `@end #1', keeping track of nested conditionals.
  %
--\def\paragraphindent{\parsearg\doparagraphindent}
--\def\doparagraphindent#1{%
-+\parseargdef\paragraphindent{%
-   \def\temp{#1}%
-   \ifx\temp\asisword
-   \else
-@@ -767,8 +1024,7 @@
- % We'll use ems for NCHARS like @paragraphindent.
- % It seems @exampleindent asis isn't necessary, but
- % I preserve it to make it similar to @paragraphindent.
--\def\exampleindent{\parsearg\doexampleindent}
--\def\doexampleindent#1{%
-+\parseargdef\exampleindent{%
-   \def\temp{#1}%
-   \ifx\temp\asisword
-   \else
-@@ -780,26 +1036,159 @@
-   \fi
++% A count to remember the depth of nesting.
++\newcount\doignorecount
++
+ \def\doignore#1{\begingroup
+-  % Don't complain about control sequences we have declared \outer.
+-  \ignoresections
+-  %
+-  % Define a command to swallow text until we reach `@end #1'.
+-  % This @ is a catcode 12 token (that is the normal catcode of @ in
+-  % this texinfo.tex file).  We change the catcode of @ below to match.
+-  \long\def\doignoretext##1 at end #1{\enddoignore}%
++  % Scan in ``verbatim'' mode:
++  \obeylines
++  \catcode`\@ = \other
++  \catcode`\{ = \other
++  \catcode`\} = \other
+   %
+   % Make sure that spaces turn into tokens that match what \doignoretext wants.
+-  \catcode32 = 10
+-  %
+-  % Ignore braces, too, so mismatched braces don't cause trouble.
+-  \catcode`\{ = 9
+-  \catcode`\} = 9
+-  %
+-  % We must not have @c interpreted as a control sequence.
+-  \catcode`\@ = 12
++  \spaceisspace
+   %
+-  % Make the letter c a comment character so that the rest of the line
+-  % will be ignored. This way, the document can have (for example)
+-  %   @c @end ifinfo
+-  % and the @end ifinfo will be properly ignored.
+-  % (We've just changed @ to catcode 12.)
+-  \catcode`\c = 14
++  % Count number of #1's that we've seen.
++  \doignorecount = 0
+   %
+-  % And now expand that command.
+-  \doignoretext
+-}
+-
+-% What we do to finish off ignored text.
+-%
+-\def\enddoignore{\endgroup\ignorespaces}%
+-
+-\newif\ifwarnedobs\warnedobsfalse
+-\def\obstexwarn{%
+-  \ifwarnedobs\relax\else
+-  % We need to warn folks that they may have trouble with TeX 3.0.
+-  % This uses \immediate\write16 rather than \message to get newlines.
+-    \immediate\write16{}
+-    \immediate\write16{WARNING: for users of Unix TeX 3.0!}
+-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
+-    \immediate\write16{If you are running another version of TeX, relax.}
+-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+-    \immediate\write16{  Then upgrade your TeX installation if you can.}
+-    \immediate\write16{  (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
+-    \immediate\write16{If you are stuck with version 3.0, run the}
+-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
+-    \immediate\write16{  to use a workaround.}
+-    \immediate\write16{}
+-    \global\warnedobstrue
+-    \fi
++  % Swallow text until we reach the matching `@end #1'.
++  \dodoignore{#1}%
  }
  
-+% @firstparagraphindent WORD
-+% If WORD is `none', then suppress indentation of the first paragraph
-+% after a section heading.  If WORD is `insert', then do indent at such
-+% paragraphs.
-+%
-+% The paragraph indentation is suppressed or not by calling
-+% \suppressfirstparagraphindent, which the sectioning commands do.
-+% We switch the definition of this back and forth according to WORD.
-+% By default, we suppress indentation.
-+%
-+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
-+\def\insertword{insert}
-+%
-+\parseargdef\firstparagraphindent{%
-+  \def\temp{#1}%
-+  \ifx\temp\noneword
-+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
-+  \else\ifx\temp\insertword
-+    \let\suppressfirstparagraphindent = \relax
-+  \else
-+    \errhelp = \EMsimple
-+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
-+  \fi\fi
+-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
+-% workaround (which requires the file ``dummy.tfm'' to be installed),
+-% uncomment the following line:
+-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+-
+-% Ignore text, except that we keep track of conditional commands for
+-% purposes of nesting, up to an `@end #1' command.
+-%
+-\def\nestedignore#1{%
+-  \obstexwarn
+-  % We must actually expand the ignored text to look for the @end
+-  % command, so that nested ignore constructs work.  Thus, we put the
+-  % text into a \vbox and then do nothing with the result.  To minimize
+-  % the change of memory overflow, we follow the approach outlined on
+-  % page 401 of the TeXbook: make the current font be a dummy font.
++{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
++  \obeylines %
+   %
+-  \setbox0 = \vbox\bgroup
+-    % Don't complain about control sequences we have declared \outer.
+-    \ignoresections
+-    %
+-    % Define `@end #1' to end the box, which will in turn undefine the
+-    % @end command again.
+-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+-    %
+-    % We are going to be parsing Texinfo commands.  Most cause no
+-    % trouble when they are used incorrectly, but some commands do
+-    % complicated argument parsing or otherwise get confused, so we
+-    % undefine them.
+-    %
+-    % We can't do anything about stray @-signs, unfortunately;
+-    % they'll produce `undefined control sequence' errors.
+-    \ignoremorecommands
+-    %
+-    % Set the current font to be \nullfont, a TeX primitive, and define
+-    % all the font commands to also use \nullfont.  We don't use
+-    % dummy.tfm, as suggested in the TeXbook, because not all sites
+-    % might have that installed.  Therefore, math mode will still
+-    % produce output, but that should be an extremely small amount of
+-    % stuff compared to the main input.
+-    %
+-    \nullfont
+-    \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
+-    \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
+-    \let\tensf=\nullfont
+-    % Similarly for index fonts (mostly for their use in smallexample).
+-    \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
+-    \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
+-    \let\smallsf=\nullfont
+-    %
+-    % Don't complain when characters are missing from the fonts.
+-    \tracinglostchars = 0
+-    %
+-    % Don't bother to do space factor calculations.
+-    \frenchspacing
++  \gdef\dodoignore#1{%
++    % #1 contains the command name as a string, e.g., `ifinfo'.
+     %
+-    % Don't report underfull hboxes.
+-    \hbadness = 10000
++    % Define a command to find the next `@end #1'.
++    \long\def\doignoretext##1^^M at end #1{%
++      \doignoretextyyy##1^^M@#1\_STOP_}%
+     %
+-    % Do minimal line-breaking.
+-    \pretolerance = 10000
++    % And this command to find another #1 command, at the beginning of a
++    % line.  (Otherwise, we would consider a line `@c @ifset', for
++    % example, to count as an @ifset for nesting.)
++    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+     %
+-    % Do not execute instructions in @tex
+-    \def\tex{\doignore{tex}}%
+-    % Do not execute macro definitions.
+-    % `c' is a comment character, so the word `macro' will get cut off.
+-    \def\macro{\doignore{ma}}%
++    % And now expand that command.
++    \doignoretext ^^M%
++  }%
 +}
 +
-+% Here is how we actually suppress indentation.  Redefine \everypar to
-+% \kern backwards by \parindent, and then reset itself to empty.
-+%
-+% We also make \indent itself not actually do anything until the next
-+% paragraph.
-+%
-+\gdef\dosuppressfirstparagraphindent{%
-+  \gdef\indent{%
-+    \restorefirstparagraphindent
-+    \indent
-+  }%
-+  \gdef\noindent{%
-+    \restorefirstparagraphindent
-+    \noindent
-+  }%
-+  \global\everypar = {%
-+    \kern -\parindent
-+    \restorefirstparagraphindent
-+  }%
++\def\doignoreyyy#1{%
++  \def\temp{#1}%
++  \ifx\temp\empty			% Nothing found.
++    \let\next\doignoretextzzz
++  \else					% Found a nested condition, ...
++    \advance\doignorecount by 1
++    \let\next\doignoretextyyy		% ..., look for another.
++    % If we're here, #1 ends with ^^M\ifinfo (for example).
++  \fi
++  \next #1% the token \_STOP_ is present just after this macro.
 +}
 +
-+\gdef\restorefirstparagraphindent{%
-+  \global \let \indent = \ptexindent
-+  \global \let \noindent = \ptexnoindent
-+  \global \everypar = {}%
++% We have to swallow the remaining "\_STOP_".
++%
++\def\doignoretextzzz#1{%
++  \ifnum\doignorecount = 0	% We have just found the outermost @end.
++    \let\next\enddoignore
++  \else				% Still inside a nested condition.
++    \advance\doignorecount by -1
++    \let\next\doignoretext      % Look for the next @end.
++  \fi
++  \next
+ }
+ 
++% Finish off ignored text.
++{ \obeylines%
++  % Ignore anything after the last `@end #1'; this matters in verbatim
++  % environments, where otherwise the newline after an ignored conditional
++  % would result in a blank line in the output.
++  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
 +}
 +
 +
- % @asis just yields its argument.  Used with @table, for example.
+ % @set VAR sets the variable VAR to an empty value.
+ % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
  %
- \def\asis#1{#1}
+ % Since we want to separate VAR from REST-OF-LINE (which might be
+ % empty), we can't just use \parsearg; we have to insert a space of our
+ % own to delimit the rest of the line, and then take it out again if we
+-% didn't need it.  Make sure the catcode of space is correct to avoid
+-% losing inside @example, for instance.
++% didn't need it.
++% We rely on the fact that \parsearg sets \catcode`\ =10.
+ %
+-\def\set{\begingroup\catcode` =10
+-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+-  \parsearg\setxxx}
+-\def\setxxx#1{\setyyy#1 \endsetyyy}
++\parseargdef\set{\setyyy#1 \endsetyyy}
+ \def\setyyy#1 #2\endsetyyy{%
+-  \def\temp{#2}%
+-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+-  \fi
+-  \endgroup
++  {%
++    \makevalueexpandable
++    \def\temp{#2}%
++    \edef\next{\gdef\makecsname{SET#1}}%
++    \ifx\temp\empty
++      \next{}%
++    \else
++      \setzzz#2\endsetzzz
++    \fi
++  }%
+ }
+-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
+-% \next or other control sequences that we've defined might get us into
+-% an infinite loop. Consider `@set foo @cite{bar}'.
+-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
++% Remove the trailing space \setxxx inserted.
++\def\setzzz#1 \endsetzzz{\next{#1}}
  
--% @math means output in math mode.
--% We don't use $'s directly in the definition of \math because control
--% sequences like \math are expanded when the toc file is written.  Then,
--% we read the toc file back, the $'s will be normal characters (as they
--% should be, according to the definition of Texinfo).  So we must use a
--% control sequence to switch into and out of math mode.
-+% @math outputs its argument in math mode.
+ % @clear VAR clears (i.e., unsets) the variable VAR.
  %
--% This isn't quite enough for @math to work properly in indices, but it
--% seems unlikely it will ever be needed there.
-+% One complication: _ usually means subscripts, but it could also mean
-+% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
-+% _ active, and distinguish by seeing if the current family is \slfam,
-+% which is what @var uses.
-+{
-+  \catcode`\_ = \active
-+  \gdef\mathunderscore{%
-+    \catcode`\_=\active
-+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-+  }
+-\def\clear{\parsearg\clearxxx}
+-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
++\parseargdef\clear{%
++  {%
++    \makevalueexpandable
++    \global\expandafter\let\csname SET#1\endcsname=\relax
++  }%
 +}
-+% Another complication: we want \\ (and @\) to output a \ character.
-+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
-+% this is not advertised and we don't care.  Texinfo does not
-+% otherwise define @\.
+ 
+ % @value{foo} gets the text saved in variable foo.
++\def\value{\begingroup\makevalueexpandable\valuexxx}
++\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+ {
+-  \catcode`\_ = \active
++  \catcode`\- = \active \catcode`\_ = \active
+   %
+-  % We might end up with active _ or - characters in the argument if
+-  % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
+-  % such active characters to their normal equivalents.
+-  \gdef\value{\begingroup
+-    \catcode`\-=12 \catcode`\_=12
+-    \indexbreaks \let_\normalunderscore
+-    \valuexxx}
++  \gdef\makevalueexpandable{%
++    \let\value = \expandablevalue
++    % We don't want these characters active, ...
++    \catcode`\-=\other \catcode`\_=\other
++    % ..., but we might end up with active ones in the argument if
++    % we're called from @code, as @code{@value{foo-bar_}}, though.
++    % So \let them to their normal equivalents.
++    \let-\realdash \let_\normalunderscore
++  }
+ }
+-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+ 
+ % We have this subroutine so that we can handle at least some @value's
+-% properly in indexes (we \let\value to this in \indexdummies).  Ones
+-% whose names contain - or _ still won't work, but we can't do anything
+-% about that.  The command has to be fully expandable, since the result
+-% winds up in the index file.  This means that if the variable's value
+-% contains other Texinfo commands, it's almost certain it will fail
+-% (although perhaps we could fix that with sufficient work to do a
+-% one-level expansion on the result, instead of complete).
++% properly in indexes (we call \makevalueexpandable in \indexdummies).
++% The command has to be fully expandable (if the variable is set), since
++% the result winds up in the index file.  This means that if the
++% variable's value contains other Texinfo commands, it's almost certain
++% it will fail (although perhaps we could fix that with sufficient work
++% to do a one-level expansion on the result, instead of complete).
  %
--\let\implicitmath = $
--\def\math#1{\implicitmath #1\implicitmath}
-+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+ \def\expandablevalue#1{%
+   \expandafter\ifx\csname SET#1\endcsname\relax
+     {[No value for ``#1'']}%
++    \message{Variable `#1', used in @value, is not set.}%
+   \else
+     \csname SET#1\endcsname
+   \fi
+@@ -2496,66 +3783,36 @@
+ % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+ % with @set.
+ %
+-\def\ifset{\parsearg\ifsetxxx}
+-\def\ifsetxxx #1{%
+-  \expandafter\ifx\csname SET#1\endcsname\relax
+-    \expandafter\ifsetfail
+-  \else
+-    \expandafter\ifsetsucceed
+-  \fi
++% To get special treatment of `@end ifset,' call \makeond and the redefine.
 +%
-+\def\math{%
-+  \tex
-+  \mathunderscore
-+  \let\\ = \mathbackslash
-+  \mathactive
-+  % make the texinfo accent commands work in math mode
-+  \let\"=\ddot
-+  \let\'=\acute
-+  \let\==\bar
-+  \let\^=\hat
-+  \let\`=\grave
-+  \let\u=\breve
-+  \let\v=\check
-+  \let\~=\tilde
-+  \let\dotaccent=\dot
-+  $\finishmath
-+}
-+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
++\makecond{ifset}
++\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
++\def\doifset#1#2{%
++  {%
++    \makevalueexpandable
++    \let\next=\empty
++    \expandafter\ifx\csname SET#2\endcsname\relax
++      #1% If not set, redefine \next.
++    \fi
++    \expandafter
++  }\next
+ }
+-\def\ifsetsucceed{\conditionalsucceed{ifset}}
+-\def\ifsetfail{\nestedignore{ifset}}
+-\defineunmatchedend{ifset}
++\def\ifsetfail{\doignore{ifset}}
+ 
+ % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+ % defined with @set, or has been undefined with @clear.
+ %
+-\def\ifclear{\parsearg\ifclearxxx}
+-\def\ifclearxxx #1{%
+-  \expandafter\ifx\csname SET#1\endcsname\relax
+-    \expandafter\ifclearsucceed
+-  \else
+-    \expandafter\ifclearfail
+-  \fi
+-}
+-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
+-\def\ifclearfail{\nestedignore{ifclear}}
+-\defineunmatchedend{ifclear}
+-
+-% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
+-% following, through the first @end iftex (etc.).  Make `@end iftex'
+-% (etc.) valid only after an @iftex.
+-%
+-\def\iftex{\conditionalsucceed{iftex}}
+-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
+-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
+-\defineunmatchedend{iftex}
+-\defineunmatchedend{ifnothtml}
+-\defineunmatchedend{ifnotinfo}
+-
+-% We can't just want to start a group at @iftex (for example) and end it
+-% at @end iftex, since then @set commands inside the conditional have no
+-% effect (they'd get reverted at the end of the group).  So we must
+-% define \Eiftex to redefine itself to be its previous value.  (We can't
+-% just define it to fail again with an ``unmatched end'' error, since
+-% the @ifset might be nested.)
++% The `\else' inside the `\doifset' parameter is a trick to reuse the
++% above code: if the variable is not set, do nothing, if it is set,
++% then redefine \next to \ifclearfail.
+ %
+-\def\conditionalsucceed#1{%
+-  \edef\temp{%
+-    % Remember the current value of \E#1.
+-    \let\nece{prevE#1} = \nece{E#1}%
+-    %
+-    % At the `@end #1', redefine \E#1 to be its previous value.
+-    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
+-  }%
+-  \temp
+-}
++\makecond{ifclear}
++\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
++\def\ifclearfail{\doignore{ifclear}}
+ 
+-% We need to expand lots of \csname's, but we don't want to expand the
+-% control sequences after we've constructed them.
+-%
+-\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
++% @dircategory CATEGORY  -- specify a category of the dir file
++% which this file should belong to.  Ignore this in TeX.
++\let\dircategory=\comment
+ 
+ % @defininfoenclose.
+ \let\definfoenclose=\comment
+@@ -2565,9 +3822,8 @@
+ % Index generation facilities
+ 
+ % Define \newwrite to be identical to plain tex's \newwrite
+-% except not \outer, so it can be used within \newindex.
+-{\catcode`\@=11
+-\gdef\newwrite{\alloc at 7\write\chardef\sixt@@n}}
++% except not \outer, so it can be used within macros and \if's.
++\edef\newwrite{\makecsname{ptexnewwrite}}
  
--% @bullet and @minus need the same treatment as @math, just above.
--\def\bullet{\implicitmath\ptexbullet\implicitmath}
--\def\minus{\implicitmath-\implicitmath}
-+% Some active characters (such as <) are spaced differently in math.
-+% We have to reset their definitions in case the @math was an argument
-+% to a command which sets the catcodes (such as @item or @section).
-+%
-+{
-+  \catcode`^ = \active
-+  \catcode`< = \active
-+  \catcode`> = \active
-+  \catcode`+ = \active
-+  \gdef\mathactive{%
-+    \let^ = \ptexhat
-+    \let< = \ptexless
-+    \let> = \ptexgtr
-+    \let+ = \ptexplus
-+  }
-+}
-+
-+% Some math mode symbols.
-+\def\bullet{$\ptexbullet$}
-+\def\geq{\ifmmode \ge\else $\ge$\fi}
-+\def\leq{\ifmmode \le\else $\le$\fi}
-+\def\minus{\ifmmode -\else $-$\fi}
-+
-+% @dots{} outputs an ellipsis using the current font.
-+% We do .5em per period so that it has the same spacing in the cm
-+% typewriter fonts as three actual period characters; on the other hand,
-+% in other typewriter fonts three periods are wider than 1.5em.  So do
-+% whichever is larger.
+ % \newindex {foo} defines an index named foo.
+ % It automatically defines \fooindex such that
+@@ -2587,42 +3843,48 @@
+ }
+ 
+ % @defindex foo  ==  \newindex{foo}
+-
 +%
-+\def\dots{%
-+  \leavevmode
-+  \setbox0=\hbox{...}% get width of three periods
-+  \ifdim\wd0 > 1.5em
-+    \dimen0 = \wd0
-+  \else
-+    \dimen0 = 1.5em
-+  \fi
-+  \hbox to \dimen0{%
-+    \hskip 0pt plus.25fil
-+    .\hskip 0pt plus1fil
-+    .\hskip 0pt plus1fil
-+    .\hskip 0pt plus.5fil
-+  }%
-+}
-+
-+% @enddots{} is an end-of-sentence ellipsis.
+ \def\defindex{\parsearg\newindex}
+ 
+ % Define @defcodeindex, like @defindex except put all entries in @code.
+-
 +%
-+\def\enddots{%
-+  \dots
-+  \spacefactor=\endofsentencespacefactor
-+}
-+
-+% @comma{} is so commas can be inserted into text without messing up
-+% Texinfo's parsing.
++\def\defcodeindex{\parsearg\newcodeindex}
 +%
-+\let\comma = ,
- 
- % @refill is a no-op.
- \let\refill=\relax
-@@ -815,20 +1204,20 @@
- % So open here the files we need to have open while reading the input.
- % This makes it possible to make a .fmt file for texinfo.
- \def\setfilename{%
-+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-    \iflinks
--     \readauxfile
-+     \tryauxfile
-+     % Open the new aux file.  TeX will close it automatically at exit.
-+     \immediate\openout\auxfile=\jobname.aux
-    \fi % \openindices needs to do some work in any case.
-    \openindices
--   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
--   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-+   \let\setfilename=\comment % Ignore extra @setfilename cmds.
-    %
-    % If texinfo.cnf is present on the system, read it.
-    % Useful for site-wide @afourpaper, etc.
--   % Just to be on the safe side, close the input stream before the \input.
-    \openin 1 texinfo.cnf
--   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
--   \closein1
--   \temp
-+   \ifeof 1 \else \input texinfo.cnf \fi
-+   \closein 1
-    %
-    \comment % Ignore the actual filename.
+ \def\newcodeindex#1{%
+   \iflinks
+     \expandafter\newwrite \csname#1indfile\endcsname
+     \openout \csname#1indfile\endcsname \jobname.#1
+   \fi
+   \expandafter\xdef\csname#1index\endcsname{%
+-    \noexpand\docodeindex{#1}}
++    \noexpand\docodeindex{#1}}%
  }
-@@ -864,111 +1253,294 @@
- \newif\ifpdf
- \newif\ifpdfmakepagedest
  
-+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
-+% can be set).  So we test for \relax and 0 as well as \undefined,
-+% borrowed from ifpdf.sty.
- \ifx\pdfoutput\undefined
--  \pdffalse
--  \let\pdfmkdest = \gobble
--  \let\pdfurl = \gobble
--  \let\endlink = \relax
--  \let\linkcolor = \relax
--  \let\pdfmakeoutlines = \relax
- \else
--  \pdftrue
--  \pdfoutput = 1
--  \input pdfcolor
-+  \ifx\pdfoutput\relax
-+  \else
-+    \ifcase\pdfoutput
-+    \else
-+      \pdftrue
-+    \fi
-+  \fi
-+\fi
-+
-+% PDF uses PostScript string constants for the names of xref targets,
-+% for display in the outlines, and in other places.  Thus, we have to
-+% double any backslashes.  Otherwise, a name like "\node" will be
-+% interpreted as a newline (\n), followed by o, d, e.  Not good.
-+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
-+% (and related messages, the final outcome is that it is up to the TeX
-+% user to double the backslashes and otherwise make the string valid, so
-+% that's what we do).
-+
-+% double active backslashes.
-+% 
-+{\catcode`\@=0 \catcode`\\=\active
-+ @gdef at activebackslashdouble{%
-+   @catcode`@\=@active
-+   @let\=@doublebackslash}
-+}
-+
-+% To handle parens, we must adopt a different approach, since parens are
-+% not active characters.  hyperref.dtx (which has the same problem as
-+% us) handles it with this amazing macro to replace tokens, with minor
-+% changes for Texinfo.  It is included here under the GPL by permission
-+% from the author, Heiko Oberdiek.
-+% 
-+% #1 is the tokens to replace.
-+% #2 is the replacement.
-+% #3 is the control sequence with the string.
-+% 
-+\def\HyPsdSubst#1#2#3{%
-+  \def\HyPsdReplace##1#1##2\END{%
-+    ##1%
-+    \ifx\\##2\\%
-+    \else
-+      #2%
-+      \HyReturnAfterFi{%
-+        \HyPsdReplace##2\END
-+      }%
-+    \fi
-+  }%
-+  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
-+}
-+\long\def\HyReturnAfterFi#1\fi{\fi#1}
-+
-+% #1 is a control sequence in which to do the replacements.
-+\def\backslashparens#1{%
-+  \xdef#1{#1}% redefine it as its expansion; the definition is simply
-+             % \lastnode when called from \setref -> \pdfmkdest.
-+  \HyPsdSubst{(}{\realbackslash(}{#1}%
-+  \HyPsdSubst{)}{\realbackslash)}{#1}%
-+}
-+
-+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
-+with PDF output, and none of those formats could be found.  (.eps cannot
-+be supported due to the design of the PDF format; use regular TeX (DVI
-+output) for that.)}
+-\def\defcodeindex{\parsearg\newcodeindex}
+ 
+ % @synindex foo bar    makes index foo feed into index bar.
+ % Do this instead of @defindex foo if you don't want it as a separate index.
+-% The \closeout helps reduce unnecessary open files; the limit on the
+-% Acorn RISC OS is a mere 16 files.
+-\def\synindex#1 #2 {%
+-  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+-  \expandafter\closeout\csname#1indfile\endcsname
+-  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+-  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+-    \noexpand\doindex{#2}}%
+-}
+-
++%
+ % @syncodeindex foo bar   similar, but put all entries made for index foo
+ % inside @code.
+-\def\syncodeindex#1 #2 {%
+-  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+-  \expandafter\closeout\csname#1indfile\endcsname
+-  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
+-  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
+-    \noexpand\docodeindex{#2}}%
++%
++\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
++\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
 +
-+\ifpdf
-+  %
-+  % Color manipulation macros based on pdfcolor.tex.
-+  \def\cmykDarkRed{0.28 1 1 0.35}
-+  \def\cmykBlack{0 0 0 1}
-+  %
-+  \def\pdfsetcolor#1{\pdfliteral{#1 k}}
-+  % Set color, and create a mark which defines \thiscolor accordingly,
-+  % so that \makeheadline knows which color to restore.
-+  \def\setcolor#1{%
-+    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
-+    \domark
-+    \pdfsetcolor{#1}%
-+  }
-+  %
-+  \def\maincolor{\cmykBlack}
-+  \pdfsetcolor{\maincolor}
-+  \edef\thiscolor{\maincolor}
-+  \def\lastcolordefs{}
-+  %
-+  \def\makefootline{%
-+    \baselineskip24pt
-+    \line{\pdfsetcolor{\maincolor}\the\footline}%
-+  }
++% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
++% #3 the target index (bar).
++\def\dosynindex#1#2#3{%
++  % Only do \closeout if we haven't already done it, else we'll end up
++  % closing the target index.
++  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
++    % The \closeout helps reduce unnecessary open files; the limit on the
++    % Acorn RISC OS is a mere 16 files.
++    \expandafter\closeout\csname#2indfile\endcsname
++    \expandafter\let\csname\donesynindex#2\endcsname = 1
++  \fi
++  % redefine \fooindfile:
++  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
++  \expandafter\let\csname#2indfile\endcsname=\temp
++  % redefine \fooindex:
++  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+ }
+ 
+ % Define \doindex, the driver for all \fooindex macros.
+@@ -2642,265 +3904,445 @@
+ \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+ \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+ 
+-\def\indexdummies{%
+-\def\ { }%
+-% Take care of the plain tex accent commands.
+-\def\"{\realbackslash "}%
+-\def\`{\realbackslash `}%
+-\def\'{\realbackslash '}%
+-\def\^{\realbackslash ^}%
+-\def\~{\realbackslash ~}%
+-\def\={\realbackslash =}%
+-\def\b{\realbackslash b}%
+-\def\c{\realbackslash c}%
+-\def\d{\realbackslash d}%
+-\def\u{\realbackslash u}%
+-\def\v{\realbackslash v}%
+-\def\H{\realbackslash H}%
+-% Take care of the plain tex special European modified letters.
+-\def\oe{\realbackslash oe}%
+-\def\ae{\realbackslash ae}%
+-\def\aa{\realbackslash aa}%
+-\def\OE{\realbackslash OE}%
+-\def\AE{\realbackslash AE}%
+-\def\AA{\realbackslash AA}%
+-\def\o{\realbackslash o}%
+-\def\O{\realbackslash O}%
+-\def\l{\realbackslash l}%
+-\def\L{\realbackslash L}%
+-\def\ss{\realbackslash ss}%
+-% Take care of texinfo commands likely to appear in an index entry.
+-% (Must be a way to avoid doing expansion at all, and thus not have to
+-% laboriously list every single command here.)
+-\def\@{@}% will be @@ when we switch to @ as escape char.
+-% Need these in case \tex is in effect and \{ is a \delimiter again.
+-% But can't use \lbracecmd and \rbracecmd because texindex assumes
+-% braces and backslashes are used only as delimiters.  
+-\let\{ = \mylbrace
+-\let\} = \myrbrace
+-\def\_{{\realbackslash _}}%
+-\def\w{\realbackslash w }%
+-\def\bf{\realbackslash bf }%
+-%\def\rm{\realbackslash rm }%
+-\def\sl{\realbackslash sl }%
+-\def\sf{\realbackslash sf}%
+-\def\tt{\realbackslash tt}%
+-\def\gtr{\realbackslash gtr}%
+-\def\less{\realbackslash less}%
+-\def\hat{\realbackslash hat}%
+-\def\TeX{\realbackslash TeX}%
+-\def\dots{\realbackslash dots }%
+-\def\result{\realbackslash result}%
+-\def\equiv{\realbackslash equiv}%
+-\def\expansion{\realbackslash expansion}%
+-\def\print{\realbackslash print}%
+-\def\error{\realbackslash error}%
+-\def\point{\realbackslash point}%
+-\def\copyright{\realbackslash copyright}%
+-\def\tclose##1{\realbackslash tclose {##1}}%
+-\def\code##1{\realbackslash code {##1}}%
+-\def\uref##1{\realbackslash uref {##1}}%
+-\def\url##1{\realbackslash url {##1}}%
+-\def\env##1{\realbackslash env {##1}}%
+-\def\command##1{\realbackslash command {##1}}%
+-\def\option##1{\realbackslash option {##1}}%
+-\def\dotless##1{\realbackslash dotless {##1}}%
+-\def\samp##1{\realbackslash samp {##1}}%
+-\def\,##1{\realbackslash ,{##1}}%
+-\def\t##1{\realbackslash t {##1}}%
+-\def\r##1{\realbackslash r {##1}}%
+-\def\i##1{\realbackslash i {##1}}%
+-\def\b##1{\realbackslash b {##1}}%
+-\def\sc##1{\realbackslash sc {##1}}%
+-\def\cite##1{\realbackslash cite {##1}}%
+-\def\key##1{\realbackslash key {##1}}%
+-\def\file##1{\realbackslash file {##1}}%
+-\def\var##1{\realbackslash var {##1}}%
+-\def\kbd##1{\realbackslash kbd {##1}}%
+-\def\dfn##1{\realbackslash dfn {##1}}%
+-\def\emph##1{\realbackslash emph {##1}}%
+-\def\acronym##1{\realbackslash acronym {##1}}%
++% Take care of Texinfo commands that can appear in an index entry.
++% Since there are some commands we want to expand, and others we don't,
++% we have to laboriously prevent expansion for those that we don't.
+ %
+-% Handle some cases of @value -- where the variable name does not
+-% contain - or _, and the value does not contain any
+-% (non-fully-expandable) commands.
+-\let\value = \expandablevalue
++\def\indexdummies{%
++  \escapechar = `\\     % use backslash in output files.
++  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
++  \def\ {\realbackslash\space }%
 +  %
-+  \def\makeheadline{%
-+    \vbox to 0pt{%
-+      \vskip-22.5pt
-+      \line{%
-+        \vbox to8.5pt{}%
-+        % Extract \thiscolor definition from the marks.
-+        \getcolormarks
-+        % Typeset the headline with \maincolor, then restore the color.
-+        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
-+      }%
-+      \vss
-+    }%
-+    \nointerlineskip
-+  }
++  % Need these in case \tex is in effect and \{ is a \delimiter again.
++  % But can't use \lbracecmd and \rbracecmd because texindex assumes
++  % braces and backslashes are used only as delimiters.
++  \let\{ = \mylbrace
++  \let\} = \myrbrace
 +  %
++  % I don't entirely understand this, but when an index entry is
++  % generated from a macro call, the \endinput which \scanmacro inserts
++  % causes processing to be prematurely terminated.  This is,
++  % apparently, because \indexsorttmp is fully expanded, and \endinput
++  % is an expandable command.  The redefinition below makes \endinput
++  % disappear altogether for that purpose -- although logging shows that
++  % processing continues to some further point.  On the other hand, it
++  % seems \endinput does not hurt in the printed index arg, since that
++  % is still getting written without apparent harm.
++  % 
++  % Sample source (mac-idx3.tex, reported by Graham Percival to
++  % help-texinfo, 22may06):
++  % @macro funindex {WORD}
++  % @findex xyz
++  % @end macro
++  % ...
++  % @funindex commtest
++  % 
++  % The above is not enough to reproduce the bug, but it gives the flavor.
++  % 
++  % Sample whatsit resulting:
++  % . at write3{\entry{xyz}{@folio }{@code {xyz at endinput }}}
++  % 
++  % So:
++  \let\endinput = \empty
 +  %
-+  \pdfcatalog{/PageMode /UseOutlines}
++  % Do the redefinitions.
++  \commondummies
++}
++
++% For the aux and toc files, @ is the escape character.  So we want to
++% redefine everything using @ as the escape character (instead of
++% \realbackslash, still used for index files).  When everything uses @,
++% this will be simpler.
+ %
+-\unsepspaces
+-% Turn off macro expansion
+-\turnoffmacros
++\def\atdummies{%
++  \def\@{@@}%
++  \def\ {@ }%
++  \let\{ = \lbraceatcmd
++  \let\} = \rbraceatcmd
 +  %
-+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
-   \def\dopdfimage#1#2#3{%
--    \def\imagewidth{#2}%
--    \def\imageheight{#3}%
-+    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
-+    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
-+    %
-+    % pdftex (and the PDF format) support .png, .jpg, .pdf (among
-+    % others).  Let's try in that order.
-+    \let\pdfimgext=\empty
-+    \begingroup
-+      \openin 1 #1.png \ifeof 1
-+        \openin 1 #1.jpg \ifeof 1
-+          \openin 1 #1.jpeg \ifeof 1
-+            \openin 1 #1.JPG \ifeof 1
-+              \openin 1 #1.pdf \ifeof 1
-+                \openin 1 #1.PDF \ifeof 1
-+                  \errhelp = \nopdfimagehelp
-+                  \errmessage{Could not find image file #1 for pdf}%
-+                \else \gdef\pdfimgext{PDF}%
-+                \fi
-+              \else \gdef\pdfimgext{pdf}%
-+              \fi
-+            \else \gdef\pdfimgext{JPG}%
-+            \fi
-+          \else \gdef\pdfimgext{jpeg}%
-+          \fi
-+        \else \gdef\pdfimgext{jpg}%
-+        \fi
-+      \else \gdef\pdfimgext{png}%
-+      \fi
-+      \closein 1
-+    \endgroup
-+    %
-+    % without \immediate, ancient pdftex seg faults when the same image is
-+    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
-     \ifnum\pdftexversion < 14
--      \pdfimage
-+      \immediate\pdfimage
-     \else
--      \pdfximage
-+      \immediate\pdfximage
-     \fi
--      \ifx\empty\imagewidth\else width \imagewidth \fi
--      \ifx\empty\imageheight\else height \imageheight \fi
--      {#1.pdf}%
-+      \ifdim \wd0 >0pt width \imagewidth \fi
-+      \ifdim \wd2 >0pt height \imageheight \fi
-+      \ifnum\pdftexversion<13
-+         #1.\pdfimgext
-+       \else
-+         {#1.\pdfimgext}%
-+       \fi
-     \ifnum\pdftexversion < 14 \else
-       \pdfrefximage \pdflastximage
-     \fi}
--  \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
--  \def\pdfmkpgn#1{#1@}
--  \let\linkcolor = \Cyan
--  \def\endlink{\Black\pdfendlink}
++  % Do the redefinitions.
++  \commondummies
++  \otherbackslash
+ }
+ 
+-% If an index command is used in an @example environment, any spaces
+-% therein should become regular spaces in the raw index file, not the
+-% expansion of \tie (\\leavevmode \penalty \@M \ ).
+-{\obeyspaces
+- \gdef\unsepspaces{\obeyspaces\let =\space}}
++% Called from \indexdummies and \atdummies.
++%
++\def\commondummies{%
 +  %
-+  \def\pdfmkdest#1{{%
-+    % We have to set dummies so commands such as @code, and characters
-+    % such as \, aren't expanded when present in a section title.
-+    \indexnofonts
-+    \turnoffactive
-+    \activebackslashdouble
-+    \makevalueexpandable
-+    \def\pdfdestname{#1}%
-+    \backslashparens\pdfdestname
-+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
-+  }}
++  % \definedummyword defines \#1 as \string\#1\space, thus effectively
++  % preventing its expansion.  This is used only for control% words,
++  % not control letters, because the \space would be incorrect for
++  % control characters, but is needed to separate the control word
++  % from whatever follows.
 +  %
-+  % used to mark target names; must be expandable.
-+  \def\pdfmkpgn#1{#1}
++  % For control letters, we have \definedummyletter, which omits the
++  % space.
 +  %
-+  % by default, use a color that is dark enough to print on paper as
-+  % nearly black, but still distinguishable for online viewing.
-+  \def\urlcolor{\cmykDarkRed}
-+  \def\linkcolor{\cmykDarkRed}
-+  \def\endlink{\setcolor{\maincolor}\pdfendlink}
++  % These can be used both for control words that take an argument and
++  % those that do not.  If it is followed by {arg} in the input, then
++  % that will dutifully get written to the index (or wherever).
 +  %
-   % Adding outlines to PDF; macros for calculating structure of outlines
-   % come from Petr Olsak
-   \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
-     \else \csname#1\endcsname \fi}
-   \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
--    \advance\tempnum by1
-+    \advance\tempnum by 1
-     \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
--  \def\pdfmakeoutlines{{%
--    \openin 1 \jobname.toc
--    \ifeof 1\else\bgroup
--      \closein 1 
--      \indexnofonts
--      \def\tt{}
--      % thanh's hack / proper braces in bookmarks  
--      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
--      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
--      %
--      \def\chapentry ##1##2##3{}
--      \def\unnumbchapentry ##1##2{}
--      \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
--      \def\unnumbsecentry ##1##2{}
--      \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
--      \def\unnumbsubsecentry ##1##2{}
--      \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
--      \def\unnumbsubsubsecentry ##1##2{}
--      \input \jobname.toc
--      \def\chapentry ##1##2##3{%
--        \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
--      \def\unnumbchapentry ##1##2{%
--        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
--      \def\secentry ##1##2##3##4{%
--        \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
--      \def\unnumbsecentry ##1##2{%
--        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
--      \def\subsecentry ##1##2##3##4##5{%
--        \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
--      \def\unnumbsubsecentry ##1##2{%
--        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
--      \def\subsubsecentry ##1##2##3##4##5##6{%
--        \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
--      \def\unnumbsubsubsecentry ##1##2{%
--        \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
--      \input \jobname.toc
--    \egroup\fi
--  }}
--  \def\makelinks #1,{%
--    \def\params{#1}\def\E{END}%
--    \ifx\params\E
--      \let\nextmakelinks=\relax
++  \def\definedummyword  ##1{\def##1{\string##1\space}}%
++  \def\definedummyletter##1{\def##1{\string##1}}%
++  \let\definedummyaccent\definedummyletter
 +  %
-+  % #1 is the section text, which is what will be displayed in the
-+  % outline by the pdf viewer.  #2 is the pdf expression for the number
-+  % of subentries (or empty, for subsubsections).  #3 is the node text,
-+  % which might be empty if this toc entry had no corresponding node.
-+  % #4 is the page number
++  \commondummiesnofonts
 +  %
-+  \def\dopdfoutline#1#2#3#4{%
-+    % Generate a link to the node text if that exists; else, use the
-+    % page number.  We could generate a destination for the section
-+    % text in the case where a section has no node, but it doesn't
-+    % seem worth the trouble, since most documents are normally structured.
-+    \def\pdfoutlinedest{#3}%
-+    \ifx\pdfoutlinedest\empty
-+      \def\pdfoutlinedest{#4}%
-     \else
--      \let\nextmakelinks=\makelinks
--      \ifnum\lnkcount>0,\fi
--      \picknum{#1}%
--      \startlink attr{/Border [0 0 0]} 
--        goto name{\pdfmkpgn{\the\pgn}}%
--      \linkcolor #1%
--      \advance\lnkcount by 1%
--      \endlink
-+      % Doubled backslashes in the name.
-+      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
-+       \backslashparens\pdfoutlinedest}%
-     \fi
--    \nextmakelinks
-+    %
-+    % Also double the backslashes in the display string.
-+    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
-+     \backslashparens\pdfoutlinetext}%
-+    %
-+    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
-   }
--  \def\picknum#1{\expandafter\pn#1}
--  \def\pn#1{%
--    \def\p{#1}%
--    \ifx\p\lbrace
--      \let\nextpn=\ppn
--    \else
--      \let\nextpn=\ppnn
--      \def\first{#1}
--    \fi
--    \nextpn
++  \definedummyletter\_%
 +  %
-+  \def\pdfmakeoutlines{%
-+    \begingroup
-+      % Thanh's hack / proper braces in bookmarks
-+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-+      %
-+      % Read toc silently, to get counts of subentries for \pdfoutline.
-+      \def\numchapentry##1##2##3##4{%
-+	\def\thischapnum{##2}%
-+	\def\thissecnum{0}%
-+	\def\thissubsecnum{0}%
-+      }%
-+      \def\numsecentry##1##2##3##4{%
-+	\advancenumber{chap\thischapnum}%
-+	\def\thissecnum{##2}%
-+	\def\thissubsecnum{0}%
-+      }%
-+      \def\numsubsecentry##1##2##3##4{%
-+	\advancenumber{sec\thissecnum}%
-+	\def\thissubsecnum{##2}%
-+      }%
-+      \def\numsubsubsecentry##1##2##3##4{%
-+	\advancenumber{subsec\thissubsecnum}%
-+      }%
-+      \def\thischapnum{0}%
-+      \def\thissecnum{0}%
-+      \def\thissubsecnum{0}%
-+      %
-+      % use \def rather than \let here because we redefine \chapentry et
-+      % al. a second time, below.
-+      \def\appentry{\numchapentry}%
-+      \def\appsecentry{\numsecentry}%
-+      \def\appsubsecentry{\numsubsecentry}%
-+      \def\appsubsubsecentry{\numsubsubsecentry}%
-+      \def\unnchapentry{\numchapentry}%
-+      \def\unnsecentry{\numsecentry}%
-+      \def\unnsubsecentry{\numsubsecentry}%
-+      \def\unnsubsubsecentry{\numsubsubsecentry}%
-+      \readdatafile{toc}%
-+      %
-+      % Read toc second time, this time actually producing the outlines.
-+      % The `-' means take the \expnumber as the absolute number of
-+      % subentries, which we calculated on our first read of the .toc above.
-+      %
-+      % We use the node names as the destinations.
-+      \def\numchapentry##1##2##3##4{%
-+        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
-+      \def\numsecentry##1##2##3##4{%
-+        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
-+      \def\numsubsecentry##1##2##3##4{%
-+        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
-+      \def\numsubsubsecentry##1##2##3##4{% count is always zero
-+        \dopdfoutline{##1}{}{##3}{##4}}%
-+      %
-+      % PDF outlines are displayed using system fonts, instead of
-+      % document fonts.  Therefore we cannot use special characters,
-+      % since the encoding is unknown.  For example, the eogonek from
-+      % Latin 2 (0xea) gets translated to a | character.  Info from
-+      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
-+      %
-+      % xx to do this right, we have to translate 8-bit characters to
-+      % their "best" equivalent, based on the @documentencoding.  Right
-+      % now, I guess we'll just let the pdf reader have its way.
-+      \indexnofonts
-+      \setupdatafile
-+      \catcode`\\=\active \otherbackslash
-+      \input \tocreadfilename
-+    \endgroup
-   }
--  \def\ppn#1{\pgn=#1\gobble}
--  \def\ppnn{\pgn=\first}
--  \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
--  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
++  % Non-English letters.
++  \definedummyword\AA
++  \definedummyword\AE
++  \definedummyword\L
++  \definedummyword\OE
++  \definedummyword\O
++  \definedummyword\aa
++  \definedummyword\ae
++  \definedummyword\l
++  \definedummyword\oe
++  \definedummyword\o
++  \definedummyword\ss
++  \definedummyword\exclamdown
++  \definedummyword\questiondown
++  \definedummyword\ordf
++  \definedummyword\ordm
 +  %
-   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
-     \ifx\PP\D\let\nextsp\relax
-     \else\let\nextsp\skipspaces
-@@ -983,24 +1555,32 @@
-   \else
-     \let \startlink \pdfstartlink
-   \fi
-+  % make a live url in pdf output.
-   \def\pdfurl#1{%
-     \begingroup
--      \normalturnoffactive\def\@{@}%
--      \leavevmode\Red
-+      % it seems we really need yet another set of dummies; have not
-+      % tried to figure out what each command should do in the context
-+      % of @url.  for now, just make @/ a no-op, that's the only one
-+      % people have actually reported a problem with.
-+      % 
-+      \normalturnoffactive
-+      \def\@{@}%
-+      \let\/=\empty
-+      \makevalueexpandable
-+      \leavevmode\setcolor{\urlcolor}%
-       \startlink attr{/Border [0 0 0]}%
-         user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
--        % #1
-     \endgroup}
-   \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
-   \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-   \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
-   \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
-   \def\maketoks{%
--    \expandafter\poptoks\the\toksA|ENDTOKS|
-+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
-     \ifx\first0\adn0
-     \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
-     \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
--    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 
-+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-     \else
-       \ifnum0=\countA\else\makelink\fi
-       \ifx\first.\let\next=\done\else
-@@ -1013,33 +1593,348 @@
-   \def\makelink{\addtokens{\toksB}%
-     {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-   \def\pdflink#1{%
--    \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
--    \linkcolor #1\endlink}
--  \def\mkpgn#1{#1@} 
-+    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-+    \setcolor{\linkcolor}#1\endlink}
-   \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
--\fi % \ifx\pdfoutput
-+\else
-+  \let\pdfmkdest = \gobble
-+  \let\pdfurl = \gobble
-+  \let\endlink = \relax
-+  \let\setcolor = \gobble
-+  \let\pdfsetcolor = \gobble
-+  \let\pdfmakeoutlines = \relax
-+\fi  % \ifx\pdfoutput
- 
++  % Although these internal commands shouldn't show up, sometimes they do.
++  \definedummyword\bf
++  \definedummyword\gtr
++  \definedummyword\hat
++  \definedummyword\less
++  \definedummyword\sf
++  \definedummyword\sl
++  \definedummyword\tclose
++  \definedummyword\tt
++  %
++  \definedummyword\LaTeX
++  \definedummyword\TeX
++  %
++  % Assorted special characters.
++  \definedummyword\bullet
++  \definedummyword\comma
++  \definedummyword\copyright
++  \definedummyword\registeredsymbol
++  \definedummyword\dots
++  \definedummyword\enddots
++  \definedummyword\equiv
++  \definedummyword\error
++  \definedummyword\euro
++  \definedummyword\guillemetleft
++  \definedummyword\guillemetright
++  \definedummyword\guilsinglleft
++  \definedummyword\guilsinglright
++  \definedummyword\expansion
++  \definedummyword\minus
++  \definedummyword\pounds
++  \definedummyword\point
++  \definedummyword\print
++  \definedummyword\quotedblbase
++  \definedummyword\quotedblleft
++  \definedummyword\quotedblright
++  \definedummyword\quoteleft
++  \definedummyword\quoteright
++  \definedummyword\quotesinglbase
++  \definedummyword\result
++  \definedummyword\textdegree
++  %
++  % We want to disable all macros so that they are not expanded by \write.
++  \macrolist
++  %
++  \normalturnoffactive
++  %
++  % Handle some cases of @value -- where it does not contain any
++  % (non-fully-expandable) commands.
++  \makevalueexpandable
++}
  
- \message{fonts,}
--% Font-change commands.
-+
-+% Change the current font style to #1, remembering it in \curfontstyle.
-+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-+% italics, not bold italics.
+-% \indexnofonts no-ops all font-change commands.
+-% This is used when outputting the strings to sort the index by.
+-\def\indexdummyfont#1{#1}
+-\def\indexdummytex{TeX}
+-\def\indexdummydots{...}
++% \commondummiesnofonts: common to \commondummies and \indexnofonts.
 +%
-+\def\setfontstyle#1{%
-+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
-+  \csname ten#1\endcsname  % change the current font
++\def\commondummiesnofonts{%
++  % Control letters and accents.
++  \definedummyletter\!%
++  \definedummyaccent\"%
++  \definedummyaccent\'%
++  \definedummyletter\*%
++  \definedummyaccent\,%
++  \definedummyletter\.%
++  \definedummyletter\/%
++  \definedummyletter\:%
++  \definedummyaccent\=%
++  \definedummyletter\?%
++  \definedummyaccent\^%
++  \definedummyaccent\`%
++  \definedummyaccent\~%
++  \definedummyword\u
++  \definedummyword\v
++  \definedummyword\H
++  \definedummyword\dotaccent
++  \definedummyword\ringaccent
++  \definedummyword\tieaccent
++  \definedummyword\ubaraccent
++  \definedummyword\udotaccent
++  \definedummyword\dotless
++  %
++  % Texinfo font commands.
++  \definedummyword\b
++  \definedummyword\i
++  \definedummyword\r
++  \definedummyword\sc
++  \definedummyword\t
++  %
++  % Commands that take arguments.
++  \definedummyword\acronym
++  \definedummyword\cite
++  \definedummyword\code
++  \definedummyword\command
++  \definedummyword\dfn
++  \definedummyword\emph
++  \definedummyword\env
++  \definedummyword\file
++  \definedummyword\kbd
++  \definedummyword\key
++  \definedummyword\math
++  \definedummyword\option
++  \definedummyword\pxref
++  \definedummyword\ref
++  \definedummyword\samp
++  \definedummyword\strong
++  \definedummyword\tie
++  \definedummyword\uref
++  \definedummyword\url
++  \definedummyword\var
++  \definedummyword\verb
++  \definedummyword\w
++  \definedummyword\xref
 +}
-+
-+% Select #1 fonts with the current style.
+ 
++% \indexnofonts is used when outputting the strings to sort the index
++% by, and when constructing control sequence names.  It eliminates all
++% control sequences and just writes whatever the best ASCII sort string
++% would be for a given command (usually its argument).
 +%
-+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-+
-+\def\rm{\fam=0 \setfontstyle{rm}}
-+\def\it{\fam=\itfam \setfontstyle{it}}
-+\def\sl{\fam=\slfam \setfontstyle{sl}}
-+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+ \def\indexnofonts{%
+-% Just ignore accents.
+-\let\,=\indexdummyfont
+-\let\"=\indexdummyfont
+-\let\`=\indexdummyfont
+-\let\'=\indexdummyfont
+-\let\^=\indexdummyfont
+-\let\~=\indexdummyfont
+-\let\==\indexdummyfont
+-\let\b=\indexdummyfont
+-\let\c=\indexdummyfont
+-\let\d=\indexdummyfont
+-\let\u=\indexdummyfont
+-\let\v=\indexdummyfont
+-\let\H=\indexdummyfont
+-\let\dotless=\indexdummyfont
+-% Take care of the plain tex special European modified letters.
+-\def\oe{oe}%
+-\def\ae{ae}%
+-\def\aa{aa}%
+-\def\OE{OE}%
+-\def\AE{AE}%
+-\def\AA{AA}%
+-\def\o{o}%
+-\def\O{O}%
+-\def\l{l}%
+-\def\L{L}%
+-\def\ss{ss}%
+-\let\w=\indexdummyfont
+-\let\t=\indexdummyfont
+-\let\r=\indexdummyfont
+-\let\i=\indexdummyfont
+-\let\b=\indexdummyfont
+-\let\emph=\indexdummyfont
+-\let\strong=\indexdummyfont
+-\let\cite=\indexdummyfont
+-\let\sc=\indexdummyfont
+-%Don't no-op \tt, since it isn't a user-level command
+-% and is used in the definitions of the active chars like <, >, |...
+-%\let\tt=\indexdummyfont
+-\let\tclose=\indexdummyfont
+-\let\code=\indexdummyfont
+-\let\url=\indexdummyfont
+-\let\uref=\indexdummyfont
+-\let\env=\indexdummyfont
+-\let\acronym=\indexdummyfont
+-\let\command=\indexdummyfont
+-\let\option=\indexdummyfont
+-\let\file=\indexdummyfont
+-\let\samp=\indexdummyfont
+-\let\kbd=\indexdummyfont
+-\let\key=\indexdummyfont
+-\let\var=\indexdummyfont
+-\let\TeX=\indexdummytex
+-\let\dots=\indexdummydots
+-\def\@{@}%
++  % Accent commands should become @asis.
++  \def\definedummyaccent##1{\let##1\asis}%
++  % We can just ignore other control letters.
++  \def\definedummyletter##1{\let##1\empty}%
++  % Hopefully, all control words can become @asis.
++  \let\definedummyword\definedummyaccent
++  %
++  \commondummiesnofonts
++  %
++  % Don't no-op \tt, since it isn't a user-level command
++  % and is used in the definitions of the active chars like <, >, |, etc.
++  % Likewise with the other plain tex font commands.
++  %\let\tt=\asis
++  %
++  \def\ { }%
++  \def\@{@}%
++  % how to handle braces?
++  \def\_{\normalunderscore}%
++  %
++  % Non-English letters.
++  \def\AA{AA}%
++  \def\AE{AE}%
++  \def\L{L}%
++  \def\OE{OE}%
++  \def\O{O}%
++  \def\aa{aa}%
++  \def\ae{ae}%
++  \def\l{l}%
++  \def\oe{oe}%
++  \def\o{o}%
++  \def\ss{ss}%
++  \def\exclamdown{!}%
++  \def\questiondown{?}%
++  \def\ordf{a}%
++  \def\ordm{o}%
++  %
++  \def\LaTeX{LaTeX}%
++  \def\TeX{TeX}%
++  %
++  % Assorted special characters.
++  % (The following {} will end up in the sort string, but that's ok.)
++  \def\bullet{bullet}%
++  \def\comma{,}%
++  \def\copyright{copyright}%
++  \def\registeredsymbol{R}%
++  \def\dots{...}%
++  \def\enddots{...}%
++  \def\equiv{==}%
++  \def\error{error}%
++  \def\euro{euro}%
++  \def\guillemetleft{<<}%
++  \def\guillemetright{>>}%
++  \def\guilsinglleft{<}%
++  \def\guilsinglright{>}%
++  \def\expansion{==>}%
++  \def\minus{-}%
++  \def\pounds{pounds}%
++  \def\point{.}%
++  \def\print{-|}%
++  \def\quotedblbase{"}%
++  \def\quotedblleft{"}%
++  \def\quotedblright{"}%
++  \def\quoteleft{`}%
++  \def\quoteright{'}%
++  \def\quotesinglbase{,}%
++  \def\result{=>}%
++  \def\textdegree{degrees}%
++  %
++  % We need to get rid of all macros, leaving only the arguments (if present).
++  % Of course this is not nearly correct, but it is the best we can do for now.
++  % makeinfo does not expand macros in the argument to @deffn, which ends up
++  % writing an index entry, and texindex isn't prepared for an index sort entry
++  % that starts with \.
++  % 
++  % Since macro invocations are followed by braces, we can just redefine them
++  % to take a single TeX argument.  The case of a macro invocation that
++  % goes to end-of-line is not handled.
++  % 
++  \macrolist
+ }
  
- % Texinfo sort of supports the sans serif font style, which plain TeX does not.
--% So we set up a \sf analogous to plain's \rm, etc.
-+% So we set up a \sf.
- \newfam\sffam
--\def\sf{\fam=\sffam \tensf}
-+\def\sf{\fam=\sffam \setfontstyle{sf}}
- \let\li = \sf % Sometimes we call it \li, not \sf.
+-% To define \realbackslash, we must make \ not be an escape.
+-% We must first make another character (@) an escape
+-% so we do not become unable to do a definition.
+-
+-{\catcode`\@=0 \catcode`\\=\other
+- @gdef at realbackslash{\}}
+-
+ \let\indexbackslash=0  %overridden during \printindex.
+ \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
  
--% We don't need math for this one.
--\def\ttsl{\tenttsl}
-+% We don't need math for this font style.
-+\def\ttsl{\setfontstyle{ttsl}}
-+
-+
-+% Default leading.
-+\newdimen\textleading  \textleading = 13.2pt
-+
-+% Set the baselineskip to #1, and the lineskip and strut size
-+% correspondingly.  There is no deep meaning behind these magic numbers
-+% used as factors; they just match (closely enough) what Knuth defined.
-+%
-+\def\lineskipfactor{.08333}
-+\def\strutheightpercent{.70833}
-+\def\strutdepthpercent {.29167}
-+%
-+% can get a sort of poor man's double spacing by redefining this.
-+\def\baselinefactor{1}
-+%
-+\def\setleading#1{%
-+  \dimen0 = #1\relax
-+  \normalbaselineskip = \baselinefactor\dimen0
-+  \normallineskip = \lineskipfactor\normalbaselineskip
-+  \normalbaselines
-+  \setbox\strutbox =\hbox{%
-+    \vrule width0pt height\strutheightpercent\baselineskip
-+                    depth \strutdepthpercent \baselineskip
-+  }%
-+}
-+
-+% PDF CMaps.  See also LaTeX's t1.cmap.
-+%
-+% do nothing with this by default.
-+\expandafter\let\csname cmapOT1\endcsname\gobble
-+\expandafter\let\csname cmapOT1IT\endcsname\gobble
-+\expandafter\let\csname cmapOT1TT\endcsname\gobble
-+
-+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
-+% (\pdffontattr was introduced many years ago, but people still run
-+% older pdftex's; it's easy to conditionalize, so we do.)
-+\ifpdf \ifx\pdffontattr\undefined \else
-+  \begingroup
-+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-+%%DocumentNeededResources: ProcSet (CIDInit)
-+%%IncludeResource: ProcSet (CIDInit)
-+%%BeginResource: CMap (TeX-OT1-0)
-+%%Title: (TeX-OT1-0 TeX OT1 0)
-+%%Version: 1.000
-+%%EndComments
-+/CIDInit /ProcSet findresource begin
-+12 dict begin
-+begincmap
-+/CIDSystemInfo
-+<< /Registry (TeX)
-+/Ordering (OT1)
-+/Supplement 0
-+>> def
-+/CMapName /TeX-OT1-0 def
-+/CMapType 2 def
-+1 begincodespacerange
-+<00> <7F>
-+endcodespacerange
-+8 beginbfrange
-+<00> <01> <0393>
-+<09> <0A> <03A8>
-+<23> <26> <0023>
-+<28> <3B> <0028>
-+<3F> <5B> <003F>
-+<5D> <5E> <005D>
-+<61> <7A> <0061>
-+<7B> <7C> <2013>
-+endbfrange
-+40 beginbfchar
-+<02> <0398>
-+<03> <039B>
-+<04> <039E>
-+<05> <03A0>
-+<06> <03A3>
-+<07> <03D2>
-+<08> <03A6>
-+<0B> <00660066>
-+<0C> <00660069>
-+<0D> <0066006C>
-+<0E> <006600660069>
-+<0F> <00660066006C>
-+<10> <0131>
-+<11> <0237>
-+<12> <0060>
-+<13> <00B4>
-+<14> <02C7>
-+<15> <02D8>
-+<16> <00AF>
-+<17> <02DA>
-+<18> <00B8>
-+<19> <00DF>
-+<1A> <00E6>
-+<1B> <0153>
-+<1C> <00F8>
-+<1D> <00C6>
-+<1E> <0152>
-+<1F> <00D8>
-+<21> <0021>
-+<22> <201D>
-+<27> <2019>
-+<3C> <00A1>
-+<3D> <003D>
-+<3E> <00BF>
-+<5C> <201C>
-+<5F> <02D9>
-+<60> <2018>
-+<7D> <02DD>
-+<7E> <007E>
-+<7F> <00A8>
-+endbfchar
-+endcmap
-+CMapName currentdict /CMap defineresource pop
-+end
-+end
-+%%EndResource
-+%%EOF
-+    }\endgroup
-+  \expandafter\edef\csname cmapOT1\endcsname#1{%
-+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-+  }%
-+%
-+% \cmapOT1IT
-+  \begingroup
-+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-+%%DocumentNeededResources: ProcSet (CIDInit)
-+%%IncludeResource: ProcSet (CIDInit)
-+%%BeginResource: CMap (TeX-OT1IT-0)
-+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
-+%%Version: 1.000
-+%%EndComments
-+/CIDInit /ProcSet findresource begin
-+12 dict begin
-+begincmap
-+/CIDSystemInfo
-+<< /Registry (TeX)
-+/Ordering (OT1IT)
-+/Supplement 0
-+>> def
-+/CMapName /TeX-OT1IT-0 def
-+/CMapType 2 def
-+1 begincodespacerange
-+<00> <7F>
-+endcodespacerange
-+8 beginbfrange
-+<00> <01> <0393>
-+<09> <0A> <03A8>
-+<25> <26> <0025>
-+<28> <3B> <0028>
-+<3F> <5B> <003F>
-+<5D> <5E> <005D>
-+<61> <7A> <0061>
-+<7B> <7C> <2013>
-+endbfrange
-+42 beginbfchar
-+<02> <0398>
-+<03> <039B>
-+<04> <039E>
-+<05> <03A0>
-+<06> <03A3>
-+<07> <03D2>
-+<08> <03A6>
-+<0B> <00660066>
-+<0C> <00660069>
-+<0D> <0066006C>
-+<0E> <006600660069>
-+<0F> <00660066006C>
-+<10> <0131>
-+<11> <0237>
-+<12> <0060>
-+<13> <00B4>
-+<14> <02C7>
-+<15> <02D8>
-+<16> <00AF>
-+<17> <02DA>
-+<18> <00B8>
-+<19> <00DF>
-+<1A> <00E6>
-+<1B> <0153>
-+<1C> <00F8>
-+<1D> <00C6>
-+<1E> <0152>
-+<1F> <00D8>
-+<21> <0021>
-+<22> <201D>
-+<23> <0023>
-+<24> <00A3>
-+<27> <2019>
-+<3C> <00A1>
-+<3D> <003D>
-+<3E> <00BF>
-+<5C> <201C>
-+<5F> <02D9>
-+<60> <2018>
-+<7D> <02DD>
-+<7E> <007E>
-+<7F> <00A8>
-+endbfchar
-+endcmap
-+CMapName currentdict /CMap defineresource pop
-+end
-+end
-+%%EndResource
-+%%EOF
-+    }\endgroup
-+  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
-+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+-% For \ifx comparisons.
+-\def\emptymacro{\empty}
+-
+ % Most index entries go through here, but \dosubind is the general case.
+-%
+-\def\doind#1#2{\dosubind{#1}{#2}\empty}
++% #1 is the index name, #2 is the entry text.
++\def\doind#1#2{\dosubind{#1}{#2}{}}
+ 
+ % Workhorse for all \fooindexes.
+ % #1 is name of index, #2 is stuff to put there, #3 is subentry --
+-% \empty if called from \doind, as we usually are.  The main exception
+-% is with defuns, which call us directly.
++% empty if called from \doind, as we usually are (the main exception
++% is with most defuns, which call us directly).
+ %
+ \def\dosubind#1#2#3{%
++  \iflinks
++  {%
++    % Store the main index entry text (including the third arg).
++    \toks0 = {#2}%
++    % If third arg is present, precede it with a space.
++    \def\thirdarg{#3}%
++    \ifx\thirdarg\empty \else
++      \toks0 = \expandafter{\the\toks0 \space #3}%
++    \fi
++    %
++    \edef\writeto{\csname#1indfile\endcsname}%
++    %
++    \safewhatsit\dosubindwrite
 +  }%
++  \fi
++}
++
++% Write the entry in \toks0 to the index file:
 +%
-+% \cmapOT1TT
-+  \begingroup
-+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-+%%DocumentNeededResources: ProcSet (CIDInit)
-+%%IncludeResource: ProcSet (CIDInit)
-+%%BeginResource: CMap (TeX-OT1TT-0)
-+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
-+%%Version: 1.000
-+%%EndComments
-+/CIDInit /ProcSet findresource begin
-+12 dict begin
-+begincmap
-+/CIDSystemInfo
-+<< /Registry (TeX)
-+/Ordering (OT1TT)
-+/Supplement 0
-+>> def
-+/CMapName /TeX-OT1TT-0 def
-+/CMapType 2 def
-+1 begincodespacerange
-+<00> <7F>
-+endcodespacerange
-+5 beginbfrange
-+<00> <01> <0393>
-+<09> <0A> <03A8>
-+<21> <26> <0021>
-+<28> <5F> <0028>
-+<61> <7E> <0061>
-+endbfrange
-+32 beginbfchar
-+<02> <0398>
-+<03> <039B>
-+<04> <039E>
-+<05> <03A0>
-+<06> <03A3>
-+<07> <03D2>
-+<08> <03A6>
-+<0B> <2191>
-+<0C> <2193>
-+<0D> <0027>
-+<0E> <00A1>
-+<0F> <00BF>
-+<10> <0131>
-+<11> <0237>
-+<12> <0060>
-+<13> <00B4>
-+<14> <02C7>
-+<15> <02D8>
-+<16> <00AF>
-+<17> <02DA>
-+<18> <00B8>
-+<19> <00DF>
-+<1A> <00E6>
-+<1B> <0153>
-+<1C> <00F8>
-+<1D> <00C6>
-+<1E> <0152>
-+<1F> <00D8>
-+<20> <2423>
-+<27> <2019>
-+<60> <2018>
-+<7F> <00A8>
-+endbfchar
-+endcmap
-+CMapName currentdict /CMap defineresource pop
-+end
-+end
-+%%EndResource
-+%%EOF
-+    }\endgroup
-+  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
-+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
++\def\dosubindwrite{%
+   % Put the index entry in the margin if desired.
+   \ifx\SETmarginindex\relax\else
+-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
++    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+   \fi
+-  {%
+-    \count255=\lastpenalty
+-    {%
+-      \indexdummies % Must do this here, since \bf, etc expand at this stage
+-      \escapechar=`\\
+-      {%
+-        \let\folio = 0% We will expand all macros now EXCEPT \folio.
+-        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+-        % so it will be output as is; and it will print as backslash.
+-        %
+-        \def\thirdarg{#3}%
+-        %
+-        % If third arg is present, precede it with space in sort key.
+-        \ifx\thirdarg\emptymacro
+-          \let\subentry = \empty
+-        \else
+-          \def\subentry{ #3}%
+-        \fi
+-        %
+-        % First process the index entry with all font commands turned
+-        % off to get the string to sort by.
+-        {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
+-        %
+-        % Now the real index entry with the fonts.
+-        \toks0 = {#2}%
+-        %
+-        % If third (subentry) arg is present, add it to the index
+-        % string.  And include a space.
+-        \ifx\thirdarg\emptymacro \else
+-          \toks0 = \expandafter{\the\toks0 \space #3}%
+-        \fi
+-        %
+-        % Set up the complete index entry, with both the sort key
+-        % and the original text, including any font commands.  We write
+-        % three arguments to \entry to the .?? file, texindex reduces to
+-        % two when writing the .??s sorted result.
+-        \edef\temp{%
+-          \write\csname#1indfile\endcsname{%
+-            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+-        }%
+-        %
+-        % If a skip is the last thing on the list now, preserve it
+-        % by backing up by \lastskip, doing the \write, then inserting
+-        % the skip again.  Otherwise, the whatsit generated by the
+-        % \write will make \lastskip zero.  The result is that sequences
+-        % like this:
+-        % @end defun
+-        % @tindex whatever
+-        % @defun ...
+-        % will have extra space inserted, because the \medbreak in the
+-        % start of the @defun won't see the skip inserted by the @end of
+-        % the previous defun.
+-        %
+-        % But don't do any of this if we're not in vertical mode.  We
+-        % don't want to do a \vskip and prematurely end a paragraph.
+-        %
+-        % Avoid page breaks due to these extra skips, too.
+-        %
+-        \iflinks
+-          \ifvmode
+-            \skip0 = \lastskip
+-            \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
+-          \fi
+-          %
+-          \temp % do the write
+-          %
+-          %
+-          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+-        \fi
+-      }%
+-    }%
+-    \penalty\count255
++  %
++  % Remember, we are within a group.
++  \indexdummies % Must do this here, since \bf, etc expand at this stage
++  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
++      % so it will be output as is; and it will print as backslash.
++  %
++  % Process the index entry with all font commands turned off, to
++  % get the string to sort by.
++  {\indexnofonts
++   \edef\temp{\the\toks0}% need full expansion
++   \xdef\indexsorttmp{\temp}%
+   }%
++  %
++  % Set up the complete index entry, with both the sort key and
++  % the original text, including any font commands.  We write
++  % three arguments to \entry to the .?? file (four in the
++  % subentry case), texindex reduces to two when writing the .??s
++  % sorted result.
++  \edef\temp{%
++    \write\writeto{%
++      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
 +  }%
-+\fi\fi
++  \temp
++}
++
++% Take care of unwanted page breaks/skips around a whatsit:
++%
++% If a skip is the last thing on the list now, preserve it
++% by backing up by \lastskip, doing the \write, then inserting
++% the skip again.  Otherwise, the whatsit generated by the
++% \write or \pdfdest will make \lastskip zero.  The result is that
++% sequences like this:
++% @end defun
++% @tindex whatever
++% @defun ...
++% will have extra space inserted, because the \medbreak in the
++% start of the @defun won't see the skip inserted by the @end of
++% the previous defun.
++%
++% But don't do any of this if we're not in vertical mode.  We
++% don't want to do a \vskip and prematurely end a paragraph.
++%
++% Avoid page breaks due to these extra skips, too.
++%
++% But wait, there is a catch there:
++% We'll have to check whether \lastskip is zero skip.  \ifdim is not
++% sufficient for this purpose, as it ignores stretch and shrink parts
++% of the skip.  The only way seems to be to check the textual
++% representation of the skip.
++%
++% The following is almost like \def\zeroskipmacro{0.0pt} except that
++% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
++%
++\edef\zeroskipmacro{\expandafter\the\csname z at skip\endcsname}
++%
++\newskip\whatsitskip
++\newcount\whatsitpenalty
++%
++% ..., ready, GO:
++%
++\def\safewhatsit#1{%
++\ifhmode
++  #1%
++\else
++  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
++  \whatsitskip = \lastskip
++  \edef\lastskipmacro{\the\lastskip}%
++  \whatsitpenalty = \lastpenalty
++  %
++  % If \lastskip is nonzero, that means the last item was a
++  % skip.  And since a skip is discardable, that means this
++  % -\whatsitskip glue we're inserting is preceded by a
++  % non-discardable item, therefore it is not a potential
++  % breakpoint, therefore no \nobreak needed.
++  \ifx\lastskipmacro\zeroskipmacro
++  \else
++    \vskip-\whatsitskip
++  \fi
++  %
++  #1%
++  %
++  \ifx\lastskipmacro\zeroskipmacro
++    % If \lastskip was zero, perhaps the last item was a penalty, and
++    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
++    % to re-insert the same penalty (values >10000 are used for various
++    % signals); since we just inserted a non-discardable item, any
++    % following glue (such as a \parskip) would be a breakpoint.  For example:
++    % 
++    %   @deffn deffn-whatever
++    %   @vindex index-whatever
++    %   Description.
++    % would allow a break between the index-whatever whatsit
++    % and the "Description." paragraph.
++    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
++  \else
++    % On the other hand, if we had a nonzero \lastskip,
++    % this make-up glue would be preceded by a non-discardable item
++    % (the whatsit from the \write), so we must insert a \nobreak.
++    \nobreak\vskip\whatsitskip
++  \fi
++\fi
+ }
  
--% Use Computer Modern fonts at \magstephalf (11pt).
--\newcount\mainmagstep
--\mainmagstep=\magstephalf
+ % The index entry written in the file actually looks like
+@@ -2938,13 +4380,13 @@
+ % @printindex causes a particular index (the ??s file) to get printed.
+ % It does not print any chapter heading (usually an @unnumbered).
+ %
+-\def\printindex{\parsearg\doprintindex}
+-\def\doprintindex#1{\begingroup
++\parseargdef\printindex{\begingroup
+   \dobreak \chapheadingskip{10000}%
+   %
+   \smallfonts \rm
+   \tolerance = 9500
+-  \indexbreaks
++  \plainfrenchspacing
++  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+   %
+   % See if the index file exists and is nonempty.
+   % Change catcode of @ here so that if the index file contains
+@@ -2971,7 +4413,7 @@
+       % Index files are almost Texinfo source, but we use \ as the escape
+       % character.  It would be better to use @, but that's too big a change
+       % to make right now.
+-      \def\indexbackslash{\rawbackslashxx}%
++      \def\indexbackslash{\backslashcurfont}%
+       \catcode`\\ = 0
+       \escapechar = `\\
+       \begindoublecolumns
+@@ -2993,7 +4435,10 @@
+   \removelastskip
+   %
+   % We like breaks before the index initials, so insert a bonus.
+-  \penalty -300
++  \nobreak
++  \vskip 0pt plus 3\baselineskip
++  \penalty 0
++  \vskip 0pt plus -3\baselineskip
+   %
+   % Typeset the initial.  Making this add up to a whole number of
+   % baselineskips increases the chance of the dots lining up from column
+@@ -3003,93 +4448,117 @@
+   % No shrink because it confuses \balancecolumns.
+   \vskip 1.67\baselineskip plus .5\baselineskip
+   \leftline{\secbf #1}%
+-  \vskip .33\baselineskip plus .1\baselineskip
+-  %
+   % Do our best not to break after the initial.
+   \nobreak
++  \vskip .33\baselineskip plus .1\baselineskip
+ }}
  
- % Set the font macro #1 to the font named #2, adding on the
- % specified font prefix (normally `cm').
--% #3 is the font's design size, #4 is a scale factor
--\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
-+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
-+% empty to omit).
-+\def\setfont#1#2#3#4#5{%
-+  \font#1=\fontprefix#2#3 scaled #4
-+  \csname cmap#5\endcsname#1%
+-% This typesets a paragraph consisting of #1, dot leaders, and then #2
+-% flush to the right margin.  It is used for index and table of contents
+-% entries.  The paragraph is indented by \leftskip.
++% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
++% then page number (#2) flushed to the right margin.  It is used for index
++% and table of contents entries.  The paragraph is indented by \leftskip.
+ %
+-\def\entry#1#2{\begingroup
+-  %
+-  % Start a new paragraph if necessary, so our assignments below can't
+-  % affect previous text.
+-  \par
+-  %
+-  % Do not fill out the last line with white space.
+-  \parfillskip = 0in
+-  %
+-  % No extra space above this paragraph.
+-  \parskip = 0in
+-  %
+-  % Do not prefer a separate line ending with a hyphen to fewer lines.
+-  \finalhyphendemerits = 0
+-  %
+-  % \hangindent is only relevant when the entry text and page number
+-  % don't both fit on one line.  In that case, bob suggests starting the
+-  % dots pretty far over on the line.  Unfortunately, a large
+-  % indentation looks wrong when the entry text itself is broken across
+-  % lines.  So we use a small indentation and put up with long leaders.
+-  %
+-  % \hangafter is reset to 1 (which is the value we want) at the start
+-  % of each paragraph, so we need not do anything with that.
+-  \hangindent = 2em
+-  %
+-  % When the entry text needs to be broken, just fill out the first line
+-  % with blank space.
+-  \rightskip = 0pt plus1fil
+-  %
+-  % A bit of stretch before each entry for the benefit of balancing columns.
+-  \vskip 0pt plus1pt
+-  %
+-  % Start a ``paragraph'' for the index entry so the line breaking
+-  % parameters we've set above will have an effect.
+-  \noindent
+-  %
+-  % Insert the text of the index entry.  TeX will do line-breaking on it.
+-  #1%
+-  % The following is kludged to not output a line of dots in the index if
+-  % there are no page numbers.  The next person who breaks this will be
+-  % cursed by a Unix daemon.
+-  \def\tempa{{\rm }}%
+-  \def\tempb{#2}%
+-  \edef\tempc{\tempa}%
+-  \edef\tempd{\tempb}%
+-  \ifx\tempc\tempd\ \else%
++% A straightforward implementation would start like this:
++%	\def\entry#1#2{...
++% But this freezes the catcodes in the argument, and can cause problems to
++% @code, which sets - active.  This problem was fixed by a kludge---
++% ``-'' was active throughout whole index, but this isn't really right.
++%
++% The right solution is to prevent \entry from swallowing the whole text.
++%                                 --kasal, 21nov03
++\def\entry{%
++  \begingroup
+     %
+-    % If we must, put the page number on a line of its own, and fill out
+-    % this line with blank space.  (The \hfil is overwhelmed with the
+-    % fill leaders glue in \indexdotfill if the page number does fit.)
+-    \hfil\penalty50
+-    \null\nobreak\indexdotfill % Have leaders before the page number.
++    % Start a new paragraph if necessary, so our assignments below can't
++    % affect previous text.
++    \par
+     %
+-    % The `\ ' here is removed by the implicit \unskip that TeX does as
+-    % part of (the primitive) \par.  Without it, a spurious underfull
+-    % \hbox ensues.
+-    \ifpdf
+-      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
++    % Do not fill out the last line with white space.
++    \parfillskip = 0in
++    %
++    % No extra space above this paragraph.
++    \parskip = 0in
++    %
++    % Do not prefer a separate line ending with a hyphen to fewer lines.
++    \finalhyphendemerits = 0
++    %
++    % \hangindent is only relevant when the entry text and page number
++    % don't both fit on one line.  In that case, bob suggests starting the
++    % dots pretty far over on the line.  Unfortunately, a large
++    % indentation looks wrong when the entry text itself is broken across
++    % lines.  So we use a small indentation and put up with long leaders.
++    %
++    % \hangafter is reset to 1 (which is the value we want) at the start
++    % of each paragraph, so we need not do anything with that.
++    \hangindent = 2em
++    %
++    % When the entry text needs to be broken, just fill out the first line
++    % with blank space.
++    \rightskip = 0pt plus1fil
++    %
++    % A bit of stretch before each entry for the benefit of balancing
++    % columns.
++    \vskip 0pt plus1pt
++    %
++    % Swallow the left brace of the text (first parameter):
++    \afterassignment\doentry
++    \let\temp =
++}
++\def\doentry{%
++    \bgroup % Instead of the swallowed brace.
++      \noindent
++      \aftergroup\finishentry
++      % And now comes the text of the entry.
++}
++\def\finishentry#1{%
++    % #1 is the page number.
++    %
++    % The following is kludged to not output a line of dots in the index if
++    % there are no page numbers.  The next person who breaks this will be
++    % cursed by a Unix daemon.
++    \setbox\boxA = \hbox{#1}%
++    \ifdim\wd\boxA = 0pt
++      \ %
+     \else
+-      \ #2% The page number ends the paragraph.
++      %
++      % If we must, put the page number on a line of its own, and fill out
++      % this line with blank space.  (The \hfil is overwhelmed with the
++      % fill leaders glue in \indexdotfill if the page number does fit.)
++      \hfil\penalty50
++      \null\nobreak\indexdotfill % Have leaders before the page number.
++      %
++      % The `\ ' here is removed by the implicit \unskip that TeX does as
++      % part of (the primitive) \par.  Without it, a spurious underfull
++      % \hbox ensues.
++      \ifpdf
++	\pdfgettoks#1.%
++	\ \the\toksA
++      \else
++	\ #1%
++      \fi
+     \fi
+-  \fi%
+-  \par
+-\endgroup}
++    \par
++  \endgroup
 +}
-+% This is what gets called when #5 of \setfont is empty.
-+\let\cmap\gobble
-+% emacs-page end of cmaps
- 
- % Use cm as the default font prefix.
- % To specify the font prefix, you must define \fontprefix
-@@ -1064,165 +1959,409 @@
- \def\scshape{csc}
- \def\scbshape{csc}
- 
--\ifx\bigger\relax
--\let\mainmagstep=\magstep1
--\setfont\textrm\rmshape{12}{1000}
--\setfont\texttt\ttshape{12}{1000}
--\else
--\setfont\textrm\rmshape{10}{\mainmagstep}
--\setfont\texttt\ttshape{10}{\mainmagstep}
--\fi
--% Instead of cmb10, you many want to use cmbx10.
--% cmbx10 is a prettier font on its own, but cmb10
--% looks better when embedded in a line with cmr10.
--\setfont\textbf\bfshape{10}{\mainmagstep}
--\setfont\textit\itshape{10}{\mainmagstep}
--\setfont\textsl\slshape{10}{\mainmagstep}
--\setfont\textsf\sfshape{10}{\mainmagstep}
--\setfont\textsc\scshape{10}{\mainmagstep}
--\setfont\textttsl\ttslshape{10}{\mainmagstep}
-+% Definitions for a main text size of 11pt.  This is the default in
-+% Texinfo.
-+% 
-+\def\definetextfontsizexi{%
-+% Text fonts (11.2pt, magstep1).
-+\def\textnominalsize{11pt}
-+\edef\mainmagstep{\magstephalf}
-+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
- \font\texti=cmmi10 scaled \mainmagstep
- \font\textsy=cmsy10 scaled \mainmagstep
-+\def\textecsize{1095}
  
--% A few fonts for @defun, etc.
--\setfont\defbf\bxshape{10}{\magstep1} %was 1314
--\setfont\deftt\ttshape{10}{\magstep1}
--\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-+% A few fonts for @defun names and args.
-+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
-+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
-+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+-% Like \dotfill except takes at least 1 em.
++% Like plain.tex's \dotfill, except uses up at least 1 em.
+ \def\indexdotfill{\cleaders
+-  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
++  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
  
- % Fonts for indices, footnotes, small examples (9pt).
--\setfont\smallrm\rmshape{9}{1000}
--\setfont\smalltt\ttshape{9}{1000}
--\setfont\smallbf\bfshape{10}{900}
--\setfont\smallit\itshape{9}{1000}
--\setfont\smallsl\slshape{9}{1000}
--\setfont\smallsf\sfshape{9}{1000}
--\setfont\smallsc\scshape{10}{900}
--\setfont\smallttsl\ttslshape{10}{900}
-+\def\smallnominalsize{9pt}
-+\setfont\smallrm\rmshape{9}{1000}{OT1}
-+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-+\setfont\smallbf\bfshape{10}{900}{OT1}
-+\setfont\smallit\itshape{9}{1000}{OT1IT}
-+\setfont\smallsl\slshape{9}{1000}{OT1}
-+\setfont\smallsf\sfshape{9}{1000}{OT1}
-+\setfont\smallsc\scshape{10}{900}{OT1}
-+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
- \font\smalli=cmmi9
- \font\smallsy=cmsy9
-+\def\smallecsize{0900}
+ \def\primary #1{\line{#1\hfil}}
  
--% Fonts for title page:
--\setfont\titlerm\rmbshape{12}{\magstep3}
--\setfont\titleit\itbshape{10}{\magstep4}
--\setfont\titlesl\slbshape{10}{\magstep4}
--\setfont\titlett\ttbshape{12}{\magstep3}
--\setfont\titlettsl\ttslshape{10}{\magstep4}
--\setfont\titlesf\sfbshape{17}{\magstep1}
-+% Fonts for small examples (8pt).
-+\def\smallernominalsize{8pt}
-+\setfont\smallerrm\rmshape{8}{1000}{OT1}
-+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-+\setfont\smallerbf\bfshape{10}{800}{OT1}
-+\setfont\smallerit\itshape{8}{1000}{OT1IT}
-+\setfont\smallersl\slshape{8}{1000}{OT1}
-+\setfont\smallersf\sfshape{8}{1000}{OT1}
-+\setfont\smallersc\scshape{10}{800}{OT1}
-+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-+\font\smalleri=cmmi8
-+\font\smallersy=cmsy8
-+\def\smallerecsize{0800}
-+
-+% Fonts for title page (20.4pt):
-+\def\titlenominalsize{20pt}
-+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
- \let\titlebf=\titlerm
--\setfont\titlesc\scbshape{10}{\magstep4}
-+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
- \font\titlei=cmmi12 scaled \magstep3
- \font\titlesy=cmsy10 scaled \magstep4
- \def\authorrm{\secrm}
-+\def\authortt{\sectt}
-+\def\titleecsize{2074}
+ \newskip\secondaryindent \secondaryindent=0.5cm
+-
+-\def\secondary #1#2{
+-{\parfillskip=0in \parskip=0in
+-\hangindent =1in \hangafter=1
+-\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
++\def\secondary#1#2{{%
++  \parfillskip=0in
++  \parskip=0in
++  \hangindent=1in
++  \hangafter=1
++  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
++  \ifpdf
++    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
++  \else
++    #2
++  \fi
++  \par
+ }}
  
- % Chapter (and unnumbered) fonts (17.28pt).
--\setfont\chaprm\rmbshape{12}{\magstep2}
--\setfont\chapit\itbshape{10}{\magstep3}
--\setfont\chapsl\slbshape{10}{\magstep3}
--\setfont\chaptt\ttbshape{12}{\magstep2}
--\setfont\chapttsl\ttslshape{10}{\magstep3}
--\setfont\chapsf\sfbshape{17}{1000}
-+\def\chapnominalsize{17pt}
-+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
-+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
-+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
-+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
-+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
-+\setfont\chapsf\sfbshape{17}{1000}{OT1}
- \let\chapbf=\chaprm
--\setfont\chapsc\scbshape{10}{\magstep3}
-+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
- \font\chapi=cmmi12 scaled \magstep2
- \font\chapsy=cmsy10 scaled \magstep3
-+\def\chapecsize{1728}
+ % Define two-column mode, which we use to typeset indexes.
+@@ -3149,7 +4618,6 @@
+   %
+   % Double the \vsize as well.  (We don't need a separate register here,
+   % since nobody clobbers \vsize.)
+-  \advance\vsize by -\ht\partialpage
+   \vsize = 2\vsize
+ }
  
- % Section fonts (14.4pt).
--\setfont\secrm\rmbshape{12}{\magstep1}
--\setfont\secit\itbshape{10}{\magstep2}
--\setfont\secsl\slbshape{10}{\magstep2}
--\setfont\sectt\ttbshape{12}{\magstep1}
--\setfont\secttsl\ttslshape{10}{\magstep2}
--\setfont\secsf\sfbshape{12}{\magstep1}
-+\def\secnominalsize{14pt}
-+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
-+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
-+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
-+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
-+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
-+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
- \let\secbf\secrm
--\setfont\secsc\scbshape{10}{\magstep2}
-+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
- \font\seci=cmmi12 scaled \magstep1
- \font\secsy=cmsy10 scaled \magstep2
--
--% \setfont\ssecrm\bxshape{10}{\magstep1}    % This size an font looked bad.
--% \setfont\ssecit\itshape{10}{\magstep1}    % The letters were too crowded.
--% \setfont\ssecsl\slshape{10}{\magstep1}
--% \setfont\ssectt\ttshape{10}{\magstep1}
--% \setfont\ssecsf\sfshape{10}{\magstep1}
--
--%\setfont\ssecrm\bfshape{10}{1315}      % Note the use of cmb rather than cmbx.
--%\setfont\ssecit\itshape{10}{1315}      % Also, the size is a little larger than
--%\setfont\ssecsl\slshape{10}{1315}      % being scaled magstep1.
--%\setfont\ssectt\ttshape{10}{1315}
--%\setfont\ssecsf\sfshape{10}{1315}
--
--%\let\ssecbf=\ssecrm
-+\def\sececsize{1440}
+@@ -3163,6 +4631,7 @@
+   % previous page.
+   \dimen@ = \vsize
+   \divide\dimen@ by 2
++  \advance\dimen@ by -\ht\partialpage
+   %
+   % box0 will be the left-hand column, box2 the right.
+   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+@@ -3170,16 +4639,47 @@
+   \unvbox255
+   \penalty\outputpenalty
+ }
++%
++% Re-output the contents of the output page -- any previous material,
++% followed by the two boxes we just split, in box0 and box2.
+ \def\pagesofar{%
+-  % Re-output the contents of the output page -- any previous material,
+-  % followed by the two boxes we just split, in box0 and box2.
+   \unvbox\partialpage
+   %
+   \hsize = \doublecolumnhsize
+   \wd0=\hsize \wd2=\hsize
+   \hbox to\pagewidth{\box0\hfil\box2}%
+ }
++%
++% All done with double columns.
+ \def\enddoublecolumns{%
++  % The following penalty ensures that the page builder is exercised
++  % _before_ we change the output routine.  This is necessary in the
++  % following situation:
++  %
++  % The last section of the index consists only of a single entry.
++  % Before this section, \pagetotal is less than \pagegoal, so no
++  % break occurs before the last section starts.  However, the last
++  % section, consisting of \initial and the single \entry, does not
++  % fit on the page and has to be broken off.  Without the following
++  % penalty the page builder will not be exercised until \eject
++  % below, and by that time we'll already have changed the output
++  % routine to the \balancecolumns version, so the next-to-last
++  % double-column page will be processed with \balancecolumns, which
++  % is wrong:  The two columns will go to the main vertical list, with
++  % the broken-off section in the recent contributions.  As soon as
++  % the output routine finishes, TeX starts reconsidering the page
++  % break.  The two columns and the broken-off section both fit on the
++  % page, because the two columns now take up only half of the page
++  % goal.  When TeX sees \eject from below which follows the final
++  % section, it invokes the new output routine that we've set after
++  % \balancecolumns below; \onepageout will try to fit the two columns
++  % and the final section into the vbox of \pageheight (see
++  % \pagebody), causing an overfull box.
++  %
++  % Note that glue won't work here, because glue does not exercise the
++  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
++  \penalty0
++  %
+   \output = {%
+     % Split the last of the double-column material.  Leave it on the
+     % current page, no automatic page break.
+@@ -3203,8 +4703,9 @@
+   % \endgroup where \vsize got restored).
+   \pagegoal = \vsize
+ }
++%
++% Called at the end of the double column material.
+ \def\balancecolumns{%
+-  % Called at the end of the double column material.
+   \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+   \dimen@ = \ht0
+   \advance\dimen@ by \topskip
+@@ -3234,6 +4735,12 @@
+ \message{sectioning,}
+ % Chapters, sections, etc.
+ 
++% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
++% sections so that we can refer to them unambiguously in the pdf
++% outlines by their "section number".  We avoid collisions with chapter
++% numbers by starting them at 10000.  (If a document ever has 10000
++% chapters, we're in trouble anyway, I'm sure.)
++\newcount\unnumberedno \unnumberedno = 10000
+ \newcount\chapno
+ \newcount\secno        \secno=0
+ \newcount\subsecno     \subsecno=0
+@@ -3241,9 +4748,12 @@
+ 
+ % This counter is funny since it counts through charcodes of letters A, B, ...
+ \newcount\appendixno  \appendixno = `\@
++%
+ % \def\appendixletter{\char\the\appendixno}
+-% We do the following for the sake of pdftex, which needs the actual
++% We do the following ugly conditional instead of the above simple
++% construct for the sake of pdftex, which needs the actual
+ % letter in the expansion, not just typeset.
++%
+ \def\appendixletter{%
+   \ifnum\appendixno=`A A%
+   \else\ifnum\appendixno=`B B%
+@@ -3279,13 +4789,18 @@
+   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
  
- % Subsection fonts (13.15pt).
--\setfont\ssecrm\rmbshape{12}{\magstephalf}
--\setfont\ssecit\itbshape{10}{1315}
--\setfont\ssecsl\slbshape{10}{1315}
--\setfont\ssectt\ttbshape{12}{\magstephalf}
--\setfont\ssecttsl\ttslshape{10}{1315}
--\setfont\ssecsf\sfbshape{12}{\magstephalf}
-+\def\ssecnominalsize{13pt}
-+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
-+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
-+\setfont\ssecsl\slbshape{10}{1315}{OT1}
-+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
-+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
-+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
- \let\ssecbf\ssecrm
--\setfont\ssecsc\scbshape{10}{\magstep1}
-+\setfont\ssecsc\scbshape{10}{1315}{OT1}
- \font\sseci=cmmi12 scaled \magstephalf
- \font\ssecsy=cmsy10 scaled 1315
--% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
--% but that is not a standard magnification.
-+\def\ssececsize{1200}
-+
-+% Reduced fonts for @acro in text (10pt).
-+\def\reducednominalsize{10pt}
-+\setfont\reducedrm\rmshape{10}{1000}{OT1}
-+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
-+\setfont\reducedbf\bfshape{10}{1000}{OT1}
-+\setfont\reducedit\itshape{10}{1000}{OT1IT}
-+\setfont\reducedsl\slshape{10}{1000}{OT1}
-+\setfont\reducedsf\sfshape{10}{1000}{OT1}
-+\setfont\reducedsc\scshape{10}{1000}{OT1}
-+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
-+\font\reducedi=cmmi10
-+\font\reducedsy=cmsy10
-+\def\reducedecsize{1000}
-+
-+% reset the current fonts
-+\textfonts
-+\rm
-+} % end of 11pt text font size definitions
-+
-+
-+% Definitions to make the main text be 10pt Computer Modern, with
-+% section, chapter, etc., sizes following suit.  This is for the GNU
-+% Press printing of the Emacs 22 manual.  Maybe other manuals in the
-+% future.  Used with @smallbook, which sets the leading to 12pt.
-+% 
-+\def\definetextfontsizex{%
-+% Text fonts (10pt).
-+\def\textnominalsize{10pt}
-+\edef\mainmagstep{1000}
-+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
-+\font\texti=cmmi10 scaled \mainmagstep
-+\font\textsy=cmsy10 scaled \mainmagstep
-+\def\textecsize{1000}
-+
-+% A few fonts for @defun names and args.
-+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
-+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
-+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-+
-+% Fonts for indices, footnotes, small examples (9pt).
-+\def\smallnominalsize{9pt}
-+\setfont\smallrm\rmshape{9}{1000}{OT1}
-+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-+\setfont\smallbf\bfshape{10}{900}{OT1}
-+\setfont\smallit\itshape{9}{1000}{OT1IT}
-+\setfont\smallsl\slshape{9}{1000}{OT1}
-+\setfont\smallsf\sfshape{9}{1000}{OT1}
-+\setfont\smallsc\scshape{10}{900}{OT1}
-+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
-+\font\smalli=cmmi9
-+\font\smallsy=cmsy9
-+\def\smallecsize{0900}
-+
-+% Fonts for small examples (8pt).
-+\def\smallernominalsize{8pt}
-+\setfont\smallerrm\rmshape{8}{1000}{OT1}
-+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-+\setfont\smallerbf\bfshape{10}{800}{OT1}
-+\setfont\smallerit\itshape{8}{1000}{OT1IT}
-+\setfont\smallersl\slshape{8}{1000}{OT1}
-+\setfont\smallersf\sfshape{8}{1000}{OT1}
-+\setfont\smallersc\scshape{10}{800}{OT1}
-+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-+\font\smalleri=cmmi8
-+\font\smallersy=cmsy8
-+\def\smallerecsize{0800}
-+
-+% Fonts for title page (20.4pt):
-+\def\titlenominalsize{20pt}
-+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
-+\let\titlebf=\titlerm
-+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
-+\font\titlei=cmmi12 scaled \magstep3
-+\font\titlesy=cmsy10 scaled \magstep4
-+\def\authorrm{\secrm}
-+\def\authortt{\sectt}
-+\def\titleecsize{2074}
-+
-+% Chapter fonts (14.4pt).
-+\def\chapnominalsize{14pt}
-+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
-+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
-+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
-+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
-+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
-+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
-+\let\chapbf\chaprm
-+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
-+\font\chapi=cmmi12 scaled \magstep1
-+\font\chapsy=cmsy10 scaled \magstep2
-+\def\chapecsize{1440}
-+
-+% Section fonts (12pt).
-+\def\secnominalsize{12pt}
-+\setfont\secrm\rmbshape{12}{1000}{OT1}
-+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
-+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
-+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
-+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
-+\setfont\secsf\sfbshape{12}{1000}{OT1}
-+\let\secbf\secrm
-+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
-+\font\seci=cmmi12 
-+\font\secsy=cmsy10 scaled \magstep1
-+\def\sececsize{1200}
-+
-+% Subsection fonts (10pt).
-+\def\ssecnominalsize{10pt}
-+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
-+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
-+\setfont\ssecsl\slbshape{10}{1000}{OT1}
-+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
-+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
-+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
-+\let\ssecbf\ssecrm
-+\setfont\ssecsc\scbshape{10}{1000}{OT1}
-+\font\sseci=cmmi10
-+\font\ssecsy=cmsy10
-+\def\ssececsize{1000}
-+
-+% Reduced fonts for @acro in text (9pt).
-+\def\reducednominalsize{9pt}
-+\setfont\reducedrm\rmshape{9}{1000}{OT1}
-+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
-+\setfont\reducedbf\bfshape{10}{900}{OT1}
-+\setfont\reducedit\itshape{9}{1000}{OT1IT}
-+\setfont\reducedsl\slshape{9}{1000}{OT1}
-+\setfont\reducedsf\sfshape{9}{1000}{OT1}
-+\setfont\reducedsc\scshape{10}{900}{OT1}
-+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
-+\font\reducedi=cmmi9
-+\font\reducedsy=cmsy9
-+\def\reducedecsize{0900}
-+
-+% reduce space between paragraphs
-+\divide\parskip by 2
-+
-+% reset the current fonts
-+\textfonts
-+\rm
-+} % end of 10pt text font size definitions
+-% Each @chapter defines this as the name of the chapter.
+-% page headings and footings can use it.  @section does likewise.
++% Each @chapter defines these (using marks) as the number+name, number
++% and name of the chapter.  Page headings and footings can use
++% these.  @section does likewise.
+ \def\thischapter{}
++\def\thischapternum{}
++\def\thischaptername{}
+ \def\thissection{}
++\def\thissectionnum{}
++\def\thissectionname{}
+ 
+ \newcount\absseclevel % used to calculate proper heading level
+-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
++\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+ 
+ % @raisesections: treat @section as chapter, @subsection as section, etc.
+ \def\raisesections{\global\advance\secbase by -1}
+@@ -3295,287 +4810,246 @@
+ \def\lowersections{\global\advance\secbase by 1}
+ \let\down=\lowersections % original BFox name
+ 
+-% Choose a numbered-heading macro
+-% #1 is heading level if unmodified by @raisesections or @lowersections
+-% #2 is text for heading
+-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+-\ifcase\absseclevel
+-  \chapterzzz{#2}
+-\or
+-  \seczzz{#2}
+-\or
+-  \numberedsubseczzz{#2}
+-\or
+-  \numberedsubsubseczzz{#2}
+-\else
+-  \ifnum \absseclevel<0
+-    \chapterzzz{#2}
++% we only have subsub.
++\chardef\maxseclevel = 3
++%
++% A numbered section within an unnumbered changes to unnumbered too.
++% To achive this, remember the "biggest" unnum. sec. we are currently in:
++\chardef\unmlevel = \maxseclevel
++%
++% Trace whether the current chapter is an appendix or not:
++% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
++\def\chapheadtype{N}
 +
++% Choose a heading macro
++% #1 is heading type
++% #2 is heading level
++% #3 is text for heading
++\def\genhead#1#2#3{%
++  % Compute the abs. sec. level:
++  \absseclevel=#2
++  \advance\absseclevel by \secbase
++  % Make sure \absseclevel doesn't fall outside the range:
++  \ifnum \absseclevel < 0
++    \absseclevel = 0
+   \else
+-    \numberedsubsubseczzz{#2}
++    \ifnum \absseclevel > 3
++      \absseclevel = 3
++    \fi
+   \fi
+-\fi
+-}
+-
+-% like \numhead, but chooses appendix heading levels
+-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+-\ifcase\absseclevel
+-  \appendixzzz{#2}
+-\or
+-  \appendixsectionzzz{#2}
+-\or
+-  \appendixsubseczzz{#2}
+-\or
+-  \appendixsubsubseczzz{#2}
+-\else
+-  \ifnum \absseclevel<0
+-    \appendixzzz{#2}
++  % The heading type:
++  \def\headtype{#1}%
++  \if \headtype U%
++    \ifnum \absseclevel < \unmlevel
++      \chardef\unmlevel = \absseclevel
++    \fi
+   \else
+-    \appendixsubsubseczzz{#2}
++    % Check for appendix sections:
++    \ifnum \absseclevel = 0
++      \edef\chapheadtype{\headtype}%
++    \else
++      \if \headtype A\if \chapheadtype N%
++	\errmessage{@appendix... within a non-appendix chapter}%
++      \fi\fi
++    \fi
++    % Check for numbered within unnumbered:
++    \ifnum \absseclevel > \unmlevel
++      \def\headtype{U}%
++    \else
++      \chardef\unmlevel = 3
++    \fi
+   \fi
+-\fi
+-}
+-
+-% like \numhead, but chooses numberless heading levels
+-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+-\ifcase\absseclevel
+-  \unnumberedzzz{#2}
+-\or
+-  \unnumberedseczzz{#2}
+-\or
+-  \unnumberedsubseczzz{#2}
+-\or
+-  \unnumberedsubsubseczzz{#2}
+-\else
+-  \ifnum \absseclevel<0
+-    \unnumberedzzz{#2}
++  % Now print the heading:
++  \if \headtype U%
++    \ifcase\absseclevel
++	\unnumberedzzz{#3}%
++    \or \unnumberedseczzz{#3}%
++    \or \unnumberedsubseczzz{#3}%
++    \or \unnumberedsubsubseczzz{#3}%
++    \fi
+   \else
+-    \unnumberedsubsubseczzz{#2}
++    \if \headtype A%
++      \ifcase\absseclevel
++	  \appendixzzz{#3}%
++      \or \appendixsectionzzz{#3}%
++      \or \appendixsubseczzz{#3}%
++      \or \appendixsubsubseczzz{#3}%
++      \fi
++    \else
++      \ifcase\absseclevel
++	  \chapterzzz{#3}%
++      \or \seczzz{#3}%
++      \or \numberedsubseczzz{#3}%
++      \or \numberedsubsubseczzz{#3}%
++      \fi
++    \fi
+   \fi
+-\fi
++  \suppressfirstparagraphindent
+ }
+ 
+-% @chapter, @appendix, @unnumbered.
+-\def\thischaptername{No Chapter Title}
+-\outer\def\chapter{\parsearg\chapteryyy}
+-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+-\def\chapterzzz #1{%
+-\secno=0 \subsecno=0 \subsubsecno=0
+-\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
+-\chapmacro {#1}{\the\chapno}%
+-\gdef\thissection{#1}%
+-\gdef\thischaptername{#1}%
+-% We don't substitute the actual chapter name into \thischapter
+-% because we don't want its macros evaluated now.
+-\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+-                                  {\the\chapno}}}%
+-\temp
+-\donoderef
+-\global\let\section = \numberedsec
+-\global\let\subsection = \numberedsubsec
+-\global\let\subsubsection = \numberedsubsubsec
++% an interface:
++\def\numhead{\genhead N}
++\def\apphead{\genhead A}
++\def\unnmhead{\genhead U}
 +
-+% We provide the user-level command
-+%   @fonttextsize 10
-+% (or 11) to redefine the text font size.  pt is assumed.
-+% 
-+\def\xword{10}
-+\def\xiword{11}
++% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
++% all lower-level sectioning counters to zero.
 +%
-+\parseargdef\fonttextsize{%
-+  \def\textsizearg{#1}%
-+  \wlog{doing @fonttextsize \textsizearg}%
++% Also set \chaplevelprefix, which we prepend to @float sequence numbers
++% (e.g., figures), q.v.  By default (before any chapter), that is empty.
++\let\chaplevelprefix = \empty
++%
++\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
++\def\chapterzzz#1{%
++  % section resetting is \global in case the chapter is in a group, such
++  % as an @include file.
++  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
++    \global\advance\chapno by 1
 +  %
-+  % Set \globaldefs so that documents can use this inside @tex, since
-+  % makeinfo 4.8 does not support it, but we need it nonetheless.
-+  % 
-+ \begingroup \globaldefs=1
-+  \ifx\textsizearg\xword \definetextfontsizex
-+  \else \ifx\textsizearg\xiword \definetextfontsizexi
-+  \else
-+    \errhelp=\EMsimple
-+    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
-+  \fi\fi
-+ \endgroup
++  % Used for \float.
++  \gdef\chaplevelprefix{\the\chapno.}%
++  \resetallfloatnos
++  %
++  \message{\putwordChapter\space \the\chapno}%
++  %
++  % Write the actual heading.
++  \chapmacro{#1}{Ynumbered}{\the\chapno}%
++  %
++  % So @section and the like are numbered underneath this chapter.
++  \global\let\section = \numberedsec
++  \global\let\subsection = \numberedsubsec
++  \global\let\subsubsection = \numberedsubsubsec
+ }
+ 
+-\outer\def\appendix{\parsearg\appendixyyy}
+-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
+-\def\appendixzzz #1{%
+-\secno=0 \subsecno=0 \subsubsecno=0
+-\global\advance \appendixno by 1
+-\message{\putwordAppendix\space \appendixletter}%
+-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
+-\gdef\thissection{#1}%
+-\gdef\thischaptername{#1}%
+-\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
+-                       {\putwordAppendix{} \appendixletter}}}%
+-\temp
+-\appendixnoderef
+-\global\let\section = \appendixsec
+-\global\let\subsection = \appendixsubsec
+-\global\let\subsubsection = \appendixsubsubsec
++\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
++\def\appendixzzz#1{%
++  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
++    \global\advance\appendixno by 1
++  \gdef\chaplevelprefix{\appendixletter.}%
++  \resetallfloatnos
++  %
++  \def\appendixnum{\putwordAppendix\space \appendixletter}%
++  \message{\appendixnum}%
++  %
++  \chapmacro{#1}{Yappendix}{\appendixletter}%
++  %
++  \global\let\section = \appendixsec
++  \global\let\subsection = \appendixsubsec
++  \global\let\subsubsection = \appendixsubsubsec
 +}
 +
++\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
++\def\unnumberedzzz#1{%
++  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
++    \global\advance\unnumberedno by 1
++  %
++  % Since an unnumbered has no number, no prefix for figures.
++  \global\let\chaplevelprefix = \empty
++  \resetallfloatnos
++  %
++  % This used to be simply \message{#1}, but TeX fully expands the
++  % argument to \message.  Therefore, if #1 contained @-commands, TeX
++  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
++  % expanded @cite (which turns out to cause errors because \cite is meant
++  % to be executed, not expanded).
++  %
++  % Anyway, we don't want the fully-expanded definition of @cite to appear
++  % as a result of the \message, we just want `@cite' itself.  We use
++  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
++  % simply yielding the contents of <toks register>.  (We also do this for
++  % the toc entries.)
++  \toks0 = {#1}%
++  \message{(\the\toks0)}%
++  %
++  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
++  %
++  \global\let\section = \unnumberedsec
++  \global\let\subsection = \unnumberedsubsec
++  \global\let\subsubsection = \unnumberedsubsubsec
+ }
+ 
+ % @centerchap is like @unnumbered, but the heading is centered.
+-\outer\def\centerchap{\parsearg\centerchapyyy}
+-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
++\outer\parseargdef\centerchap{%
++  % Well, we could do the following in a group, but that would break
++  % an assumption that \chapmacro is called at the outermost level.
++  % Thus we are safer this way:		--kasal, 24feb04
++  \let\centerparametersmaybe = \centerparameters
++  \unnmhead0{#1}%
++  \let\centerparametersmaybe = \relax
++}
+ 
+ % @top is like @unnumbered.
+-\outer\def\top{\parsearg\unnumberedyyy}
+-
+-\outer\def\unnumbered{\parsearg\unnumberedyyy}
+-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+-\def\unnumberedzzz #1{%
+-\secno=0 \subsecno=0 \subsubsecno=0
+-%
+-% This used to be simply \message{#1}, but TeX fully expands the
+-% argument to \message.  Therefore, if #1 contained @-commands, TeX
+-% expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
+-% expanded @cite (which turns out to cause errors because \cite is meant
+-% to be executed, not expanded).
+-%
+-% Anyway, we don't want the fully-expanded definition of @cite to appear
+-% as a result of the \message, we just want `@cite' itself.  We use
+-% \the<toks register> to achieve this: TeX expands \the<toks> only once,
+-% simply yielding the contents of <toks register>.  (We also do this for
+-% the toc entries.)
+-\toks0 = {#1}\message{(\the\toks0)}%
+-%
+-\unnumbchapmacro {#1}%
+-\gdef\thischapter{#1}\gdef\thissection{#1}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
+-\temp
+-\unnumbnoderef
+-\global\let\section = \unnumberedsec
+-\global\let\subsection = \unnumberedsubsec
+-\global\let\subsubsection = \unnumberedsubsubsec
+-}
++\let\top\unnumbered
  
- % In order for the font changes to affect most math symbols and letters,
- % we have to define the \textfont of the standard families.  Since
--% texinfo doesn't allow for producing subscripts and superscripts, we
--% don't bother to reset \scriptfont and \scriptscriptfont (which would
--% also require loading a lot more fonts).
-+% texinfo doesn't allow for producing subscripts and superscripts except
-+% in the main text, we don't bother to reset \scriptfont and
-+% \scriptscriptfont (which would also require loading a lot more fonts).
- %
- \def\resetmathfonts{%
--  \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
--  \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
--  \textfont\ttfam = \tentt \textfont\sffam = \tensf
-+  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-+  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-+  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+ % Sections.
+-\outer\def\numberedsec{\parsearg\secyyy}
+-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
+-\def\seczzz #1{%
+-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+-                                  {\the\chapno}{\the\secno}}}%
+-\temp
+-\donoderef
+-\nobreak
++\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
++\def\seczzz#1{%
++  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
++  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
  }
  
--
- % The font-changing commands redefine the meanings of \tenSTYLE, instead
--% of just \STYLE.  We do this so that font changes will continue to work
--% in math mode, where it is the current \fam that is relevant in most
--% cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
--% \tenbf}, for example.  By redefining \tenbf, we obviate the need to
--% redefine \bf itself.
-+% of just \STYLE.  We do this because \STYLE needs to also set the
-+% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
-+% \tenSTYLE to set the current font.
-+%
-+% Each font-changing command also sets the names \lsize (one size lower)
-+% and \lllsize (three sizes lower).  These relative commands are used in
-+% the LaTeX logo and acronyms.
-+%
-+% This all needs generalizing, badly.
-+%
- \def\textfonts{%
-   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
--  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
--  \resetmathfonts}
-+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-+  \let\tenttsl=\textttsl
-+  \def\curfontsize{text}%
-+  \def\lsize{reduced}\def\lllsize{smaller}%
-+  \resetmathfonts \setleading{\textleading}}
- \def\titlefonts{%
-   \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-   \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-   \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-   \let\tenttsl=\titlettsl
-+  \def\curfontsize{title}%
-+  \def\lsize{chap}\def\lllsize{subsec}%
-   \resetmathfonts \setleading{25pt}}
- \def\titlefont#1{{\titlefonts\rm #1}}
- \def\chapfonts{%
-   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
--  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
-+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-+  \let\tenttsl=\chapttsl
-+  \def\curfontsize{chap}%
-+  \def\lsize{sec}\def\lllsize{text}%
-   \resetmathfonts \setleading{19pt}}
- \def\secfonts{%
-   \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-   \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
--  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
-+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-+  \let\tenttsl=\secttsl
-+  \def\curfontsize{sec}%
-+  \def\lsize{subsec}\def\lllsize{reduced}%
-   \resetmathfonts \setleading{16pt}}
- \def\subsecfonts{%
-   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
--  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
-+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-+  \let\tenttsl=\ssecttsl
-+  \def\curfontsize{ssec}%
-+  \def\lsize{text}\def\lllsize{small}%
-   \resetmathfonts \setleading{15pt}}
--\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-+\let\subsubsecfonts = \subsecfonts
-+\def\reducedfonts{%
-+  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
-+  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
-+  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
-+  \let\tenttsl=\reducedttsl
-+  \def\curfontsize{reduced}%
-+  \def\lsize{small}\def\lllsize{smaller}%
-+  \resetmathfonts \setleading{10.5pt}}
- \def\smallfonts{%
-   \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-   \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-   \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-   \let\tenttsl=\smallttsl
--  \resetmathfonts \setleading{11pt}}
-+  \def\curfontsize{small}%
-+  \def\lsize{smaller}\def\lllsize{smaller}%
-+  \resetmathfonts \setleading{10.5pt}}
-+\def\smallerfonts{%
-+  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-+  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-+  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-+  \let\tenttsl=\smallerttsl
-+  \def\curfontsize{smaller}%
-+  \def\lsize{smaller}\def\lllsize{smaller}%
-+  \resetmathfonts \setleading{9.5pt}}
-+
-+% Set the fonts to use with the @small... environments.
-+\let\smallexamplefonts = \smallfonts
-+
-+% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
-+% can fit this many characters:
-+%   8.5x11=86   smallbook=72  a4=90  a5=69
-+% If we use \scriptfonts (8pt), then we can fit this many characters:
-+%   8.5x11=90+  smallbook=80  a4=90+  a5=77
-+% For me, subjectively, the few extra characters that fit aren't worth
-+% the additional smallness of 8pt.  So I'm making the default 9pt.
-+%
-+% By the way, for comparison, here's what fits with @example (10pt):
-+%   8.5x11=71  smallbook=60  a4=75  a5=58
-+%
-+% I wish the USA used A4 paper.
-+% --karl, 24jan03.
-+
+-\outer\def\appendixsection{\parsearg\appendixsecyyy}
+-\outer\def\appendixsec{\parsearg\appendixsecyyy}
+-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+-\def\appendixsectionzzz #1{%
+-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
+-                                  {\appendixletter}{\the\secno}}}%
+-\temp
+-\appendixnoderef
+-\nobreak
++\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
++\def\appendixsectionzzz#1{%
++  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
++  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+ }
++\let\appendixsec\appendixsection
+ 
+-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
+-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
+-\def\unnumberedseczzz #1{%
+-\plainsecheading {#1}\gdef\thissection{#1}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
+-\temp
+-\unnumbnoderef
+-\nobreak
++\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
++\def\unnumberedseczzz#1{%
++  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
++  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+ }
+ 
+ % Subsections.
+-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
+-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
+-\def\numberedsubseczzz #1{%
+-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+-                                    {\the\chapno}{\the\secno}{\the\subsecno}}}%
+-\temp
+-\donoderef
+-\nobreak
++\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
++\def\numberedsubseczzz#1{%
++  \global\subsubsecno=0  \global\advance\subsecno by 1
++  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+ }
+ 
+-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
+-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
+-\def\appendixsubseczzz #1{%
+-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
+-                                {\appendixletter}{\the\secno}{\the\subsecno}}}%
+-\temp
+-\appendixnoderef
+-\nobreak
++\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
++\def\appendixsubseczzz#1{%
++  \global\subsubsecno=0  \global\advance\subsecno by 1
++  \sectionheading{#1}{subsec}{Yappendix}%
++                 {\appendixletter.\the\secno.\the\subsecno}%
+ }
+ 
+-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+-\def\unnumberedsubseczzz #1{%
+-\plainsubsecheading {#1}\gdef\thissection{#1}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
+-                                    {\the\toks0}}}%
+-\temp
+-\unnumbnoderef
+-\nobreak
++\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
++\def\unnumberedsubseczzz#1{%
++  \global\subsubsecno=0  \global\advance\subsecno by 1
++  \sectionheading{#1}{subsec}{Ynothing}%
++                 {\the\unnumberedno.\the\secno.\the\subsecno}%
+ }
+ 
+ % Subsubsections.
+-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
+-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
+-\def\numberedsubsubseczzz #1{%
+-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+-\subsubsecheading {#1}
+-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+-  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+-\temp
+-\donoderef
+-\nobreak
++\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
++\def\numberedsubsubseczzz#1{%
++  \global\advance\subsubsecno by 1
++  \sectionheading{#1}{subsubsec}{Ynumbered}%
++                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+ }
+ 
+-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
+-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
+-\def\appendixsubsubseczzz #1{%
+-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+-\subsubsecheading {#1}
+-  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
+-  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
+-\temp
+-\appendixnoderef
+-\nobreak
++\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
++\def\appendixsubsubseczzz#1{%
++  \global\advance\subsubsecno by 1
++  \sectionheading{#1}{subsubsec}{Yappendix}%
++                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+ }
  
- % Set up the default fonts, so we can use them for creating boxes.
- %
--\textfonts
-+\definetextfontsizexi
+-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+-\def\unnumberedsubsubseczzz #1{%
+-\plainsubsubsecheading {#1}\gdef\thissection{#1}%
+-\toks0 = {#1}%
+-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
+-                                    {\the\toks0}}}%
+-\temp
+-\unnumbnoderef
+-\nobreak
++\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
++\def\unnumberedsubsubseczzz#1{%
++  \global\advance\subsubsecno by 1
++  \sectionheading{#1}{subsubsec}{Ynothing}%
++                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+ }
  
- % Define these so they can be easily changed for other fonts.
- \def\angleleft{$\langle$}
-@@ -1232,28 +2371,42 @@
- \newcount\fontdepth \fontdepth=0
+-% These are variants which are not "outer", so they can appear in @ifinfo.
+-% Actually, they should now be obsolete; ordinary section commands should work.
+-\def\infotop{\parsearg\unnumberedzzz}
+-\def\infounnumbered{\parsearg\unnumberedzzz}
+-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
+-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+-
+-\def\infoappendix{\parsearg\appendixzzz}
+-\def\infoappendixsec{\parsearg\appendixseczzz}
+-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+-
+-\def\infochapter{\parsearg\chapterzzz}
+-\def\infosection{\parsearg\sectionzzz}
+-\def\infosubsection{\parsearg\subsectionzzz}
+-\def\infosubsubsection{\parsearg\subsubsectionzzz}
+-
+ % These macros control what the section commands do, according
+ % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+ % Define them by default for a numbered chapter.
+-\global\let\section = \numberedsec
+-\global\let\subsection = \numberedsubsec
+-\global\let\subsubsection = \numberedsubsubsec
++\let\section = \numberedsec
++\let\subsection = \numberedsubsec
++\let\subsubsection = \numberedsubsubsec
  
- % Fonts for short table of contents.
--\setfont\shortcontrm\rmshape{12}{1000}
--\setfont\shortcontbf\bxshape{12}{1000}
--\setfont\shortcontsl\slshape{12}{1000}
-+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
-+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
-+\setfont\shortcontsl\slshape{12}{1000}{OT1}
-+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+ % Define @majorheading, @heading and @subheading
  
- %% Add scribe-like font environments, plus @l for inline lisp (usually sans
- %% serif) and @ii for TeX italic
+@@ -3588,23 +5062,27 @@
+ %          if justification is not attempted.  Hence \raggedright.
  
- % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
- % unless the following character is such as not to need one.
--\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
--\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
--\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
-+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
-+                    \ptexslash\fi\fi\fi}
-+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
-+
-+% like \smartslanted except unconditionally uses \ttsl.
-+% @var is set to this for defun arguments.
-+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
-+
-+% like \smartslanted except unconditionally use \sl.  We never want
-+% ttsl for book titles, do we?
-+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
  
- \let\i=\smartitalic
-+\let\slanted=\smartslanted
- \let\var=\smartslanted
- \let\dfn=\smartslanted
- \let\emph=\smartitalic
--\let\cite=\smartslanted
+-\def\majorheading{\parsearg\majorheadingzzz}
+-\def\majorheadingzzz #1{%
+-{\advance\chapheadingskip by 10pt \chapbreak }%
+-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+-                  \parindent=0pt\raggedright
+-                  \rm #1\hfill}}\bigskip \par\penalty 200}
++\def\majorheading{%
++  {\advance\chapheadingskip by 10pt \chapbreak }%
++  \parsearg\chapheadingzzz
++}
  
-+% @b, explicit bold.
- \def\b#1{{\bf #1}}
- \let\strong=\b
+-\def\chapheading{\parsearg\chapheadingzzz}
+-\def\chapheadingzzz #1{\chapbreak %
+-{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+-                  \parindent=0pt\raggedright
+-                  \rm #1\hfill}}\bigskip \par\penalty 200}
++\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
++\def\chapheadingzzz#1{%
++  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
++                    \parindent=0pt\raggedright
++                    \rm #1\hfill}}%
++  \bigskip \par\penalty 200\relax
++  \suppressfirstparagraphindent
++}
  
-+% @sansserif, explicit sans.
-+\def\sansserif#1{{\sf #1}}
-+
- % We can't just use \exhyphenpenalty, because that only has effect at
- % the end of a paragraph.  Restore normal hyphenation at the end of the
- % group within which \nohyphenation is presumably called.
-@@ -1261,13 +2414,30 @@
- \def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
- \def\restorehyphenation{\hyphenchar\font = `- }
+ % @heading, @subheading, @subsubheading.
+-\def\heading{\parsearg\plainsecheading}
+-\def\subheading{\parsearg\plainsubsecheading}
+-\def\subsubheading{\parsearg\plainsubsubsecheading}
++\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
++  \suppressfirstparagraphindent}
++\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
++  \suppressfirstparagraphindent}
++\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
++  \suppressfirstparagraphindent}
  
-+% Set sfcode to normal for the chars that usually have another value.
-+% Can't use plain's \frenchspacing because it uses the `\x notation, and
-+% sometimes \x has an active definition that messes things up.
-+%
-+\catcode`@=11
-+  \def\plainfrenchspacing{%
-+    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-+    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
-+    \def\endofsentencespacefactor{1000}% for @. and friends
-+  }
-+  \def\plainnonfrenchspacing{%
-+    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
-+    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
-+    \def\endofsentencespacefactor{3000}% for @. and friends
-+  }
-+\catcode`@=\other
-+\def\endofsentencespacefactor{3000}% default
-+
- \def\t#1{%
--  {\tt \rawbackslash \frenchspacing #1}%
-+  {\tt \rawbackslash \plainfrenchspacing #1}%
-   \null
- }
--\let\ttfont=\t
- \def\samp#1{`\tclose{#1}'\null}
--\setfont\keyrm\rmshape{8}{1000}
-+\setfont\keyrm\rmshape{8}{1000}{OT1}
- \font\keysy=cmsy9
- \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-   \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-@@ -1275,6 +2445,7 @@
-      \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-     \kern-0.4pt\hrule}%
-   \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-+\def\key #1{{\nohyphenation \uppercase{#1}}\null}
- % The old definition, with no lozenge:
- %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
- \def\ctrl #1{{\tt \rawbackslash \hat}#1}
-@@ -1300,13 +2471,13 @@
-     \nohyphenation
-     %
-     \rawbackslash
--    \frenchspacing
-+    \plainfrenchspacing
-     #1%
-   }%
-   \null
- }
+ % These macros generate a chapter, section, etc. heading only
+ % (including whitespace, linebreaking, etc. around it),
+@@ -3613,8 +5091,6 @@
+ %%% Args are the skip and penalty (usually negative)
+ \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
  
--% We *must* turn on hyphenation at `-' and `_' in \code.
-+% We *must* turn on hyphenation at `-' and `_' in @code.
- % Otherwise, it is too hard to avoid overfull hboxes
- % in the Emacs manual, the Library manual, etc.
+-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+-
+ %%% Define plain chapter starts, and page on/off switching for it
+ % Parameter controlling skip before chapter headings (if needed)
  
-@@ -1316,26 +2487,61 @@
- % and arrange explicitly to hyphenate at a dash.
- %  -- rms.
- {
--  \catcode`\-=\active
--  \catcode`\_=\active
-+  \catcode`\-=\active \catcode`\_=\active
-+  \catcode`\'=\active \catcode`\`=\active
-   %
-   \global\def\code{\begingroup
--    \catcode`\-=\active \let-\codedash
--    \catcode`\_=\active \let_\codeunder
-+    \catcode\rquoteChar=\active \catcode\lquoteChar=\active
-+    \let'\codequoteright \let`\codequoteleft
-+    %
-+    \catcode\dashChar=\active  \catcode\underChar=\active
-+    \ifallowcodebreaks
-+     \let-\codedash
-+     \let_\codeunder
-+    \else
-+     \let-\realdash
-+     \let_\realunder
-+    \fi
-     \codex
-   }
--  %
--  % If we end up with any active - characters when handling the index,
--  % just treat them as a normal -.
--  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
- }
+@@ -3622,7 +5098,20 @@
  
- \def\realdash{-}
- \def\codedash{-\discretionary{}{}{}}
--\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
-+\def\codeunder{%
-+  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
-+  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
-+  % will therefore expand the active definition of _, which is us
-+  % (inside @code that is), therefore an endless loop.
-+  \ifusingtt{\ifmmode
-+               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
-+             \else\normalunderscore \fi
-+             \discretionary{}{}{}}%
-+            {\_}%
+ \def\chapbreak{\dobreak \chapheadingskip {-4000}}
+ \def\chappager{\par\vfill\supereject}
+-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
++% Because \domark is called before \chapoddpage, the filler page will
++% get the headings for the next chapter, which is wrong.  But we don't
++% care -- we just disable all headings on the filler page.
++\def\chapoddpage{%
++  \chappager
++  \ifodd\pageno \else
++    \begingroup
++      \evenheadline={\hfil}\evenfootline={\hfil}%
++      \oddheadline={\hfil}\oddfootline={\hfil}%
++      \hbox to 0pt{}%
++      \chappager
++    \endgroup
++  \fi
 +}
- \def\codex #1{\tclose{#1}\endgroup}
  
--%\let\exp=\tclose  %Was temporary
-+% An additional complication: the above will allow breaks after, e.g.,
-+% each of the four underscores in __typeof__.  This is undesirable in
-+% some manuals, especially if they don't have long identifiers in
-+% general.  @allowcodebreaks provides a way to control this.
-+% 
-+\newif\ifallowcodebreaks  \allowcodebreakstrue
-+
-+\def\keywordtrue{true}
-+\def\keywordfalse{false}
-+
-+\parseargdef\allowcodebreaks{%
-+  \def\txiarg{#1}%
-+  \ifx\txiarg\keywordtrue
-+    \allowcodebreakstrue
-+  \else\ifx\txiarg\keywordfalse
-+    \allowcodebreaksfalse
-+  \else
-+    \errhelp = \EMsimple
-+    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
-+  \fi\fi
-+}
+ \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
  
- % @kbd is like @code, except that if the argument is just one @key command,
- % then @kbd has no effect.
-@@ -1343,24 +2549,25 @@
- % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
- %   `example' (@kbd uses ttsl only inside of @example and friends),
- %   or `code' (@kbd uses normal tty font always).
--\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
--\def\kbdinputstylexxx#1{%
--  \def\arg{#1}%
--  \ifx\arg\worddistinct
-+\parseargdef\kbdinputstyle{%
-+  \def\txiarg{#1}%
-+  \ifx\txiarg\worddistinct
-     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
--  \else\ifx\arg\wordexample
-+  \else\ifx\txiarg\wordexample
-     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
--  \else\ifx\arg\wordcode
-+  \else\ifx\txiarg\wordcode
-     \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+@@ -3637,7 +5126,7 @@
+ \global\let\pagealignmacro=\chappager
+ \global\def\HEADINGSon{\HEADINGSsingle}}
+ 
+-\def\CHAPPAGodd{
++\def\CHAPPAGodd{%
+ \global\let\contentsalignmacro = \chapoddpage
+ \global\let\pchapsepmacro=\chapoddpage
+ \global\let\pagealignmacro=\chapoddpage
+@@ -3645,107 +5134,275 @@
+ 
+ \CHAPPAGon
+ 
+-\def\CHAPFplain{
+-\global\let\chapmacro=\chfplain
+-\global\let\unnumbchapmacro=\unnchfplain
+-\global\let\centerchapmacro=\centerchfplain}
+-
+-% Plain chapter opening.
+-% #1 is the text, #2 the chapter number or empty if unnumbered.
+-\def\chfplain#1#2{%
++% Chapter opening.
++%
++% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
++% Yappendix, Yomitfromtoc), #3 the chapter number.
++%
++% To test against our argument.
++\def\Ynothingkeyword{Ynothing}
++\def\Yomitfromtockeyword{Yomitfromtoc}
++\def\Yappendixkeyword{Yappendix}
++%
++\def\chapmacro#1#2#3{%
++  % Insert the first mark before the heading break (see notes for \domark).
++  \let\prevchapterdefs=\lastchapterdefs
++  \let\prevsectiondefs=\lastsectiondefs
++  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
++                        \gdef\thissection{}}%
++  %
++  \def\temptype{#2}%
++  \ifx\temptype\Ynothingkeyword
++    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
++                          \gdef\thischapter{\thischaptername}}%
++  \else\ifx\temptype\Yomitfromtockeyword
++    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
++                          \gdef\thischapter{}}%
++  \else\ifx\temptype\Yappendixkeyword
++    \toks0={#1}%
++    \xdef\lastchapterdefs{%
++      \gdef\noexpand\thischaptername{\the\toks0}%
++      \gdef\noexpand\thischapternum{\appendixletter}%
++      \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum:
++                                 \noexpand\thischaptername}%
++    }%
 +  \else
-+    \errhelp = \EMsimple
-+    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
-   \fi\fi\fi
++    \toks0={#1}%
++    \xdef\lastchapterdefs{%
++      \gdef\noexpand\thischaptername{\the\toks0}%
++      \gdef\noexpand\thischapternum{\the\chapno}%
++      \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum:
++                                 \noexpand\thischaptername}%
++    }%
++  \fi\fi\fi
++  %
++  % Output the mark.  Pass it through \safewhatsit, to take care of
++  % the preceding space.
++  \safewhatsit\domark
++  %
++  % Insert the chapter heading break.
+   \pchapsepmacro
++  %
++  % Now the second mark, after the heading break.  No break points
++  % between here and the heading.
++  \let\prevchapterdefs=\lastchapterdefs
++  \let\prevsectiondefs=\lastsectiondefs
++  \domark
++  %
+   {%
+     \chapfonts \rm
+-    \def\chapnum{#2}%
+-    \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
++    %
++    % Have to define \lastsection before calling \donoderef, because the
++    % xref code eventually uses it.  On the other hand, it has to be called
++    % after \pchapsepmacro, or the headline will change too soon.
++    \gdef\lastsection{#1}%
++    %
++    % Only insert the separating space if we have a chapter/appendix
++    % number, and don't print the unnumbered ``number''.
++    \ifx\temptype\Ynothingkeyword
++      \setbox0 = \hbox{}%
++      \def\toctype{unnchap}%
++    \else\ifx\temptype\Yomitfromtockeyword
++      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
++      \def\toctype{omit}%
++    \else\ifx\temptype\Yappendixkeyword
++      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
++      \def\toctype{app}%
++    \else
++      \setbox0 = \hbox{#3\enspace}%
++      \def\toctype{numchap}%
++    \fi\fi\fi
++    %
++    % Write the toc entry for this chapter.  Must come before the
++    % \donoderef, because we include the current node name in the toc
++    % entry, and \donoderef resets it to empty.
++    \writetocentry{\toctype}{#1}{#3}%
++    %
++    % For pdftex, we have to write out the node definition (aka, make
++    % the pdfdest) after any page break, but before the actual text has
++    % been typeset.  If the destination for the pdf outline is after the
++    % text, then jumping from the outline may wind up with the text not
++    % being visible, for instance under high magnification.
++    \donoderef{#2}%
++    %
++    % Typeset the actual heading.
++    \nobreak % Avoid page breaks at the interline glue.
+     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+-          \hangindent = \wd0 \centerparametersmaybe
++          \hangindent=\wd0 \centerparametersmaybe
+           \unhbox0 #1\par}%
+   }%
+   \nobreak\bigskip % no page break after a chapter title
+   \nobreak
  }
- \def\worddistinct{distinct}
- \def\wordexample{example}
- \def\wordcode{code}
  
--% Default is kbdinputdistinct.  (Too much of a hassle to call the macro,
--% the catcodes are wrong for parsearg to work.)
--\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}
-+% Default is `distinct.'
-+\kbdinputstyle distinct
+-% Plain opening for unnumbered.
+-\def\unnchfplain#1{\chfplain{#1}{}}
+-
+ % @centerchap -- centered and unnumbered.
+ \let\centerparametersmaybe = \relax
+-\def\centerchfplain#1{{%
+-  \def\centerparametersmaybe{%
+-    \advance\rightskip by 3\rightskip
+-    \leftskip = \rightskip
+-    \parfillskip = 0pt
+-  }%
+-  \chfplain{#1}{}%
+-}}
++\def\centerparameters{%
++  \advance\rightskip by 3\rightskip
++  \leftskip = \rightskip
++  \parfillskip = 0pt
++}
  
- \def\xkey{\key}
- \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-@@ -1368,11 +2575,18 @@
- \else{\tclose{\kbdfont\look}}\fi
- \else{\tclose{\kbdfont\look}}\fi}
+-\CHAPFplain % The default
  
--% For @url, @env, @command quotes seem unnecessary, so use \code.
--\let\url=\code
-+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
-+\let\indicateurl=\code
- \let\env=\code
- \let\command=\code
++% I don't think this chapter style is supported any more, so I'm not
++% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
++%
++\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
++%
+ \def\unnchfopen #1{%
+ \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                        \parindent=0pt\raggedright
+                        \rm #1\hfill}}\bigskip \par\nobreak
+ }
+-
+ \def\chfopen #1#2{\chapoddpage {\chapfonts
+ \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+ \par\penalty 5000 %
+ }
+-
+ \def\centerchfopen #1{%
+ \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                        \parindent=0pt
+                        \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+ }
+-
+-\def\CHAPFopen{
+-\global\let\chapmacro=\chfopen
+-\global\let\unnumbchapmacro=\unnchfopen
+-\global\let\centerchapmacro=\centerchfopen}
++\def\CHAPFopen{%
++  \global\let\chapmacro=\chfopen
++  \global\let\centerchapmacro=\centerchfopen}
  
-+% @clicksequence{File @click{} Open ...}
-+\def\clicksequence#1{\begingroup #1\endgroup}
-+
-+% @clickstyle @arrow   (by default)
-+\parseargdef\clickstyle{\def\click{#1}}
-+\def\click{\arrow}
-+
- % @uref (abbreviation for `urlref') takes an optional (comma-separated)
- % second argument specifying the text to display and an optional third
- % arg as text to display instead of (rather than in addition to) the url
-@@ -1401,9 +2615,13 @@
-   \endlink
- \endgroup}
  
-+% @url synonym for @uref, since that's how everyone uses it.
-+%
-+\let\url=\uref
-+
- % rms does not like angle brackets --karl, 17may97.
- % So now @email is just like @uref, unless we are pdf.
--% 
+-% Section titles.
++% Section titles.  These macros combine the section number parts and
++% call the generic \sectionheading to do the printing.
 +%
- %\def\email#1{\angleleft{\tt #1}\angleright}
- \ifpdf
-   \def\email#1{\doemail#1,,\finish}
-@@ -1442,12 +2660,140 @@
- \def\sc#1{{\smallcaps#1}}       % smallcaps font
- \def\ii#1{{\it #1}}             % italic font
+ \newskip\secheadingskip
+-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
+-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
++\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
  
--% @acronym downcases the argument and prints in smallcaps.
--\def\acronym#1{{\smallcaps \lowercase{#1}}}
-+% @acronym for "FBI", "NATO", and the like.
-+% We print this one point size smaller, since it's intended for
-+% all-uppercase.
-+% 
-+\def\acronym#1{\doacronym #1,,\finish}
-+\def\doacronym#1,#2,#3\finish{%
-+  {\selectfonts\lsize #1}%
-+  \def\temp{#2}%
-+  \ifx\temp\empty \else
-+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
-+  \fi
-+}
+ % Subsection titles.
+-\newskip \subsecheadingskip
+-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
+-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
++\newskip\subsecheadingskip
++\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
  
--% @pounds{} is a sterling sign.
-+% @abbr for "Comput. J." and the like.
-+% No font change, but don't do end-of-sentence spacing.
-+% 
-+\def\abbr#1{\doabbr #1,,\finish}
-+\def\doabbr#1,#2,#3\finish{%
-+  {\plainfrenchspacing #1}%
-+  \def\temp{#2}%
-+  \ifx\temp\empty \else
-+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
-+  \fi
-+}
-+
-+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
-+%
- \def\pounds{{\it\$}}
+ % Subsubsection titles.
+-\let\subsubsecheadingskip = \subsecheadingskip
+-\let\subsubsecheadingbreak = \subsecheadingbreak
+-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
+-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
++\def\subsubsecheadingskip{\subsecheadingskip}
++\def\subsubsecheadingbreak{\subsecheadingbreak}
  
-+% @euro{} comes from a separate font, depending on the current style.
-+% We use the free feym* fonts from the eurosym package by Henrik
-+% Theiling, which support regular, slanted, bold and bold slanted (and
-+% "outlined" (blackboard board, sort of) versions, which we don't need).
-+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-+% 
-+% Although only regular is the truly official Euro symbol, we ignore
-+% that.  The Euro is designed to be slightly taller than the regular
-+% font height.
-+% 
-+% feymr - regular
-+% feymo - slanted
-+% feybr - bold
-+% feybo - bold slanted
-+% 
-+% There is no good (free) typewriter version, to my knowledge.
-+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
-+% Hmm.
-+% 
-+% Also doesn't work in math.  Do we need to do math with euro symbols?
-+% Hope not.
-+% 
-+% 
-+\def\euro{{\eurofont e}}
-+\def\eurofont{%
-+  % We set the font at each command, rather than predefining it in
-+  % \textfonts and the other font-switching commands, so that
-+  % installations which never need the symbol don't have to have the
-+  % font installed.
-+  % 
-+  % There is only one designed size (nominal 10pt), so we always scale
-+  % that to the current nominal size.
+ 
+-% Print any size section title.
++% Print any size, any type, section title.
+ %
+-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
+-% number (maybe empty), #3 the text.
+-\def\sectionheading#1#2#3{%
+-  {%
+-    \expandafter\advance\csname #1headingskip\endcsname by \parskip
+-    \csname #1headingbreak\endcsname
+-  }%
++% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
++% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
++% section number.
++%
++\def\seckeyword{sec}
++%
++\def\sectionheading#1#2#3#4{%
+   {%
+     % Switch to the right set of fonts.
+-    \csname #1fonts\endcsname \rm
++    \csname #2fonts\endcsname \rm
+     %
+-    % Only insert the separating space if we have a section number.
+-    \def\secnum{#2}%
+-    \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
++    \def\sectionlevel{#2}%
++    \def\temptype{#3}%
++    %
++    % Insert first mark before the heading break (see notes for \domark).
++    \let\prevsectiondefs=\lastsectiondefs
++    \ifx\temptype\Ynothingkeyword
++      \ifx\sectionlevel\seckeyword
++        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
++                              \gdef\thissection{\thissectionname}}%
++      \fi
++    \else\ifx\temptype\Yomitfromtockeyword
++      % Don't redefine \thissection.
++    \else\ifx\temptype\Yappendixkeyword
++      \ifx\sectionlevel\seckeyword
++        \toks0={#1}%
++        \xdef\lastsectiondefs{%
++          \gdef\noexpand\thissectionname{\the\toks0}%
++          \gdef\noexpand\thissectionnum{#4}%
++          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
++                                     \noexpand\thissectionname}%
++        }%
++      \fi
++    \else
++      \ifx\sectionlevel\seckeyword
++        \toks0={#1}%
++        \xdef\lastsectiondefs{%
++          \gdef\noexpand\thissectionname{\the\toks0}%
++          \gdef\noexpand\thissectionnum{#4}%
++          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
++                                     \noexpand\thissectionname}%
++        }%
++      \fi
++    \fi\fi\fi
++    %
++    % Output the mark.  Pass it through \safewhatsit, to take care of
++    % the preceding space.
++    \safewhatsit\domark
++    %
++    % Insert space above the heading.
++    \csname #2headingbreak\endcsname
++    %
++    % Now the second mark, after the heading break.  No break points
++    % between here and the heading.
++    \let\prevsectiondefs=\lastsectiondefs
++    \domark
++    %
++    % Only insert the space after the number if we have a section number.
++    \ifx\temptype\Ynothingkeyword
++      \setbox0 = \hbox{}%
++      \def\toctype{unn}%
++      \gdef\lastsection{#1}%
++    \else\ifx\temptype\Yomitfromtockeyword
++      % for @headings -- no section number, don't include in toc,
++      % and don't redefine \lastsection.
++      \setbox0 = \hbox{}%
++      \def\toctype{omit}%
++      \let\sectionlevel=\empty
++    \else\ifx\temptype\Yappendixkeyword
++      \setbox0 = \hbox{#4\enspace}%
++      \def\toctype{app}%
++      \gdef\lastsection{#1}%
++    \else
++      \setbox0 = \hbox{#4\enspace}%
++      \def\toctype{num}%
++      \gdef\lastsection{#1}%
++    \fi\fi\fi
++    %
++    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
++    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
++    %
++    % Write the node reference (= pdf destination for pdftex).
++    % Again, see comments in \chapmacro.
++    \donoderef{#3}%
++    %
++    % Interline glue will be inserted when the vbox is completed.
++    % That glue will be a valid breakpoint for the page, since it'll be
++    % preceded by a whatsit (usually from the \donoderef, or from the
++    % \writetocentry if there was no node).  We don't want to allow that
++    % break, since then the whatsits could end up on page n while the
++    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
++    \nobreak
+     %
++    % Output the actual section heading.
+     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+-          \hangindent = \wd0 % zero if no section number
+-          \unhbox0 #3}%
++          \hangindent=\wd0  % zero if no section number
++          \unhbox0 #1}%
+   }%
+-  \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
++  % Add extra space after the heading -- half of whatever came above it.
++  % Don't allow stretch, though.
++  \kern .5 \csname #2headingskip\endcsname
++  %
++  % Do not let the kern be a potential breakpoint, as it would be if it
++  % was followed by glue.
++  \nobreak
++  %
++  % We'll almost certainly start a paragraph next, so don't let that
++  % glue accumulate.  (Not a breakpoint because it's preceded by a
++  % discardable item.)
++  \vskip-\parskip
 +  % 
-+  % By the way, simply using "at 1em" works for cmr10 and the like, but
-+  % does not work for cmbx10 and other extended/shrunken fonts.
++  % This is purely so the last item on the list is a known \penalty >
++  % 10000.  This is so \startdefun can avoid allowing breakpoints after
++  % section headings.  Otherwise, it would insert a valid breakpoint between:
 +  % 
-+  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
-+  %
-+  \ifx\curfontstyle\bfstylename 
-+    % bold:
-+    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-+  \else 
-+    % regular:
-+    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
-+  \fi
-+  \thiseurofont
-+}
-+
-+% Hacks for glyphs from the EC fonts similar to \euro.  We don't
-+% use \let for the aliases, because sometimes we redefine the original
-+% macro, and the alias should reflect the redefinition.
-+\def\guillemetleft{{\ecfont \char"13}}
-+\def\guillemotleft{\guillemetleft}
-+\def\guillemetright{{\ecfont \char"14}}
-+\def\guillemotright{\guillemetright}
-+\def\guilsinglleft{{\ecfont \char"0E}}
-+\def\guilsinglright{{\ecfont \char"0F}}
-+\def\quotedblbase{{\ecfont \char"12}}
-+\def\quotesinglbase{{\ecfont \char"0D}}
++  %   @section sec-whatever
++  %   @deffn def-whatever
++  \penalty 10001
+ }
+ 
+ 
+@@ -3754,161 +5411,224 @@
+ \newwrite\tocfile
+ 
+ % Write an entry to the toc file, opening it if necessary.
+-% Called from @chapter, etc.  We supply {\folio} at the end of the
+-% argument, which will end up as the last argument to the \...entry macro.
++% Called from @chapter, etc.
+ %
+-% We open the .toc file here instead of at @setfilename or any other
+-% given time so that @contents can be put in the document anywhere.
++% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
++% We append the current node name (if any) and page number as additional
++% arguments for the \{chap,sec,...}entry macros which will eventually
++% read this.  The node name is used in the pdf outlines as the
++% destination to jump to.
 +%
-+\def\ecfont{%
-+  % We can't distinguish serif/sanserif and italic/slanted, but this
-+  % is used for crude hacks anyway (like adding French and German
-+  % quotes to documents typeset with CM, where we lose kerning), so
-+  % hopefully nobody will notice/care.
-+  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
-+  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
-+  \ifx\curfontstyle\bfstylename
-+    % bold:
-+    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
-+  \else
-+    % regular:
-+    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
-+  \fi
-+  \thisecfont
-+}
-+
-+% @registeredsymbol - R in a circle.  The font for the R should really
-+% be smaller yet, but lllsize is the best we can do for now.
-+% Adapted from the plain.tex definition of \copyright.
++% We open the .toc file for writing here instead of at @setfilename (or
++% any other fixed time) so that @contents can be anywhere in the document.
++% But if #1 is `omit', then we don't do anything.  This is used for the
++% table of contents chapter openings themselves.
+ %
+ \newif\iftocfileopened
+-\def\writetocentry#1{%
+-  \iftocfileopened\else
+-    \immediate\openout\tocfile = \jobname.toc
+-    \global\tocfileopenedtrue
++\def\omitkeyword{omit}%
 +%
-+\def\registeredsymbol{%
-+  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
-+               \hfil\crcr\Orb}}%
-+    }$%
++\def\writetocentry#1#2#3{%
++  \edef\writetoctype{#1}%
++  \ifx\writetoctype\omitkeyword \else
++    \iftocfileopened\else
++      \immediate\openout\tocfile = \jobname.toc
++      \global\tocfileopenedtrue
++    \fi
++    %
++    \iflinks
++      {\atdummies
++       \edef\temp{%
++         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
++       \temp
++      }%
++    \fi
+   \fi
+-  \iflinks \write\tocfile{#1{\folio}}\fi
++  %
++  % Tell \shipout to create a pdf destination on each page, if we're
++  % writing pdf.  These are used in the table of contents.  We can't
++  % just write one on every page because the title pages are numbered
++  % 1 and 2 (the page numbers aren't printed), and so are the first
++  % two pages of the document.  Thus, we'd have two destinations named
++  % `1', and two named `2'.
++  \ifpdf \global\pdfmakepagedesttrue \fi
 +}
 +
-+% @textdegree - the normal degrees sign.
-+%
-+\def\textdegree{$^\circ$}
 +
-+% Laurent Siebenmann reports \Orb undefined with:
-+%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
-+% so we'll define it if necessary.
++% These characters do not print properly in the Computer Modern roman
++% fonts, so we must take special care.  This is more or less redundant
++% with the Texinfo input format setup at the end of this file.
 +% 
-+\ifx\Orb\undefined
-+\def\Orb{\mathhexbox20D}
-+\fi
++\def\activecatcodes{%
++  \catcode`\"=\active
++  \catcode`\$=\active
++  \catcode`\<=\active
++  \catcode`\>=\active
++  \catcode`\\=\active
++  \catcode`\^=\active
++  \catcode`\_=\active
++  \catcode`\|=\active
++  \catcode`\~=\active
++}
 +
-+% Quotes.
-+\chardef\quotedblleft="5C
-+\chardef\quotedblright=`\"
-+\chardef\quoteleft=`\`
-+\chardef\quoteright=`\'
 +
++% Read the toc file, which is essentially Texinfo input.
++\def\readtocfile{%
++  \setupdatafile
++  \activecatcodes
++  \input \tocreadfilename
+ }
  
- \message{page headings,}
- 
-@@ -1466,86 +2812,103 @@
- \newif\ifsetshortcontentsaftertitlepage
-  \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
- 
--\def\shorttitlepage{\parsearg\shorttitlepagezzz}
--\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-         \endgroup\page\hbox{}\page}
+ \newskip\contentsrightmargin \contentsrightmargin=1in
+ \newcount\savepageno
+ \newcount\lastnegativepageno \lastnegativepageno = -1
  
--\def\titlepage{\begingroup \parindent=0pt \textfonts
--   \let\subtitlerm=\tenrm
--   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
--   %
--   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
--   %
--   % Leave some space at the very top of the page.
--   \vglue\titlepagetopglue
--   %
--   % Now you can print the title using @title.
--   \def\title{\parsearg\titlezzz}%
--   \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
--                    % print a rule at the page bottom also.
--                    \finishedtitlepagefalse
--                    \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
--   % No rule at page bottom unless we print one at the top with @title.
--   \finishedtitlepagetrue
--   %
--   % Now you can put text using @subtitle.
--   \def\subtitle{\parsearg\subtitlezzz}%
--   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
--   %
--   % @author should come last, but may come many times.
--   \def\author{\parsearg\authorzzz}%
--   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
--      {\authorfont \leftline{##1}}}%
+-% Finish up the main text and prepare to read what we've written
+-% to \tocfile.
++% Prepare to read what we've written to \tocfile.
+ %
+ \def\startcontents#1{%
+-   % If @setchapternewpage on, and @headings double, the contents should
+-   % start on an odd page, unlike chapters.  Thus, we maintain
+-   % \contentsalignmacro in parallel with \pagealignmacro.
+-   % From: Torbjorn Granlund <tege at matematik.su.se>
+-   \contentsalignmacro
+-   \immediate\closeout\tocfile
 -   %
--   % Most title ``pages'' are actually two pages long, with space
--   % at the top of the second.  We don't want the ragged left on the second.
--   \let\oldpage = \page
--   \def\page{%
-+\envdef\titlepage{%
-+  % Open one extra group, as we want to close it in the middle of \Etitlepage.
-+  \begingroup
-+    \parindent=0pt \textfonts
-+    % Leave some space at the very top of the page.
-+    \vglue\titlepagetopglue
-+    % No rule at page bottom unless we print one at the top with @title.
-+    \finishedtitlepagetrue
+-   % Don't need to put `Contents' or `Short Contents' in the headline.
+-   % It is abundantly clear what they are.
+-   \unnumbchapmacro{#1}\def\thischapter{}%
+-   \savepageno = \pageno
+-   \begingroup                  % Set up to handle contents files properly.
+-      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
+-      % We can't do this, because then an actual ^ in a section
+-      % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
+-      %\catcode`\^=7 % to see ^^e4 as \"a etc. juha at piuha.ydi.vtt.fi
+-      \raggedbottom             % Worry more about breakpoints than the bottom.
+-      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+-      %
+-      % Roman numerals for page numbers.
+-      \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
++  % If @setchapternewpage on, and @headings double, the contents should
++  % start on an odd page, unlike chapters.  Thus, we maintain
++  % \contentsalignmacro in parallel with \pagealignmacro.
++  % From: Torbjorn Granlund <tege at matematik.su.se>
++  \contentsalignmacro
++  \immediate\closeout\tocfile
++  %
++  % Don't need to put `Contents' or `Short Contents' in the headline.
++  % It is abundantly clear what they are.
++  \chapmacro{#1}{Yomitfromtoc}{}%
++  %
++  \savepageno = \pageno
++  \begingroup                  % Set up to handle contents files properly.
++    \raggedbottom              % Worry more about breakpoints than the bottom.
++    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
 +    %
-+    % Most title ``pages'' are actually two pages long, with space
-+    % at the top of the second.  We don't want the ragged left on the second.
-+    \let\oldpage = \page
-+    \def\page{%
-       \iffinishedtitlepage\else
--         \finishtitlepage
-+	 \finishtitlepage
-       \fi
--      \oldpage
-       \let\page = \oldpage
--      \hbox{}}%
--%   \def\page{\oldpage \hbox{}}
-+      \page
-+      \null
-+    }%
++    % Roman numerals for page numbers.
++    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
  }
  
- \def\Etitlepage{%
--   \iffinishedtitlepage\else
--      \finishtitlepage
--   \fi
--   % It is important to do the page break before ending the group,
--   % because the headline and footline are only empty inside the group.
--   % If we use the new definition of \page, we always get a blank page
--   % after the title page, which we certainly don't want.
--   \oldpage
--   \endgroup
--   %
--   % If they want short, they certainly want long too.
--   \ifsetshortcontentsaftertitlepage
--     \shortcontents
--     \contents
--     \global\let\shortcontents = \relax
--     \global\let\contents = \relax
--   \fi
--   %
--   \ifsetcontentsaftertitlepage
--     \contents
--     \global\let\contents = \relax
--     \global\let\shortcontents = \relax
--   \fi
--   %
--   \ifpdf \pdfmakepagedesttrue \fi
--   %
--   \HEADINGSon
-+    \iffinishedtitlepage\else
-+	\finishtitlepage
++% redefined for the two-volume lispref.  We always output on
++% \jobname.toc even if this is redefined.
++% 
++\def\tocreadfilename{\jobname.toc}
+ 
+ % Normal (long) toc.
++%
+ \def\contents{%
+-   \startcontents{\putwordTOC}%
+-     \openin 1 \jobname.toc
+-     \ifeof 1 \else
+-       \closein 1
+-       \input \jobname.toc
+-     \fi
+-     \vfill \eject
+-     \contentsalignmacro % in case @setchapternewpage odd is in effect
+-     \pdfmakeoutlines
+-   \endgroup
+-   \lastnegativepageno = \pageno
+-   \pageno = \savepageno
++  \startcontents{\putwordTOC}%
++    \openin 1 \tocreadfilename\space
++    \ifeof 1 \else
++      \readtocfile
 +    \fi
-+    % It is important to do the page break before ending the group,
-+    % because the headline and footline are only empty inside the group.
-+    % If we use the new definition of \page, we always get a blank page
-+    % after the title page, which we certainly don't want.
-+    \oldpage
++    \vfill \eject
++    \contentsalignmacro % in case @setchapternewpage odd is in effect
++    \ifeof 1 \else
++      \pdfmakeoutlines
++    \fi
++    \closein 1
 +  \endgroup
-+  %
-+  % Need this before the \...aftertitlepage checks so that if they are
-+  % in effect the toc pages will come out with page numbers.
-+  \HEADINGSon
-+  %
-+  % If they want short, they certainly want long too.
-+  \ifsetshortcontentsaftertitlepage
-+    \shortcontents
-+    \contents
-+    \global\let\shortcontents = \relax
-+    \global\let\contents = \relax
-+  \fi
-+  %
-+  \ifsetcontentsaftertitlepage
-+    \contents
-+    \global\let\contents = \relax
-+    \global\let\shortcontents = \relax
-+  \fi
++  \lastnegativepageno = \pageno
++  \global\pageno = \savepageno
  }
  
- \def\finishtitlepage{%
--   \vskip4pt \hrule height 2pt width \hsize
--   \vskip\titlepagebottomglue
--   \finishedtitlepagetrue
-+  \vskip4pt \hrule height 2pt width \hsize
-+  \vskip\titlepagebottomglue
-+  \finishedtitlepagetrue
+ % And just the chapters.
+ \def\summarycontents{%
+-   \startcontents{\putwordShortTOC}%
+-      %
+-      \let\chapentry = \shortchapentry
+-      \let\unnumbchapentry = \shortunnumberedentry
+-      % We want a true roman here for the page numbers.
+-      \secfonts
+-      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+-      \rm
+-      \hyphenpenalty = 10000
+-      \advance\baselineskip by 1pt % Open it up a little.
+-      \def\secentry ##1##2##3##4{}
+-      \def\unnumbsecentry ##1##2{}
+-      \def\subsecentry ##1##2##3##4##5{}
+-      \def\unnumbsubsecentry ##1##2{}
+-      \def\subsubsecentry ##1##2##3##4##5##6{}
+-      \def\unnumbsubsubsecentry ##1##2{}
+-      \openin 1 \jobname.toc
+-      \ifeof 1 \else
+-        \closein 1
+-        \input \jobname.toc
+-      \fi
+-     \vfill \eject
+-     \contentsalignmacro % in case @setchapternewpage odd is in effect
+-   \endgroup
+-   \lastnegativepageno = \pageno
+-   \pageno = \savepageno
++  \startcontents{\putwordShortTOC}%
++    %
++    \let\numchapentry = \shortchapentry
++    \let\appentry = \shortchapentry
++    \let\unnchapentry = \shortunnchapentry
++    % We want a true roman here for the page numbers.
++    \secfonts
++    \let\rm=\shortcontrm \let\bf=\shortcontbf
++    \let\sl=\shortcontsl \let\tt=\shortconttt
++    \rm
++    \hyphenpenalty = 10000
++    \advance\baselineskip by 1pt % Open it up a little.
++    \def\numsecentry##1##2##3##4{}
++    \let\appsecentry = \numsecentry
++    \let\unnsecentry = \numsecentry
++    \let\numsubsecentry = \numsecentry
++    \let\appsubsecentry = \numsecentry
++    \let\unnsubsecentry = \numsecentry
++    \let\numsubsubsecentry = \numsecentry
++    \let\appsubsubsecentry = \numsecentry
++    \let\unnsubsubsecentry = \numsecentry
++    \openin 1 \tocreadfilename\space
++    \ifeof 1 \else
++      \readtocfile
++    \fi
++    \closein 1
++    \vfill \eject
++    \contentsalignmacro % in case @setchapternewpage odd is in effect
++  \endgroup
++  \lastnegativepageno = \pageno
++  \global\pageno = \savepageno
  }
+ \let\shortcontents = \summarycontents
  
-+%%% Macros to be used within @titlepage:
-+
-+\let\subtitlerm=\tenrm
-+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
-+
-+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
-+		\let\tt=\authortt}
-+
-+\parseargdef\title{%
-+  \checkenv\titlepage
-+  \leftline{\titlefonts\rm #1}
-+  % print a rule at the page bottom also.
-+  \finishedtitlepagefalse
-+  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
-+}
-+
-+\parseargdef\subtitle{%
-+  \checkenv\titlepage
-+  {\subtitlefont \rightline{#1}}%
-+}
-+
-+% @author should come last, but may come many times.
-+% It can also be used inside @quotation.
+-\ifpdf
+-  \pdfcatalog{/PageMode /UseOutlines}%
+-\fi
++% Typeset the label for a chapter or appendix for the short contents.
++% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
 +%
-+\parseargdef\author{%
-+  \def\temp{\quotation}%
-+  \ifx\thisenv\temp
-+    \def\quotationauthor{#1}% printed in \Equotation.
-+  \else
-+    \checkenv\titlepage
-+    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-+    {\authorfont \leftline{#1}}%
-+  \fi
++\def\shortchaplabel#1{%
++  % This space should be enough, since a single number is .5em, and the
++  % widest letter (M) is 1em, at least in the Computer Modern fonts.
++  % But use \hss just in case.
++  % (This space doesn't include the extra space that gets added after
++  % the label; that gets put in by \shortchapentry above.)
++  %
++  % We'd like to right-justify chapter numbers, but that looks strange
++  % with appendix letters.  And right-justifying numbers and
++  % left-justifying letters looks strange when there is less than 10
++  % chapters.  Have to read the whole toc once to know how many chapters
++  % there are before deciding ...
++  \hbox to 1em{#1\hss}%
 +}
-+
-+
- %%% Set up page headings and footings.
  
- \let\thispage=\folio
-@@ -1555,7 +2918,7 @@
- \newtoks\evenfootline    % footline on even pages
- \newtoks\oddfootline     % footline on odd pages
+ % These macros generate individual entries in the table of contents.
+ % The first argument is the chapter or section name.
+ % The last argument is the page number.
+ % The arguments in between are the chapter number, section number, ...
  
--% Now make Tex use those variables
-+% Now make TeX use those variables
- \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-                             \else \the\evenheadline \fi}}
- \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-@@ -1569,43 +2932,64 @@
- % @evenfooting @thisfile||
- % @oddfooting ||@thisfile
+-% Chapter-level things, for both the long and short contents.
+-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+-
+-% See comments in \dochapentry re vbox and related settings
+-\def\shortchapentry#1#2#3{%
+-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
++% Chapters, in the main contents.
++\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
++%
++% Chapters, in the short toc.
++% See comments in \dochapentry re vbox and related settings.
++\def\shortchapentry#1#2#3#4{%
++  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+ }
  
--\def\evenheading{\parsearg\evenheadingxxx}
--\def\oddheading{\parsearg\oddheadingxxx}
--\def\everyheading{\parsearg\everyheadingxxx}
+-% Typeset the label for a chapter or appendix for the short contents.
+-% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
+-% We could simplify the code here by writing out an \appendixentry
+-% command in the toc file for appendices, instead of using \chapentry
+-% for both, but it doesn't seem worth it.
++% Appendices, in the main contents.
++% Need the word Appendix, and a fixed-size box.
+ %
+-\newdimen\shortappendixwidth
++\def\appendixbox#1{%
++  % We use M since it's probably the widest letter.
++  \setbox0 = \hbox{\putwordAppendix{} M}%
++  \hbox to \wd0{\putwordAppendix{} #1\hss}}
+ %
+-\def\shortchaplabel#1{%
+-  % Compute width of word "Appendix", may change with language.
+-  \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
+-  \shortappendixwidth = \wd0
+-  %
+-  % We typeset #1 in a box of constant width, regardless of the text of
+-  % #1, so the chapter titles will come out aligned.
+-  \setbox0 = \hbox{#1}%
+-  \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
+-  %
+-  % This space should be plenty, since a single number is .5em, and the
+-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
+-  % (This space doesn't include the extra space that gets added after
+-  % the label; that gets put in by \shortchapentry above.)
+-  \advance\dimen0 by 1.1em
+-  \hbox to \dimen0{#1\hfil}%
+-}
++\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
  
--\def\evenfooting{\parsearg\evenfootingxxx}
--\def\oddfooting{\parsearg\oddfootingxxx}
--\def\everyfooting{\parsearg\everyfootingxxx}
--
--{\catcode`\@=0 %
--
--\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
--\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-+\def\evenheading{\parsearg\evenheadingxxx}
-+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
-+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
- \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
+-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
++% Unnumbered chapters.
++\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
++\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+ 
+ % Sections.
+-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
+-\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
++\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
++\let\appsecentry=\numsecentry
++\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
  
--\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
--\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-+\def\oddheading{\parsearg\oddheadingxxx}
-+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
-+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
- \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+ % Subsections.
+-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
+-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
++\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
++\let\appsubsecentry=\numsubsecentry
++\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
  
--\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+ % And subsubsections.
+-\def\subsubsecentry#1#2#3#4#5#6{%
+-  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+-\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
++\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
++\let\appsubsubsecentry=\numsubsubsecentry
++\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
  
--\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
--\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-+\def\evenfooting{\parsearg\evenfootingxxx}
-+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
-+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
- \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+ % This parameter controls the indentation of the various levels.
+-\newdimen\tocindent \tocindent = 3pc
++% Same as \defaultparindent.
++\newdimen\tocindent \tocindent = 15pt
  
--\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
--\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-+\def\oddfooting{\parsearg\oddfootingxxx}
-+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
-+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
-   \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
-   %
-   % Leave some space for the footline.  Hopefully ok to assume
-   % @evenfooting will not be used by itself.
--  \global\advance\pageheight by -\baselineskip
--  \global\advance\vsize by -\baselineskip
-+  \global\advance\pageheight by -12pt
-+  \global\advance\vsize by -12pt
- }
+ % Now for the actual typesetting. In all these, #1 is the text and #2 is the
+ % page number.
+@@ -3939,17 +5659,8 @@
+   \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup}
  
--\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-+
-+% @evenheadingmarks top     \thischapter <- chapter at the top of a page
-+% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
- %
--}% unbind the catcode of @.
-+% The same set of arguments for:
-+%
-+% @oddheadingmarks
-+% @evenfootingmarks
-+% @oddfootingmarks
-+% @everyheadingmarks
-+% @everyfootingmarks
-+
-+\def\evenheadingmarks{\headingmarks{even}{heading}}
-+\def\oddheadingmarks{\headingmarks{odd}{heading}}
-+\def\evenfootingmarks{\headingmarks{even}{footing}}
-+\def\oddfootingmarks{\headingmarks{odd}{footing}}
-+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
-+                          \headingmarks{odd}{heading}{#1} }
-+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
-+                          \headingmarks{odd}{footing}{#1} }
-+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
-+\def\headingmarks#1#2#3 {%
-+  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
-+  \global\expandafter\let\csname get#1#2marks\endcsname \temp
-+}
-+
-+\everyheadingmarks bottom
-+\everyfootingmarks bottom
+-% Final typesetting of a toc entry; we use the same \entry macro as for
+-% the index entries, but we want to suppress hyphenation here.  (We
+-% can't do that in the \entry macro, since index entries might consist
+-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+-\def\tocentry#1#2{\begingroup
+-  \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
+-  % Do not use \turnoffactive in these arguments.  Since the toc is
+-  % typeset in cmr, so characters such as _ would come out wrong; we
+-  % have to do the usual translation tricks.
+-  \entry{#1}{#2}%
+-\endgroup}
++% We use the same \entry macro as for the index entries.
++\let\tocentry = \entry
  
- % @headings double      turns headings on for double-sided printing.
- % @headings single      turns headings on for single-sided printing.
-@@ -1619,7 +3003,7 @@
+ % Space between chapter (or whatever) number and the title.
+ \def\labelspace{\hskip1em \relax}
+@@ -3959,72 +5670,62 @@
  
- \def\headings #1 {\csname HEADINGS#1\endcsname}
+ \def\chapentryfonts{\secfonts \rm}
+ \def\secentryfonts{\textfonts}
+-\let\subsecentryfonts = \textfonts
+-\let\subsubsecentryfonts = \textfonts
++\def\subsecentryfonts{\textfonts}
++\def\subsubsecentryfonts{\textfonts}
  
--\def\HEADINGSoff{
-+\def\HEADINGSoff{%
- \global\evenheadline={\hfil} \global\evenfootline={\hfil}
- \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
- \HEADINGSoff
-@@ -1628,7 +3012,7 @@
- % chapter name on inside top of right hand pages, document
- % title on inside top of left hand pages, and page numbers on outside top
- % edge of all pages.
--\def\HEADINGSdouble{
-+\def\HEADINGSdouble{%
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
-@@ -1640,7 +3024,7 @@
  
- % For single-sided printing, chapter title goes across top left of page,
- % page number on top right.
--\def\HEADINGSsingle{
-+\def\HEADINGSsingle{%
- \global\pageno=1
- \global\evenfootline={\hfil}
- \global\oddfootline={\hfil}
-@@ -1670,7 +3054,10 @@
- }
+ \message{environments,}
+ % @foo ... @end foo.
  
- % Subroutines used in generating headings
--% Produces Day Month Year style of output.
-+% This produces Day Month Year style of output.
-+% Only define if not already defined, in case a txi-??.tex file has set
-+% up a different format (e.g., txi-cs.tex does this).
-+\ifx\today\undefined
- \def\today{%
-   \number\day\space
-   \ifcase\month
-@@ -1679,16 +3066,16 @@
-   \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
-   \fi
-   \space\number\year}
-+\fi
+-% Since these characters are used in examples, it should be an even number of
+-% \tt widths. Each \tt character is 1en, so two makes it 1em.
+-% Furthermore, these definitions must come after we define our fonts.
+-\newbox\dblarrowbox    \newbox\longdblarrowbox
+-\newbox\pushcharbox    \newbox\bullbox
+-\newbox\equivbox       \newbox\errorbox
+-
+-%{\tentt
+-%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+-%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
+-%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
+-%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
+-% Adapted from the manmac format (p.420 of TeXbook)
+-%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
+-%                                      depth .1ex\hfil}
+-%}
+-
+ % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
++%
++% Since these characters are used in examples, they should be an even number of
++% \tt widths. Each \tt character is 1en, so two makes it 1em.
++%
+ \def\point{$\star$}
+-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
++\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
++\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
++\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+ \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
++\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
  
- % @settitle line...  specifies the title of the document, for headings.
- % It generates no output of its own.
- \def\thistitle{\putwordNoTitle}
--\def\settitle{\parsearg\settitlezzz}
--\def\settitlezzz #1{\gdef\thistitle{#1}}
-+\def\settitle{\parsearg{\gdef\thistitle}}
++% The @error{} command.
+ % Adapted from the TeXbook's \boxit.
++%
++\newbox\errorbox
++%
+ {\tentt \global\dimen0 = 3em}% Width of the box.
+ \dimen2 = .55pt % Thickness of rules
+ % The text. (`r' is open on the right, `e' somewhat less so on the left.)
+-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+-
+-\global\setbox\errorbox=\hbox to \dimen0{\hfil
++\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
++%
++\setbox\errorbox=\hbox to \dimen0{\hfil
+    \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+    \advance\hsize by -2\dimen2 % Rules.
+-   \vbox{
++   \vbox{%
+       \hrule height\dimen2
+       \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+          \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+          \kern3pt\vrule width\dimen2}% Space to right.
+       \hrule height\dimen2}
+     \hfil}
+-
+-% The @error{} command.
++%
+ \def\error{\leavevmode\lower.7ex\copy\errorbox}
  
+ % @tex ... @end tex    escapes into raw Tex temporarily.
+ % One exception: @ is still an escape character, so that @end tex works.
+ % But \@ or @@ will get a plain tex @ character.
  
- \message{tables,}
--% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-+% Tables -- @table, @ftable, @vtable, @item(x).
+-\def\tex{\begingroup
++\envdef\tex{%
+   \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+   \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+-  \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
++  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+   \catcode `\%=14
+-  \catcode 43=12 % plus
+-  \catcode`\"=12
+-  \catcode`\==12
+-  \catcode`\|=12
+-  \catcode`\<=12
+-  \catcode`\>=12
++  \catcode `\+=\other
++  \catcode `\"=\other
++  \catcode `\|=\other
++  \catcode `\<=\other
++  \catcode `\>=\other
+   \escapechar=`\\
+   %
+   \let\b=\ptexb
+@@ -4036,20 +5737,26 @@
+   \let\equiv=\ptexequiv
+   \let\!=\ptexexclam
+   \let\i=\ptexi
++  \let\indent=\ptexindent
++  \let\noindent=\ptexnoindent
+   \let\{=\ptexlbrace
+   \let\+=\tabalign
+   \let\}=\ptexrbrace
++  \let\/=\ptexslash
+   \let\*=\ptexstar
+   \let\t=\ptext
++  \expandafter \let\csname top\endcsname=\ptextop  % outer
++  \let\frenchspacing=\plainfrenchspacing
+   %
+   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+   \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+   \def\@{@}%
+-\let\Etex=\endgroup}
++}
++% There is no need to define \Etex.
  
- % default indentation of table text
- \newdimen\tableindent \tableindent=.8in
-@@ -1700,7 +3087,7 @@
- % used internally for \itemindent minus \itemmargin
- \newdimen\itemmax
+-% Define @lisp ... @endlisp.
+-% @lisp does a \begingroup so it can rebind things,
+-% including the definition of @endlisp (which normally is erroneous).
++% Define @lisp ... @end lisp.
++% @lisp environment forms a group so it can rebind things,
++% including the definition of @end lisp (which normally is erroneous).
  
--% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
- % these defs.
- % They also define \itemindex
- % to index the item name in whatever manner is desired (perhaps none).
-@@ -1712,22 +3099,10 @@
- \def\internalBitem{\smallbreak \parsearg\itemzzz}
- \def\internalBitemx{\itemxpar \parsearg\itemzzz}
+ % Amount to narrow the margins by for @lisp.
+ \newskip\lispnarrowing \lispnarrowing=0.4in
+@@ -4059,34 +5766,34 @@
+ % have any width.
+ \def\lisppar{\null\endgraf}
  
--\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
--\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
--
--\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
--\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
--
--\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
--                 \itemzzz {#1}}
+-% Make each space character in the input produce a normal interword
+-% space in the output.  Don't allow a line break at this space, as this
+-% is used only in environments like @example, where each line of input
+-% should produce a line of output anyway.
+-%
+-{\obeyspaces %
+-\gdef\sepspaces{\obeyspaces\let =\tie}}
 -
--\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
--                 \itemzzz {#1}}
+-% Define \obeyedspace to be our active space, whatever it is.  This is
+-% for use in \parsearg.
+-{\sepspaces%
+-\global\let\obeyedspace= }
 -
- \def\itemzzz #1{\begingroup %
-   \advance\hsize by -\rightskip
-   \advance\hsize by -\tableindent
--  \setbox0=\hbox{\itemfont{#1}}%
-+  \setbox0=\hbox{\itemindicate{#1}}%
-   \itemindex{#1}%
-   \nobreak % This prevents a break before @itemx.
-   %
-@@ -1751,10 +3126,14 @@
-     % \parskip glue -- logically it's part of the @item we just started.
-     \nobreak \vskip-\parskip
-     %
--    % Stop a page break at the \parskip glue coming up.  Unfortunately
--    % we can't prevent a possible page break at the following
--    % \baselineskip glue.
--    \nobreak
-+    % Stop a page break at the \parskip glue coming up.  However, if
-+    % what follows is an environment such as @example, there will be no
-+    % \parskip glue; then the negative vskip we just inserted would
-+    % cause the example and the item to crash together.  So we use this
-+    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
-+    % \parskip glue after all.  Section titles are handled this way also.
-+    % 
-+    \penalty 10001
-     \endgroup
-     \itemxneedsnegativevskipfalse
-   \else
-@@ -1773,97 +3152,106 @@
-   \fi
- }
+ % This space is always present above and below environments.
+ \newskip\envskipamount \envskipamount = 0pt
  
--\def\item{\errmessage{@item while not in a table}}
--\def\itemx{\errmessage{@itemx while not in a table}}
--\def\kitem{\errmessage{@kitem while not in a table}}
--\def\kitemx{\errmessage{@kitemx while not in a table}}
--\def\xitem{\errmessage{@xitem while not in a table}}
--\def\xitemx{\errmessage{@xitemx while not in a table}}
--
--% Contains a kludge to get @end[description] to work.
--\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-+\def\item{\errmessage{@item while not in a list environment}}
-+\def\itemx{\errmessage{@itemx while not in a list environment}}
+ % Make spacing and below environment symmetrical.  We use \parskip here
+ % to help in doing that, since in @example-like environments \parskip
+ % is reset to zero; thus the \afterenvbreak inserts no space -- but the
+-% start of the next paragraph will insert \parskip
++% start of the next paragraph will insert \parskip.
+ %
+-\def\aboveenvbreak{{\advance\envskipamount by \parskip
+-\endgraf \ifdim\lastskip<\envskipamount
+-\removelastskip \penalty-50 \vskip\envskipamount \fi}}
++\def\aboveenvbreak{{%
++  % =10000 instead of <10000 because of a special case in \itemzzz and
++  % \sectionheading, q.v.
++  \ifnum \lastpenalty=10000 \else
++    \advance\envskipamount by \parskip
++    \endgraf
++    \ifdim\lastskip<\envskipamount
++      \removelastskip
++      % it's not a good place to break if the last penalty was \nobreak
++      % or better ...
++      \ifnum\lastpenalty<10000 \penalty-50 \fi
++      \vskip\envskipamount
++    \fi
++  \fi
++}}
  
- % @table, @ftable, @vtable.
--\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
--{\obeylines\obeyspaces%
--\gdef\tablex #1^^M{%
--\tabley\dontindex#1        \endtabley}}
--
--\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
--{\obeylines\obeyspaces%
--\gdef\ftablex #1^^M{%
--\tabley\fnitemindex#1        \endtabley
--\def\Eftable{\endgraf\afterenvbreak\endgroup}%
--\let\Etable=\relax}}
--
--\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
--{\obeylines\obeyspaces%
--\gdef\vtablex #1^^M{%
--\tabley\vritemindex#1        \endtabley
--\def\Evtable{\endgraf\afterenvbreak\endgroup}%
--\let\Etable=\relax}}
--
--\def\dontindex #1{}
--\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
--\def\vritemindex #1{\doind {vr}{\code{#1}}}%
--
--{\obeyspaces %
--\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
--\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
--
--\def\tablez #1#2#3#4#5#6{%
--\aboveenvbreak %
--\begingroup %
--\def\Edescription{\Etable}% Necessary kludge.
--\let\itemindex=#1%
--\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
--\ifnum 0#4>0 \tableindent=#4\mil \fi %
--\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
--\def\itemfont{#2}%
--\itemmax=\tableindent %
--\advance \itemmax by -\itemmargin %
--\advance \leftskip by \tableindent %
--\exdentamount=\tableindent
--\parindent = 0pt
--\parskip = \smallskipamount
--\ifdim \parskip=0pt \parskip=2pt \fi%
--\def\Etable{\endgraf\afterenvbreak\endgroup}%
--\let\item = \internalBitem %
--\let\itemx = \internalBitemx %
--\let\kitem = \internalBkitem %
--\let\kitemx = \internalBkitemx %
--\let\xitem = \internalBxitem %
--\let\xitemx = \internalBxitemx %
-+\envdef\table{%
-+  \let\itemindex\gobble
-+  \tablecheck{table}%
-+}
-+\envdef\ftable{%
-+  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
-+  \tablecheck{ftable}%
+ \let\afterenvbreak = \aboveenvbreak
+ 
+-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
++% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
++% also clear it, so that its embedded environments do the narrowing again.
+ \let\nonarrowing=\relax
+ 
+ % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+@@ -4110,738 +5817,733 @@
+ %
+ \newskip\lskip\newskip\rskip
+ 
+-\long\def\cartouche{%
+-\begingroup
+-        \lskip=\leftskip \rskip=\rightskip
+-        \leftskip=0pt\rightskip=0pt %we want these *outside*.
+-        \cartinner=\hsize \advance\cartinner by-\lskip
+-                          \advance\cartinner by-\rskip
+-        \cartouter=\hsize
+-        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+-%                                    side, and for 6pt waste from
+-%                                    each corner char, and rule thickness
+-        \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+-        % Flag to tell @lisp, etc., not to narrow margin.
+-        \let\nonarrowing=\comment
+-        \vbox\bgroup
+-                \baselineskip=0pt\parskip=0pt\lineskip=0pt
+-                \carttop
+-                \hbox\bgroup
+-                        \hskip\lskip
+-                        \vrule\kern3pt
+-                        \vbox\bgroup
+-                                \hsize=\cartinner
+-                                \kern3pt
+-                                \begingroup
+-                                        \baselineskip=\normbskip
+-                                        \lineskip=\normlskip
+-                                        \parskip=\normpskip
+-                                        \vskip -\parskip
++\envdef\cartouche{%
++  \ifhmode\par\fi  % can't be in the midst of a paragraph.
++  \startsavinginserts
++  \lskip=\leftskip \rskip=\rightskip
++  \leftskip=0pt\rightskip=0pt % we want these *outside*.
++  \cartinner=\hsize \advance\cartinner by-\lskip
++  \advance\cartinner by-\rskip
++  \cartouter=\hsize
++  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
++				% side, and for 6pt waste from
++				% each corner char, and rule thickness
++  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
++  % Flag to tell @lisp, etc., not to narrow margin.
++  \let\nonarrowing = t%
++  \vbox\bgroup
++      \baselineskip=0pt\parskip=0pt\lineskip=0pt
++      \carttop
++      \hbox\bgroup
++	  \hskip\lskip
++	  \vrule\kern3pt
++	  \vbox\bgroup
++	      \kern3pt
++	      \hsize=\cartinner
++	      \baselineskip=\normbskip
++	      \lineskip=\normlskip
++	      \parskip=\normpskip
++	      \vskip -\parskip
++	      \comment % For explanation, see the end of \def\group.
 +}
-+\envdef\vtable{%
-+  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
-+  \tablecheck{vtable}%
+ \def\Ecartouche{%
+-                                \endgroup
+-                                \kern3pt
+-                        \egroup
+-                        \kern3pt\vrule
+-                        \hskip\rskip
+-                \egroup
+-                \cartbot
+-        \egroup
+-\endgroup
+-}}
++              \ifhmode\par\fi
++	      \kern3pt
++	  \egroup
++	  \kern3pt\vrule
++	  \hskip\rskip
++      \egroup
++      \cartbot
++  \egroup
++  \checkinserts
 +}
-+\def\tablecheck#1{%
-+  \ifnum \the\catcode`\^^M=\active
-+    \endgroup
-+    \errmessage{This command won't work in this context; perhaps the problem is
-+      that we are \inenvironment\thisenv}%
-+    \def\next{\doignore{#1}}%
+ 
+ 
+ % This macro is called at the beginning of all the @example variants,
+ % inside a group.
+ \def\nonfillstart{%
+   \aboveenvbreak
+-  \inENV % This group ends at the end of the body
+   \hfuzz = 12pt % Don't be fussy
+   \sepspaces % Make spaces be word-separators rather than space tokens.
+-  \singlespace
+   \let\par = \lisppar % don't ignore blank lines
+   \obeylines % each line of input is a line of output
+   \parskip = 0pt
+   \parindent = 0pt
+   \emergencystretch = 0pt % don't try to avoid overfull boxes
+-  % @cartouche defines \nonarrowing to inhibit narrowing
+-  % at next level down.
+   \ifx\nonarrowing\relax
+     \advance \leftskip by \lispnarrowing
+     \exdentamount=\lispnarrowing
+-    \let\exdent=\nofillexdent
+-    \let\nonarrowing=\relax
 +  \else
-+    \let\next\tablex
-+  \fi
-+  \next
-+}
-+\def\tablex#1{%
-+  \def\itemindicate{#1}%
-+  \parsearg\tabley
++    \let\nonarrowing = \relax
+   \fi
++  \let\exdent=\nofillexdent
  }
-+\def\tabley#1{%
-+  {%
-+    \makevalueexpandable
-+    \edef\temp{\noexpand\tablez #1\space\space\space}%
-+    \expandafter
-+  }\temp \endtablez
+ 
+-% Define the \E... control sequence only if we are inside the particular
+-% environment, so the error checking in \end will work.
+-%
+-% To end an @example-like environment, we first end the paragraph (via
+-% \afterenvbreak's vertical glue), and then the group.  That way we keep
+-% the zero \parskip that the environments set -- \parskip glue will be
+-% inserted at the beginning of the next paragraph in the document, after
+-% the environment.
++% If you want all examples etc. small: @set dispenvsize small.
++% If you want even small examples the full size: @set dispenvsize nosmall.
++% This affects the following displayed environments:
++%    @example, @display, @format, @lisp
+ %
+-\def\nonfillfinish{\afterenvbreak\endgroup}
++\def\smallword{small}
++\def\nosmallword{nosmall}
++\let\SETdispenvsize\relax
++\def\setnormaldispenv{%
++  \ifx\SETdispenvsize\smallword
++    % end paragraph for sake of leading, in case document has no blank
++    % line.  This is redundant with what happens in \aboveenvbreak, but
++    % we need to do it before changing the fonts, and it's inconvenient
++    % to change the fonts afterward.
++    \ifnum \lastpenalty=10000 \else \endgraf \fi
++    \smallexamplefonts \rm
++  \fi
 +}
-+\def\tablez #1 #2 #3 #4\endtablez{%
-+  \aboveenvbreak
-+  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
-+  \ifnum 0#2>0 \tableindent=#2\mil \fi
-+  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
-+  \itemmax=\tableindent
-+  \advance \itemmax by -\itemmargin
-+  \advance \leftskip by \tableindent
-+  \exdentamount=\tableindent
-+  \parindent = 0pt
-+  \parskip = \smallskipamount
-+  \ifdim \parskip=0pt \parskip=2pt \fi
-+  \let\item = \internalBitem
-+  \let\itemx = \internalBitemx
++\def\setsmalldispenv{%
++  \ifx\SETdispenvsize\nosmallword
++  \else
++    \ifnum \lastpenalty=10000 \else \endgraf \fi
++    \smallexamplefonts \rm
++  \fi
 +}
-+\def\Etable{\endgraf\afterenvbreak}
-+\let\Eftable\Etable
-+\let\Evtable\Etable
-+\let\Eitemize\Etable
-+\let\Eenumerate\Etable
  
- % This is the counter used by @enumerate, which is really @itemize
+-% @lisp: indented, narrowed, typewriter font.
+-\def\lisp{\begingroup
+-  \nonfillstart
+-  \let\Elisp = \nonfillfinish
+-  \tt
+-  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+-  \gobble       % eat return
++% We often define two environments, @foo and @smallfoo.
++% Let's do it by one command:
++\def\makedispenv #1#2{
++  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
++  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
++  \expandafter\let\csname E#1\endcsname \afterenvbreak
++  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+ }
  
- \newcount \itemno
+-% @example: Same as @lisp.
+-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
++% Define two synonyms:
++\def\maketwodispenvs #1#2#3{
++  \makedispenv{#1}{#3}
++  \makedispenv{#2}{#3}
++}
  
--\def\itemize{\parsearg\itemizezzz}
-+\envdef\itemize{\parsearg\doitemize}
+-% @small... is usually equivalent to the non-small (@smallbook
+-% redefines).  We must call \example (or whatever) last in the
+-% definition, since it reads the return following the @example (or
+-% whatever) command.
+-%
+-% This actually allows (for example) @end display inside an
+-% @smalldisplay.  Too bad, but makeinfo will catch the error anyway.
++% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+ %
+-\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
+-\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
+-\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
+-\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
+-
+-% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
++% @smallexample and @smalllisp: use smaller fonts.
+ % Originally contributed by Pavel at xerox.
+-\def\smalllispx{\begingroup
+-  \def\Esmalllisp{\nonfillfinish\endgroup}%
+-  \def\Esmallexample{\nonfillfinish\endgroup}%
+-  \smallfonts
+-  \lisp
+-}
+-
+-% @display: same as @lisp except keep current font.
+ %
+-\def\display{\begingroup
++\maketwodispenvs {lisp}{example}{%
+   \nonfillstart
+-  \let\Edisplay = \nonfillfinish
+-  \gobble
++  \tt\quoteexpand
++  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
++  \gobble       % eat return
+ }
+-
+-% @smalldisplay (when @smallbook): @display plus smaller fonts.
++% @display/@smalldisplay: same as @lisp except keep current font.
+ %
+-\def\smalldisplayx{\begingroup
+-  \def\Esmalldisplay{\nonfillfinish\endgroup}%
+-  \smallfonts \rm
+-  \display
++\makedispenv {display}{%
++  \nonfillstart
++  \gobble
+ }
  
--\def\itemizezzz #1{%
--  \begingroup % ended by the @end itemize
--  \itemizey {#1}{\Eitemize}
-+\def\doitemize#1{%
-+  \aboveenvbreak
-+  \itemmax=\itemindent
-+  \advance\itemmax by -\itemmargin
-+  \advance\leftskip by \itemindent
-+  \exdentamount=\itemindent
-+  \parindent=0pt
-+  \parskip=\smallskipamount
-+  \ifdim\parskip=0pt \parskip=2pt \fi
-+  \def\itemcontents{#1}%
-+  % @itemize with no arg is equivalent to @itemize @bullet.
-+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
-+  \let\item=\itemizeitem
+-% @format: same as @display except don't narrow margins.
++% @format/@smallformat: same as @display except don't narrow margins.
+ %
+-\def\format{\begingroup
+-  \let\nonarrowing = t
++\makedispenv{format}{%
++  \let\nonarrowing = t%
+   \nonfillstart
+-  \let\Eformat = \nonfillfinish
+   \gobble
  }
  
--\def\itemizey #1#2{%
--\aboveenvbreak %
--\itemmax=\itemindent %
--\advance \itemmax by -\itemmargin %
--\advance \leftskip by \itemindent %
--\exdentamount=\itemindent
--\parindent = 0pt %
--\parskip = \smallskipamount %
--\ifdim \parskip=0pt \parskip=2pt \fi%
--\def#2{\endgraf\afterenvbreak\endgroup}%
--\def\itemcontents{#1}%
--\let\item=\itemizeitem}
+-% @smallformat (when @smallbook): @format plus smaller fonts.
+-%
+-\def\smallformatx{\begingroup
+-  \def\Esmallformat{\nonfillfinish\endgroup}%
+-  \smallfonts \rm
+-  \format
++% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
++\envdef\flushleft{%
++  \let\nonarrowing = t%
++  \nonfillstart
++  \gobble
+ }
 -
--% Set sfcode to normal for the chars that usually have another value.
--% These are `.?!:;,'
--\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000
--  \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 }
-+% Definition of @item while inside @itemize and @enumerate.
-+%
-+\def\itemizeitem{%
-+  \advance\itemno by 1  % for enumerations
-+  {\let\par=\endgraf \smallbreak}% reasonable place to break
-+  {%
-+   % If the document has an @itemize directly after a section title, a
-+   % \nobreak will be last on the list, and \sectionheading will have
-+   % done a \vskip-\parskip.  In that case, we don't want to zero
-+   % parskip, or the item text will crash with the heading.  On the
-+   % other hand, when there is normal text preceding the item (as there
-+   % usually is), we do want to zero parskip, or there would be too much
-+   % space.  In that case, we won't have a \nobreak before.  At least
-+   % that's the theory.
-+   \ifnum\lastpenalty<10000 \parskip=0in \fi
-+   \noindent
-+   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
-+   \vadjust{\penalty 1200}}% not good to break after first line of item.
-+  \flushcr
-+}
+-% @flushleft (same as @format).
+-%
+-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
++\let\Eflushleft = \afterenvbreak
  
- % \splitoff TOKENS\endmark defines \first to be the first token in
- % TOKENS, and \rest to be the remainder.
-@@ -1874,11 +3262,8 @@
- % or number, to specify the first label in the enumerated list.  No
- % argument is the same as `1'.
+ % @flushright.
  %
--\def\enumerate{\parsearg\enumeratezzz}
--\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
-+\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
- \def\enumeratey #1 #2\endenumeratey{%
--  \begingroup % ended by the @end enumerate
--  %
-   % If we were given no argument, pretend we were given `1'.
-   \def\thearg{#1}%
-   \ifx\thearg\empty \def\thearg{1}\fi
-@@ -1949,13 +3334,13 @@
-   }%
+-\def\flushright{\begingroup
+-  \let\nonarrowing = t
++\envdef\flushright{%
++  \let\nonarrowing = t%
+   \nonfillstart
+-  \let\Eflushright = \nonfillfinish
+   \advance\leftskip by 0pt plus 1fill
+   \gobble
  }
++\let\Eflushright = \afterenvbreak
++
  
--% Call itemizey, adding a period to the first argument and supplying the
-+% Call \doitemize, adding a period to the first argument and supplying the
- % common last two arguments.  Also subtract one from the initial value in
- % \itemno, since @item increments \itemno.
+ % @quotation does normal linebreaking (hence we can't use \nonfillstart)
+-% and narrows the margins.
++% and narrows the margins.  We keep \parskip nonzero in general, since
++% we're doing normal filling.  So, when using \aboveenvbreak and
++% \afterenvbreak, temporarily make \parskip 0.
  %
- \def\startenumeration#1{%
-   \advance\itemno by -1
--  \itemizey{#1.}\Eenumerate\flushcr
-+  \doitemize{#1.}\flushcr
+-\def\quotation{%
+-  \begingroup\inENV %This group ends at the end of the @quotation body
++\envdef\quotation{%
+   {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+-  \singlespace
+   \parindent=0pt
+-  % We have retained a nonzero parskip for the environment, since we're
+-  % doing normal filling. So to avoid extra space below the environment...
+-  \def\Equotation{\parskip = 0pt \nonfillfinish}%
+   %
+   % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+   \ifx\nonarrowing\relax
+     \advance\leftskip by \lispnarrowing
+     \advance\rightskip by \lispnarrowing
+     \exdentamount = \lispnarrowing
++  \else
+     \let\nonarrowing = \relax
+   \fi
++  \parsearg\quotationlabel
  }
  
- % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-@@ -1966,16 +3351,6 @@
- \def\Ealphaenumerate{\Eenumerate}
- \def\Ecapsenumerate{\Eenumerate}
++% We have retained a nonzero parskip for the environment, since we're
++% doing normal filling.
++%
++\def\Equotation{%
++  \par
++  \ifx\quotationauthor\undefined\else
++    % indent a bit.
++    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
++  \fi
++  {\parskip=0pt \afterenvbreak}%
++}
  
--% Definition of @item while inside @itemize.
+-\message{defuns,}
+-% @defun etc.
 -
--\def\itemizeitem{%
--\advance\itemno by 1
--{\let\par=\endgraf \smallbreak}%
--\ifhmode \errmessage{In hmode at itemizeitem}\fi
--{\parskip=0in \hskip 0pt
--\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
--\vadjust{\penalty 1200}}%
--\flushcr}
- 
- % @multitable macros
- % Amy Hendrickson, 8/18/94, 3/6/96
-@@ -2002,24 +3377,14 @@
- %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
- %   @item ...
- %   using the widest term desired in each column.
--%
--% For those who want to use more than one line's worth of words in
--% the preamble, break the line within one argument and it
--% will parse correctly, i.e.,
--%
--%     @multitable {Column 1 template} {Column 2 template} {Column 3
--%      template}
--% Not:
--%     @multitable {Column 1 template} {Column 2 template}
--%      {Column 3 template}
- 
- % Each new table line starts with @item, each subsequent new column
- % starts with @tab. Empty columns may be produced by supplying @tab's
- % with nothing between them for as many times as empty columns are needed,
- % ie, @tab at tab@tab will produce two empty columns.
- 
--% @item, @tab, @multitable or @end multitable do not need to be on their
--% own lines, but it will not hurt if they are.
-+% @item, @tab do not need to be on their own lines, but it will not hurt
-+% if they are.
- 
- % Sample multitable:
+-% Allow user to change definition object font (\df) internally
+-\def\setdeffont #1 {\csname DEF#1\endcsname}
+-
+-\newskip\defbodyindent \defbodyindent=.4in
+-\newskip\defargsindent \defargsindent=50pt
+-\newskip\deftypemargin \deftypemargin=12pt
+-\newskip\deflastargmargin \deflastargmargin=18pt
+-
+-\newcount\parencount
+-% define \functionparens, which makes ( and ) and & do special things.
+-% \functionparens affects the group it is contained in.
+-\def\activeparens{%
+-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
+-\catcode`\[=\active \catcode`\]=\active}
+-
+-% Make control sequences which act like normal parenthesis chars.
+-\let\lparen = ( \let\rparen = )
+-
+-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+-
+-% Be sure that we always have a definition for `(', etc.  For example,
+-% if the fn name has parens in it, \boldbrax will not be in effect yet,
+-% so TeX would otherwise complain about undefined control sequence.
+-\global\let(=\lparen \global\let)=\rparen
+-\global\let[=\lbrack \global\let]=\rbrack
++% If we're given an argument, typeset it in bold with a colon after.
++\def\quotationlabel#1{%
++  \def\temp{#1}%
++  \ifx\temp\empty \else
++    {\bf #1: }%
++  \fi
++}
  
-@@ -2063,13 +3428,12 @@
- \def\xcolumnfractions{\columnfractions}
- \newif\ifsetpercent
+-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+-% This is used to turn on special parens
+-% but make & act ordinary (given that it's active).
+-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
  
--% #1 is the part of the @columnfraction before the decimal point, which
--% is presumably either 0 or the empty string (but we don't check, we
--% just throw it away).  #2 is the decimal part, which we use as the
--% percent of \hsize for this column.
--\def\pickupwholefraction#1.#2 {%
-+% #1 is the @columnfraction, usually a decimal number like .5, but might
-+% be just 1.  We just use it, whatever it is.
+-% Definitions of (, ) and & used in args for functions.
+-% This is the definition of ( outside of all parentheses.
+-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
+-  \global\advance\parencount by 1
++% LaTeX-like @verbatim... at end verbatim and @verb{<char>...<char>}
++% If we want to allow any <char> as delimiter,
++% we need the curly braces so that makeinfo sees the @verb command, eg:
++% `@verbx...x' would look like the '@verbx' command.  --janneke at gnu.org
 +%
-+\def\pickupwholefraction#1 {%
-   \global\advance\colcount by 1
--  \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
-+  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
-   \setuptable
++% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
++%
++% [Knuth] p.344; only we need to do the other characters Texinfo sets
++% active too.  Otherwise, they get lost as the first character on a
++% verbatim line.
++\def\dospecials{%
++  \do\ \do\\\do\{\do\}\do\$\do\&%
++  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
++  \do\<\do\>\do\|\do\@\do+\do\"%
  }
- 
-@@ -2086,8 +3450,8 @@
-          \let\go\pickupwholefraction
-       \else
-          \global\advance\colcount by 1
--         \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
--                            % typically that is always in the input, anyway.
-+         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
-+                   % separator; typically that is always in the input, anyway.
-          \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-       \fi
-     \fi
-@@ -2102,18 +3466,33 @@
-   \go
+ %
+-% This is the definition of ( when already inside a level of parens.
+-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
++% [Knuth] p. 380
++\def\uncatcodespecials{%
++  \def\do##1{\catcode`##1=\other}\dospecials}
+ %
+-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+-  % also in that case restore the outer-level definition of (.
+-  \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+-  \global\advance \parencount by -1 }
+-% If we encounter &foo, then turn on ()-hacking afterwards
+-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
++% [Knuth] pp. 380,381,391
++% Disable Spanish ligatures ?` and !` of \tt font
++\begingroup
++  \catcode`\`=\active\gdef`{\relax\lq}
++\endgroup
+ %
+-\gdef\normalparens{\boldbrax\let&=\ampnr}
+-} % End of definition inside \activeparens
+-%% These parens (in \boldbrax) actually are a little bolder than the
+-%% contained text.  This is especially needed for [ and ]
+-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
+-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
+-\let\ampnr = \&
+-\def\lbrb{{\bf\char`\[}}
+-\def\rbrb{{\bf\char`\]}}
+-
+-% Active &'s sneak into the index arguments, so make sure it's defined.
+-{
+-  \catcode`& = 13
+-  \global\let& = \ampnr
++% Setup for the @verb command.
++%
++% Eight spaces for a tab
++\begingroup
++  \catcode`\^^I=\active
++  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
++\endgroup
++%
++\def\setupverb{%
++  \tt  % easiest (and conventionally used) font for verbatim
++  \def\par{\leavevmode\endgraf}%
++  \catcode`\`=\active
++  \tabeightspaces
++  % Respect line breaks,
++  % print special symbols as themselves, and
++  % make each space count
++  % must do in this order:
++  \obeylines \uncatcodespecials \sepspaces
  }
  
--% This used to have \hskip1sp.  But then the space in a template line is
--% not enough.  That is bad.  So let's go back to just & until we
--% encounter the problem it was intended to solve again.
--% --karl, nathan at acm.org, 20apr99.
--\def\tab{&}
-+% multitable-only commands.
+-% First, defname, which formats the header line itself.
+-% #1 should be the function name.
+-% #2 should be the type of definition, such as "Function".
++% Setup for the @verbatim environment
 +%
-+% @headitem starts a heading row, which we typeset in bold.
-+% Assignments have to be global since we are inside the implicit group
-+% of an alignment entry.  Note that \everycr resets \everytab.
-+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
++% Real tab expansion
++\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
 +%
-+% A \tab used to include \hskip1sp.  But then the space in a template
-+% line is not enough.  That is bad.  So let's go back to just `&' until
-+% we encounter the problem it was intended to solve again.
-+%					--karl, nathan at acm.org, 20apr99.
-+\def\tab{\checkenv\multitable &\the\everytab}%
++\def\starttabbox{\setbox0=\hbox\bgroup}
  
- % @multitable ... @end multitable definitions:
- %
--\def\multitable{\parsearg\dotable}
--\def\dotable#1{\bgroup
-+\newtoks\everytab  % insert after every tab.
+-\def\defname #1#2{%
+-% Get the values of \leftskip and \rightskip as they were
+-% outside the @def...
+-\dimen2=\leftskip
+-\advance\dimen2 by -\defbodyindent
+-\noindent
+-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
+-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
+-\parshape 2 0in \dimen0 \defargsindent \dimen1
+-% Now output arg 2 ("Function" or some such)
+-% ending at \deftypemargin from the right margin,
+-% but stuck inside a box of width 0 so it does not interfere with linebreaking
+-{% Adjust \hsize to exclude the ambient margins,
+-% so that \rightline will obey them.
+-\advance \hsize by -\dimen2
+-\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
+-% Make all lines underfull and no complaints:
+-\tolerance=10000 \hbadness=10000
+-\advance\leftskip by -\defbodyindent
+-\exdentamount=\defbodyindent
+-{\df #1}\enskip        % Generate function name
++% Allow an option to not replace quotes with a regular directed right
++% quote/apostrophe (char 0x27), but instead use the undirected quote
++% from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it
++% the default, but it works for pasting with more pdf viewers (at least
++% evince), the lilypond developers report.  xpdf does work with the
++% regular 0x27.  
++% 
++\def\codequoteright{%
++  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
++    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
++      '%
++    \else \char'15 \fi
++  \else \char'15 \fi
+ }
 +%
-+\envdef\multitable{%
-   \vskip\parskip
--  \let\item\crcr
-+  \startsavinginserts
-+  %
-+  % @item within a multitable starts a normal row.
-+  % We use \def instead of \let so that if one of the multitable entries
-+  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
-+  % \endtemplate) expanding \doitemize.
-+  \def\item{\crcr}%
-+  %
-   \tolerance=9500
-   \hbadness=9500
-   \setmultitablespacing
-@@ -2121,81 +3500,93 @@
-   \parindent=\multitableparindent
-   \overfullrule=0pt
-   \global\colcount=0
--  \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
-   %
-+  \everycr = {%
-+    \noalign{%
-+      \global\everytab={}%
-+      \global\colcount=0 % Reset the column counter.
-+      % Check for saved footnotes, etc.
-+      \checkinserts
-+      % Keeps underfull box messages off when table breaks over pages.
-+      %\filbreak
-+	% Maybe so, but it also creates really weird page breaks when the
-+	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
-+	% problem manifests itself, so it can be fixed for real --karl.
++% and a similar option for the left quote char vs. a grave accent.
++% Modern fonts display ASCII 0x60 as a grave accent, so some people like
++% the code environments to do likewise.
++% 
++\def\codequoteleft{%
++  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
++    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
++      `%
++    \else \char'22 \fi
++  \else \char'22 \fi
++}
++%
++\begingroup
++  \catcode`\^^I=\active
++  \gdef\tabexpand{%
++    \catcode`\^^I=\active
++    \def^^I{\leavevmode\egroup
++      \dimen0=\wd0 % the width so far, or since the previous tab
++      \divide\dimen0 by\tabw
++      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
++      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
++      \wd0=\dimen0 \box0 \starttabbox
 +    }%
-+  }%
++  }
++  \catcode`\'=\active
++  \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}%
 +  %
-+  \parsearg\domultitable
-+}
-+\def\domultitable#1{%
-   % To parse everything between @multitable and @item:
-   \setuptable#1 \endsetuptable
-   %
--  % \everycr will reset column counter, \colcount, at the end of
--  % each line. Every column entry will cause \colcount to advance by one.
--  % The table preamble
--  % looks at the current \colcount to find the correct column width.
--  \everycr{\noalign{%
--  %
--  % \filbreak%% keeps underfull box messages off when table breaks over pages.
--  % Maybe so, but it also creates really weird page breaks when the table
--  % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
--  % manifests itself, so it can be fixed for real --karl.
--    \global\colcount=0\relax}}%
--  %
-   % This preamble sets up a generic column definition, which will
-   % be used as many times as user calls for columns.
-   % \vtop will set a single line and will also let text wrap and
-   % continue for many paragraphs if desired.
--  \halign\bgroup&\global\advance\colcount by 1\relax
--    \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
--  %
--  % In order to keep entries from bumping into each other
--  % we will add a \leftskip of \multitablecolspace to all columns after
--  % the first one.
--  %
--  % If a template has been used, we will add \multitablecolspace
--  % to the width of each template entry.
--  %
--  % If the user has set preamble in terms of percent of \hsize we will
--  % use that dimension as the width of the column, and the \leftskip
--  % will keep entries from bumping into each other.  Table will start at
--  % left margin and final column will justify at right margin.
--  %
--  % Make sure we don't inherit \rightskip from the outer environment.
--  \rightskip=0pt
--  \ifnum\colcount=1
--    % The first column will be indented with the surrounding text.
--    \advance\hsize by\leftskip
--  \else
--    \ifsetpercent \else
--      % If user has not set preamble in terms of percent of \hsize
--      % we will advance \hsize by \multitablecolspace.
--      \advance\hsize by \multitablecolspace
--    \fi
--   % In either case we will make \leftskip=\multitablecolspace:
--  \leftskip=\multitablecolspace
--  \fi
--  % Ignoring space at the beginning and end avoids an occasional spurious
--  % blank line, when TeX decides to break the line at the space before the
--  % box from the multistrut, so the strut ends up on a line by itself.
--  % For example:
--  % @multitable @columnfractions .11 .89
--  % @item @code{#}
--  % @tab Legal holiday which is valid in major parts of the whole country.
--  % Is automatically provided with highlighting sequences respectively marking
--  % characters.
--  \noindent\ignorespaces##\unskip\multistrut}\cr
-+  \halign\bgroup &%
-+    \global\advance\colcount by 1
-+    \multistrut
-+    \vtop{%
-+      % Use the current \colcount to find the correct column width:
-+      \hsize=\expandafter\csname col\the\colcount\endcsname
-+      %
-+      % In order to keep entries from bumping into each other
-+      % we will add a \leftskip of \multitablecolspace to all columns after
-+      % the first one.
-+      %
-+      % If a template has been used, we will add \multitablecolspace
-+      % to the width of each template entry.
-+      %
-+      % If the user has set preamble in terms of percent of \hsize we will
-+      % use that dimension as the width of the column, and the \leftskip
-+      % will keep entries from bumping into each other.  Table will start at
-+      % left margin and final column will justify at right margin.
-+      %
-+      % Make sure we don't inherit \rightskip from the outer environment.
-+      \rightskip=0pt
-+      \ifnum\colcount=1
-+	% The first column will be indented with the surrounding text.
-+	\advance\hsize by\leftskip
-+      \else
-+	\ifsetpercent \else
-+	  % If user has not set preamble in terms of percent of \hsize
-+	  % we will advance \hsize by \multitablecolspace.
-+	  \advance\hsize by \multitablecolspace
-+	\fi
-+       % In either case we will make \leftskip=\multitablecolspace:
-+      \leftskip=\multitablecolspace
-+      \fi
-+      % Ignoring space at the beginning and end avoids an occasional spurious
-+      % blank line, when TeX decides to break the line at the space before the
-+      % box from the multistrut, so the strut ends up on a line by itself.
-+      % For example:
-+      % @multitable @columnfractions .11 .89
-+      % @item @code{#}
-+      % @tab Legal holiday which is valid in major parts of the whole country.
-+      % Is automatically provided with highlighting sequences respectively
-+      % marking characters.
-+      \noindent\ignorespaces##\unskip\multistrut
-+    }\cr
++  \catcode`\`=\active
++  \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}%
++  %
++  \gdef\quoteexpand{\rquoteexpand \lquoteexpand}%
++\endgroup
+ 
+-% Actually process the body of a definition
+-% #1 should be the terminating control sequence, such as \Edefun.
+-% #2 should be the "another name" control sequence, such as \defunx.
+-% #3 should be the control sequence that actually processes the header,
+-%    such as \defunheader.
+-
+-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+-\medbreak %
+-% Define the end token that this defining construct specifies
+-% so that it will exit this group.
+-\def#1{\endgraf\endgroup\medbreak}%
+-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
+-\parindent=0in
+-\advance\leftskip by \defbodyindent
+-\exdentamount=\defbodyindent
+-\begingroup %
+-\catcode 61=\active % 61 is `='
+-\obeylines\activeparens\spacesplit#3}
++% start the verbatim environment.
++\def\setupverbatim{%
++  \let\nonarrowing = t%
++  \nonfillstart
++  % Easiest (and conventionally used) font for verbatim
++  \tt
++  \def\par{\leavevmode\egroup\box0\endgraf}%
++  \catcode`\`=\active
++  \tabexpand
++  \quoteexpand
++  % Respect line breaks,
++  % print special symbols as themselves, and
++  % make each space count
++  % must do in this order:
++  \obeylines \uncatcodespecials \sepspaces
++  \everypar{\starttabbox}%
 +}
-+\def\Emultitable{%
-+  \crcr
-+  \egroup % end the \halign
-+  \global\setpercentfalse
- }
  
--\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
--% If so, do nothing. If not, give it an appropriate dimension based on
--% current baselineskip.
-+\def\setmultitablespacing{%
-+  \def\multistrut{\strut}% just use the standard line spacing
-+  %
-+  % Compute \multitablelinespace (if not defined by user) for use in
-+  % \multitableparskip calculation.  We used define \multistrut based on
-+  % this, but (ironically) that caused the spacing to be off.
-+  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
- \ifdim\multitablelinespace=0pt
- \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
- \global\advance\multitablelinespace by-\ht0
--%% strut to put in table in case some entry doesn't have descenders,
--%% to keep lines equally spaced
--\let\multistrut = \strut
--\else
--%% FIXME: what is \box0 supposed to be?
--\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
--width0pt\relax} \fi
-+\fi
- %% Test to see if parskip is larger than space between lines of
- %% table. If not, do nothing.
- %%        If so, set to same dimension as multitablelinespace.
-@@ -2212,282 +3603,178 @@
+-% #1 is the \E... control sequence to end the definition (which we define).
+-% #2 is the \...x control sequence for consecutive fns (which we define).
+-% #3 is the control sequence to call to resume processing.
+-% #4, delimited by the space, is the class name.
++% Do the @verb magic: verbatim text is quoted by unique
++% delimiter characters.  Before first delimiter expect a
++% right brace, after last delimiter expect closing brace:
+ %
+-\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
+-\medbreak %
+-% Define the end token that this defining construct specifies
+-% so that it will exit this group.
+-\def#1{\endgraf\endgroup\medbreak}%
+-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+-\parindent=0in
+-\advance\leftskip by \defbodyindent
+-\exdentamount=\defbodyindent
+-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
++%    \def\doverb'{'<char>#1<char>'}'{#1}
++%
++% [Knuth] p. 382; only eat outer {}
++\begingroup
++  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
++  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
++\endgroup
++%
++\def\verb{\begingroup\setupverb\doverb}
++%
++%
++% Do the @verbatim magic: define the macro \doverbatim so that
++% the (first) argument ends when '@end verbatim' is reached, ie:
++%
++%     \def\doverbatim#1 at end verbatim{#1}
++%
++% For Texinfo it's a lot easier than for LaTeX,
++% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
++% we need not redefine '\', '{' and '}'.
++%
++% Inspired by LaTeX's verbatim command set [latex.ltx]
++%
++\begingroup
++  \catcode`\ =\active
++  \obeylines %
++  % ignore everything up to the first ^^M, that's the newline at the end
++  % of the @verbatim input line itself.  Otherwise we get an extra blank
++  % line in the output.
++  \xdef\doverbatim#1^^M#2 at end verbatim{#2\noexpand\end\gobble verbatim}%
++  % We really want {...\end verbatim} in the body of the macro, but
++  % without the active space; thus we have to use \xdef and \gobble.
++\endgroup
++%
++\envdef\verbatim{%
++    \setupverbatim\doverbatim
++}
++\let\Everbatim = \afterenvbreak
  
+-% Used for @deftypemethod and @deftypeivar.
+-% #1 is the \E... control sequence to end the definition (which we define).
+-% #2 is the \...x control sequence for consecutive fns (which we define).
+-% #3 is the control sequence to call to resume processing.
+-% #4, delimited by a space, is the class name.
+-% #5 is the method's return type.
++
++% @verbatiminclude FILE - insert text of file in verbatim environment.
+ %
+-\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
+-  \medbreak
+-  \def#1{\endgraf\endgroup\medbreak}%
+-  \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
+-  \parindent=0in
+-  \advance\leftskip by \defbodyindent
+-  \exdentamount=\defbodyindent
+-  \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
++\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
++%
++\def\doverbatiminclude#1{%
++  {%
++    \makevalueexpandable
++    \setupverbatim
++    \input #1
++    \afterenvbreak
++  }%
++}
  
- \message{conditionals,}
--% Prevent errors for section commands.
--% Used in @ignore and in failing conditionals.
--\def\ignoresections{%
--  \let\chapter=\relax
--  \let\unnumbered=\relax
--  \let\top=\relax
--  \let\unnumberedsec=\relax
--  \let\unnumberedsection=\relax
--  \let\unnumberedsubsec=\relax
--  \let\unnumberedsubsection=\relax
--  \let\unnumberedsubsubsec=\relax
--  \let\unnumberedsubsubsection=\relax
--  \let\section=\relax
--  \let\subsec=\relax
--  \let\subsubsec=\relax
--  \let\subsection=\relax
--  \let\subsubsection=\relax
--  \let\appendix=\relax
--  \let\appendixsec=\relax
--  \let\appendixsection=\relax
--  \let\appendixsubsec=\relax
--  \let\appendixsubsection=\relax
--  \let\appendixsubsubsec=\relax
--  \let\appendixsubsubsection=\relax
--  \let\contents=\relax
--  \let\smallbook=\relax
--  \let\titlepage=\relax
--}
+-% Used for @deftypeop.  The change from \deftypemethparsebody is an
+-% extra argument at the beginning which is the `category', instead of it
+-% being the hardwired string `Method' or `Instance Variable'.  We have
+-% to account for this both in the \...x definition and in parsing the
+-% input at hand.  Thus also need a control sequence (passed as #5) for
+-% the \E... definition to assign the category name to.
+-% 
+-\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
+-  \medbreak
+-  \def#1{\endgraf\endgroup\medbreak}%
+-  \def#2##1 ##2 ##3 {%
+-    \def#4{##1}%
+-    \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
+-  \parindent=0in
+-  \advance\leftskip by \defbodyindent
+-  \exdentamount=\defbodyindent
+-  \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
++% @copying ... @end copying.
++% Save the text away for @insertcopying later.
++%
++% We save the uninterpreted tokens, rather than creating a box.
++% Saving the text in a box would be much easier, but then all the
++% typesetting commands (@smallbook, font changes, etc.) have to be done
++% beforehand -- and a) we want @copying to be done first in the source
++% file; b) letting users define the frontmatter in as flexible order as
++% possible is very desirable.
++%
++\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
++\def\docopying#1 at end copying{\endgroup\def\copyingtext{#1}}
++%
++\def\insertcopying{%
++  \begingroup
++    \parindent = 0pt  % paragraph indentation looks wrong on title page
++    \scanexp\copyingtext
++  \endgroup
++}
+ 
+-\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
+-\medbreak %
+-% Define the end token that this defining construct specifies
+-% so that it will exit this group.
+-\def#1{\endgraf\endgroup\medbreak}%
+-\def#2##1 ##2 {\def#4{##1}%
+-\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
+-\parindent=0in
+-\advance\leftskip by \defbodyindent
+-\exdentamount=\defbodyindent
+-\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
+ 
+-% These parsing functions are similar to the preceding ones
+-% except that they do not make parens into active characters.
+-% These are used for "variables" since they have no arguments.
++\message{defuns,}
++% @defun etc.
+ 
+-\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
+-\medbreak %
+-% Define the end token that this defining construct specifies
+-% so that it will exit this group.
+-\def#1{\endgraf\endgroup\medbreak}%
+-\def#2{\begingroup\obeylines\spacesplit#3}%
+-\parindent=0in
+-\advance\leftskip by \defbodyindent
+-\exdentamount=\defbodyindent
+-\begingroup %
+-\catcode 61=\active %
+-\obeylines\spacesplit#3}
++\newskip\defbodyindent \defbodyindent=.4in
++\newskip\defargsindent \defargsindent=50pt
++\newskip\deflastargmargin \deflastargmargin=18pt
++\newcount\defunpenalty
+ 
+-% This is used for \def{tp,vr}parsebody.  It could probably be used for
+-% some of the others, too, with some judicious conditionals.
+-%
+-\def\parsebodycommon#1#2#3{%
+-  \begingroup\inENV %
+-  \medbreak %
+-  % Define the end token that this defining construct specifies
+-  % so that it will exit this group.
+-  \def#1{\endgraf\endgroup\medbreak}%
+-  \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
++% Start the processing of @deffn:
++\def\startdefun{%
++  \ifnum\lastpenalty<10000
++    \medbreak
++    \defunpenalty=10003 % Will keep this @deffn together with the
++                        % following @def command, see below.
++  \else
++    % If there are two @def commands in a row, we'll have a \nobreak,
++    % which is there to keep the function description together with its
++    % header.  But if there's nothing but headers, we need to allow a
++    % break somewhere.  Check specifically for penalty 10002, inserted
++    % by \printdefunline, instead of 10000, since the sectioning
++    % commands also insert a nobreak penalty, and we don't want to allow
++    % a break between a section heading and a defun.
++    %
++    % As a minor refinement, we avoid "club" headers by signalling
++    % with penalty of 10003 after the very first @deffn in the
++    % sequence (see above), and penalty of 10002 after any following
++    % @def command.
++    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
++    %
++    % Similarly, after a section heading, do not allow a break.
++    % But do insert the glue.
++    \medskip  % preceded by discardable penalty, so not a breakpoint
++  \fi
++  %
+   \parindent=0in
+   \advance\leftskip by \defbodyindent
+   \exdentamount=\defbodyindent
+-  \begingroup\obeylines
+ }
  
--% Used in nested conditionals, where we have to parse the Texinfo source
--% and so want to turn off most commands, in case they are used
--% incorrectly.
-+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
-+% @ifnotxml always succeed.  They currently do nothing; we don't
-+% attempt to check whether the conditionals are properly nested.  But we
-+% have to remember that they are conditionals, so that @end doesn't
-+% attempt to close an environment group.
+-\def\defvrparsebody#1#2#3#4 {%
+-  \parsebodycommon{#1}{#2}{#3}%
+-  \spacesplit{#3{#4}}%
++\def\dodefunx#1{%
++  % First, check whether we are in the right environment:
++  \checkenv#1%
++  %
++  % As above, allow line break if we have multiple x headers in a row.
++  % It's not a great place, though.
++  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
++  %
++  % And now, it's time to reuse the body of the original defun:
++  \expandafter\gobbledefun#1%
+ }
++\def\gobbledefun#1\startdefun{}
+ 
+-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
+-% type is just `struct', because we lose the braces in `{struct
+-% termios}' when \spacesplit reads its undelimited argument.  Sigh.
+-% \let\deftpparsebody=\defvrparsebody
+-%
+-% So, to get around this, we put \empty in with the type name.  That
+-% way, TeX won't find exactly `{...}' as an undelimited argument, and
+-% won't strip off the braces.
++% \printdefunline \deffnheader{text}
  %
--\def\ignoremorecommands{%
--  \let\defcodeindex = \relax
--  \let\defcv = \relax
--  \let\deffn = \relax
--  \let\deffnx = \relax
--  \let\defindex = \relax
--  \let\defivar = \relax
--  \let\defmac = \relax
--  \let\defmethod = \relax
--  \let\defop = \relax
--  \let\defopt = \relax
--  \let\defspec = \relax
--  \let\deftp = \relax
--  \let\deftypefn = \relax
--  \let\deftypefun = \relax
--  \let\deftypeivar = \relax
--  \let\deftypeop = \relax
--  \let\deftypevar = \relax
--  \let\deftypevr = \relax
--  \let\defun = \relax
--  \let\defvar = \relax
--  \let\defvr = \relax
--  \let\ref = \relax
--  \let\xref = \relax
--  \let\printindex = \relax
--  \let\pxref = \relax
--  \let\settitle = \relax
--  \let\setchapternewpage = \relax
--  \let\setchapterstyle = \relax
--  \let\everyheading = \relax
--  \let\evenheading = \relax
--  \let\oddheading = \relax
--  \let\everyfooting = \relax
--  \let\evenfooting = \relax
--  \let\oddfooting = \relax
--  \let\headings = \relax
--  \let\include = \relax
--  \let\lowersections = \relax
--  \let\down = \relax
--  \let\raisesections = \relax
--  \let\up = \relax
--  \let\set = \relax
--  \let\clear = \relax
--  \let\item = \relax
-+\def\makecond#1{%
-+  \expandafter\let\csname #1\endcsname = \relax
-+  \expandafter\let\csname iscond.#1\endcsname = 1
+-\def\deftpparsebody #1#2#3#4 {%
+-  \parsebodycommon{#1}{#2}{#3}%
+-  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
++\def\printdefunline#1#2{%
++  \begingroup
++    % call \deffnheader:
++    #1#2 \endheader
++    % common ending:
++    \interlinepenalty = 10000
++    \advance\rightskip by 0pt plus 1fil
++    \endgraf
++    \nobreak\vskip -\parskip
++    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
++    % Some of the @defun-type tags do not enable magic parentheses,
++    % rendering the following check redundant.  But we don't optimize.
++    \checkparencounts
++  \endgroup
  }
-+\makecond{iftex}
-+\makecond{ifnotdocbook}
-+\makecond{ifnothtml}
-+\makecond{ifnotinfo}
-+\makecond{ifnotplaintext}
-+\makecond{ifnotxml}
  
--% Ignore @ignore ... @end ignore.
+-% Fine, but then we have to eventually remove the \empty *and* the
+-% braces (if any).  That's what this does.
 -%
--\def\ignore{\doignore{ignore}}
--
--% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+-\def\removeemptybraces\empty#1\relax{#1}
++\def\Edefun{\endgraf\medbreak}
+ 
+-% After \spacesplit has done its work, this is called -- #1 is the final
+-% thing to call, #2 the type name (which starts with \empty), and #3
+-% (which might be empty) the arguments.
++% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
++% the only thing remaining is to define \deffnheader.
  %
--\def\ifinfo{\doignore{ifinfo}}
-+\def\direntry{\doignore{direntry}}
-+\def\documentdescription{\doignore{documentdescription}}
-+\def\docbook{\doignore{docbook}}
-+\def\html{\doignore{html}}
-+\def\ifdocbook{\doignore{ifdocbook}}
- \def\ifhtml{\doignore{ifhtml}}
-+\def\ifinfo{\doignore{ifinfo}}
- \def\ifnottex{\doignore{ifnottex}}
--\def\html{\doignore{html}}
-+\def\ifplaintext{\doignore{ifplaintext}}
-+\def\ifxml{\doignore{ifxml}}
-+\def\ignore{\doignore{ignore}}
- \def\menu{\doignore{menu}}
--\def\direntry{\doignore{direntry}}
+-\def\parsetpheaderline#1#2#3{%
+-  #1{\removeemptybraces#2\relax}{#3}%
+-}%
 -
--% @dircategory CATEGORY  -- specify a category of the dir file
--% which this file should belong to.  Ignore this in TeX.
--\let\dircategory = \comment
-+\def\xml{\doignore{xml}}
+-\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
+-\medbreak %
+-% Define the end token that this defining construct specifies
+-% so that it will exit this group.
+-\def#1{\endgraf\endgroup\medbreak}%
+-\def#2##1 ##2 {\def#4{##1}%
+-\begingroup\obeylines\spacesplit{#3{##2}}}%
+-\parindent=0in
+-\advance\leftskip by \defbodyindent
+-\exdentamount=\defbodyindent
+-\begingroup\obeylines\spacesplit{#3{#5}}}
++\def\makedefun#1{%
++  \expandafter\let\csname E#1\endcsname = \Edefun
++  \edef\temp{\noexpand\domakedefun
++    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
++  \temp
++}
  
--% Ignore text until a line `@end #1'.
-+% Ignore text until a line `@end #1', keeping track of nested conditionals.
- %
-+% A count to remember the depth of nesting.
-+\newcount\doignorecount
-+
- \def\doignore#1{\begingroup
--  % Don't complain about control sequences we have declared \outer.
--  \ignoresections
--  %
--  % Define a command to swallow text until we reach `@end #1'.
--  % This @ is a catcode 12 token (that is the normal catcode of @ in
--  % this texinfo.tex file).  We change the catcode of @ below to match.
--  \long\def\doignoretext##1 at end #1{\enddoignore}%
-+  % Scan in ``verbatim'' mode:
-+  \obeylines
-+  \catcode`\@ = \other
-+  \catcode`\{ = \other
-+  \catcode`\} = \other
-   %
-   % Make sure that spaces turn into tokens that match what \doignoretext wants.
--  \catcode32 = 10
--  %
--  % Ignore braces, too, so mismatched braces don't cause trouble.
--  \catcode`\{ = 9
--  \catcode`\} = 9
--  %
--  % We must not have @c interpreted as a control sequence.
--  \catcode`\@ = 12
-+  \spaceisspace
-   %
--  % Make the letter c a comment character so that the rest of the line
--  % will be ignored. This way, the document can have (for example)
--  %   @c @end ifinfo
--  % and the @end ifinfo will be properly ignored.
--  % (We've just changed @ to catcode 12.)
--  \catcode`\c = 14
-+  % Count number of #1's that we've seen.
-+  \doignorecount = 0
-   %
--  % And now expand that command.
--  \doignoretext
+-% Split up #2 at the first space token.
+-% call #1 with two arguments:
+-%  the first is all of #2 before the space token,
+-%  the second is all of #2 after that space token.
+-% If #2 contains no space token, all of it is passed as the first arg
+-% and the second is passed as empty.
++% \domakedefun \deffn \deffnx \deffnheader
++%
++% Define \deffn and \deffnx, without parameters.
++% \deffnheader has to be defined explicitly.
++%
++\def\domakedefun#1#2#3{%
++  \envdef#1{%
++    \startdefun
++    \parseargusing\activeparens{\printdefunline#3}%
++  }%
++  \def#2{\dodefunx#1}%
++  \def#3%
++}
+ 
+-{\obeylines
+-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
+-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
+-\ifx\relax #3%
+-#1{#2}{}\else #1{#2}{#3#4}\fi}}
++%%% Untyped functions:
+ 
+-% So much for the things common to all kinds of definitions.
++% @deffn category name args
++\makedefun{deffn}{\deffngeneral{}}
+ 
+-% Define @defun.
++% @deffn category class name args
++\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+ 
+-% First, define the processing that is wanted for arguments of \defun
+-% Use this to expand the args and terminate the paragraph they make up
++% \defopon {category on}class name args
++\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+ 
+-\def\defunargs#1{\functionparens \sl
+-% Expand, preventing hyphenation at `-' chars.
+-% Note that groups don't affect changes in \hyphenchar.
+-% Set the font temporarily and use \font in case \setfont made \tensl a macro.
+-{\tensl\hyphenchar\font=0}%
+-#1%
+-{\tensl\hyphenchar\font=45}%
+-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
+-\interlinepenalty=10000
+-\advance\rightskip by 0pt plus 1fil
+-\endgraf\nobreak\vskip -\parskip\nobreak
++% \deffngeneral {subind}category name args
++%
++\def\deffngeneral#1#2 #3 #4\endheader{%
++  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
++  \dosubind{fn}{\code{#3}}{#1}%
++  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+ }
+ 
+-\def\deftypefunargs #1{%
+-% Expand, preventing hyphenation at `-' chars.
+-% Note that groups don't affect changes in \hyphenchar.
+-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
+-\boldbraxnoamp
+-\tclose{#1}% avoid \code because of side effects on active chars
+-\interlinepenalty=10000
+-\advance\rightskip by 0pt plus 1fil
+-\endgraf\nobreak\vskip -\parskip\nobreak
 -}
--
--% What we do to finish off ignored text.
--%
--\def\enddoignore{\endgroup\ignorespaces}%
--
--\newif\ifwarnedobs\warnedobsfalse
--\def\obstexwarn{%
--  \ifwarnedobs\relax\else
--  % We need to warn folks that they may have trouble with TeX 3.0.
--  % This uses \immediate\write16 rather than \message to get newlines.
--    \immediate\write16{}
--    \immediate\write16{WARNING: for users of Unix TeX 3.0!}
--    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
--    \immediate\write16{If you are running another version of TeX, relax.}
--    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
--    \immediate\write16{  Then upgrade your TeX installation if you can.}
--    \immediate\write16{  (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
--    \immediate\write16{If you are stuck with version 3.0, run the}
--    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
--    \immediate\write16{  to use a workaround.}
--    \immediate\write16{}
--    \global\warnedobstrue
--    \fi
-+  % Swallow text until we reach the matching `@end #1'.
-+  \dodoignore{#1}%
++%%% Typed functions:
+ 
+-% Do complete processing of one @defun or @defunx line already parsed.
++% @deftypefn category type name args
++\makedefun{deftypefn}{\deftypefngeneral{}}
+ 
+-% @deffn Command forward-char nchars
++% @deftypeop category class type name args
++\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+ 
+-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
++% \deftypeopon {category on}class type name args
++\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+ 
+-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
+-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
+-\catcode 61=\other % Turn off change made in \defparsebody
++% \deftypefngeneral {subind}category type name args
++%
++\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
++  \dosubind{fn}{\code{#4}}{#1}%
++  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
  }
  
--% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
--% workaround (which requires the file ``dummy.tfm'' to be installed),
--% uncomment the following line:
--%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+-% @defun == @deffn Function
 -
--% Ignore text, except that we keep track of conditional commands for
--% purposes of nesting, up to an `@end #1' command.
--%
--\def\nestedignore#1{%
--  \obstexwarn
--  % We must actually expand the ignored text to look for the @end
--  % command, so that nested ignore constructs work.  Thus, we put the
--  % text into a \vbox and then do nothing with the result.  To minimize
--  % the change of memory overflow, we follow the approach outlined on
--  % page 401 of the TeXbook: make the current font be a dummy font.
-+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
-+  \obeylines %
-   %
--  \setbox0 = \vbox\bgroup
--    % Don't complain about control sequences we have declared \outer.
--    \ignoresections
--    %
--    % Define `@end #1' to end the box, which will in turn undefine the
--    % @end command again.
--    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
--    %
--    % We are going to be parsing Texinfo commands.  Most cause no
--    % trouble when they are used incorrectly, but some commands do
--    % complicated argument parsing or otherwise get confused, so we
--    % undefine them.
--    %
--    % We can't do anything about stray @-signs, unfortunately;
--    % they'll produce `undefined control sequence' errors.
--    \ignoremorecommands
--    %
--    % Set the current font to be \nullfont, a TeX primitive, and define
--    % all the font commands to also use \nullfont.  We don't use
--    % dummy.tfm, as suggested in the TeXbook, because not all sites
--    % might have that installed.  Therefore, math mode will still
--    % produce output, but that should be an extremely small amount of
--    % stuff compared to the main input.
--    %
--    \nullfont
--    \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
--    \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
--    \let\tensf=\nullfont
--    % Similarly for index fonts (mostly for their use in smallexample).
--    \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
--    \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
--    \let\smallsf=\nullfont
--    %
--    % Don't complain when characters are missing from the fonts.
--    \tracinglostchars = 0
--    %
--    % Don't bother to do space factor calculations.
--    \frenchspacing
-+  \gdef\dodoignore#1{%
-+    % #1 contains the command name as a string, e.g., `ifinfo'.
-     %
--    % Don't report underfull hboxes.
--    \hbadness = 10000
-+    % Define a command to find the next `@end #1'.
-+    \long\def\doignoretext##1^^M at end #1{%
-+      \doignoretextyyy##1^^M@#1\_STOP_}%
-     %
--    % Do minimal line-breaking.
--    \pretolerance = 10000
-+    % And this command to find another #1 command, at the beginning of a
-+    % line.  (Otherwise, we would consider a line `@c @ifset', for
-+    % example, to count as an @ifset for nesting.)
-+    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
-     %
--    % Do not execute instructions in @tex
--    \def\tex{\doignore{tex}}%
--    % Do not execute macro definitions.
--    % `c' is a comment character, so the word `macro' will get cut off.
--    \def\macro{\doignore{ma}}%
-+    % And now expand that command.
-+    \doignoretext ^^M%
-+  }%
-+}
-+
-+\def\doignoreyyy#1{%
-+  \def\temp{#1}%
-+  \ifx\temp\empty			% Nothing found.
-+    \let\next\doignoretextzzz
-+  \else					% Found a nested condition, ...
-+    \advance\doignorecount by 1
-+    \let\next\doignoretextyyy		% ..., look for another.
-+    % If we're here, #1 ends with ^^M\ifinfo (for example).
-+  \fi
-+  \next #1% the token \_STOP_ is present just after this macro.
-+}
-+
-+% We have to swallow the remaining "\_STOP_".
+-\def\defun{\defparsebody\Edefun\defunx\defunheader}
++%%% Typed variables:
+ 
+-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+-\begingroup\defname {#1}{\putwordDeffunc}%
+-\defunargs {#2}\endgroup %
+-\catcode 61=\other % Turn off change made in \defparsebody
+-}
++% @deftypevr category type var args
++\makedefun{deftypevr}{\deftypecvgeneral{}}
+ 
+-% @deftypefun int foobar (int @var{foo}, float @var{bar})
++% @deftypecv category class type var args
++\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+ 
+-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
++% \deftypecvof {category of}class type var args
++\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+ 
+-% #1 is the data type.  #2 is the name and args.
+-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
+-% #1 is the data type, #2 the name, #3 the args.
+-\def\deftypefunheaderx #1#2 #3\relax{%
+-\doind {fn}{\code{#2}}% Make entry in function index
+-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
+-\deftypefunargs {#3}\endgroup %
+-\catcode 61=\other % Turn off change made in \defparsebody
++% \deftypecvgeneral {subind}category type var args
 +%
-+\def\doignoretextzzz#1{%
-+  \ifnum\doignorecount = 0	% We have just found the outermost @end.
-+    \let\next\enddoignore
-+  \else				% Still inside a nested condition.
-+    \advance\doignorecount by -1
-+    \let\next\doignoretext      % Look for the next @end.
-+  \fi
-+  \next
++\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
++  \dosubind{vr}{\code{#4}}{#1}%
++  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
  }
  
-+% Finish off ignored text.
-+{ \obeylines%
-+  % Ignore anything after the last `@end #1'; this matters in verbatim
-+  % environments, where otherwise the newline after an ignored conditional
-+  % would result in a blank line in the output.
-+  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
-+}
-+
-+
- % @set VAR sets the variable VAR to an empty value.
- % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
- %
- % Since we want to separate VAR from REST-OF-LINE (which might be
- % empty), we can't just use \parsearg; we have to insert a space of our
- % own to delimit the rest of the line, and then take it out again if we
--% didn't need it.  Make sure the catcode of space is correct to avoid
--% losing inside @example, for instance.
-+% didn't need it.
-+% We rely on the fact that \parsearg sets \catcode`\ =10.
- %
--\def\set{\begingroup\catcode` =10
--  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
--  \parsearg\setxxx}
--\def\setxxx#1{\setyyy#1 \endsetyyy}
-+\parseargdef\set{\setyyy#1 \endsetyyy}
- \def\setyyy#1 #2\endsetyyy{%
--  \def\temp{#2}%
--  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
--  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
--  \fi
--  \endgroup
-+  {%
-+    \makevalueexpandable
-+    \def\temp{#2}%
-+    \edef\next{\gdef\makecsname{SET#1}}%
-+    \ifx\temp\empty
-+      \next{}%
-+    \else
-+      \setzzz#2\endsetzzz
-+    \fi
-+  }%
- }
--% Can't use \xdef to pre-expand #2 and save some time, since \temp or
--% \next or other control sequences that we've defined might get us into
--% an infinite loop. Consider `@set foo @cite{bar}'.
--\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-+% Remove the trailing space \setxxx inserted.
-+\def\setzzz#1 \endsetzzz{\next{#1}}
+-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+-
+-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+-
+-% \defheaderxcond#1\relax$$$
+-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
+-\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
++%%% Untyped variables:
+ 
+-% #1 is the classification.  #2 is the data type.  #3 is the name and args.
+-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
+-\def\deftypefnheaderx #1#2#3 #4\relax{%
+-\doind {fn}{\code{#3}}% Make entry in function index
+-\begingroup
+-\normalparens % notably, turn off `&' magic, which prevents
+-%               at least some C++ text from working
+-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
+-\deftypefunargs {#4}\endgroup %
+-\catcode 61=\other % Turn off change made in \defparsebody
+-}
++% @defvr category var args
++\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
  
- % @clear VAR clears (i.e., unsets) the variable VAR.
- %
--\def\clear{\parsearg\clearxxx}
--\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-+\parseargdef\clear{%
-+  {%
-+    \makevalueexpandable
-+    \global\expandafter\let\csname SET#1\endcsname=\relax
-+  }%
-+}
+-% @defmac == @deffn Macro
++% @defcv category class var args
++\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
  
- % @value{foo} gets the text saved in variable foo.
-+\def\value{\begingroup\makevalueexpandable\valuexxx}
-+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
- {
--  \catcode`\_ = \active
-+  \catcode`\- = \active \catcode`\_ = \active
-   %
--  % We might end up with active _ or - characters in the argument if
--  % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
--  % such active characters to their normal equivalents.
--  \gdef\value{\begingroup
--    \catcode`\-=12 \catcode`\_=12
--    \indexbreaks \let_\normalunderscore
--    \valuexxx}
-+  \gdef\makevalueexpandable{%
-+    \let\value = \expandablevalue
-+    % We don't want these characters active, ...
-+    \catcode`\-=\other \catcode`\_=\other
-+    % ..., but we might end up with active ones in the argument if
-+    % we're called from @code, as @code{@value{foo-bar_}}, though.
-+    % So \let them to their normal equivalents.
-+    \let-\realdash \let_\normalunderscore
-+  }
+-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
++% \defcvof {category of}class var args
++\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+ 
+-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+-\begingroup\defname {#1}{\putwordDefmac}%
+-\defunargs {#2}\endgroup %
+-\catcode 61=\other % Turn off change made in \defparsebody
++%%% Type:
++% @deftp category name args
++\makedefun{deftp}#1 #2 #3\endheader{%
++  \doind{tp}{\code{#2}}%
++  \defname{#1}{}{#2}\defunargs{#3\unskip}%
  }
--\def\valuexxx#1{\expandablevalue{#1}\endgroup}
  
- % We have this subroutine so that we can handle at least some @value's
--% properly in indexes (we \let\value to this in \indexdummies).  Ones
--% whose names contain - or _ still won't work, but we can't do anything
--% about that.  The command has to be fully expandable, since the result
--% winds up in the index file.  This means that if the variable's value
--% contains other Texinfo commands, it's almost certain it will fail
--% (although perhaps we could fix that with sufficient work to do a
--% one-level expansion on the result, instead of complete).
-+% properly in indexes (we call \makevalueexpandable in \indexdummies).
-+% The command has to be fully expandable (if the variable is set), since
-+% the result winds up in the index file.  This means that if the
-+% variable's value contains other Texinfo commands, it's almost certain
-+% it will fail (although perhaps we could fix that with sufficient work
-+% to do a one-level expansion on the result, instead of complete).
+-% @defspec == @deffn Special Form
+-
+-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+-
+-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+-\begingroup\defname {#1}{\putwordDefspec}%
+-\defunargs {#2}\endgroup %
+-\catcode 61=\other % Turn off change made in \defparsebody
+-}
++% Remaining @defun-like shortcuts:
++\makedefun{defun}{\deffnheader{\putwordDeffunc} }
++\makedefun{defmac}{\deffnheader{\putwordDefmac} }
++\makedefun{defspec}{\deffnheader{\putwordDefspec} }
++\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
++\makedefun{defvar}{\defvrheader{\putwordDefvar} }
++\makedefun{defopt}{\defvrheader{\putwordDefopt} }
++\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
++\makedefun{defmethod}{\defopon\putwordMethodon}
++\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
++\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
++\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+ 
+-% @defop CATEGORY CLASS OPERATION ARG...
++% \defname, which formats the name of the @def (not the args).
++% #1 is the category, such as "Function".
++% #2 is the return type, if any.
++% #3 is the function name.
  %
- \def\expandablevalue#1{%
-   \expandafter\ifx\csname SET#1\endcsname\relax
-     {[No value for ``#1'']}%
-+    \message{Variable `#1', used in @value, is not set.}%
-   \else
-     \csname SET#1\endcsname
-   \fi
-@@ -2496,66 +3783,36 @@
- % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
- % with @set.
+-\def\defop #1 {\def\defoptype{#1}%
+-\defopparsebody\Edefop\defopx\defopheader\defoptype}
++% We are followed by (but not passed) the arguments, if any.
  %
--\def\ifset{\parsearg\ifsetxxx}
--\def\ifsetxxx #1{%
--  \expandafter\ifx\csname SET#1\endcsname\relax
--    \expandafter\ifsetfail
--  \else
--    \expandafter\ifsetsucceed
--  \fi
-+% To get special treatment of `@end ifset,' call \makeond and the redefine.
-+%
-+\makecond{ifset}
-+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
-+\def\doifset#1#2{%
+-\def\defopheader#1#2#3{%
+-\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
+-\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
+-\defunargs {#3}\endgroup %
++\def\defname#1#2#3{%
++  % Get the values of \leftskip and \rightskip as they were outside the @def...
++  \advance\leftskip by -\defbodyindent
++  %
++  % How we'll format the type name.  Putting it in brackets helps
++  % distinguish it from the body text that may end up on the next line
++  % just below it.
++  \def\temp{#1}%
++  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
++  %
++  % Figure out line sizes for the paragraph shape.
++  % The first line needs space for \box0; but if \rightskip is nonzero,
++  % we need only space for the part of \box0 which exceeds it:
++  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
++  % The continuations:
++  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
++  % (plain.tex says that \dimen1 should be used only as global.)
++  \parshape 2 0in \dimen0 \defargsindent \dimen2
++  %
++  % Put the type name to the right margin.
++  \noindent
++  \hbox to 0pt{%
++    \hfil\box0 \kern-\hsize
++    % \hsize has to be shortened this way:
++    \kern\leftskip
++    % Intentionally do not respect \rightskip, since we need the space.
++  }%
++  %
++  % Allow all lines to be underfull without complaint:
++  \tolerance=10000 \hbadness=10000
++  \exdentamount=\defbodyindent
 +  {%
-+    \makevalueexpandable
-+    \let\next=\empty
-+    \expandafter\ifx\csname SET#2\endcsname\relax
-+      #1% If not set, redefine \next.
-+    \fi
-+    \expandafter
-+  }\next
++    % defun fonts. We use typewriter by default (used to be bold) because:
++    % . we're printing identifiers, they should be in tt in principle.
++    % . in languages with many accents, such as Czech or French, it's
++    %   common to leave accents off identifiers.  The result looks ok in
++    %   tt, but exceedingly strange in rm.
++    % . we don't want -- and --- to be treated as ligatures.
++    % . this still does not fix the ?` and !` ligatures, but so far no
++    %   one has made identifiers using them :).
++    \df \tt
++    \def\temp{#2}% return value type
++    \ifx\temp\empty\else \tclose{\temp} \fi
++    #3% output function name
++  }%
++  {\rm\enskip}% hskip 0.5 em of \tenrm
++  %
++  \boldbrax
++  % arguments will be output next, if any.
  }
--\def\ifsetsucceed{\conditionalsucceed{ifset}}
--\def\ifsetfail{\nestedignore{ifset}}
--\defineunmatchedend{ifset}
-+\def\ifsetfail{\doignore{ifset}}
  
- % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
- % defined with @set, or has been undefined with @clear.
- %
--\def\ifclear{\parsearg\ifclearxxx}
--\def\ifclearxxx #1{%
--  \expandafter\ifx\csname SET#1\endcsname\relax
--    \expandafter\ifclearsucceed
--  \else
--    \expandafter\ifclearfail
--  \fi
--}
--\def\ifclearsucceed{\conditionalsucceed{ifclear}}
--\def\ifclearfail{\nestedignore{ifclear}}
--\defineunmatchedend{ifclear}
--
--% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
--% following, through the first @end iftex (etc.).  Make `@end iftex'
--% (etc.) valid only after an @iftex.
+-% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
 -%
--\def\iftex{\conditionalsucceed{iftex}}
--\def\ifnothtml{\conditionalsucceed{ifnothtml}}
--\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
--\defineunmatchedend{iftex}
--\defineunmatchedend{ifnothtml}
--\defineunmatchedend{ifnotinfo}
--
--% We can't just want to start a group at @iftex (for example) and end it
--% at @end iftex, since then @set commands inside the conditional have no
--% effect (they'd get reverted at the end of the group).  So we must
--% define \Eiftex to redefine itself to be its previous value.  (We can't
--% just define it to fail again with an ``unmatched end'' error, since
--% the @ifset might be nested.)
-+% The `\else' inside the `\doifset' parameter is a trick to reuse the
-+% above code: if the variable is not set, do nothing, if it is set,
-+% then redefine \next to \ifclearfail.
+-\def\deftypeop #1 {\def\deftypeopcategory{#1}%
+-  \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
+-                       \deftypeopcategory}
++% Print arguments in slanted roman (not ttsl), inconsistently with using
++% tt for the name.  This is because literal text is sometimes needed in
++% the argument list (groff manual), and ttsl and tt are not very
++% distinguishable.  Prevent hyphenation at `-' chars.
  %
--\def\conditionalsucceed#1{%
--  \edef\temp{%
--    % Remember the current value of \E#1.
--    \let\nece{prevE#1} = \nece{E#1}%
--    %
--    % At the `@end #1', redefine \E#1 to be its previous value.
--    \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
--  }%
--  \temp
+-% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
+-\def\deftypeopheader#1#2#3#4{%
+-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+-  \begingroup
+-    \defname{\defheaderxcond#2\relax$$$#3}
+-            {\deftypeopcategory\ \putwordon\ \code{#1}}%
+-    \deftypefunargs{#4}%
+-  \endgroup
++\def\defunargs#1{%
++  % use sl by default (not ttsl),
++  % tt for the names.
++  \df \sl \hyphenchar\font=0
++  %
++  % On the other hand, if an argument has two dashes (for instance), we
++  % want a way to get ttsl.  Let's try @var for that.
++  \let\var=\ttslanted
++  #1%
++  \sl\hyphenchar\font=45
+ }
+ 
+-% @deftypemethod CLASS TYPE METHOD ARG...
+-%
+-\def\deftypemethod{%
+-  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
++% We want ()&[] to print specially on the defun line.
+ %
+-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
+-\def\deftypemethodheader#1#2#3#4{%
+-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+-  \begingroup
+-    \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
+-    \deftypefunargs{#4}%
+-  \endgroup
++\def\activeparens{%
++  \catcode`\(=\active \catcode`\)=\active
++  \catcode`\[=\active \catcode`\]=\active
++  \catcode`\&=\active
+ }
+ 
+-% @deftypeivar CLASS TYPE VARNAME
+-%
+-\def\deftypeivar{%
+-  \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
+-%
+-% #1 is the class name, #2 the data type, #3 the variable name.
+-\def\deftypeivarheader#1#2#3{%
+-  \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
+-  \begingroup
+-    \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
+-    \defvarargs{#3}%
+-  \endgroup
 -}
-+\makecond{ifclear}
-+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
-+\def\ifclearfail{\doignore{ifclear}}
++% Make control sequences which act like normal parenthesis chars.
++\let\lparen = ( \let\rparen = )
  
--% We need to expand lots of \csname's, but we don't want to expand the
--% control sequences after we've constructed them.
+-% @defmethod == @defop Method
 -%
--\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-+% @dircategory CATEGORY  -- specify a category of the dir file
-+% which this file should belong to.  Ignore this in TeX.
-+\let\dircategory=\comment
+-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+-%
+-% #1 is the class name, #2 the method name, #3 the args.
+-\def\defmethodheader#1#2#3{%
+-  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
+-  \begingroup
+-    \defname{#2}{\putwordMethodon\ \code{#1}}%
+-    \defunargs{#3}%
+-  \endgroup
++% Be sure that we always have a definition for `(', etc.  For example,
++% if the fn name has parens in it, \boldbrax will not be in effect yet,
++% so TeX would otherwise complain about undefined control sequence.
++{
++  \activeparens
++  \global\let(=\lparen \global\let)=\rparen
++  \global\let[=\lbrack \global\let]=\rbrack
++  \global\let& = \&
++
++  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
++  \gdef\magicamp{\let&=\amprm}
+ }
  
- % @defininfoenclose.
- \let\definfoenclose=\comment
-@@ -2565,9 +3822,8 @@
- % Index generation facilities
+-% @defcv {Class Option} foo-class foo-flag
++\newcount\parencount
  
- % Define \newwrite to be identical to plain tex's \newwrite
--% except not \outer, so it can be used within \newindex.
--{\catcode`\@=11
--\gdef\newwrite{\alloc at 7\write\chardef\sixt@@n}}
-+% except not \outer, so it can be used within macros and \if's.
-+\edef\newwrite{\makecsname{ptexnewwrite}}
+-\def\defcv #1 {\def\defcvtype{#1}%
+-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
++% If we encounter &foo, then turn on ()-hacking afterwards
++\newif\ifampseen
++\def\amprm#1 {\ampseentrue{\bf\&#1 }}
  
- % \newindex {foo} defines an index named foo.
- % It automatically defines \fooindex such that
-@@ -2587,42 +3843,48 @@
+-\def\defcvarheader #1#2#3{%
+-\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
+-\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
+-\defvarargs {#3}\endgroup %
++\def\parenfont{%
++  \ifampseen
++    % At the first level, print parens in roman,
++    % otherwise use the default font.
++    \ifnum \parencount=1 \rm \fi
++  \else
++    % The \sf parens (in \boldbrax) actually are a little bolder than
++    % the contained text.  This is especially needed for [ and ] .
++    \sf
++  \fi
  }
- 
- % @defindex foo  ==  \newindex{foo}
 -
-+%
- \def\defindex{\parsearg\newindex}
+-% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
+-%
+-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+-%
+-\def\defivarheader#1#2#3{%
+-  \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
+-  \begingroup
+-    \defname{#2}{\putwordInstanceVariableof\ #1}%
+-    \defvarargs{#3}%
+-  \endgroup
++\def\infirstlevel#1{%
++  \ifampseen
++    \ifnum\parencount=1
++      #1%
++    \fi
++  \fi
+ }
++\def\bfafterword#1 {#1 \bf}
  
- % Define @defcodeindex, like @defindex except put all entries in @code.
+-% @defvar
+-% First, define the processing that is wanted for arguments of @defvar.
+-% This is actually simple: just print them in roman.
+-% This must expand the args and terminate the paragraph they make up
+-\def\defvarargs #1{\normalparens #1%
+-\interlinepenalty=10000
+-\endgraf\nobreak\vskip -\parskip\nobreak}
 -
-+%
-+\def\defcodeindex{\parsearg\newcodeindex}
-+%
- \def\newcodeindex#1{%
-   \iflinks
-     \expandafter\newwrite \csname#1indfile\endcsname
-     \openout \csname#1indfile\endcsname \jobname.#1
-   \fi
-   \expandafter\xdef\csname#1index\endcsname{%
--    \noexpand\docodeindex{#1}}
-+    \noexpand\docodeindex{#1}}%
+-% @defvr Counter foo-count
+-
+-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
+-
+-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
+-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+-
+-% @defvar == @defvr Variable
+-
+-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+-
+-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+-\begingroup\defname {#1}{\putwordDefvar}%
+-\defvarargs {#2}\endgroup %
++\def\opnr{%
++  \global\advance\parencount by 1
++  {\parenfont(}%
++  \infirstlevel \bfafterword
+ }
+-
+-% @defopt == @defvr {User Option}
+-
+-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
+-
+-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+-\begingroup\defname {#1}{\putwordDefopt}%
+-\defvarargs {#2}\endgroup %
++\def\clnr{%
++  {\parenfont)}%
++  \infirstlevel \sl
++  \global\advance\parencount by -1
  }
  
--\def\defcodeindex{\parsearg\newcodeindex}
+-% @deftypevar int foobar
+-
+-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+-
+-% #1 is the data type.  #2 is the name, perhaps followed by text that
+-% is actually part of the data type, which should not be put into the index.
+-\def\deftypevarheader #1#2{%
+-\dovarind#2 \relax% Make entry in variables index
+-\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
+-\interlinepenalty=10000
+-\endgraf\nobreak\vskip -\parskip\nobreak
+-\endgroup}
+-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
+-
+-% @deftypevr {Global Flag} int enable
+-
+-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+-
+-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
+-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
+-\interlinepenalty=10000
+-\endgraf\nobreak\vskip -\parskip\nobreak
+-\endgroup}
+-
+-% Now define @deftp
+-% Args are printed in bold, a slight difference from @defvar.
+-
+-\def\deftpargs #1{\bf \defvarargs{#1}}
+-
+-% @deftp Class window height width ...
+-
+-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+-
+-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
+-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
++\newcount\brackcount
++\def\lbrb{%
++  \global\advance\brackcount by 1
++  {\bf[}%
++}
++\def\rbrb{%
++  {\bf]}%
++  \global\advance\brackcount by -1
++}
  
- % @synindex foo bar    makes index foo feed into index bar.
- % Do this instead of @defindex foo if you don't want it as a separate index.
--% The \closeout helps reduce unnecessary open files; the limit on the
--% Acorn RISC OS is a mere 16 files.
--\def\synindex#1 #2 {%
--  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
--  \expandafter\closeout\csname#1indfile\endcsname
--  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
--  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
--    \noexpand\doindex{#2}}%
+-% These definitions are used if you use @defunx (etc.)
+-% anywhere other than immediately after a @defun or @defunx.
+-% 
+-\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
+-\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
+-\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
+-\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
+-\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
+-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+-\def\defopx#1 {\errmessage{@defopx in invalid context}}
+-\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
+-\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
+-\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
+-\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
+-\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
+-\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
+-\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
+-\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
+-\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
+-\def\defunx#1 {\errmessage{@defunx in invalid context}}
+-\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
+-\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
++\def\checkparencounts{%
++  \ifnum\parencount=0 \else \badparencount \fi
++  \ifnum\brackcount=0 \else \badbrackcount \fi
++}
++% these should not use \errmessage; the glibc manual, at least, actually
++% has such constructs (when documenting function pointers).
++\def\badparencount{%
++  \message{Warning: unbalanced parentheses in @def...}%
++  \global\parencount=0
++}
++\def\badbrackcount{%
++  \message{Warning: unbalanced square brackets in @def...}%
++  \global\brackcount=0
++}
+ 
+ 
+ \message{macros,}
+@@ -4850,42 +6552,68 @@
+ % To do this right we need a feature of e-TeX, \scantokens,
+ % which we arrange to emulate with a temporary file in ordinary TeX.
+ \ifx\eTeXversion\undefined
+- \newwrite\macscribble
+- \def\scanmacro#1{%
+-   \begingroup \newlinechar`\^^M
+-   % Undo catcode changes of \startcontents and \doprintindex
+-   \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+-   % Append \endinput to make sure that TeX does not see the ending newline.
+-   \toks0={#1\endinput}%
+-   \immediate\openout\macscribble=\jobname.tmp
+-   \immediate\write\macscribble{\the\toks0}%
+-   \immediate\closeout\macscribble
+-   \let\xeatspaces\eatspaces
+-   \input \jobname.tmp
+-   \endgroup
 -}
--
-+%
- % @syncodeindex foo bar   similar, but put all entries made for index foo
- % inside @code.
--\def\syncodeindex#1 #2 {%
--  \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
--  \expandafter\closeout\csname#1indfile\endcsname
--  \expandafter\let\csname#1indfile\endcsname=\synindexfoo
--  \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
--    \noexpand\docodeindex{#2}}%
-+%
-+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-+
-+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-+% #3 the target index (bar).
-+\def\dosynindex#1#2#3{%
-+  % Only do \closeout if we haven't already done it, else we'll end up
-+  % closing the target index.
-+  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
-+    % The \closeout helps reduce unnecessary open files; the limit on the
-+    % Acorn RISC OS is a mere 16 files.
-+    \expandafter\closeout\csname#2indfile\endcsname
-+    \expandafter\let\csname\donesynindex#2\endcsname = 1
-+  \fi
-+  % redefine \fooindfile:
-+  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
-+  \expandafter\let\csname#2indfile\endcsname=\temp
-+  % redefine \fooindex:
-+  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
- }
+-\else
+-\def\scanmacro#1{%
+-\begingroup \newlinechar`\^^M
+-% Undo catcode changes of \startcontents and \doprintindex
+-\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
+-\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
++  \newwrite\macscribble
++  \def\scantokens#1{%
++    \toks0={#1}%
++    \immediate\openout\macscribble=\jobname.tmp
++    \immediate\write\macscribble{\the\toks0}%
++    \immediate\closeout\macscribble
++    \input \jobname.tmp
++  }
+ \fi
  
- % Define \doindex, the driver for all \fooindex macros.
-@@ -2642,265 +3904,445 @@
- \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
- \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
++\def\scanmacro#1{%
++  \begingroup
++    \newlinechar`\^^M
++    \let\xeatspaces\eatspaces
++    % Undo catcode changes of \startcontents and \doprintindex
++    % When called from @insertcopying or (short)caption, we need active
++    % backslash to get it printed correctly.  Previously, we had
++    % \catcode`\\=\other instead.  We'll see whether a problem appears
++    % with macro expansion.				--kasal, 19aug04
++    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
++    % ... and \example
++    \spaceisspace
++    %
++    % Append \endinput to make sure that TeX does not see the ending newline.
++    % I've verified that it is necessary both for e-TeX and for ordinary TeX
++    %							--kasal, 29nov03
++    \scantokens{#1\endinput}%
++  \endgroup
++}
++
++\def\scanexp#1{%
++  \edef\temp{\noexpand\scanmacro{#1}}%
++  \temp
++}
++
+ \newcount\paramno   % Count of parameters
+ \newtoks\macname    % Macro name
+ \newif\ifrecursive  % Is it recursive?
+-\def\macrolist{}    % List of all defined macros in the form
+-                    % \do\macro1\do\macro2...
++
++% List of all defined macros in the form
++%    \definedummyword\macro1\definedummyword\macro2...
++% Currently is also contains all @aliases; the list can be split
++% if there is a need.
++\def\macrolist{}
++
++% Add the macro to \macrolist
++\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
++\def\addtomacrolistxxx#1{%
++     \toks0 = \expandafter{\macrolist\definedummyword#1}%
++     \xdef\macrolist{\the\toks0}%
++}
  
--\def\indexdummies{%
--\def\ { }%
--% Take care of the plain tex accent commands.
--\def\"{\realbackslash "}%
--\def\`{\realbackslash `}%
--\def\'{\realbackslash '}%
--\def\^{\realbackslash ^}%
--\def\~{\realbackslash ~}%
--\def\={\realbackslash =}%
--\def\b{\realbackslash b}%
--\def\c{\realbackslash c}%
--\def\d{\realbackslash d}%
--\def\u{\realbackslash u}%
--\def\v{\realbackslash v}%
--\def\H{\realbackslash H}%
--% Take care of the plain tex special European modified letters.
--\def\oe{\realbackslash oe}%
--\def\ae{\realbackslash ae}%
--\def\aa{\realbackslash aa}%
--\def\OE{\realbackslash OE}%
--\def\AE{\realbackslash AE}%
--\def\AA{\realbackslash AA}%
--\def\o{\realbackslash o}%
--\def\O{\realbackslash O}%
--\def\l{\realbackslash l}%
--\def\L{\realbackslash L}%
--\def\ss{\realbackslash ss}%
--% Take care of texinfo commands likely to appear in an index entry.
--% (Must be a way to avoid doing expansion at all, and thus not have to
--% laboriously list every single command here.)
--\def\@{@}% will be @@ when we switch to @ as escape char.
--% Need these in case \tex is in effect and \{ is a \delimiter again.
--% But can't use \lbracecmd and \rbracecmd because texindex assumes
--% braces and backslashes are used only as delimiters.  
--\let\{ = \mylbrace
--\let\} = \myrbrace
--\def\_{{\realbackslash _}}%
--\def\w{\realbackslash w }%
--\def\bf{\realbackslash bf }%
--%\def\rm{\realbackslash rm }%
--\def\sl{\realbackslash sl }%
--\def\sf{\realbackslash sf}%
--\def\tt{\realbackslash tt}%
--\def\gtr{\realbackslash gtr}%
--\def\less{\realbackslash less}%
--\def\hat{\realbackslash hat}%
--\def\TeX{\realbackslash TeX}%
--\def\dots{\realbackslash dots }%
--\def\result{\realbackslash result}%
--\def\equiv{\realbackslash equiv}%
--\def\expansion{\realbackslash expansion}%
--\def\print{\realbackslash print}%
--\def\error{\realbackslash error}%
--\def\point{\realbackslash point}%
--\def\copyright{\realbackslash copyright}%
--\def\tclose##1{\realbackslash tclose {##1}}%
--\def\code##1{\realbackslash code {##1}}%
--\def\uref##1{\realbackslash uref {##1}}%
--\def\url##1{\realbackslash url {##1}}%
--\def\env##1{\realbackslash env {##1}}%
--\def\command##1{\realbackslash command {##1}}%
--\def\option##1{\realbackslash option {##1}}%
--\def\dotless##1{\realbackslash dotless {##1}}%
--\def\samp##1{\realbackslash samp {##1}}%
--\def\,##1{\realbackslash ,{##1}}%
--\def\t##1{\realbackslash t {##1}}%
--\def\r##1{\realbackslash r {##1}}%
--\def\i##1{\realbackslash i {##1}}%
--\def\b##1{\realbackslash b {##1}}%
--\def\sc##1{\realbackslash sc {##1}}%
--\def\cite##1{\realbackslash cite {##1}}%
--\def\key##1{\realbackslash key {##1}}%
--\def\file##1{\realbackslash file {##1}}%
--\def\var##1{\realbackslash var {##1}}%
--\def\kbd##1{\realbackslash kbd {##1}}%
--\def\dfn##1{\realbackslash dfn {##1}}%
--\def\emph##1{\realbackslash emph {##1}}%
--\def\acronym##1{\realbackslash acronym {##1}}%
-+% Take care of Texinfo commands that can appear in an index entry.
-+% Since there are some commands we want to expand, and others we don't,
-+% we have to laboriously prevent expansion for those that we don't.
- %
--% Handle some cases of @value -- where the variable name does not
--% contain - or _, and the value does not contain any
--% (non-fully-expandable) commands.
--\let\value = \expandablevalue
-+\def\indexdummies{%
-+  \escapechar = `\\     % use backslash in output files.
-+  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-+  \def\ {\realbackslash\space }%
-+  %
-+  % Need these in case \tex is in effect and \{ is a \delimiter again.
-+  % But can't use \lbracecmd and \rbracecmd because texindex assumes
-+  % braces and backslashes are used only as delimiters.
-+  \let\{ = \mylbrace
-+  \let\} = \myrbrace
-+  %
-+  % I don't entirely understand this, but when an index entry is
-+  % generated from a macro call, the \endinput which \scanmacro inserts
-+  % causes processing to be prematurely terminated.  This is,
-+  % apparently, because \indexsorttmp is fully expanded, and \endinput
-+  % is an expandable command.  The redefinition below makes \endinput
-+  % disappear altogether for that purpose -- although logging shows that
-+  % processing continues to some further point.  On the other hand, it
-+  % seems \endinput does not hurt in the printed index arg, since that
-+  % is still getting written without apparent harm.
-+  % 
-+  % Sample source (mac-idx3.tex, reported by Graham Percival to
-+  % help-texinfo, 22may06):
-+  % @macro funindex {WORD}
-+  % @findex xyz
-+  % @end macro
-+  % ...
-+  % @funindex commtest
-+  % 
-+  % The above is not enough to reproduce the bug, but it gives the flavor.
-+  % 
-+  % Sample whatsit resulting:
-+  % . at write3{\entry{xyz}{@folio }{@code {xyz at endinput }}}
-+  % 
-+  % So:
-+  \let\endinput = \empty
-+  %
-+  % Do the redefinitions.
-+  \commondummies
+ % Utility routines.
+-% Thisdoes \let #1 = #2, except with \csnames.
++% This does \let #1 = #2, with \csnames; that is,
++%   \let \csname#1\endcsname = \csname#2\endcsname
++% (except of course we have to play expansion games).
++% 
+ \def\cslet#1#2{%
+-\expandafter\expandafter
+-\expandafter\let
+-\expandafter\expandafter
+-\csname#1\endcsname
+-\csname#2\endcsname}
++  \expandafter\let
++  \csname#1\expandafter\endcsname
++  \csname#2\endcsname
 +}
+ 
+ % Trim leading and trailing spaces off a string.
+ % Concepts from aro-bend problem 15 (see CTAN).
+@@ -4898,7 +6626,7 @@
+ }
+ 
+ % Trim a single trailing ^^M off a string.
+-{\catcode`\^^M=12\catcode`\Q=3%
++{\catcode`\^^M=\other \catcode`\Q=3%
+ \gdef\eatcr #1{\eatcra #1Q^^MQ}%
+ \gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+ \gdef\eatcrb#1Q#2Q{#1}%
+@@ -4908,34 +6636,45 @@
+ % all characters are catcode 10, 11 or 12, except \ which is active
+ % (as in normal texinfo). It is necessary to change the definition of \.
+ 
++% Non-ASCII encodings make 8-bit characters active, so un-activate
++% them to avoid their expansion.  Must do this non-globally, to
++% confine the change to the current group.
 +
-+% For the aux and toc files, @ is the escape character.  So we want to
-+% redefine everything using @ as the escape character (instead of
-+% \realbackslash, still used for index files).  When everything uses @,
-+% this will be simpler.
- %
--\unsepspaces
--% Turn off macro expansion
--\turnoffmacros
-+\def\atdummies{%
-+  \def\@{@@}%
-+  \def\ {@ }%
-+  \let\{ = \lbraceatcmd
-+  \let\} = \rbraceatcmd
-+  %
-+  % Do the redefinitions.
-+  \commondummies
-+  \otherbackslash
+ % It's necessary to have hard CRs when the macro is executed. This is
+ % done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+ % body, and then making it the \newlinechar in \scanmacro.
+ 
++\def\scanctxt{%
++  \catcode`\"=\other
++  \catcode`\+=\other
++  \catcode`\<=\other
++  \catcode`\>=\other
++  \catcode`\@=\other
++  \catcode`\^=\other
++  \catcode`\_=\other
++  \catcode`\|=\other
++  \catcode`\~=\other
++  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
++}
++
++\def\scanargctxt{%
++  \scanctxt
++  \catcode`\\=\other
++  \catcode`\^^M=\other
++}
++
+ \def\macrobodyctxt{%
+-  \catcode`\~=12
+-  \catcode`\^=12
+-  \catcode`\_=12
+-  \catcode`\|=12
+-  \catcode`\<=12
+-  \catcode`\>=12
+-  \catcode`\+=12
+-  \catcode`\{=12
+-  \catcode`\}=12
+-  \catcode`\@=12
+-  \catcode`\^^M=12
+-  \usembodybackslash}
++  \scanctxt
++  \catcode`\{=\other
++  \catcode`\}=\other
++  \catcode`\^^M=\other
++  \usembodybackslash
++}
+ 
+ \def\macroargctxt{%
+-  \catcode`\~=12
+-  \catcode`\^=12
+-  \catcode`\_=12
+-  \catcode`\|=12
+-  \catcode`\<=12
+-  \catcode`\>=12
+-  \catcode`\+=12
+-  \catcode`\@=12
+-  \catcode`\\=12}
++  \scanctxt
++  \catcode`\\=\other
++}
+ 
+ % \mbodybackslash is the definition of \ in @macro bodies.
+ % It maps \foo\ => \csname macarg.foo\endcsname => #N
+@@ -4963,45 +6702,42 @@
+      \message{Warning: redefining \the\macname}%
+   \else
+      \expandafter\ifx\csname \the\macname\endcsname \relax
+-     \else \errmessage{The name \the\macname\space is reserved}\fi
++     \else \errmessage{Macro name \the\macname\space already defined}\fi
+      \global\cslet{macsave.\the\macname}{\the\macname}%
+      \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+-     % Add the macroname to \macrolist
+-     \toks0 = \expandafter{\macrolist\do}%
+-     \xdef\macrolist{\the\toks0
+-       \expandafter\noexpand\csname\the\macname\endcsname}%
++     \addtomacrolist{\the\macname}%
+   \fi
+   \begingroup \macrobodyctxt
+   \ifrecursive \expandafter\parsermacbody
+   \else \expandafter\parsemacbody
+   \fi}
+ 
+-\def\unmacro{\parsearg\unmacroxxx}
+-\def\unmacroxxx#1{%
++\parseargdef\unmacro{%
+   \if1\csname ismacro.#1\endcsname
+     \global\cslet{#1}{macsave.#1}%
+     \global\expandafter\let \csname ismacro.#1\endcsname=0%
+-    % Remove the macro name from \macrolist
++    % Remove the macro name from \macrolist:
+     \begingroup
+-      \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
+-      \def\do##1{%
+-        \def\tempb{##1}%
+-        \ifx\tempa\tempb
+-          % remove this
+-        \else
+-          \toks0 = \expandafter{\newmacrolist\do}%
+-          \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
+-        \fi}%
+-      \def\newmacrolist{}%
+-      % Execute macro list to define \newmacrolist
+-      \macrolist
+-      \global\let\macrolist\newmacrolist
++      \expandafter\let\csname#1\endcsname \relax
++      \let\definedummyword\unmacrodo
++      \xdef\macrolist{\macrolist}%
+     \endgroup
+   \else
+     \errmessage{Macro #1 not defined}%
+   \fi
  }
  
--% If an index command is used in an @example environment, any spaces
--% therein should become regular spaces in the raw index file, not the
--% expansion of \tie (\\leavevmode \penalty \@M \ ).
--{\obeyspaces
-- \gdef\unsepspaces{\obeyspaces\let =\space}}
-+% Called from \indexdummies and \atdummies.
++% Called by \do from \dounmacro on each macro.  The idea is to omit any
++% macro definitions that have been changed to \relax.
 +%
-+\def\commondummies{%
-+  %
-+  % \definedummyword defines \#1 as \string\#1\space, thus effectively
-+  % preventing its expansion.  This is used only for control% words,
-+  % not control letters, because the \space would be incorrect for
-+  % control characters, but is needed to separate the control word
-+  % from whatever follows.
-+  %
-+  % For control letters, we have \definedummyletter, which omits the
-+  % space.
-+  %
-+  % These can be used both for control words that take an argument and
-+  % those that do not.  If it is followed by {arg} in the input, then
-+  % that will dutifully get written to the index (or wherever).
-+  %
-+  \def\definedummyword  ##1{\def##1{\string##1\space}}%
-+  \def\definedummyletter##1{\def##1{\string##1}}%
-+  \let\definedummyaccent\definedummyletter
-+  %
-+  \commondummiesnofonts
-+  %
-+  \definedummyletter\_%
-+  %
-+  % Non-English letters.
-+  \definedummyword\AA
-+  \definedummyword\AE
-+  \definedummyword\L
-+  \definedummyword\OE
-+  \definedummyword\O
-+  \definedummyword\aa
-+  \definedummyword\ae
-+  \definedummyword\l
-+  \definedummyword\oe
-+  \definedummyword\o
-+  \definedummyword\ss
-+  \definedummyword\exclamdown
-+  \definedummyword\questiondown
-+  \definedummyword\ordf
-+  \definedummyword\ordm
-+  %
-+  % Although these internal commands shouldn't show up, sometimes they do.
-+  \definedummyword\bf
-+  \definedummyword\gtr
-+  \definedummyword\hat
-+  \definedummyword\less
-+  \definedummyword\sf
-+  \definedummyword\sl
-+  \definedummyword\tclose
-+  \definedummyword\tt
-+  %
-+  \definedummyword\LaTeX
-+  \definedummyword\TeX
-+  %
-+  % Assorted special characters.
-+  \definedummyword\bullet
-+  \definedummyword\comma
-+  \definedummyword\copyright
-+  \definedummyword\registeredsymbol
-+  \definedummyword\dots
-+  \definedummyword\enddots
-+  \definedummyword\equiv
-+  \definedummyword\error
-+  \definedummyword\euro
-+  \definedummyword\guillemetleft
-+  \definedummyword\guillemetright
-+  \definedummyword\guilsinglleft
-+  \definedummyword\guilsinglright
-+  \definedummyword\expansion
-+  \definedummyword\minus
-+  \definedummyword\pounds
-+  \definedummyword\point
-+  \definedummyword\print
-+  \definedummyword\quotedblbase
-+  \definedummyword\quotedblleft
-+  \definedummyword\quotedblright
-+  \definedummyword\quoteleft
-+  \definedummyword\quoteright
-+  \definedummyword\quotesinglbase
-+  \definedummyword\result
-+  \definedummyword\textdegree
-+  %
-+  % We want to disable all macros so that they are not expanded by \write.
-+  \macrolist
-+  %
-+  \normalturnoffactive
-+  %
-+  % Handle some cases of @value -- where it does not contain any
-+  % (non-fully-expandable) commands.
-+  \makevalueexpandable
++\def\unmacrodo#1{%
++  \ifx #1\relax
++    % remove this
++  \else
++    \noexpand\definedummyword \noexpand#1%
++  \fi
 +}
++
+ % This makes use of the obscure feature that if the last token of a
+ % <parameter list> is #, then the preceding argument is delimited by
+ % an opening brace, and that opening brace is not consumed.
+@@ -5111,34 +6847,31 @@
+ % {.  If so it reads up to the closing }, if not, it reads the whole
+ % line.  Whatever was read is then fed to the next control sequence
+ % as an argument (by \parsebrace or \parsearg)
+-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
++\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+ \def\braceorlinexxx{%
+   \ifx\nchar\bgroup\else
+     \expandafter\parsearg
+-  \fi \next}
+-
+-% We mant to disable all macros during \shipout so that they are not
+-% expanded by \write.
+-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+-  \edef\next{\macrolist}\expandafter\endgroup\next}
++  \fi \macnamexxx}
  
--% \indexnofonts no-ops all font-change commands.
--% This is used when outputting the strings to sort the index by.
--\def\indexdummyfont#1{#1}
--\def\indexdummytex{TeX}
--\def\indexdummydots{...}
-+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
-+%
-+\def\commondummiesnofonts{%
-+  % Control letters and accents.
-+  \definedummyletter\!%
-+  \definedummyaccent\"%
-+  \definedummyaccent\'%
-+  \definedummyletter\*%
-+  \definedummyaccent\,%
-+  \definedummyletter\.%
-+  \definedummyletter\/%
-+  \definedummyletter\:%
-+  \definedummyaccent\=%
-+  \definedummyletter\?%
-+  \definedummyaccent\^%
-+  \definedummyaccent\`%
-+  \definedummyaccent\~%
-+  \definedummyword\u
-+  \definedummyword\v
-+  \definedummyword\H
-+  \definedummyword\dotaccent
-+  \definedummyword\ringaccent
-+  \definedummyword\tieaccent
-+  \definedummyword\ubaraccent
-+  \definedummyword\udotaccent
-+  \definedummyword\dotless
-+  %
-+  % Texinfo font commands.
-+  \definedummyword\b
-+  \definedummyword\i
-+  \definedummyword\r
-+  \definedummyword\sc
-+  \definedummyword\t
-+  %
-+  % Commands that take arguments.
-+  \definedummyword\acronym
-+  \definedummyword\cite
-+  \definedummyword\code
-+  \definedummyword\command
-+  \definedummyword\dfn
-+  \definedummyword\emph
-+  \definedummyword\env
-+  \definedummyword\file
-+  \definedummyword\kbd
-+  \definedummyword\key
-+  \definedummyword\math
-+  \definedummyword\option
-+  \definedummyword\pxref
-+  \definedummyword\ref
-+  \definedummyword\samp
-+  \definedummyword\strong
-+  \definedummyword\tie
-+  \definedummyword\uref
-+  \definedummyword\url
-+  \definedummyword\var
-+  \definedummyword\verb
-+  \definedummyword\w
-+  \definedummyword\xref
+ 
+ % @alias.
+ % We need some trickery to remove the optional spaces around the equal
+ % sign.  Just make them active and then expand them all to nothing.
+-\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
++\def\alias{\parseargusing\obeyspaces\aliasxxx}
+ \def\aliasxxx #1{\aliasyyy#1\relax}
+-\def\aliasyyy #1=#2\relax{\ignoreactivespaces
+-\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
+-           \expandafter\noexpand\csname#2\endcsname}%
+-\expandafter\endgroup\next}
++\def\aliasyyy #1=#2\relax{%
++  {%
++    \expandafter\let\obeyedspace=\empty
++    \addtomacrolist{#1}%
++    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
++  }%
++  \next
 +}
  
-+% \indexnofonts is used when outputting the strings to sort the index
-+% by, and when constructing control sequence names.  It eliminates all
-+% control sequences and just writes whatever the best ASCII sort string
-+% would be for a given command (usually its argument).
-+%
- \def\indexnofonts{%
--% Just ignore accents.
--\let\,=\indexdummyfont
--\let\"=\indexdummyfont
--\let\`=\indexdummyfont
--\let\'=\indexdummyfont
--\let\^=\indexdummyfont
--\let\~=\indexdummyfont
--\let\==\indexdummyfont
--\let\b=\indexdummyfont
--\let\c=\indexdummyfont
--\let\d=\indexdummyfont
--\let\u=\indexdummyfont
--\let\v=\indexdummyfont
--\let\H=\indexdummyfont
--\let\dotless=\indexdummyfont
--% Take care of the plain tex special European modified letters.
--\def\oe{oe}%
--\def\ae{ae}%
--\def\aa{aa}%
--\def\OE{OE}%
--\def\AE{AE}%
--\def\AA{AA}%
--\def\o{o}%
--\def\O{O}%
--\def\l{l}%
--\def\L{L}%
--\def\ss{ss}%
--\let\w=\indexdummyfont
--\let\t=\indexdummyfont
--\let\r=\indexdummyfont
--\let\i=\indexdummyfont
--\let\b=\indexdummyfont
--\let\emph=\indexdummyfont
--\let\strong=\indexdummyfont
--\let\cite=\indexdummyfont
--\let\sc=\indexdummyfont
--%Don't no-op \tt, since it isn't a user-level command
--% and is used in the definitions of the active chars like <, >, |...
--%\let\tt=\indexdummyfont
--\let\tclose=\indexdummyfont
--\let\code=\indexdummyfont
--\let\url=\indexdummyfont
--\let\uref=\indexdummyfont
--\let\env=\indexdummyfont
--\let\acronym=\indexdummyfont
--\let\command=\indexdummyfont
--\let\option=\indexdummyfont
--\let\file=\indexdummyfont
--\let\samp=\indexdummyfont
--\let\kbd=\indexdummyfont
--\let\key=\indexdummyfont
--\let\var=\indexdummyfont
--\let\TeX=\indexdummytex
--\let\dots=\indexdummydots
--\def\@{@}%
-+  % Accent commands should become @asis.
-+  \def\definedummyaccent##1{\let##1\asis}%
-+  % We can just ignore other control letters.
-+  \def\definedummyletter##1{\let##1\empty}%
-+  % Hopefully, all control words can become @asis.
-+  \let\definedummyword\definedummyaccent
-+  %
-+  \commondummiesnofonts
-+  %
-+  % Don't no-op \tt, since it isn't a user-level command
-+  % and is used in the definitions of the active chars like <, >, |, etc.
-+  % Likewise with the other plain tex font commands.
-+  %\let\tt=\asis
-+  %
-+  \def\ { }%
-+  \def\@{@}%
-+  % how to handle braces?
-+  \def\_{\normalunderscore}%
-+  %
-+  % Non-English letters.
-+  \def\AA{AA}%
-+  \def\AE{AE}%
-+  \def\L{L}%
-+  \def\OE{OE}%
-+  \def\O{O}%
-+  \def\aa{aa}%
-+  \def\ae{ae}%
-+  \def\l{l}%
-+  \def\oe{oe}%
-+  \def\o{o}%
-+  \def\ss{ss}%
-+  \def\exclamdown{!}%
-+  \def\questiondown{?}%
-+  \def\ordf{a}%
-+  \def\ordm{o}%
-+  %
-+  \def\LaTeX{LaTeX}%
-+  \def\TeX{TeX}%
-+  %
-+  % Assorted special characters.
-+  % (The following {} will end up in the sort string, but that's ok.)
-+  \def\bullet{bullet}%
-+  \def\comma{,}%
-+  \def\copyright{copyright}%
-+  \def\registeredsymbol{R}%
-+  \def\dots{...}%
-+  \def\enddots{...}%
-+  \def\equiv{==}%
-+  \def\error{error}%
-+  \def\euro{euro}%
-+  \def\guillemetleft{<<}%
-+  \def\guillemetright{>>}%
-+  \def\guilsinglleft{<}%
-+  \def\guilsinglright{>}%
-+  \def\expansion{==>}%
-+  \def\minus{-}%
-+  \def\pounds{pounds}%
-+  \def\point{.}%
-+  \def\print{-|}%
-+  \def\quotedblbase{"}%
-+  \def\quotedblleft{"}%
-+  \def\quotedblright{"}%
-+  \def\quoteleft{`}%
-+  \def\quoteright{'}%
-+  \def\quotesinglbase{,}%
-+  \def\result{=>}%
-+  \def\textdegree{degrees}%
-+  %
-+  % We need to get rid of all macros, leaving only the arguments (if present).
-+  % Of course this is not nearly correct, but it is the best we can do for now.
-+  % makeinfo does not expand macros in the argument to @deffn, which ends up
-+  % writing an index entry, and texindex isn't prepared for an index sort entry
-+  % that starts with \.
-+  % 
-+  % Since macro invocations are followed by braces, we can just redefine them
-+  % to take a single TeX argument.  The case of a macro invocation that
-+  % goes to end-of-line is not handled.
-+  % 
-+  \macrolist
+ 
+ \message{cross references,}
+-% @xref etc.
+ 
+ \newwrite\auxfile
+-
+ \newif\ifhavexrefs    % True if xref values are known.
+ \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
+ 
+@@ -5147,56 +6880,68 @@
+ \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+   node \samp{\ignorespaces#1{}}}
+ 
+-% @node's job is to define \lastnode.
+-\def\node{\ENVcheck\parsearg\nodezzz}
+-\def\nodezzz#1{\nodexxx [#1,]}
+-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
++% @node's only job in TeX is to define \lastnode, which is used in
++% cross-references.  The @node line might or might not have commas, and
++% might or might not have spaces before the first comma, like:
++% @node foo , bar , ...
++% We don't want such trailing spaces in the node name.
++%
++\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
++%
++% also remove a trailing comma, in case of something like this:
++% @node Help-Cross,  ,  , Cross-refs
++\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
++\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
++
+ \let\nwnode=\node
+-\let\lastnode=\relax
++\let\lastnode=\empty
+ 
+-% The sectioning commands (@chapter, etc.) call these.
+-\def\donoderef{%
+-  \ifx\lastnode\relax\else
+-    \expandafter\expandafter\expandafter\setref{\lastnode}%
+-      {Ysectionnumberandtype}%
+-    \global\let\lastnode=\relax
+-  \fi
+-}
+-\def\unnumbnoderef{%
+-  \ifx\lastnode\relax\else
+-    \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
+-    \global\let\lastnode=\relax
+-  \fi
+-}
+-\def\appendixnoderef{%
+-  \ifx\lastnode\relax\else
+-    \expandafter\expandafter\expandafter\setref{\lastnode}%
+-      {Yappendixletterandtype}%
+-    \global\let\lastnode=\relax
++% Write a cross-reference definition for the current node.  #1 is the
++% type (Ynumbered, Yappendix, Ynothing).
++%
++\def\donoderef#1{%
++  \ifx\lastnode\empty\else
++    \setref{\lastnode}{#1}%
++    \global\let\lastnode=\empty
+   \fi
  }
  
--% To define \realbackslash, we must make \ not be an escape.
--% We must first make another character (@) an escape
--% so we do not become unable to do a definition.
 -
--{\catcode`\@=0 \catcode`\\=\other
-- @gdef at realbackslash{\}}
+ % @anchor{NAME} -- define xref target at arbitrary point.
+ %
+ \newcount\savesfregister
+-\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+-\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+-\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
++%
++\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
++\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
++\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+ 
+-% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
+-% NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have
+-% to set \indexdummies so commands such as @code in a section title
+-% aren't expanded.  It would be nicer not to expand the titles in the
+-% first place, but there's so many layers that that is hard to do.
++% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
++% anchor), which consists of three parts:
++% 1) NAME-title - the current sectioning name taken from \lastsection,
++%                 or the anchor name.
++% 2) NAME-snt   - section number and type, passed as the SNT arg, or
++%                 empty for anchors.
++% 3) NAME-pg    - the page number.
+ %
+-\def\setref#1#2{{%
+-  \indexdummies
++% This is called from \donoderef, \anchor, and \dofloat.  In the case of
++% floats, there is an additional part, which is not written here:
++% 4) NAME-lof   - the text as it should appear in a @listoffloats.
++%
++\def\setref#1#2{%
+   \pdfmkdest{#1}%
+-  \dosetq{#1-title}{Ytitle}%
+-  \dosetq{#1-pg}{Ypagenumber}%
+-  \dosetq{#1-snt}{#2}%
+-}}
++  \iflinks
++    {%
++      \atdummies  % preserve commands, but don't expand them
++      \edef\writexrdef##1##2{%
++	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
++	  ##1}{##2}}% these are parameters of \writexrdef
++      }%
++      \toks0 = \expandafter{\lastsection}%
++      \immediate \writexrdef{title}{\the\toks0 }%
++      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
++      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
++    }%
++  \fi
++}
+ 
+ % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+ % the node name, #2 the name of the Info cross-reference, #3 the printed
+@@ -5209,135 +6954,162 @@
+ \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+   \unsepspaces
+   \def\printedmanual{\ignorespaces #5}%
+-  \def\printednodename{\ignorespaces #3}%
+-  \setbox1=\hbox{\printedmanual}%
+-  \setbox0=\hbox{\printednodename}%
++  \def\printedrefname{\ignorespaces #3}%
++  \setbox1=\hbox{\printedmanual\unskip}%
++  \setbox0=\hbox{\printedrefname\unskip}%
+   \ifdim \wd0 = 0pt
+     % No printed node name was explicitly given.
+     \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+       % Use the node name inside the square brackets.
+-      \def\printednodename{\ignorespaces #1}%
++      \def\printedrefname{\ignorespaces #1}%
+     \else
+       % Use the actual chapter/section title appear inside
+       % the square brackets.  Use the real section title if we have it.
+       \ifdim \wd1 > 0pt
+         % It is in another manual, so we don't have it.
+-        \def\printednodename{\ignorespaces #1}%
++        \def\printedrefname{\ignorespaces #1}%
+       \else
+         \ifhavexrefs
+           % We know the real title if we have the xref values.
+-          \def\printednodename{\refx{#1-title}{}}%
++          \def\printedrefname{\refx{#1-title}{}}%
+         \else
+           % Otherwise just copy the Info node name.
+-          \def\printednodename{\ignorespaces #1}%
++          \def\printedrefname{\ignorespaces #1}%
+         \fi%
+       \fi
+     \fi
+   \fi
+   %
+-  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+-  % insert empty discretionaries after hyphens, which means that it will
+-  % not find a line break at a hyphen in a node names.  Since some manuals
+-  % are best written with fairly long node names, containing hyphens, this
+-  % is a loss.  Therefore, we give the text of the node name again, so it
+-  % is as if TeX is seeing it for the first time.
++  % Make link in pdf output.
+   \ifpdf
+-    \leavevmode
+-    \getfilename{#4}%
+-    \ifnum\filenamelength>0
+-      \startlink attr{/Border [0 0 0]}%
+-        goto file{\the\filename.pdf} name{#1@}%
+-    \else
+-      \startlink attr{/Border [0 0 0]}%
+-        goto name{#1@}%
+-    \fi
+-    \linkcolor
++    {\indexnofonts
++     \turnoffactive
++     % This expands tokens, so do it after making catcode changes, so _
++     % etc. don't get their TeX definitions.
++     \getfilename{#4}%
++     %
++     % See comments at \activebackslashdouble.
++     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
++      \backslashparens\pdfxrefdest}%
++     %
++     \leavevmode
++     \startlink attr{/Border [0 0 0]}%
++     \ifnum\filenamelength>0
++       goto file{\the\filename.pdf} name{\pdfxrefdest}%
++     \else
++       goto name{\pdfmkpgn{\pdfxrefdest}}%
++     \fi
++    }%
++    \setcolor{\linkcolor}%
+   \fi
+   %
+-  \ifdim \wd1 > 0pt
+-    \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
++  % Float references are printed completely differently: "Figure 1.2"
++  % instead of "[somenode], p.3".  We distinguish them by the
++  % LABEL-title being set to a magic string.
++  {%
++    % Have to otherify everything special to allow the \csname to
++    % include an _ in the xref name, etc.
++    \indexnofonts
++    \turnoffactive
++    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
++      \csname XR#1-title\endcsname
++  }%
++  \iffloat\Xthisreftitle
++    % If the user specified the print name (third arg) to the ref,
++    % print it instead of our usual "Figure 1.2".
++    \ifdim\wd0 = 0pt
++      \refx{#1-snt}{}%
++    \else
++      \printedrefname
++    \fi
++    %
++    % if the user also gave the printed manual name (fifth arg), append
++    % "in MANUALNAME".
++    \ifdim \wd1 > 0pt
++      \space \putwordin{} \cite{\printedmanual}%
++    \fi
+   \else
+-    % _ (for example) has to be the character _ for the purposes of the
+-    % control sequence corresponding to the node, but it has to expand
+-    % into the usual \leavevmode...\vrule stuff for purposes of
+-    % printing. So we \turnoffactive for the \refx-snt, back on for the
+-    % printing, back off for the \refx-pg.
+-    {\normalturnoffactive
+-     % Only output a following space if the -snt ref is nonempty; for
+-     % @unnumbered and @anchor, it won't be.
+-     \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+-     \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+-    }%
+-    % [mynode],
+-    [\printednodename],\space
+-    % page 3
+-    \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
++    % node/anchor (non-float) references.
++    %
++    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
++    % insert empty discretionaries after hyphens, which means that it will
++    % not find a line break at a hyphen in a node names.  Since some manuals
++    % are best written with fairly long node names, containing hyphens, this
++    % is a loss.  Therefore, we give the text of the node name again, so it
++    % is as if TeX is seeing it for the first time.
++    \ifdim \wd1 > 0pt
++      \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
++    \else
++      % _ (for example) has to be the character _ for the purposes of the
++      % control sequence corresponding to the node, but it has to expand
++      % into the usual \leavevmode...\vrule stuff for purposes of
++      % printing. So we \turnoffactive for the \refx-snt, back on for the
++      % printing, back off for the \refx-pg.
++      {\turnoffactive
++       % Only output a following space if the -snt ref is nonempty; for
++       % @unnumbered and @anchor, it won't be.
++       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
++       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
++      }%
++      % output the `[mynode]' via a macro so it can be overridden.
++      \xrefprintnodename\printedrefname
++      %
++      % But we always want a comma and a space:
++      ,\space
++      %
++      % output the `page 3'.
++      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
++    \fi
+   \fi
+   \endlink
+ \endgroup}
+ 
+-% \dosetq is the interface for calls from other macros
+-
+-% Use \normalturnoffactive so that punctuation chars such as underscore
+-% and backslash work in node names.  (\turnoffactive doesn't do \.)
+-\def\dosetq#1#2{%
+-  {\let\folio=0%
+-   \normalturnoffactive
+-   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+-   \iflinks
+-     \next
+-   \fi
+-  }%
+-}
+-
+-% \internalsetq {foo}{page} expands into
+-% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
+-% When the aux file is read, ' is the escape character
 -
- \let\indexbackslash=0  %overridden during \printindex.
- \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
- 
--% For \ifx comparisons.
--\def\emptymacro{\empty}
+-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
 -
- % Most index entries go through here, but \dosubind is the general case.
--%
--\def\doind#1#2{\dosubind{#1}{#2}\empty}
-+% #1 is the index name, #2 is the entry text.
-+\def\doind#1#2{\dosubind{#1}{#2}{}}
+-% Things to be expanded by \internalsetq
+-
+-\def\Ypagenumber{\folio}
+-
+-\def\Ytitle{\thissection}
+-
+-\def\Ynothing{}
+-
+-\def\Ysectionnumberandtype{%
+-\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
+-\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
+-\else \ifnum \subsubsecno=0 %
+-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
+-\else %
+-\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
+-\fi \fi \fi }
+-
+-\def\Yappendixletterandtype{%
+-\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
+-\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
+-\else \ifnum \subsubsecno=0 %
+-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
+-\else %
+-\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
+-\fi \fi \fi }
+-
+-\gdef\xreftie{'tie}
++% This macro is called from \xrefX for the `[nodename]' part of xref
++% output.  It's a separate macro only so it can be changed more easily,
++% since square brackets don't work well in some documents.  Particularly
++% one that Bob is working on :).
++%
++\def\xrefprintnodename#1{[#1]}
  
- % Workhorse for all \fooindexes.
- % #1 is name of index, #2 is stuff to put there, #3 is subentry --
--% \empty if called from \doind, as we usually are.  The main exception
--% is with defuns, which call us directly.
-+% empty if called from \doind, as we usually are (the main exception
-+% is with most defuns, which call us directly).
+-% Use TeX 3.0's \inputlineno to get the line number, for better error
+-% messages, but if we're using an old version of TeX, don't do anything.
++% Things referred to by \setref.
  %
- \def\dosubind#1#2#3{%
-+  \iflinks
+-\ifx\inputlineno\thisisundefined
+-  \let\linenumber = \empty % Non-3.0.
+-\else
+-  \def\linenumber{\the\inputlineno:\space}
+-\fi
++\def\Ynothing{}
++\def\Yomitfromtoc{}
++\def\Ynumbered{%
++  \ifnum\secno=0
++    \putwordChapter at tie \the\chapno
++  \else \ifnum\subsecno=0
++    \putwordSection at tie \the\chapno.\the\secno
++  \else \ifnum\subsubsecno=0
++    \putwordSection at tie \the\chapno.\the\secno.\the\subsecno
++  \else
++    \putwordSection at tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
++  \fi\fi\fi
++}
++\def\Yappendix{%
++  \ifnum\secno=0
++     \putwordAppendix at tie @char\the\appendixno{}%
++  \else \ifnum\subsecno=0
++     \putwordSection at tie @char\the\appendixno.\the\secno
++  \else \ifnum\subsubsecno=0
++    \putwordSection at tie @char\the\appendixno.\the\secno.\the\subsecno
++  \else
++    \putwordSection at tie
++      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
++  \fi\fi\fi
++}
+ 
+ % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+ % If its value is nonempty, SUFFIX is output afterward.
+-
++%
+ \def\refx#1#2{%
+-  \expandafter\ifx\csname X#1\endcsname\relax
 +  {%
-+    % Store the main index entry text (including the third arg).
-+    \toks0 = {#2}%
-+    % If third arg is present, precede it with a space.
-+    \def\thirdarg{#3}%
-+    \ifx\thirdarg\empty \else
-+      \toks0 = \expandafter{\the\toks0 \space #3}%
-+    \fi
++    \indexnofonts
++    \otherbackslash
++    \expandafter\global\expandafter\let\expandafter\thisrefX
++      \csname XR#1\endcsname
++  }%
++  \ifx\thisrefX\relax
+     % If not defined, say something at least.
+     \angleleft un\-de\-fined\angleright
+     \iflinks
+@@ -5352,22 +7124,59 @@
+     \fi
+   \else
+     % It's defined, so just use it.
+-    \csname X#1\endcsname
++    \thisrefX
+   \fi
+   #2% Output the suffix in any case.
+ }
+ 
+-% This is the macro invoked by entries in the aux file.
++% This is the macro invoked by entries in the aux file.  Usually it's
++% just a \def (we prepend XR to the control sequence name to avoid
++% collisions).  But if this is a float type, we have more work to do.
+ %
+-\def\xrdef#1{\begingroup
+-  % Reenable \ as an escape while reading the second argument.
+-  \catcode`\\ = 0
+-  \afterassignment\endgroup
+-  \expandafter\gdef\csname X#1\endcsname
++\def\xrdef#1#2{%
++  {% The node name might contain 8-bit characters, which in our current
++   % implementation are changed to commands like @'e.  Don't let these
++   % mess up the control sequence name.
++    \indexnofonts
++    \turnoffactive
++    \xdef\safexrefname{#1}%
++  }%
++  %
++  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
++  %
++  % Was that xref control sequence that we just defined for a float?
++  \expandafter\iffloat\csname XR\safexrefname\endcsname
++    % it was a float, and we have the (safe) float type in \iffloattype.
++    \expandafter\let\expandafter\floatlist
++      \csname floatlist\iffloattype\endcsname
 +    %
-+    \edef\writeto{\csname#1indfile\endcsname}%
++    % Is this the first time we've seen this float type?
++    \expandafter\ifx\floatlist\relax
++      \toks0 = {\do}% yes, so just \do
++    \else
++      % had it before, so preserve previous elements in list.
++      \toks0 = \expandafter{\floatlist\do}%
++    \fi
 +    %
-+    \safewhatsit\dosubindwrite
-+  }%
++    % Remember this xref in the control sequence \floatlistFLOATTYPE,
++    % for later use in \listoffloats.
++    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
++      {\safexrefname}}%
 +  \fi
-+}
-+
-+% Write the entry in \toks0 to the index file:
+ }
+ 
+ % Read the last existing aux file, if any.  No error if none exists.
+-\def\readauxfile{\begingroup
 +%
-+\def\dosubindwrite{%
-   % Put the index entry in the margin if desired.
-   \ifx\SETmarginindex\relax\else
--    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
-   \fi
--  {%
--    \count255=\lastpenalty
--    {%
--      \indexdummies % Must do this here, since \bf, etc expand at this stage
--      \escapechar=`\\
--      {%
--        \let\folio = 0% We will expand all macros now EXCEPT \folio.
--        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
--        % so it will be output as is; and it will print as backslash.
--        %
--        \def\thirdarg{#3}%
--        %
--        % If third arg is present, precede it with space in sort key.
--        \ifx\thirdarg\emptymacro
--          \let\subentry = \empty
--        \else
--          \def\subentry{ #3}%
--        \fi
--        %
--        % First process the index entry with all font commands turned
--        % off to get the string to sort by.
--        {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
--        %
--        % Now the real index entry with the fonts.
--        \toks0 = {#2}%
--        %
--        % If third (subentry) arg is present, add it to the index
--        % string.  And include a space.
--        \ifx\thirdarg\emptymacro \else
--          \toks0 = \expandafter{\the\toks0 \space #3}%
--        \fi
--        %
--        % Set up the complete index entry, with both the sort key
--        % and the original text, including any font commands.  We write
--        % three arguments to \entry to the .?? file, texindex reduces to
--        % two when writing the .??s sorted result.
--        \edef\temp{%
--          \write\csname#1indfile\endcsname{%
--            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
--        }%
--        %
--        % If a skip is the last thing on the list now, preserve it
--        % by backing up by \lastskip, doing the \write, then inserting
--        % the skip again.  Otherwise, the whatsit generated by the
--        % \write will make \lastskip zero.  The result is that sequences
--        % like this:
--        % @end defun
--        % @tindex whatever
--        % @defun ...
--        % will have extra space inserted, because the \medbreak in the
--        % start of the @defun won't see the skip inserted by the @end of
--        % the previous defun.
--        %
--        % But don't do any of this if we're not in vertical mode.  We
--        % don't want to do a \vskip and prematurely end a paragraph.
--        %
--        % Avoid page breaks due to these extra skips, too.
--        %
--        \iflinks
--          \ifvmode
--            \skip0 = \lastskip
--            \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
--          \fi
--          %
--          \temp % do the write
--          %
--          %
--          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
--        \fi
--      }%
--    }%
--    \penalty\count255
++\def\tryauxfile{%
++  \openin 1 \jobname.aux
++  \ifeof 1 \else
++    \readdatafile{aux}%
++    \global\havexrefstrue
++  \fi
++  \closein 1
++}
++
++\def\setupdatafile{%
+   \catcode`\^^@=\other
+   \catcode`\^^A=\other
+   \catcode`\^^B=\other
+@@ -5395,9 +7204,7 @@
+   \catcode`\^^]=\other
+   \catcode`\^^^=\other
+   \catcode`\^^_=\other
+-  \catcode`\@=\other
+-  \catcode`\^=\other
+-  % It was suggested to define this as 7, which would allow ^^e4 etc.
++  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+   % in xref tags, i.e., node names.  But since ^^e4 notation isn't
+   % supported in the main text, it doesn't seem desirable.  Furthermore,
+   % that is not enough: for node names that actually contain a ^
+@@ -5410,6 +7217,9 @@
+   % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+   % and then to call \auxhat in \setq.
+   %
++  \catcode`\^=\other
 +  %
-+  % Remember, we are within a group.
-+  \indexdummies % Must do this here, since \bf, etc expand at this stage
-+  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-+      % so it will be output as is; and it will print as backslash.
++  % Special characters.  Should be turned off anyway, but...
+   \catcode`\~=\other
+   \catcode`\[=\other
+   \catcode`\]=\other
+@@ -5421,41 +7231,43 @@
+   \catcode`\$=\other
+   \catcode`\#=\other
+   \catcode`\&=\other
++  \catcode`\%=\other
+   \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+-  % Make the characters 128-255 be printing characters
 +  %
-+  % Process the index entry with all font commands turned off, to
-+  % get the string to sort by.
-+  {\indexnofonts
-+   \edef\temp{\the\toks0}% need full expansion
-+   \xdef\indexsorttmp{\temp}%
++  % This is to support \ in node names and titles, since the \
++  % characters end up in a \csname.  It's easier than
++  % leaving it active and making its active definition an actual \
++  % character.  What I don't understand is why it works in the *value*
++  % of the xrdef.  Seems like it should be a catcode12 \, and that
++  % should not typeset properly.  But it works, so I'm moving on for
++  % now.  --karl, 15jan04.
++  \catcode`\\=\other
++  %
++  % Make the characters 128-255 be printing characters.
+   {%
+-    \count 1=128
++    \count1=128
+     \def\loop{%
+-      \catcode\count 1=\other
+-      \advance\count 1 by 1
+-      \ifnum \count 1<256 \loop \fi
++      \catcode\count1=\other
++      \advance\count1 by 1
++      \ifnum \count1<256 \loop \fi
+     }%
    }%
+-  % The aux file uses ' as the escape (for now).
+-  % Turn off \ as an escape so we do not lose on
+-  % entries which were dumped with control sequences in their names.
+-  % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
+-  % Reference to such entries still does not work the way one would wish,
+-  % but at least they do not bomb out when the aux file is read in.
 +  %
-+  % Set up the complete index entry, with both the sort key and
-+  % the original text, including any font commands.  We write
-+  % three arguments to \entry to the .?? file (four in the
-+  % subentry case), texindex reduces to two when writing the .??s
-+  % sorted result.
-+  \edef\temp{%
-+    \write\writeto{%
-+      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
-+  }%
-+  \temp
++  % @ is our escape character in .aux files, and we need braces.
+   \catcode`\{=1
+   \catcode`\}=2
+-  \catcode`\%=\other
+-  \catcode`\'=0
+-  \catcode`\\=\other
+-  %
+-  \openin 1 \jobname.aux
+-  \ifeof 1 \else
+-    \closein 1
+-    \input \jobname.aux
+-    \global\havexrefstrue
+-    \global\warnedobstrue
+-  \fi
+-  % Open the new aux file.  TeX will close it automatically at exit.
+-  \openout\auxfile=\jobname.aux
++  \catcode`\@=0
 +}
 +
-+% Take care of unwanted page breaks/skips around a whatsit:
-+%
-+% If a skip is the last thing on the list now, preserve it
-+% by backing up by \lastskip, doing the \write, then inserting
-+% the skip again.  Otherwise, the whatsit generated by the
-+% \write or \pdfdest will make \lastskip zero.  The result is that
-+% sequences like this:
-+% @end defun
-+% @tindex whatever
-+% @defun ...
-+% will have extra space inserted, because the \medbreak in the
-+% start of the @defun won't see the skip inserted by the @end of
-+% the previous defun.
-+%
-+% But don't do any of this if we're not in vertical mode.  We
-+% don't want to do a \vskip and prematurely end a paragraph.
-+%
-+% Avoid page breaks due to these extra skips, too.
-+%
-+% But wait, there is a catch there:
-+% We'll have to check whether \lastskip is zero skip.  \ifdim is not
-+% sufficient for this purpose, as it ignores stretch and shrink parts
-+% of the skip.  The only way seems to be to check the textual
-+% representation of the skip.
-+%
-+% The following is almost like \def\zeroskipmacro{0.0pt} except that
-+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
-+%
-+\edef\zeroskipmacro{\expandafter\the\csname z at skip\endcsname}
-+%
-+\newskip\whatsitskip
-+\newcount\whatsitpenalty
-+%
-+% ..., ready, GO:
-+%
-+\def\safewhatsit#1{%
-+\ifhmode
-+  #1%
-+\else
-+  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
-+  \whatsitskip = \lastskip
-+  \edef\lastskipmacro{\the\lastskip}%
-+  \whatsitpenalty = \lastpenalty
-+  %
-+  % If \lastskip is nonzero, that means the last item was a
-+  % skip.  And since a skip is discardable, that means this
-+  % -\whatsitskip glue we're inserting is preceded by a
-+  % non-discardable item, therefore it is not a potential
-+  % breakpoint, therefore no \nobreak needed.
-+  \ifx\lastskipmacro\zeroskipmacro
-+  \else
-+    \vskip-\whatsitskip
-+  \fi
-+  %
-+  #1%
++\def\readdatafile#1{%
++\begingroup
++  \setupdatafile
++  \input\jobname.#1
+ \endgroup}
+ 
+ 
+-% Footnotes.
++\message{insertions,}
++% including footnotes.
+ 
+ \newcount \footnoteno
+ 
+@@ -5469,37 +7281,39 @@
+ % @footnotestyle is meaningful for info output only.
+ \let\footnotestyle=\comment
+ 
+-\let\ptexfootnote=\footnote
+-
+ {\catcode `\@=11
+ %
+ % Auto-number footnotes.  Otherwise like plain.
+ \gdef\footnote{%
++  \let\indent=\ptexindent
++  \let\noindent=\ptexnoindent
+   \global\advance\footnoteno by \@ne
+   \edef\thisfootno{$^{\the\footnoteno}$}%
+   %
+   % In case the footnote comes at the end of a sentence, preserve the
+   % extra spacing after we do the footnote number.
+   \let\@sf\empty
+-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
++  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+   %
+   % Remove inadvertent blank space before typesetting the footnote number.
+   \unskip
+   \thisfootno\@sf
+-  \footnotezzz
++  \dofootnote
+ }%
+ 
+ % Don't bother with the trickery in plain.tex to not require the
+ % footnote text as a parameter.  Our footnotes don't need to be so general.
+ %
+-% Oh yes, they do; otherwise, @ifset and anything else that uses
+-% \parseargline fail inside footnotes because the tokens are fixed when
++% Oh yes, they do; otherwise, @ifset (and anything else that uses
++% \parseargline) fails inside footnotes because the tokens are fixed when
+ % the footnote is read.  --karl, 16nov96.
+ %
+-\long\gdef\footnotezzz{\insert\footins\bgroup
++\gdef\dofootnote{%
++  \insert\footins\bgroup
+   % We want to typeset this text as a normal paragraph, even if the
+   % footnote reference occurs in (for example) a display environment.
+   % So reset some parameters.
++  \hsize=\pagewidth
+   \interlinepenalty\interfootnotelinepenalty
+   \splittopskip\ht\strutbox % top baseline for broken footnotes
+   \splitmaxdepth\dp\strutbox
+@@ -5512,8 +7326,15 @@
+   %
+   \smallfonts \rm
+   %
+-  % Hang the footnote text off the number.
+-  \hang
++  % Because we use hanging indentation in footnotes, a @noindent appears
++  % to exdent this text, so make it be a no-op.  makeinfo does not use
++  % hanging indentation so @noindent can still be needed within footnote
++  % text after an @example or the like (not that this is good style).
++  \let\noindent = \relax
 +  %
-+  \ifx\lastskipmacro\zeroskipmacro
-+    % If \lastskip was zero, perhaps the last item was a penalty, and
-+    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
-+    % to re-insert the same penalty (values >10000 are used for various
-+    % signals); since we just inserted a non-discardable item, any
-+    % following glue (such as a \parskip) would be a breakpoint.  For example:
-+    % 
-+    %   @deffn deffn-whatever
-+    %   @vindex index-whatever
-+    %   Description.
-+    % would allow a break between the index-whatever whatsit
-+    % and the "Description." paragraph.
-+    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
++  % Hang the footnote text off the number.  Use \everypar in case the
++  % footnote extends for more than one paragraph.
++  \everypar = {\hang}%
+   \textindent{\thisfootno}%
+   %
+   % Don't crash into the line above the footnote text.  Since this
+@@ -5522,66 +7343,68 @@
+   \footstrut
+   \futurelet\next\fo at t
+ }
+-\def\fo at t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+-  \else\let\next\f at t\fi \next}
+-\def\f@@t{\bgroup\aftergroup\@foot\let\next}
+-\def\f at t#1{#1\@foot}
+-\def\@foot{\strut\par\egroup}
+-
+ }%end \catcode `\@=11
+ 
+-% Set the baselineskip to #1, and the lineskip and strut size
+-% correspondingly.  There is no deep meaning behind these magic numbers
+-% used as factors; they just match (closely enough) what Knuth defined.
+-%
+-\def\lineskipfactor{.08333}
+-\def\strutheightpercent{.70833}
+-\def\strutdepthpercent {.29167}
++% In case a @footnote appears in a vbox, save the footnote text and create
++% the real \insert just after the vbox finished.  Otherwise, the insertion
++% would be lost.
++% Similarly, if a @footnote appears inside an alignment, save the footnote
++% text to a box and make the \insert when a row of the table is finished.
++% And the same can be done for other insert classes.  --kasal, 16nov03.
++
++% Replace the \insert primitive by a cheating macro.
++% Deeper inside, just make sure that the saved insertions are not spilled
++% out prematurely.
+ %
+-\def\setleading#1{%
+-  \normalbaselineskip = #1\relax
+-  \normallineskip = \lineskipfactor\normalbaselineskip
+-  \normalbaselines
+-  \setbox\strutbox =\hbox{%
+-    \vrule width0pt height\strutheightpercent\baselineskip
+-                    depth \strutdepthpercent \baselineskip
+-  }%
++\def\startsavinginserts{%
++  \ifx \insert\ptexinsert
++    \let\insert\saveinsert
 +  \else
-+    % On the other hand, if we had a nonzero \lastskip,
-+    % this make-up glue would be preceded by a non-discardable item
-+    % (the whatsit from the \write), so we must insert a \nobreak.
-+    \nobreak\vskip\whatsitskip
++    \let\checkinserts\relax
 +  \fi
-+\fi
  }
  
- % The index entry written in the file actually looks like
-@@ -2938,13 +4380,13 @@
- % @printindex causes a particular index (the ??s file) to get printed.
- % It does not print any chapter heading (usually an @unnumbered).
+-% @| inserts a changebar to the left of the current line.  It should
+-% surround any changed text.  This approach does *not* work if the
+-% change spans more than two lines of output.  To handle that, we would
+-% have adopt a much more difficult approach (putting marks into the main
+-% vertical list for the beginning and end of each change).
++% This \insert replacement works for both \insert\footins{foo} and
++% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
  %
--\def\printindex{\parsearg\doprintindex}
--\def\doprintindex#1{\begingroup
-+\parseargdef\printindex{\begingroup
-   \dobreak \chapheadingskip{10000}%
-   %
-   \smallfonts \rm
-   \tolerance = 9500
--  \indexbreaks
-+  \plainfrenchspacing
-+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
-   %
-   % See if the index file exists and is nonempty.
-   % Change catcode of @ here so that if the index file contains
-@@ -2971,7 +4413,7 @@
-       % Index files are almost Texinfo source, but we use \ as the escape
-       % character.  It would be better to use @, but that's too big a change
-       % to make right now.
--      \def\indexbackslash{\rawbackslashxx}%
-+      \def\indexbackslash{\backslashcurfont}%
-       \catcode`\\ = 0
-       \escapechar = `\\
-       \begindoublecolumns
-@@ -2993,7 +4435,10 @@
-   \removelastskip
-   %
-   % We like breaks before the index initials, so insert a bonus.
--  \penalty -300
-+  \nobreak
-+  \vskip 0pt plus 3\baselineskip
-+  \penalty 0
-+  \vskip 0pt plus -3\baselineskip
-   %
-   % Typeset the initial.  Making this add up to a whole number of
-   % baselineskips increases the chance of the dots lining up from column
-@@ -3003,93 +4448,117 @@
-   % No shrink because it confuses \balancecolumns.
-   \vskip 1.67\baselineskip plus .5\baselineskip
-   \leftline{\secbf #1}%
--  \vskip .33\baselineskip plus .1\baselineskip
+-\def\|{%
+-  % \vadjust can only be used in horizontal mode.
+-  \leavevmode
 -  %
-   % Do our best not to break after the initial.
-   \nobreak
-+  \vskip .33\baselineskip plus .1\baselineskip
- }}
+-  % Append this vertical mode material after the current line in the output.
+-  \vadjust{%
+-    % We want to insert a rule with the height and depth of the current
+-    % leading; that is exactly what \strutbox is supposed to record.
+-    \vskip-\baselineskip
+-    %
+-    % \vadjust-items are inserted at the left edge of the type.  So
+-    % the \llap here moves out into the left-hand margin.
+-    \llap{%
+-      %
+-      % For a thicker or thinner bar, change the `1pt'.
+-      \vrule height\baselineskip width1pt
+-      %
+-      % This is the space between the bar and the text.
+-      \hskip 12pt
+-    }%
+-  }%
++\def\saveinsert#1{%
++  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
++  \afterassignment\next
++  % swallow the left brace
++  \let\temp =
+ }
++\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
++\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
++
++\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
++
++\def\placesaveins#1{%
++  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
++    {\box#1}%
++}
++
++% eat @SAVE -- beware, all of them have catcode \other:
++{
++  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
++  \gdef\gobblesave @SAVE{}
++}
++
++% initialization:
++\def\newsaveins #1{%
++  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
++  \next
++}
++\def\newsaveinsX #1{%
++  \csname newbox\endcsname #1%
++  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
++    \checksaveins #1}%
++}
++
++% initialize:
++\let\checkinserts\empty
++\newsaveins\footins
++\newsaveins\margin
  
--% This typesets a paragraph consisting of #1, dot leaders, and then #2
--% flush to the right margin.  It is used for index and table of contents
--% entries.  The paragraph is indented by \leftskip.
-+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
-+% then page number (#2) flushed to the right margin.  It is used for index
-+% and table of contents entries.  The paragraph is indented by \leftskip.
+-% For a final copy, take out the rectangles
+-% that mark overfull boxes (in case you have decided
+-% that the text looks ok even though it passes the margin).
+-%
+-\def\finalout{\overfullrule=0pt}
+ 
+ % @image.  We use the macros from epsf.tex to support this.
+ % If epsf.tex is not installed and @image is used, we complain.
+@@ -5591,12 +7414,12 @@
+ % undone and the next image would fail.
+ \openin 1 = epsf.tex
+ \ifeof 1 \else
+-  \closein 1
+-  % Do not bother showing banner with post-v2.7 epsf.tex (available in
+-  % doc/epsf.tex until it shows up on ctan).
++  % Do not bother showing banner with epsf.tex v2.7k (available in
++  % doc/epsf.tex and on ctan).
+   \def\epsfannounce{\toks0 = }%
+   \input epsf.tex
+ \fi
++\closein 1
  %
--\def\entry#1#2{\begingroup
--  %
--  % Start a new paragraph if necessary, so our assignments below can't
--  % affect previous text.
--  \par
--  %
--  % Do not fill out the last line with white space.
--  \parfillskip = 0in
--  %
--  % No extra space above this paragraph.
--  \parskip = 0in
--  %
--  % Do not prefer a separate line ending with a hyphen to fewer lines.
--  \finalhyphendemerits = 0
--  %
--  % \hangindent is only relevant when the entry text and page number
--  % don't both fit on one line.  In that case, bob suggests starting the
--  % dots pretty far over on the line.  Unfortunately, a large
--  % indentation looks wrong when the entry text itself is broken across
--  % lines.  So we use a small indentation and put up with long leaders.
--  %
--  % \hangafter is reset to 1 (which is the value we want) at the start
--  % of each paragraph, so we need not do anything with that.
--  \hangindent = 2em
--  %
--  % When the entry text needs to be broken, just fill out the first line
--  % with blank space.
--  \rightskip = 0pt plus1fil
--  %
--  % A bit of stretch before each entry for the benefit of balancing columns.
--  \vskip 0pt plus1pt
--  %
--  % Start a ``paragraph'' for the index entry so the line breaking
--  % parameters we've set above will have an effect.
--  \noindent
--  %
--  % Insert the text of the index entry.  TeX will do line-breaking on it.
--  #1%
--  % The following is kludged to not output a line of dots in the index if
--  % there are no page numbers.  The next person who breaks this will be
--  % cursed by a Unix daemon.
--  \def\tempa{{\rm }}%
--  \def\tempb{#2}%
--  \edef\tempc{\tempa}%
--  \edef\tempd{\tempb}%
--  \ifx\tempc\tempd\ \else%
-+% A straightforward implementation would start like this:
-+%	\def\entry#1#2{...
-+% But this freezes the catcodes in the argument, and can cause problems to
-+% @code, which sets - active.  This problem was fixed by a kludge---
-+% ``-'' was active throughout whole index, but this isn't really right.
+ % We will only complain once about lack of epsf.tex.
+ \newif\ifwarnednoepsf
+@@ -5612,77 +7435,1180 @@
+       \global\warnednoepsftrue
+     \fi
+   \else
+-    \imagexxx #1,,,\finish
++    \imagexxx #1,,,,,\finish
+   \fi
+ }
+ %
+ % Arguments to @image:
+ % #1 is (mandatory) image filename; we tack on .eps extension.
+ % #2 is (optional) width, #3 is (optional) height.
+-% #4 is just the usual extra ignored arg for parsing this stuff.
+-\def\imagexxx#1,#2,#3,#4\finish{%
++% #4 is (ignored optional) html alt text.
++% #5 is (ignored optional) extension.
++% #6 is just the usual extra ignored arg for parsing this stuff.
++\newif\ifimagevmode
++\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
++  \catcode`\^^M = 5     % in case we're inside an example
++  \normalturnoffactive  % allow _ et al. in names
++  % If the image is by itself, center it.
++  \ifvmode
++    \imagevmodetrue
++    \nobreak\medskip
++    % Usually we'll have text after the image which will insert
++    % \parskip glue, so insert it here too to equalize the space
++    % above and below.
++    \nobreak\vskip\parskip
++    \nobreak
++  \fi
++  %
++  % Leave vertical mode so that indentation from an enclosing
++  % environment such as @quotation is respected.  On the other hand, if
++  % it's at the top level, we don't want the normal paragraph indentation.
++  \noindent
++  %
++  % Output the image.
+   \ifpdf
+-    \centerline{\dopdfimage{#1}{#2}{#3}}%
++    \dopdfimage{#1}{#2}{#3}%
+   \else
+     % \epsfbox itself resets \epsf?size at each figure.
+     \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+     \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+-    \begingroup
+-      \catcode`\^^M = 5 % in case we're inside an example
+-      % If the image is by itself, center it.
+-      \ifvmode
+-        \nobreak\bigskip
+-        % Usually we'll have text after the image which will insert
+-        % \parskip glue, so insert it here too to equalize the space
+-        % above and below. 
+-        \nobreak\vskip\parskip
+-        \nobreak
+-        \centerline{\epsfbox{#1.eps}}%
+-        \bigbreak
+-      \else
+-        % In the middle of a paragraph, no extra space.
+-        \epsfbox{#1.eps}%
++    \epsfbox{#1.eps}%
++  \fi
++  %
++  \ifimagevmode \medskip \fi  % space after the standalone image
++\endgroup}
++
++
++% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
++% etc.  We don't actually implement floating yet, we always include the
++% float "here".  But it seemed the best name for the future.
 +%
-+% The right solution is to prevent \entry from swallowing the whole text.
-+%                                 --kasal, 21nov03
-+\def\entry{%
-+  \begingroup
-     %
--    % If we must, put the page number on a line of its own, and fill out
--    % this line with blank space.  (The \hfil is overwhelmed with the
--    % fill leaders glue in \indexdotfill if the page number does fit.)
--    \hfil\penalty50
--    \null\nobreak\indexdotfill % Have leaders before the page number.
-+    % Start a new paragraph if necessary, so our assignments below can't
-+    % affect previous text.
-+    \par
-     %
--    % The `\ ' here is removed by the implicit \unskip that TeX does as
--    % part of (the primitive) \par.  Without it, a spurious underfull
--    % \hbox ensues.
--    \ifpdf
--      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-+    % Do not fill out the last line with white space.
-+    \parfillskip = 0in
++\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
++
++% There may be a space before second and/or third parameter; delete it.
++\def\eatcommaspace#1, {#1,}
++
++% #1 is the optional FLOATTYPE, the text label for this float, typically
++% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
++% this float will not be numbered and cannot be referred to.
++%
++% #2 is the optional xref label.  Also must be present for the float to
++% be referable.
++%
++% #3 is the optional positioning argument; for now, it is ignored.  It
++% will somehow specify the positions allowed to float to (here, top, bottom).
++%
++% We keep a separate counter for each FLOATTYPE, which we reset at each
++% chapter-level command.
++\let\resetallfloatnos=\empty
++%
++\def\dofloat#1,#2,#3,#4\finish{%
++  \let\thiscaption=\empty
++  \let\thisshortcaption=\empty
++  %
++  % don't lose footnotes inside @float.
++  %
++  % BEWARE: when the floats start float, we have to issue warning whenever an
++  % insert appears inside a float which could possibly float. --kasal, 26may04
++  %
++  \startsavinginserts
++  %
++  % We can't be used inside a paragraph.
++  \par
++  %
++  \vtop\bgroup
++    \def\floattype{#1}%
++    \def\floatlabel{#2}%
++    \def\floatloc{#3}% we do nothing with this yet.
 +    %
-+    % No extra space above this paragraph.
-+    \parskip = 0in
++    \ifx\floattype\empty
++      \let\safefloattype=\empty
++    \else
++      {%
++        % the floattype might have accents or other special characters,
++        % but we need to use it in a control sequence name.
++        \indexnofonts
++        \turnoffactive
++        \xdef\safefloattype{\floattype}%
++      }%
++    \fi
 +    %
-+    % Do not prefer a separate line ending with a hyphen to fewer lines.
-+    \finalhyphendemerits = 0
++    % If label is given but no type, we handle that as the empty type.
++    \ifx\floatlabel\empty \else
++      % We want each FLOATTYPE to be numbered separately (Figure 1,
++      % Table 1, Figure 2, ...).  (And if no label, no number.)
++      %
++      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
++      \global\advance\floatno by 1
++      %
++      {%
++        % This magic value for \lastsection is output by \setref as the
++        % XREFLABEL-title value.  \xrefX uses it to distinguish float
++        % labels (which have a completely different output format) from
++        % node and anchor labels.  And \xrdef uses it to construct the
++        % lists of floats.
++        %
++        \edef\lastsection{\floatmagic=\safefloattype}%
++        \setref{\floatlabel}{Yfloat}%
++      }%
++    \fi
 +    %
-+    % \hangindent is only relevant when the entry text and page number
-+    % don't both fit on one line.  In that case, bob suggests starting the
-+    % dots pretty far over on the line.  Unfortunately, a large
-+    % indentation looks wrong when the entry text itself is broken across
-+    % lines.  So we use a small indentation and put up with long leaders.
++    % start with \parskip glue, I guess.
++    \vskip\parskip
 +    %
-+    % \hangafter is reset to 1 (which is the value we want) at the start
-+    % of each paragraph, so we need not do anything with that.
-+    \hangindent = 2em
++    % Don't suppress indentation if a float happens to start a section.
++    \restorefirstparagraphindent
++}
++
++% we have these possibilities:
++% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
++% @float Foo,lbl & no caption:    Foo 1.1
++% @float Foo & @caption{Cap}:     Foo: Cap
++% @float Foo & no caption:        Foo
++% @float ,lbl & Caption{Cap}:     1.1: Cap
++% @float ,lbl & no caption:       1.1
++% @float & @caption{Cap}:         Cap
++% @float & no caption:
++%
++\def\Efloat{%
++    \let\floatident = \empty
 +    %
-+    % When the entry text needs to be broken, just fill out the first line
-+    % with blank space.
-+    \rightskip = 0pt plus1fil
++    % In all cases, if we have a float type, it comes first.
++    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
 +    %
-+    % A bit of stretch before each entry for the benefit of balancing
-+    % columns.
-+    \vskip 0pt plus1pt
++    % If we have an xref label, the number comes next.
++    \ifx\floatlabel\empty \else
++      \ifx\floattype\empty \else % if also had float type, need tie first.
++        \appendtomacro\floatident{\tie}%
+       \fi
++      % the number.
++      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
++    \fi
 +    %
-+    % Swallow the left brace of the text (first parameter):
-+    \afterassignment\doentry
-+    \let\temp =
++    % Start the printed caption with what we've constructed in
++    % \floatident, but keep it separate; we need \floatident again.
++    \let\captionline = \floatident
++    %
++    \ifx\thiscaption\empty \else
++      \ifx\floatident\empty \else
++	\appendtomacro\captionline{: }% had ident, so need a colon between
++      \fi
++      %
++      % caption text.
++      \appendtomacro\captionline{\scanexp\thiscaption}%
++    \fi
++    %
++    % If we have anything to print, print it, with space before.
++    % Eventually this needs to become an \insert.
++    \ifx\captionline\empty \else
++      \vskip.5\parskip
++      \captionline
++      %
++      % Space below caption.
++      \vskip\parskip
++    \fi
++    %
++    % If have an xref label, write the list of floats info.  Do this
++    % after the caption, to avoid chance of it being a breakpoint.
++    \ifx\floatlabel\empty \else
++      % Write the text that goes in the lof to the aux file as
++      % \floatlabel-lof.  Besides \floatident, we include the short
++      % caption if specified, else the full caption if specified, else nothing.
++      {%
++        \atdummies
++        %
++        % since we read the caption text in the macro world, where ^^M
++        % is turned into a normal character, we have to scan it back, so
++        % we don't write the literal three characters "^^M" into the aux file.
++	\scanexp{%
++	  \xdef\noexpand\gtemp{%
++	    \ifx\thisshortcaption\empty
++	      \thiscaption
++	    \else
++	      \thisshortcaption
++	    \fi
++	  }%
++	}%
++        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
++	  \ifx\gtemp\empty \else : \gtemp \fi}}%
++      }%
++    \fi
++  \egroup  % end of \vtop
++  %
++  % place the captured inserts
++  %
++  % BEWARE: when the floats start floating, we have to issue warning
++  % whenever an insert appears inside a float which could possibly
++  % float. --kasal, 26may04
++  %
++  \checkinserts
++}
++
++% Append the tokens #2 to the definition of macro #1, not expanding either.
++%
++\def\appendtomacro#1#2{%
++  \expandafter\def\expandafter#1\expandafter{#1#2}%
++}
++
++% @caption, @shortcaption
++%
++\def\caption{\docaption\thiscaption}
++\def\shortcaption{\docaption\thisshortcaption}
++\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
++\def\defcaption#1#2{\egroup \def#1{#2}}
++
++% The parameter is the control sequence identifying the counter we are
++% going to use.  Create it if it doesn't exist and assign it to \floatno.
++\def\getfloatno#1{%
++  \ifx#1\relax
++      % Haven't seen this figure type before.
++      \csname newcount\endcsname #1%
++      %
++      % Remember to reset this floatno at the next chap.
++      \expandafter\gdef\expandafter\resetallfloatnos
++        \expandafter{\resetallfloatnos #1=0 }%
++  \fi
++  \let\floatno#1%
 +}
-+\def\doentry{%
-+    \bgroup % Instead of the swallowed brace.
-+      \noindent
-+      \aftergroup\finishentry
-+      % And now comes the text of the entry.
++
++% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
++% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
++% first read the @float command.
++%
++\def\Yfloat{\floattype at tie \chaplevelprefix\the\floatno}%
++
++% Magic string used for the XREFLABEL-title value, so \xrefX can
++% distinguish floats from other xref types.
++\def\floatmagic{!!float!!}
++
++% #1 is the control sequence we are passed; we expand into a conditional
++% which is true if #1 represents a float ref.  That is, the magic
++% \lastsection value which we \setref above.
++%
++\def\iffloat#1{\expandafter\doiffloat#1==\finish}
++%
++% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
++% (safe) float type for this float.  We set \iffloattype to #2.
++%
++\def\doiffloat#1=#2=#3\finish{%
++  \def\temp{#1}%
++  \def\iffloattype{#2}%
++  \ifx\temp\floatmagic
 +}
-+\def\finishentry#1{%
-+    % #1 is the page number.
-+    %
-+    % The following is kludged to not output a line of dots in the index if
-+    % there are no page numbers.  The next person who breaks this will be
-+    % cursed by a Unix daemon.
-+    \setbox\boxA = \hbox{#1}%
-+    \ifdim\wd\boxA = 0pt
-+      \ %
-     \else
--      \ #2% The page number ends the paragraph.
-+      %
-+      % If we must, put the page number on a line of its own, and fill out
-+      % this line with blank space.  (The \hfil is overwhelmed with the
-+      % fill leaders glue in \indexdotfill if the page number does fit.)
-+      \hfil\penalty50
-+      \null\nobreak\indexdotfill % Have leaders before the page number.
-+      %
-+      % The `\ ' here is removed by the implicit \unskip that TeX does as
-+      % part of (the primitive) \par.  Without it, a spurious underfull
-+      % \hbox ensues.
-+      \ifpdf
-+	\pdfgettoks#1.%
-+	\ \the\toksA
-+      \else
-+	\ #1%
-+      \fi
-     \fi
--  \fi%
--  \par
--\endgroup}
-+    \par
++
++% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
++%
++\parseargdef\listoffloats{%
++  \def\floattype{#1}% floattype
++  {%
++    % the floattype might have accents or other special characters,
++    % but we need to use it in a control sequence name.
++    \indexnofonts
++    \turnoffactive
++    \xdef\safefloattype{\floattype}%
++  }%
++  %
++  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
++  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
++    \ifhavexrefs
++      % if the user said @listoffloats foo but never @float foo.
++      \message{\linenumber No `\safefloattype' floats to list.}%
++    \fi
++  \else
++    \begingroup
++      \leftskip=\tocindent  % indent these entries like a toc
++      \let\do=\listoffloatsdo
++      \csname floatlist\safefloattype\endcsname
+     \endgroup
+   \fi
+ }
+ 
++% This is called on each entry in a list of floats.  We're passed the
++% xref label, in the form LABEL-title, which is how we save it in the
++% aux file.  We strip off the -title and look up \XRLABEL-lof, which
++% has the text we're supposed to typeset here.
++%
++% Figures without xref labels will not be included in the list (since
++% they won't appear in the aux file).
++%
++\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
++\def\listoffloatsdoentry#1-title\finish{{%
++  % Can't fully expand XR#1-lof because it can contain anything.  Just
++  % pass the control sequence.  On the other hand, XR#1-pg is just the
++  % page number, and we want to fully expand that so we can get a link
++  % in pdf output.
++  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
++  %
++  % use the same \entry macro we use to generate the TOC and index.
++  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
++  \writeentry
++}}
++
+ 
+ \message{localization,}
+-% and i18n.
+ 
+ % @documentlanguage is usually given very early, just after
+ % @setfilename.  If done too late, it may not override everything
+-% properly.  Single argument is the language abbreviation.
+-% It would be nice if we could set up a hyphenation file here.
++% properly.  Single argument is the language (de) or locale (de_DE)
++% abbreviation.  It would be nice if we could set up a hyphenation file.
+ %
+-\def\documentlanguage{\parsearg\dodocumentlanguage}
+-\def\dodocumentlanguage#1{%
++{
++  \catcode`\_ = \active
++  \globaldefs=1
++\parseargdef\documentlanguage{\begingroup
++  \let_=\normalunderscore  % normal _ character for filenames
+   \tex % read txi-??.tex file in plain TeX.
+-  % Read the file if it exists.
++    % Read the file by the name they passed if it exists.
++    \openin 1 txi-#1.tex
++    \ifeof 1
++      \documentlanguagetrywithoutunderscore{#1_\finish}%
++    \else
++      \input txi-#1.tex
++    \fi
++    \closein 1
 +  \endgroup
++\endgroup}
 +}
++%
++% If they passed de_DE, and txi-de_DE.tex doesn't exist,
++% try txi-de.tex.
++% 
++\def\documentlanguagetrywithoutunderscore#1_#2\finish{%
+   \openin 1 txi-#1.tex
+-  \ifeof1
++  \ifeof 1
+     \errhelp = \nolanghelp
+     \errmessage{Cannot read language file txi-#1.tex}%
+-    \let\temp = \relax
+   \else
+-    \def\temp{\input txi-#1.tex }%
++    \input txi-#1.tex
+   \fi
+-  \temp
+-  \endgroup
++  \closein 1
+ }
++%
+ \newhelp\nolanghelp{The given language definition file cannot be found or
+ is empty.  Maybe you need to install it?  In the current directory
+ should work if nowhere else does.}
  
--% Like \dotfill except takes at least 1 em.
-+% Like plain.tex's \dotfill, except uses up at least 1 em.
- \def\indexdotfill{\cleaders
--  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
- 
- \def\primary #1{\line{#1\hfil}}
++% Set the catcode of characters 128 through 255 to the specified number.
++%
++\def\setnonasciicharscatcode#1{%
++   \count255=128
++   \loop\ifnum\count255<256
++      \global\catcode\count255=#1\relax
++      \advance\count255 by 1
++   \repeat
++}
  
- \newskip\secondaryindent \secondaryindent=0.5cm
--
--\def\secondary #1#2{
--{\parfillskip=0in \parskip=0in
--\hangindent =1in \hangafter=1
--\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par
-+\def\secondary#1#2{{%
-+  \parfillskip=0in
-+  \parskip=0in
-+  \hangindent=1in
-+  \hangafter=1
-+  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
-+  \ifpdf
-+    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-+  \else
-+    #2
-+  \fi
-+  \par
- }}
+-% @documentencoding should change something in TeX eventually, most
+-% likely, but for now just recognize it.
+-\let\documentencoding = \comment
++\def\setnonasciicharscatcodenonglobal#1{%
++   \count255=128
++   \loop\ifnum\count255<256
++      \catcode\count255=#1\relax
++      \advance\count255 by 1
++   \repeat
++}
++
++% @documentencoding sets the definition of non-ASCII characters
++% according to the specified encoding.
++%
++\parseargdef\documentencoding{%
++  % Encoding being declared for the document.
++  \def\declaredencoding{\csname #1.enc\endcsname}%
++  %
++  % Supported encodings: names converted to tokens in order to be able
++  % to compare them with \ifx.
++  \def\ascii{\csname US-ASCII.enc\endcsname}%
++  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
++  \def\latone{\csname ISO-8859-1.enc\endcsname}%
++  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
++  \def\utfeight{\csname UTF-8.enc\endcsname}%
++  %
++  \ifx \declaredencoding \ascii
++     \asciichardefs
++  %
++  \else \ifx \declaredencoding \lattwo
++     \setnonasciicharscatcode\active
++     \lattwochardefs
++  %
++  \else \ifx \declaredencoding \latone 
++     \setnonasciicharscatcode\active
++     \latonechardefs
++  %
++  \else \ifx \declaredencoding \latnine
++     \setnonasciicharscatcode\active
++     \latninechardefs
++  %
++  \else \ifx \declaredencoding \utfeight
++     \setnonasciicharscatcode\active
++     \utfeightchardefs
++  %
++  \else 
++    \message{Unknown document encoding #1, ignoring.}%
++  %
++  \fi % utfeight
++  \fi % latnine
++  \fi % latone
++  \fi % lattwo
++  \fi % ascii
++}
  
- % Define two-column mode, which we use to typeset indexes.
-@@ -3149,7 +4618,6 @@
-   %
-   % Double the \vsize as well.  (We don't need a separate register here,
-   % since nobody clobbers \vsize.)
--  \advance\vsize by -\ht\partialpage
-   \vsize = 2\vsize
- }
++% A message to be logged when using a character that isn't available
++% the default font encoding (OT1).
++% 
++\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
  
-@@ -3163,6 +4631,7 @@
-   % previous page.
-   \dimen@ = \vsize
-   \divide\dimen@ by 2
-+  \advance\dimen@ by -\ht\partialpage
-   %
-   % box0 will be the left-hand column, box2 the right.
-   \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-@@ -3170,16 +4639,47 @@
-   \unvbox255
-   \penalty\outputpenalty
- }
-+%
-+% Re-output the contents of the output page -- any previous material,
-+% followed by the two boxes we just split, in box0 and box2.
- \def\pagesofar{%
--  % Re-output the contents of the output page -- any previous material,
--  % followed by the two boxes we just split, in box0 and box2.
-   \unvbox\partialpage
-   %
-   \hsize = \doublecolumnhsize
-   \wd0=\hsize \wd2=\hsize
-   \hbox to\pagewidth{\box0\hfil\box2}%
- }
-+%
-+% All done with double columns.
- \def\enddoublecolumns{%
-+  % The following penalty ensures that the page builder is exercised
-+  % _before_ we change the output routine.  This is necessary in the
-+  % following situation:
+-% Page size parameters.
++% Take account of \c (plain) vs. \, (Texinfo) difference.
++\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
++
++% First, make active non-ASCII characters in order for them to be
++% correctly categorized when TeX reads the replacement text of
++% macros containing the character definitions.
++\setnonasciicharscatcode\active
+ %
++% Latin1 (ISO-8859-1) character definitions.
++\def\latonechardefs{%
++  \gdef^^a0{~} 
++  \gdef^^a1{\exclamdown}
++  \gdef^^a2{\missingcharmsg{CENT SIGN}} 
++  \gdef^^a3{{\pounds}}
++  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
++  \gdef^^a5{\missingcharmsg{YEN SIGN}}
++  \gdef^^a6{\missingcharmsg{BROKEN BAR}} 
++  \gdef^^a7{\S}
++  \gdef^^a8{\"{}} 
++  \gdef^^a9{\copyright} 
++  \gdef^^aa{\ordf}
++  \gdef^^ab{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}} 
++  \gdef^^ac{$\lnot$}
++  \gdef^^ad{\-} 
++  \gdef^^ae{\registeredsymbol} 
++  \gdef^^af{\={}}
 +  %
-+  % The last section of the index consists only of a single entry.
-+  % Before this section, \pagetotal is less than \pagegoal, so no
-+  % break occurs before the last section starts.  However, the last
-+  % section, consisting of \initial and the single \entry, does not
-+  % fit on the page and has to be broken off.  Without the following
-+  % penalty the page builder will not be exercised until \eject
-+  % below, and by that time we'll already have changed the output
-+  % routine to the \balancecolumns version, so the next-to-last
-+  % double-column page will be processed with \balancecolumns, which
-+  % is wrong:  The two columns will go to the main vertical list, with
-+  % the broken-off section in the recent contributions.  As soon as
-+  % the output routine finishes, TeX starts reconsidering the page
-+  % break.  The two columns and the broken-off section both fit on the
-+  % page, because the two columns now take up only half of the page
-+  % goal.  When TeX sees \eject from below which follows the final
-+  % section, it invokes the new output routine that we've set after
-+  % \balancecolumns below; \onepageout will try to fit the two columns
-+  % and the final section into the vbox of \pageheight (see
-+  % \pagebody), causing an overfull box.
++  \gdef^^b0{\textdegree}
++  \gdef^^b1{$\pm$}
++  \gdef^^b2{$^2$}
++  \gdef^^b3{$^3$}
++  \gdef^^b4{\'{}}
++  \gdef^^b5{$\mu$}
++  \gdef^^b6{\P}
++  %
++  \gdef^^b7{$^.$}
++  \gdef^^b8{\cedilla\ }
++  \gdef^^b9{$^1$}
++  \gdef^^ba{\ordm}
++  %
++  \gdef^^bb{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}}
++  \gdef^^bc{$1\over4$}
++  \gdef^^bd{$1\over2$}
++  \gdef^^be{$3\over4$}
++  \gdef^^bf{\questiondown}
++  %
++  \gdef^^c0{\`A}
++  \gdef^^c1{\'A}
++  \gdef^^c2{\^A}
++  \gdef^^c3{\~A}
++  \gdef^^c4{\"A}
++  \gdef^^c5{\ringaccent A} 
++  \gdef^^c6{\AE}
++  \gdef^^c7{\cedilla C}
++  \gdef^^c8{\`E}
++  \gdef^^c9{\'E}
++  \gdef^^ca{\^E}
++  \gdef^^cb{\"E}
++  \gdef^^cc{\`I}
++  \gdef^^cd{\'I}
++  \gdef^^ce{\^I}
++  \gdef^^cf{\"I}
++  %
++  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}}
++  \gdef^^d1{\~N}
++  \gdef^^d2{\`O}
++  \gdef^^d3{\'O}
++  \gdef^^d4{\^O}
++  \gdef^^d5{\~O}
++  \gdef^^d6{\"O}
++  \gdef^^d7{$\times$}
++  \gdef^^d8{\O}
++  \gdef^^d9{\`U}
++  \gdef^^da{\'U}
++  \gdef^^db{\^U}
++  \gdef^^dc{\"U}
++  \gdef^^dd{\'Y}
++  \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}}
++  \gdef^^df{\ss}
++  %
++  \gdef^^e0{\`a}
++  \gdef^^e1{\'a}
++  \gdef^^e2{\^a}
++  \gdef^^e3{\~a}
++  \gdef^^e4{\"a}
++  \gdef^^e5{\ringaccent a}
++  \gdef^^e6{\ae}
++  \gdef^^e7{\cedilla c}
++  \gdef^^e8{\`e}
++  \gdef^^e9{\'e}
++  \gdef^^ea{\^e}
++  \gdef^^eb{\"e}
++  \gdef^^ec{\`{\dotless i}}
++  \gdef^^ed{\'{\dotless i}}
++  \gdef^^ee{\^{\dotless i}}
++  \gdef^^ef{\"{\dotless i}}
++  %
++  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}}
++  \gdef^^f1{\~n}
++  \gdef^^f2{\`o}
++  \gdef^^f3{\'o}
++  \gdef^^f4{\^o}
++  \gdef^^f5{\~o}
++  \gdef^^f6{\"o}
++  \gdef^^f7{$\div$}
++  \gdef^^f8{\o}
++  \gdef^^f9{\`u}
++  \gdef^^fa{\'u}
++  \gdef^^fb{\^u}
++  \gdef^^fc{\"u}
++  \gdef^^fd{\'y}
++  \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}}
++  \gdef^^ff{\"y}
++}
++
++% Latin9 (ISO-8859-15) encoding character definitions.
++\def\latninechardefs{%
++  % Encoding is almost identical to Latin1.
++  \latonechardefs
++  %
++  \gdef^^a4{\euro}
++  \gdef^^a6{\v S}
++  \gdef^^a8{\v s}
++  \gdef^^b4{\v Z}
++  \gdef^^b8{\v z}
++  \gdef^^bc{\OE}
++  \gdef^^bd{\oe}
++  \gdef^^be{\"Y}
++}
++
++% Latin2 (ISO-8859-2) character definitions.
++\def\lattwochardefs{%
++  \gdef^^a0{~}
++  \gdef^^a1{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}}
++  \gdef^^a2{\u{}}
++  \gdef^^a3{\L}
++  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
++  \gdef^^a5{\v L}
++  \gdef^^a6{\'S}
++  \gdef^^a7{\S}
++  \gdef^^a8{\"{}}
++  \gdef^^a9{\v S}
++  \gdef^^aa{\cedilla S}
++  \gdef^^ab{\v T}
++  \gdef^^ac{\'Z}
++  \gdef^^ad{\-}
++  \gdef^^ae{\v Z}
++  \gdef^^af{\dotaccent Z}
++  %
++  \gdef^^b0{\textdegree}
++  \gdef^^b1{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}}
++  \gdef^^b2{\missingcharmsg{OGONEK}}
++  \gdef^^b3{\l}
++  \gdef^^b4{\'{}}
++  \gdef^^b5{\v l}
++  \gdef^^b6{\'s}
++  \gdef^^b7{\v{}}
++  \gdef^^b8{\cedilla\ }
++  \gdef^^b9{\v s}
++  \gdef^^ba{\cedilla s}
++  \gdef^^bb{\v t}
++  \gdef^^bc{\'z}
++  \gdef^^bd{\H{}}
++  \gdef^^be{\v z}
++  \gdef^^bf{\dotaccent z}
++  %
++  \gdef^^c0{\'R}
++  \gdef^^c1{\'A}
++  \gdef^^c2{\^A}
++  \gdef^^c3{\u A}
++  \gdef^^c4{\"A}
++  \gdef^^c5{\'L}
++  \gdef^^c6{\'C}
++  \gdef^^c7{\cedilla C}
++  \gdef^^c8{\v C}
++  \gdef^^c9{\'E}
++  \gdef^^ca{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}}
++  \gdef^^cb{\"E}
++  \gdef^^cc{\v E}
++  \gdef^^cd{\'I}
++  \gdef^^ce{\^I}
++  \gdef^^cf{\v D}
++  %
++  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}}
++  \gdef^^d1{\'N}
++  \gdef^^d2{\v N}
++  \gdef^^d3{\'O}
++  \gdef^^d4{\^O}
++  \gdef^^d5{\H O}
++  \gdef^^d6{\"O}
++  \gdef^^d7{$\times$}
++  \gdef^^d8{\v R}
++  \gdef^^d9{\ringaccent U} 
++  \gdef^^da{\'U}
++  \gdef^^db{\H U}
++  \gdef^^dc{\"U}
++  \gdef^^dd{\'Y}
++  \gdef^^de{\cedilla T}
++  \gdef^^df{\ss}
 +  %
-+  % Note that glue won't work here, because glue does not exercise the
-+  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
-+  \penalty0
++  \gdef^^e0{\'r}
++  \gdef^^e1{\'a}
++  \gdef^^e2{\^a}
++  \gdef^^e3{\u a}
++  \gdef^^e4{\"a}
++  \gdef^^e5{\'l}
++  \gdef^^e6{\'c}
++  \gdef^^e7{\cedilla c}
++  \gdef^^e8{\v c}
++  \gdef^^e9{\'e}
++  \gdef^^ea{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}}
++  \gdef^^eb{\"e}
++  \gdef^^ec{\v e}
++  \gdef^^ed{\'\i}
++  \gdef^^ee{\^\i}
++  \gdef^^ef{\v d}
 +  %
-   \output = {%
-     % Split the last of the double-column material.  Leave it on the
-     % current page, no automatic page break.
-@@ -3203,8 +4703,9 @@
-   % \endgroup where \vsize got restored).
-   \pagegoal = \vsize
- }
-+%
-+% Called at the end of the double column material.
- \def\balancecolumns{%
--  % Called at the end of the double column material.
-   \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
-   \dimen@ = \ht0
-   \advance\dimen@ by \topskip
-@@ -3234,6 +4735,12 @@
- \message{sectioning,}
- % Chapters, sections, etc.
- 
-+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
-+% sections so that we can refer to them unambiguously in the pdf
-+% outlines by their "section number".  We avoid collisions with chapter
-+% numbers by starting them at 10000.  (If a document ever has 10000
-+% chapters, we're in trouble anyway, I'm sure.)
-+\newcount\unnumberedno \unnumberedno = 10000
- \newcount\chapno
- \newcount\secno        \secno=0
- \newcount\subsecno     \subsecno=0
-@@ -3241,9 +4748,12 @@
- 
- % This counter is funny since it counts through charcodes of letters A, B, ...
- \newcount\appendixno  \appendixno = `\@
-+%
- % \def\appendixletter{\char\the\appendixno}
--% We do the following for the sake of pdftex, which needs the actual
-+% We do the following ugly conditional instead of the above simple
-+% construct for the sake of pdftex, which needs the actual
- % letter in the expansion, not just typeset.
-+%
- \def\appendixletter{%
-   \ifnum\appendixno=`A A%
-   \else\ifnum\appendixno=`B B%
-@@ -3279,13 +4789,18 @@
-   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
- 
--% Each @chapter defines this as the name of the chapter.
--% page headings and footings can use it.  @section does likewise.
-+% Each @chapter defines these (using marks) as the number+name, number
-+% and name of the chapter.  Page headings and footings can use
-+% these.  @section does likewise.
- \def\thischapter{}
-+\def\thischapternum{}
-+\def\thischaptername{}
- \def\thissection{}
-+\def\thissectionnum{}
-+\def\thissectionname{}
- 
- \newcount\absseclevel % used to calculate proper heading level
--\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
- 
- % @raisesections: treat @section as chapter, @subsection as section, etc.
- \def\raisesections{\global\advance\secbase by -1}
-@@ -3295,287 +4810,246 @@
- \def\lowersections{\global\advance\secbase by 1}
- \let\down=\lowersections % original BFox name
- 
--% Choose a numbered-heading macro
--% #1 is heading level if unmodified by @raisesections or @lowersections
--% #2 is text for heading
--\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
--\ifcase\absseclevel
--  \chapterzzz{#2}
--\or
--  \seczzz{#2}
--\or
--  \numberedsubseczzz{#2}
--\or
--  \numberedsubsubseczzz{#2}
--\else
--  \ifnum \absseclevel<0
--    \chapterzzz{#2}
-+% we only have subsub.
-+\chardef\maxseclevel = 3
++  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}}
++  \gdef^^f1{\'n}
++  \gdef^^f2{\v n}
++  \gdef^^f3{\'o}
++  \gdef^^f4{\^o}
++  \gdef^^f5{\H o}
++  \gdef^^f6{\"o}
++  \gdef^^f7{$\div$}
++  \gdef^^f8{\v r}
++  \gdef^^f9{\ringaccent u}
++  \gdef^^fa{\'u}
++  \gdef^^fb{\H u}
++  \gdef^^fc{\"u}
++  \gdef^^fd{\'y}
++  \gdef^^fe{\cedilla t}
++  \gdef^^ff{\dotaccent{}}
++}
++
++% UTF-8 character definitions.
++% 
++% This code to support UTF-8 is based on LaTeX's utf8.def, with some
++% changes for Texinfo conventions.  It is included here under the GPL by
++% permission from Frank Mittelbach and the LaTeX team.
++% 
++\newcount\countUTFx
++\newcount\countUTFy
++\newcount\countUTFz
++
++\gdef\UTFviiiTwoOctets#1#2{\expandafter
++   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
 +%
-+% A numbered section within an unnumbered changes to unnumbered too.
-+% To achive this, remember the "biggest" unnum. sec. we are currently in:
-+\chardef\unmlevel = \maxseclevel
++\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
++   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
 +%
-+% Trace whether the current chapter is an appendix or not:
-+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
-+\def\chapheadtype{N}
++\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
++   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
++
++\gdef\UTFviiiDefined#1{%
++  \ifx #1\relax
++    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
++  \else
++    \expandafter #1%
++  \fi
++}
++
++\begingroup
++  \catcode`\~13
++  \catcode`\"12
++
++  \def\UTFviiiLoop{%
++    \global\catcode\countUTFx\active
++    \uccode`\~\countUTFx
++    \uppercase\expandafter{\UTFviiiTmp}%
++    \advance\countUTFx by 1
++    \ifnum\countUTFx < \countUTFy
++      \expandafter\UTFviiiLoop
++    \fi}
++
++  \countUTFx = "C2
++  \countUTFy = "E0
++  \def\UTFviiiTmp{%
++    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
++  \UTFviiiLoop
++
++  \countUTFx = "E0
++  \countUTFy = "F0
++  \def\UTFviiiTmp{%
++    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
++  \UTFviiiLoop
++
++  \countUTFx = "F0
++  \countUTFy = "F4
++  \def\UTFviiiTmp{%
++    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
++  \UTFviiiLoop
++\endgroup
++
++\begingroup
++  \catcode`\"=12
++  \catcode`\<=12
++  \catcode`\.=12
++  \catcode`\,=12
++  \catcode`\;=12
++  \catcode`\!=12
++  \catcode`\~=13
++
++  \gdef\DeclareUnicodeCharacter#1#2{%
++    \countUTFz = "#1\relax
++    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
++    \begingroup
++      \parseXMLCharref
++      \def\UTFviiiTwoOctets##1##2{%
++        \csname u8:##1\string ##2\endcsname}%
++      \def\UTFviiiThreeOctets##1##2##3{%
++        \csname u8:##1\string ##2\string ##3\endcsname}%
++      \def\UTFviiiFourOctets##1##2##3##4{%
++        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
++      \expandafter\expandafter\expandafter\expandafter
++       \expandafter\expandafter\expandafter
++       \gdef\UTFviiiTmp{#2}%
++    \endgroup}
++
++  \gdef\parseXMLCharref{%
++    \ifnum\countUTFz < "A0\relax
++      \errhelp = \EMsimple
++      \errmessage{Cannot define Unicode char value < 00A0}%
++    \else\ifnum\countUTFz < "800\relax
++      \parseUTFviiiA,%
++      \parseUTFviiiB C\UTFviiiTwoOctets.,%
++    \else\ifnum\countUTFz < "10000\relax
++      \parseUTFviiiA;%
++      \parseUTFviiiA,%
++      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
++    \else
++      \parseUTFviiiA;%
++      \parseUTFviiiA,%
++      \parseUTFviiiA!%
++      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
++    \fi\fi\fi
++  }
++
++  \gdef\parseUTFviiiA#1{%
++    \countUTFx = \countUTFz
++    \divide\countUTFz by 64
++    \countUTFy = \countUTFz
++    \multiply\countUTFz by 64
++    \advance\countUTFx by -\countUTFz
++    \advance\countUTFx by 128
++    \uccode `#1\countUTFx
++    \countUTFz = \countUTFy}
++
++  \gdef\parseUTFviiiB#1#2#3#4{%
++    \advance\countUTFz by "#10\relax
++    \uccode `#3\countUTFz
++    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
++\endgroup
++
++\def\utfeightchardefs{%
++  \DeclareUnicodeCharacter{00A0}{\tie}
++  \DeclareUnicodeCharacter{00A1}{\exclamdown}
++  \DeclareUnicodeCharacter{00A3}{\pounds}
++  \DeclareUnicodeCharacter{00A8}{\"{ }}
++  \DeclareUnicodeCharacter{00A9}{\copyright}
++  \DeclareUnicodeCharacter{00AA}{\ordf}
++  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
++  \DeclareUnicodeCharacter{00AD}{\-}
++  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
++  \DeclareUnicodeCharacter{00AF}{\={ }}
++
++  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
++  \DeclareUnicodeCharacter{00B4}{\'{ }}
++  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
++  \DeclareUnicodeCharacter{00BA}{\ordm}
++  \DeclareUnicodeCharacter{00BB}{\guillemetright}
++  \DeclareUnicodeCharacter{00BF}{\questiondown}
++
++  \DeclareUnicodeCharacter{00C0}{\`A}
++  \DeclareUnicodeCharacter{00C1}{\'A}
++  \DeclareUnicodeCharacter{00C2}{\^A}
++  \DeclareUnicodeCharacter{00C3}{\~A}
++  \DeclareUnicodeCharacter{00C4}{\"A}
++  \DeclareUnicodeCharacter{00C5}{\AA}
++  \DeclareUnicodeCharacter{00C6}{\AE}
++  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
++  \DeclareUnicodeCharacter{00C8}{\`E}
++  \DeclareUnicodeCharacter{00C9}{\'E}
++  \DeclareUnicodeCharacter{00CA}{\^E}
++  \DeclareUnicodeCharacter{00CB}{\"E}
++  \DeclareUnicodeCharacter{00CC}{\`I}
++  \DeclareUnicodeCharacter{00CD}{\'I}
++  \DeclareUnicodeCharacter{00CE}{\^I}
++  \DeclareUnicodeCharacter{00CF}{\"I}
++
++  \DeclareUnicodeCharacter{00D1}{\~N}
++  \DeclareUnicodeCharacter{00D2}{\`O}
++  \DeclareUnicodeCharacter{00D3}{\'O}
++  \DeclareUnicodeCharacter{00D4}{\^O}
++  \DeclareUnicodeCharacter{00D5}{\~O}
++  \DeclareUnicodeCharacter{00D6}{\"O}
++  \DeclareUnicodeCharacter{00D8}{\O}
++  \DeclareUnicodeCharacter{00D9}{\`U}
++  \DeclareUnicodeCharacter{00DA}{\'U}
++  \DeclareUnicodeCharacter{00DB}{\^U}
++  \DeclareUnicodeCharacter{00DC}{\"U}
++  \DeclareUnicodeCharacter{00DD}{\'Y}
++  \DeclareUnicodeCharacter{00DF}{\ss}
++
++  \DeclareUnicodeCharacter{00E0}{\`a}
++  \DeclareUnicodeCharacter{00E1}{\'a}
++  \DeclareUnicodeCharacter{00E2}{\^a}
++  \DeclareUnicodeCharacter{00E3}{\~a}
++  \DeclareUnicodeCharacter{00E4}{\"a}
++  \DeclareUnicodeCharacter{00E5}{\aa}
++  \DeclareUnicodeCharacter{00E6}{\ae}
++  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
++  \DeclareUnicodeCharacter{00E8}{\`e}
++  \DeclareUnicodeCharacter{00E9}{\'e}
++  \DeclareUnicodeCharacter{00EA}{\^e}
++  \DeclareUnicodeCharacter{00EB}{\"e}
++  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
++  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
++  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
++  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
++
++  \DeclareUnicodeCharacter{00F1}{\~n}
++  \DeclareUnicodeCharacter{00F2}{\`o}
++  \DeclareUnicodeCharacter{00F3}{\'o}
++  \DeclareUnicodeCharacter{00F4}{\^o}
++  \DeclareUnicodeCharacter{00F5}{\~o}
++  \DeclareUnicodeCharacter{00F6}{\"o}
++  \DeclareUnicodeCharacter{00F8}{\o}
++  \DeclareUnicodeCharacter{00F9}{\`u}
++  \DeclareUnicodeCharacter{00FA}{\'u}
++  \DeclareUnicodeCharacter{00FB}{\^u}
++  \DeclareUnicodeCharacter{00FC}{\"u}
++  \DeclareUnicodeCharacter{00FD}{\'y}
++  \DeclareUnicodeCharacter{00FF}{\"y}
++
++  \DeclareUnicodeCharacter{0100}{\=A}
++  \DeclareUnicodeCharacter{0101}{\=a}
++  \DeclareUnicodeCharacter{0102}{\u{A}}
++  \DeclareUnicodeCharacter{0103}{\u{a}}
++  \DeclareUnicodeCharacter{0106}{\'C}
++  \DeclareUnicodeCharacter{0107}{\'c}
++  \DeclareUnicodeCharacter{0108}{\^C}
++  \DeclareUnicodeCharacter{0109}{\^c}
++  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
++  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
++  \DeclareUnicodeCharacter{010C}{\v{C}}
++  \DeclareUnicodeCharacter{010D}{\v{c}}
++  \DeclareUnicodeCharacter{010E}{\v{D}}
++
++  \DeclareUnicodeCharacter{0112}{\=E}
++  \DeclareUnicodeCharacter{0113}{\=e}
++  \DeclareUnicodeCharacter{0114}{\u{E}}
++  \DeclareUnicodeCharacter{0115}{\u{e}}
++  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
++  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
++  \DeclareUnicodeCharacter{011A}{\v{E}}
++  \DeclareUnicodeCharacter{011B}{\v{e}}
++  \DeclareUnicodeCharacter{011C}{\^G}
++  \DeclareUnicodeCharacter{011D}{\^g}
++  \DeclareUnicodeCharacter{011E}{\u{G}}
++  \DeclareUnicodeCharacter{011F}{\u{g}}
++
++  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
++  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
++  \DeclareUnicodeCharacter{0124}{\^H}
++  \DeclareUnicodeCharacter{0125}{\^h}
++  \DeclareUnicodeCharacter{0128}{\~I}
++  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
++  \DeclareUnicodeCharacter{012A}{\=I}
++  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
++  \DeclareUnicodeCharacter{012C}{\u{I}}
++  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
++
++  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
++  \DeclareUnicodeCharacter{0131}{\dotless{i}}
++  \DeclareUnicodeCharacter{0132}{IJ}
++  \DeclareUnicodeCharacter{0133}{ij}
++  \DeclareUnicodeCharacter{0134}{\^J}
++  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
++  \DeclareUnicodeCharacter{0139}{\'L}
++  \DeclareUnicodeCharacter{013A}{\'l}
++
++  \DeclareUnicodeCharacter{0141}{\L}
++  \DeclareUnicodeCharacter{0142}{\l}
++  \DeclareUnicodeCharacter{0143}{\'N}
++  \DeclareUnicodeCharacter{0144}{\'n}
++  \DeclareUnicodeCharacter{0147}{\v{N}}
++  \DeclareUnicodeCharacter{0148}{\v{n}}
++  \DeclareUnicodeCharacter{014C}{\=O}
++  \DeclareUnicodeCharacter{014D}{\=o}
++  \DeclareUnicodeCharacter{014E}{\u{O}}
++  \DeclareUnicodeCharacter{014F}{\u{o}}
++
++  \DeclareUnicodeCharacter{0150}{\H{O}}
++  \DeclareUnicodeCharacter{0151}{\H{o}}
++  \DeclareUnicodeCharacter{0152}{\OE}
++  \DeclareUnicodeCharacter{0153}{\oe}
++  \DeclareUnicodeCharacter{0154}{\'R}
++  \DeclareUnicodeCharacter{0155}{\'r}
++  \DeclareUnicodeCharacter{0158}{\v{R}}
++  \DeclareUnicodeCharacter{0159}{\v{r}}
++  \DeclareUnicodeCharacter{015A}{\'S}
++  \DeclareUnicodeCharacter{015B}{\'s}
++  \DeclareUnicodeCharacter{015C}{\^S}
++  \DeclareUnicodeCharacter{015D}{\^s}
++  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
++  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
++
++  \DeclareUnicodeCharacter{0160}{\v{S}}
++  \DeclareUnicodeCharacter{0161}{\v{s}}
++  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
++  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
++  \DeclareUnicodeCharacter{0164}{\v{T}}
++
++  \DeclareUnicodeCharacter{0168}{\~U}
++  \DeclareUnicodeCharacter{0169}{\~u}
++  \DeclareUnicodeCharacter{016A}{\=U}
++  \DeclareUnicodeCharacter{016B}{\=u}
++  \DeclareUnicodeCharacter{016C}{\u{U}}
++  \DeclareUnicodeCharacter{016D}{\u{u}}
++  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
++  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
++
++  \DeclareUnicodeCharacter{0170}{\H{U}}
++  \DeclareUnicodeCharacter{0171}{\H{u}}
++  \DeclareUnicodeCharacter{0174}{\^W}
++  \DeclareUnicodeCharacter{0175}{\^w}
++  \DeclareUnicodeCharacter{0176}{\^Y}
++  \DeclareUnicodeCharacter{0177}{\^y}
++  \DeclareUnicodeCharacter{0178}{\"Y}
++  \DeclareUnicodeCharacter{0179}{\'Z}
++  \DeclareUnicodeCharacter{017A}{\'z}
++  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
++  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
++  \DeclareUnicodeCharacter{017D}{\v{Z}}
++  \DeclareUnicodeCharacter{017E}{\v{z}}
++
++  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
++  \DeclareUnicodeCharacter{01C5}{D\v{z}}
++  \DeclareUnicodeCharacter{01C6}{d\v{z}}
++  \DeclareUnicodeCharacter{01C7}{LJ}
++  \DeclareUnicodeCharacter{01C8}{Lj}
++  \DeclareUnicodeCharacter{01C9}{lj}
++  \DeclareUnicodeCharacter{01CA}{NJ}
++  \DeclareUnicodeCharacter{01CB}{Nj}
++  \DeclareUnicodeCharacter{01CC}{nj}
++  \DeclareUnicodeCharacter{01CD}{\v{A}}
++  \DeclareUnicodeCharacter{01CE}{\v{a}}
++  \DeclareUnicodeCharacter{01CF}{\v{I}}
++
++  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
++  \DeclareUnicodeCharacter{01D1}{\v{O}}
++  \DeclareUnicodeCharacter{01D2}{\v{o}}
++  \DeclareUnicodeCharacter{01D3}{\v{U}}
++  \DeclareUnicodeCharacter{01D4}{\v{u}}
++
++  \DeclareUnicodeCharacter{01E2}{\={\AE}}
++  \DeclareUnicodeCharacter{01E3}{\={\ae}}
++  \DeclareUnicodeCharacter{01E6}{\v{G}}
++  \DeclareUnicodeCharacter{01E7}{\v{g}}
++  \DeclareUnicodeCharacter{01E8}{\v{K}}
++  \DeclareUnicodeCharacter{01E9}{\v{k}}
++
++  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
++  \DeclareUnicodeCharacter{01F1}{DZ}
++  \DeclareUnicodeCharacter{01F2}{Dz}
++  \DeclareUnicodeCharacter{01F3}{dz}
++  \DeclareUnicodeCharacter{01F4}{\'G}
++  \DeclareUnicodeCharacter{01F5}{\'g}
++  \DeclareUnicodeCharacter{01F8}{\`N}
++  \DeclareUnicodeCharacter{01F9}{\`n}
++  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
++  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
++  \DeclareUnicodeCharacter{01FE}{\'{\O}}
++  \DeclareUnicodeCharacter{01FF}{\'{\o}}
++
++  \DeclareUnicodeCharacter{021E}{\v{H}}
++  \DeclareUnicodeCharacter{021F}{\v{h}}
++
++  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
++  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
++  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
++  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
++  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
++  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
++
++  \DeclareUnicodeCharacter{0232}{\=Y}
++  \DeclareUnicodeCharacter{0233}{\=y}
++  \DeclareUnicodeCharacter{0237}{\dotless{j}}
++
++  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
++  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
++  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
++  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
++  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
++  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
++  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
++  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
++  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
++  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
++  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
++  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
++
++  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
++  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
++
++  \DeclareUnicodeCharacter{1E20}{\=G}
++  \DeclareUnicodeCharacter{1E21}{\=g}
++  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
++  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
++  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
++  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
++  \DeclareUnicodeCharacter{1E26}{\"H}
++  \DeclareUnicodeCharacter{1E27}{\"h}
++
++  \DeclareUnicodeCharacter{1E30}{\'K}
++  \DeclareUnicodeCharacter{1E31}{\'k}
++  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
++  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
++  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
++  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
++  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
++  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
++  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
++  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
++  \DeclareUnicodeCharacter{1E3E}{\'M}
++  \DeclareUnicodeCharacter{1E3F}{\'m}
 +
-+% Choose a heading macro
-+% #1 is heading type
-+% #2 is heading level
-+% #3 is text for heading
-+\def\genhead#1#2#3{%
-+  % Compute the abs. sec. level:
-+  \absseclevel=#2
-+  \advance\absseclevel by \secbase
-+  % Make sure \absseclevel doesn't fall outside the range:
-+  \ifnum \absseclevel < 0
-+    \absseclevel = 0
-   \else
--    \numberedsubsubseczzz{#2}
-+    \ifnum \absseclevel > 3
-+      \absseclevel = 3
-+    \fi
-   \fi
--\fi
--}
--
--% like \numhead, but chooses appendix heading levels
--\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
--\ifcase\absseclevel
--  \appendixzzz{#2}
--\or
--  \appendixsectionzzz{#2}
--\or
--  \appendixsubseczzz{#2}
--\or
--  \appendixsubsubseczzz{#2}
--\else
--  \ifnum \absseclevel<0
--    \appendixzzz{#2}
-+  % The heading type:
-+  \def\headtype{#1}%
-+  \if \headtype U%
-+    \ifnum \absseclevel < \unmlevel
-+      \chardef\unmlevel = \absseclevel
-+    \fi
-   \else
--    \appendixsubsubseczzz{#2}
-+    % Check for appendix sections:
-+    \ifnum \absseclevel = 0
-+      \edef\chapheadtype{\headtype}%
-+    \else
-+      \if \headtype A\if \chapheadtype N%
-+	\errmessage{@appendix... within a non-appendix chapter}%
-+      \fi\fi
-+    \fi
-+    % Check for numbered within unnumbered:
-+    \ifnum \absseclevel > \unmlevel
-+      \def\headtype{U}%
-+    \else
-+      \chardef\unmlevel = 3
-+    \fi
-   \fi
--\fi
--}
--
--% like \numhead, but chooses numberless heading levels
--\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
--\ifcase\absseclevel
--  \unnumberedzzz{#2}
--\or
--  \unnumberedseczzz{#2}
--\or
--  \unnumberedsubseczzz{#2}
--\or
--  \unnumberedsubsubseczzz{#2}
--\else
--  \ifnum \absseclevel<0
--    \unnumberedzzz{#2}
-+  % Now print the heading:
-+  \if \headtype U%
-+    \ifcase\absseclevel
-+	\unnumberedzzz{#3}%
-+    \or \unnumberedseczzz{#3}%
-+    \or \unnumberedsubseczzz{#3}%
-+    \or \unnumberedsubsubseczzz{#3}%
-+    \fi
-   \else
--    \unnumberedsubsubseczzz{#2}
-+    \if \headtype A%
-+      \ifcase\absseclevel
-+	  \appendixzzz{#3}%
-+      \or \appendixsectionzzz{#3}%
-+      \or \appendixsubseczzz{#3}%
-+      \or \appendixsubsubseczzz{#3}%
-+      \fi
-+    \else
-+      \ifcase\absseclevel
-+	  \chapterzzz{#3}%
-+      \or \seczzz{#3}%
-+      \or \numberedsubseczzz{#3}%
-+      \or \numberedsubsubseczzz{#3}%
-+      \fi
-+    \fi
-   \fi
--\fi
-+  \suppressfirstparagraphindent
- }
- 
--% @chapter, @appendix, @unnumbered.
--\def\thischaptername{No Chapter Title}
--\outer\def\chapter{\parsearg\chapteryyy}
--\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
--\def\chapterzzz #1{%
--\secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
--\chapmacro {#1}{\the\chapno}%
--\gdef\thissection{#1}%
--\gdef\thischaptername{#1}%
--% We don't substitute the actual chapter name into \thischapter
--% because we don't want its macros evaluated now.
--\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
--                                  {\the\chapno}}}%
--\temp
--\donoderef
--\global\let\section = \numberedsec
--\global\let\subsection = \numberedsubsec
--\global\let\subsubsection = \numberedsubsubsec
-+% an interface:
-+\def\numhead{\genhead N}
-+\def\apphead{\genhead A}
-+\def\unnmhead{\genhead U}
++  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
++  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
++  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
++  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
++  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
++  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
++  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
++  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
++  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
++  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
 +
-+% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
-+% all lower-level sectioning counters to zero.
-+%
-+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
-+% (e.g., figures), q.v.  By default (before any chapter), that is empty.
-+\let\chaplevelprefix = \empty
-+%
-+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
-+\def\chapterzzz#1{%
-+  % section resetting is \global in case the chapter is in a group, such
-+  % as an @include file.
-+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-+    \global\advance\chapno by 1
-+  %
-+  % Used for \float.
-+  \gdef\chaplevelprefix{\the\chapno.}%
-+  \resetallfloatnos
-+  %
-+  \message{\putwordChapter\space \the\chapno}%
-+  %
-+  % Write the actual heading.
-+  \chapmacro{#1}{Ynumbered}{\the\chapno}%
-+  %
-+  % So @section and the like are numbered underneath this chapter.
-+  \global\let\section = \numberedsec
-+  \global\let\subsection = \numberedsubsec
-+  \global\let\subsubsection = \numberedsubsubsec
- }
- 
--\outer\def\appendix{\parsearg\appendixyyy}
--\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
--\def\appendixzzz #1{%
--\secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \appendixno by 1
--\message{\putwordAppendix\space \appendixletter}%
--\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
--\gdef\thissection{#1}%
--\gdef\thischaptername{#1}%
--\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
--                       {\putwordAppendix{} \appendixletter}}}%
--\temp
--\appendixnoderef
--\global\let\section = \appendixsec
--\global\let\subsection = \appendixsubsec
--\global\let\subsubsection = \appendixsubsubsec
-+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
-+\def\appendixzzz#1{%
-+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-+    \global\advance\appendixno by 1
-+  \gdef\chaplevelprefix{\appendixletter.}%
-+  \resetallfloatnos
-+  %
-+  \def\appendixnum{\putwordAppendix\space \appendixletter}%
-+  \message{\appendixnum}%
-+  %
-+  \chapmacro{#1}{Yappendix}{\appendixletter}%
-+  %
-+  \global\let\section = \appendixsec
-+  \global\let\subsection = \appendixsubsec
-+  \global\let\subsubsection = \appendixsubsubsec
++  \DeclareUnicodeCharacter{1E54}{\'P}
++  \DeclareUnicodeCharacter{1E55}{\'p}
++  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
++  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
++  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
++  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
++  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
++  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
++  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
++  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
++
++  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
++  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
++  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
++  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
++  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
++  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
++  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
++  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
++  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
++  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
++
++  \DeclareUnicodeCharacter{1E7C}{\~V}
++  \DeclareUnicodeCharacter{1E7D}{\~v}
++  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
++  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
++
++  \DeclareUnicodeCharacter{1E80}{\`W}
++  \DeclareUnicodeCharacter{1E81}{\`w}
++  \DeclareUnicodeCharacter{1E82}{\'W}
++  \DeclareUnicodeCharacter{1E83}{\'w}
++  \DeclareUnicodeCharacter{1E84}{\"W}
++  \DeclareUnicodeCharacter{1E85}{\"w}
++  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
++  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
++  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
++  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
++  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
++  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
++  \DeclareUnicodeCharacter{1E8C}{\"X}
++  \DeclareUnicodeCharacter{1E8D}{\"x}
++  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
++  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
++
++  \DeclareUnicodeCharacter{1E90}{\^Z}
++  \DeclareUnicodeCharacter{1E91}{\^z}
++  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
++  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
++  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
++  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
++  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
++  \DeclareUnicodeCharacter{1E97}{\"t}
++  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
++  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
++
++  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
++  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
++
++  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
++  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
++  \DeclareUnicodeCharacter{1EBC}{\~E}
++  \DeclareUnicodeCharacter{1EBD}{\~e}
++
++  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
++  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
++  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
++  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
++
++  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
++  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
++
++  \DeclareUnicodeCharacter{1EF2}{\`Y}
++  \DeclareUnicodeCharacter{1EF3}{\`y}
++  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
++
++  \DeclareUnicodeCharacter{1EF8}{\~Y}
++  \DeclareUnicodeCharacter{1EF9}{\~y}
++
++  \DeclareUnicodeCharacter{2013}{--}
++  \DeclareUnicodeCharacter{2014}{---}
++  \DeclareUnicodeCharacter{2018}{\quoteleft}
++  \DeclareUnicodeCharacter{2019}{\quoteright}
++  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
++  \DeclareUnicodeCharacter{201C}{\quotedblleft}
++  \DeclareUnicodeCharacter{201D}{\quotedblright}
++  \DeclareUnicodeCharacter{201E}{\quotedblbase}
++  \DeclareUnicodeCharacter{2022}{\bullet}
++  \DeclareUnicodeCharacter{2026}{\dots}
++  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
++  \DeclareUnicodeCharacter{203A}{\guilsinglright}
++  \DeclareUnicodeCharacter{20AC}{\euro}
++
++  \DeclareUnicodeCharacter{2192}{\expansion}
++  \DeclareUnicodeCharacter{21D2}{\result}
++
++  \DeclareUnicodeCharacter{2212}{\minus}
++  \DeclareUnicodeCharacter{2217}{\point}
++  \DeclareUnicodeCharacter{2261}{\equiv}
++}% end of \utfeightchardefs
++
++
++% US-ASCII character definitions.
++\def\asciichardefs{% nothing need be done
++   \relax
 +}
 +
-+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-+\def\unnumberedzzz#1{%
-+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-+    \global\advance\unnumberedno by 1
-+  %
-+  % Since an unnumbered has no number, no prefix for figures.
-+  \global\let\chaplevelprefix = \empty
-+  \resetallfloatnos
-+  %
-+  % This used to be simply \message{#1}, but TeX fully expands the
-+  % argument to \message.  Therefore, if #1 contained @-commands, TeX
-+  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-+  % expanded @cite (which turns out to cause errors because \cite is meant
-+  % to be executed, not expanded).
-+  %
-+  % Anyway, we don't want the fully-expanded definition of @cite to appear
-+  % as a result of the \message, we just want `@cite' itself.  We use
-+  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-+  % simply yielding the contents of <toks register>.  (We also do this for
-+  % the toc entries.)
-+  \toks0 = {#1}%
-+  \message{(\the\toks0)}%
-+  %
-+  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
-+  %
-+  \global\let\section = \unnumberedsec
-+  \global\let\subsection = \unnumberedsubsec
-+  \global\let\subsubsection = \unnumberedsubsubsec
- }
++% Make non-ASCII characters printable again for compatibility with
++% existing Texinfo documents that may use them, even without declaring a
++% document encoding.
++%
++\setnonasciicharscatcode \other
++
++
++\message{formatting,}
++
+ \newdimen\defaultparindent \defaultparindent = 15pt
  
- % @centerchap is like @unnumbered, but the heading is centered.
--\outer\def\centerchap{\parsearg\centerchapyyy}
--\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-+\outer\parseargdef\centerchap{%
-+  % Well, we could do the following in a group, but that would break
-+  % an assumption that \chapmacro is called at the outermost level.
-+  % Thus we are safer this way:		--kasal, 24feb04
-+  \let\centerparametersmaybe = \centerparameters
-+  \unnmhead0{#1}%
-+  \let\centerparametersmaybe = \relax
-+}
+ \chapheadingskip = 15pt plus 4pt minus 2pt
+@@ -5695,7 +8621,7 @@
+ % Don't be so finicky about underfull hboxes, either.
+ \hbadness = 2000
  
- % @top is like @unnumbered.
--\outer\def\top{\parsearg\unnumberedyyy}
--
--\outer\def\unnumbered{\parsearg\unnumberedyyy}
--\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
--\def\unnumberedzzz #1{%
--\secno=0 \subsecno=0 \subsubsecno=0
--%
--% This used to be simply \message{#1}, but TeX fully expands the
--% argument to \message.  Therefore, if #1 contained @-commands, TeX
--% expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
--% expanded @cite (which turns out to cause errors because \cite is meant
--% to be executed, not expanded).
--%
--% Anyway, we don't want the fully-expanded definition of @cite to appear
--% as a result of the \message, we just want `@cite' itself.  We use
--% \the<toks register> to achieve this: TeX expands \the<toks> only once,
--% simply yielding the contents of <toks register>.  (We also do this for
--% the toc entries.)
--\toks0 = {#1}\message{(\the\toks0)}%
--%
--\unnumbchapmacro {#1}%
--\gdef\thischapter{#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
--\temp
--\unnumbnoderef
--\global\let\section = \unnumberedsec
--\global\let\subsection = \unnumberedsubsec
--\global\let\subsubsection = \unnumberedsubsubsec
--}
-+\let\top\unnumbered
+-% Following George Bush, just get rid of widows and orphans.
++% Following George Bush, get rid of widows and orphans.
+ \widowpenalty=10000
+ \clubpenalty=10000
  
- % Sections.
--\outer\def\numberedsec{\parsearg\secyyy}
--\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
--\def\seczzz #1{%
--\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
--\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
--                                  {\the\chapno}{\the\secno}}}%
--\temp
--\donoderef
--\nobreak
-+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
-+\def\seczzz#1{%
-+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-+  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+@@ -5713,11 +8639,14 @@
+   \fi
  }
  
--\outer\def\appendixsection{\parsearg\appendixsecyyy}
--\outer\def\appendixsec{\parsearg\appendixsecyyy}
--\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
--\def\appendixsectionzzz #1{%
--\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
--\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
--                                  {\appendixletter}{\the\secno}}}%
--\temp
--\appendixnoderef
--\nobreak
-+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
-+\def\appendixsectionzzz#1{%
-+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-+  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+-% 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can
+-% set \parskip and call \setleading for \baselineskip.
++% Parameters in order: 1) textheight; 2) textwidth;
++% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
++% 7) physical page height; 8) physical page width.
+ %
+-\def\internalpagesizes#1#2#3#4#5#6{%
++% We also call \setleading{\textleading}, so the caller should define
++% \textleading.  The caller should also set \parskip.
++%
++\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+   \voffset = #3\relax
+   \topskip = #6\relax
+   \splittopskip = \topskip
+@@ -5736,6 +8665,17 @@
+   \normaloffset = #4\relax
+   \bindingoffset = #5\relax
+   %
++  \ifpdf
++    \pdfpageheight #7\relax
++    \pdfpagewidth #8\relax
++    % if we don't reset these, they will remain at "1 true in" of
++    % whatever layout pdftex was dumped with.
++    \pdfhorigin = 1 true in
++    \pdfvorigin = 1 true in
++  \fi
++  %
++  \setleading{\textleading}
++  %
+   \parindent = \defaultparindent
+   \setemergencystretch
  }
-+\let\appendixsec\appendixsection
+@@ -5743,76 +8683,140 @@
+ % @letterpaper (the default).
+ \def\letterpaper{{\globaldefs = 1
+   \parskip = 3pt plus 2pt minus 1pt
+-  \setleading{13.2pt}%
++  \textleading = 13.2pt
+   %
+   % If page is nothing but text, make it come out even.
+-  \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
++  \internalpagesizes{607.2pt}{6in}% that's 46 lines
++                    {\voffset}{.25in}%
++                    {\bindingoffset}{36pt}%
++                    {11in}{8.5in}%
+ }}
+ 
+-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
++% Use @smallbook to reset parameters for 7x9.25 trim size.
+ \def\smallbook{{\globaldefs = 1
+   \parskip = 2pt plus 1pt
+-  \setleading{12pt}%
++  \textleading = 12pt
+   %
+-  \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
++  \internalpagesizes{7.5in}{5in}%
++                    {-.2in}{0in}%
++                    {\bindingoffset}{16pt}%
++                    {9.25in}{7in}%
+   %
+   \lispnarrowing = 0.3in
+   \tolerance = 700
+   \hfuzz = 1pt
+   \contentsrightmargin = 0pt
+-  \deftypemargin = 0pt
+   \defbodyindent = .5cm
++}}
++
++% Use @smallerbook to reset parameters for 6x9 trim size.
++% (Just testing, parameters still in flux.)
++\def\smallerbook{{\globaldefs = 1
++  \parskip = 1.5pt plus 1pt
++  \textleading = 12pt
+   %
+-  \let\smalldisplay = \smalldisplayx
+-  \let\smallexample = \smalllispx
+-  \let\smallformat = \smallformatx
+-  \let\smalllisp = \smalllispx
++  \internalpagesizes{7.4in}{4.8in}%
++                    {-.2in}{-.4in}%
++                    {0pt}{14pt}%
++                    {9in}{6in}%
++  %
++  \lispnarrowing = 0.25in
++  \tolerance = 700
++  \hfuzz = 1pt
++  \contentsrightmargin = 0pt
++  \defbodyindent = .4cm
+ }}
  
--\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
--\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
--\def\unnumberedseczzz #1{%
--\plainsecheading {#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
--\temp
--\unnumbnoderef
--\nobreak
-+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
-+\def\unnumberedseczzz#1{%
-+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-+  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
- }
+ % Use @afourpaper to print on European A4 paper.
+ \def\afourpaper{{\globaldefs = 1
+-  \setleading{12pt}%
+   \parskip = 3pt plus 2pt minus 1pt
++  \textleading = 13.2pt
+   %
+-  \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
++  % Double-side printing via postscript on Laserjet 4050
++  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
++  % To change the settings for a different printer or situation, adjust
++  % \normaloffset until the front-side and back-side texts align.  Then
++  % do the same for \bindingoffset.  You can set these for testing in
++  % your texinfo source file like this:
++  % @tex
++  % \global\normaloffset = -6mm
++  % \global\bindingoffset = 10mm
++  % @end tex
++  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
++                    {\voffset}{\hoffset}%
++                    {\bindingoffset}{44pt}%
++                    {297mm}{210mm}%
+   %
+   \tolerance = 700
+   \hfuzz = 1pt
++  \contentsrightmargin = 0pt
++  \defbodyindent = 5mm
+ }}
  
- % Subsections.
--\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
--\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
--\def\numberedsubseczzz #1{%
--\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
--\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
--                                    {\the\chapno}{\the\secno}{\the\subsecno}}}%
--\temp
--\donoderef
--\nobreak
-+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
-+\def\numberedsubseczzz#1{%
-+  \global\subsubsecno=0  \global\advance\subsecno by 1
-+  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
- }
+-% A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
+-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
+-\def\afourlatex{{\globaldefs = 1
+-  \setleading{13.6pt}%
++% Use @afivepaper to print on European A5 paper.
++% From romildo at urano.iceb.ufop.br, 2 July 2000.
++% He also recommends making @example and @lisp be small.
++\def\afivepaper{{\globaldefs = 1
++  \parskip = 2pt plus 1pt minus 0.1pt
++  \textleading = 12.5pt
+   %
++  \internalpagesizes{160mm}{120mm}%
++                    {\voffset}{\hoffset}%
++                    {\bindingoffset}{8pt}%
++                    {210mm}{148mm}%
++  %
++  \lispnarrowing = 0.2in
++  \tolerance = 800
++  \hfuzz = 1.2pt
++  \contentsrightmargin = 0pt
++  \defbodyindent = 2mm
++  \tableindent = 12mm
++}}
++
++% A specific text layout, 24x15cm overall, intended for A4 paper.
++\def\afourlatex{{\globaldefs = 1
+   \afourpaper
+-  \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
++  \internalpagesizes{237mm}{150mm}%
++                    {\voffset}{4.6mm}%
++                    {\bindingoffset}{7mm}%
++                    {297mm}{210mm}%
+   %
++  % Must explicitly reset to 0 because we call \afourpaper.
+   \globaldefs = 0
+ }}
  
--\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
--\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
--\def\appendixsubseczzz #1{%
--\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
--\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
--                                {\appendixletter}{\the\secno}{\the\subsecno}}}%
--\temp
--\appendixnoderef
--\nobreak
-+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
-+\def\appendixsubseczzz#1{%
-+  \global\subsubsecno=0  \global\advance\subsecno by 1
-+  \sectionheading{#1}{subsec}{Yappendix}%
-+                 {\appendixletter.\the\secno.\the\subsecno}%
- }
+-% Use @afourwide to print on European A4 paper in wide format.
+-\def\afourwide{%
++% Use @afourwide to print on A4 paper in landscape format.
++\def\afourwide{{\globaldefs = 1
+   \afourpaper
+-  \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
+-  %
++  \internalpagesizes{241mm}{165mm}%
++                    {\voffset}{-2.95mm}%
++                    {\bindingoffset}{7mm}%
++                    {297mm}{210mm}%
+   \globaldefs = 0
+-}
++}}
  
--\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
--\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
--\def\unnumberedsubseczzz #1{%
--\plainsubsecheading {#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
--                                    {\the\toks0}}}%
--\temp
--\unnumbnoderef
--\nobreak
-+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-+\def\unnumberedsubseczzz#1{%
-+  \global\subsubsecno=0  \global\advance\subsecno by 1
-+  \sectionheading{#1}{subsec}{Ynothing}%
-+                 {\the\unnumberedno.\the\secno.\the\subsecno}%
- }
+ % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+ % Perhaps we should allow setting the margins, \topskip, \parskip,
+ % and/or leading, also. Or perhaps we should compute them somehow.
+ %
+-\def\pagesizes{\parsearg\pagesizesxxx}
+-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
++\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+ \def\pagesizesyyy#1,#2,#3\finish{{%
+   \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+   \globaldefs = 1
+   %
+   \parskip = 3pt plus 2pt minus 1pt
+-  \setleading{13.2pt}%
++  \setleading{\textleading}%
+   %
+-  \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
++  \dimen0 = #1\relax
++  \advance\dimen0 by \voffset
++  %
++  \dimen2 = \hsize
++  \advance\dimen2 by \normaloffset
++  %
++  \internalpagesizes{#1}{\hsize}%
++                    {\voffset}{\normaloffset}%
++                    {\bindingoffset}{44pt}%
++                    {\dimen0}{\dimen2}%
+ }}
  
- % Subsubsections.
--\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
--\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
--\def\numberedsubsubseczzz #1{%
--\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
--\subsubsecheading {#1}
--  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
--  {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
--\temp
--\donoderef
--\nobreak
-+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
-+\def\numberedsubsubseczzz#1{%
-+  \global\advance\subsubsecno by 1
-+  \sectionheading{#1}{subsubsec}{Ynumbered}%
-+                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
- }
+ % Set default to letter.
+@@ -5840,10 +8844,10 @@
+ \def\normalless{<}
+ \def\normalgreater{>}
+ \def\normalplus{+}
+-\def\normaldollar{$}
++\def\normaldollar{$}%$ font-lock fix
  
--\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
--\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
--\def\appendixsubsubseczzz #1{%
--\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
--\subsubsecheading {#1}
--  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
--  {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
--\temp
--\appendixnoderef
--\nobreak
-+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
-+\def\appendixsubsubseczzz#1{%
-+  \global\advance\subsubsecno by 1
-+  \sectionheading{#1}{subsubsec}{Yappendix}%
-+                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
- }
+-% This macro is used to make a character print one way in ttfont
+-% where it can probably just be output, and another way in other fonts,
++% This macro is used to make a character print one way in \tt
++% (where it can probably be output as-is), and another way in other fonts,
+ % where something hairier probably needs to be done.
+ %
+ % #1 is what to print if we are indeed using \tt; #2 is what to print
+@@ -5875,8 +8879,9 @@
  
--\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
--\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
--\def\unnumberedsubsubseczzz #1{%
--\plainsubsubsecheading {#1}\gdef\thissection{#1}%
--\toks0 = {#1}%
--\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
--                                    {\the\toks0}}}%
--\temp
--\unnumbnoderef
--\nobreak
-+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-+\def\unnumberedsubsubseczzz#1{%
-+  \global\advance\subsubsecno by 1
-+  \sectionheading{#1}{subsubsec}{Ynothing}%
-+                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
- }
+ \catcode`\_=\active
+ \def_{\ifusingtt\normalunderscore\_}
++\let\realunder=_
+ % Subroutine for the previous macro.
+-\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
++\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
  
--% These are variants which are not "outer", so they can appear in @ifinfo.
--% Actually, they should now be obsolete; ordinary section commands should work.
--\def\infotop{\parsearg\unnumberedzzz}
--\def\infounnumbered{\parsearg\unnumberedzzz}
--\def\infounnumberedsec{\parsearg\unnumberedseczzz}
--\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
--\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
--
--\def\infoappendix{\parsearg\appendixzzz}
--\def\infoappendixsec{\parsearg\appendixseczzz}
--\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
--\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+ \catcode`\|=\active
+ \def|{{\tt\char124}}
+@@ -5889,16 +8894,7 @@
+ \catcode`\+=\active
+ \def+{{\tt \char 43}}
+ \catcode`\$=\active
+-\def${\ifusingit{{\sl\$}}\normaldollar}
+-%\catcode 27=\active
+-%\def^^[{$\diamondsuit$}
 -
--\def\infochapter{\parsearg\chapterzzz}
--\def\infosection{\parsearg\sectionzzz}
--\def\infosubsection{\parsearg\subsectionzzz}
--\def\infosubsubsection{\parsearg\subsubsectionzzz}
+-% Set up an active definition for =, but don't enable it most of the time.
+-{\catcode`\==\active
+-\global\def={{\tt \char 61}}}
 -
- % These macros control what the section commands do, according
- % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
- % Define them by default for a numbered chapter.
--\global\let\section = \numberedsec
--\global\let\subsection = \numberedsubsec
--\global\let\subsubsection = \numberedsubsubsec
-+\let\section = \numberedsec
-+\let\subsection = \numberedsubsec
-+\let\subsubsection = \numberedsubsubsec
+-\catcode`+=\active
+-\catcode`\_=\active
++\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
  
- % Define @majorheading, @heading and @subheading
+ % If a .fmt file is being used, characters that might appear in a file
+ % name cannot be active until we have parsed the command line.
+@@ -5906,46 +8902,53 @@
+ % \otherifyactive is called near the end of this file.
+ \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
  
-@@ -3588,23 +5062,27 @@
- %          if justification is not attempted.  Hence \raggedright.
+-\catcode`\@=0
++% Used sometimes to turn off (effectively) the active characters even after
++% parsing them.
++\def\turnoffactive{%
++  \normalturnoffactive
++  \otherbackslash
++}
  
+-% \rawbackslashxx output one backslash character in current font
+-\global\chardef\rawbackslashxx=`\\
+-%{\catcode`\\=\other
+-%@gdef at rawbackslashxx{\}}
++\catcode`\@=0
  
--\def\majorheading{\parsearg\majorheadingzzz}
--\def\majorheadingzzz #1{%
--{\advance\chapheadingskip by 10pt \chapbreak }%
--{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
--                  \parindent=0pt\raggedright
--                  \rm #1\hfill}}\bigskip \par\penalty 200}
-+\def\majorheading{%
-+  {\advance\chapheadingskip by 10pt \chapbreak }%
-+  \parsearg\chapheadingzzz
-+}
+-% \rawbackslash redefines \ as input to do \rawbackslashxx.
+-{\catcode`\\=\active
+- at gdef@rawbackslash{@let\=@rawbackslashxx }}
++% \backslashcurfont outputs one backslash character in current font,
++% as in \char`\\.
++\global\chardef\backslashcurfont=`\\
++\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
  
--\def\chapheading{\parsearg\chapheadingzzz}
--\def\chapheadingzzz #1{\chapbreak %
--{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
--                  \parindent=0pt\raggedright
--                  \rm #1\hfill}}\bigskip \par\penalty 200}
-+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
-+\def\chapheadingzzz#1{%
-+  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-+                    \parindent=0pt\raggedright
-+                    \rm #1\hfill}}%
-+  \bigskip \par\penalty 200\relax
-+  \suppressfirstparagraphindent
+-% \normalbackslash outputs one backslash in fixed width font.
+-\def\normalbackslash{{\tt\rawbackslashxx}}
++% \realbackslash is an actual character `\' with catcode other, and
++% \doublebackslash is two of them (for the pdf outlines).
++{\catcode`\\=\other @gdef at realbackslash{\} @gdef at doublebackslash{\\}}
+ 
+-% \catcode 17=0   % Define control-q
++% In texinfo, backslash is an active character; it prints the backslash
++% in fixed width font.
+ \catcode`\\=\active
++ at def@normalbackslash{{@tt at backslashcurfont}}
++% On startup, @fixbackslash assigns:
++%  @let \ = @normalbackslash
+ 
+-% Used sometimes to turn off (effectively) the active characters
+-% even after parsing them.
+- at def@turnoffactive{@let"=@normaldoublequote
+- at let\=@realbackslash
+- at let~=@normaltilde
+- at let^=@normalcaret
+- at let_=@normalunderscore
+- at let|=@normalverticalbar
+- at let<=@normalless
+- at let>=@normalgreater
+- at let+=@normalplus
+- at let$=@normaldollar}
++% \rawbackslash defines an active \ to do \backslashcurfont.
++% \otherbackslash defines an active \ to be a literal `\' character with
++% catcode other.
++ at gdef@rawbackslash{@let\=@backslashcurfont}
++ at gdef@otherbackslash{@let\=@realbackslash}
+ 
+- at def@normalturnoffactive{@let"=@normaldoublequote
+- at let\=@normalbackslash
+- at let~=@normaltilde
+- at let^=@normalcaret
+- at let_=@normalunderscore
+- at let|=@normalverticalbar
+- at let<=@normalless
+- at let>=@normalgreater
+- at let+=@normalplus
+- at let$=@normaldollar}
++% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
++% the literal character `\'.
++% 
++ at def@normalturnoffactive{%
++  @let\=@normalbackslash
++  @let"=@normaldoublequote
++  @let~=@normaltilde
++  @let^=@normalcaret
++  @let_=@normalunderscore
++  @let|=@normalverticalbar
++  @let<=@normalless
++  @let>=@normalgreater
++  @let+=@normalplus
++  @let$=@normaldollar %$ font-lock fix
++  @unsepspaces
 +}
  
- % @heading, @subheading, @subsubheading.
--\def\heading{\parsearg\plainsecheading}
--\def\subheading{\parsearg\plainsubsecheading}
--\def\subsubheading{\parsearg\plainsubsubsecheading}
-+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
-+  \suppressfirstparagraphindent}
-+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
-+  \suppressfirstparagraphindent}
-+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
-+  \suppressfirstparagraphindent}
+ % Make _ and + \other characters, temporarily.
+ % This is canceled by @fixbackslash.
+@@ -5959,9 +8962,9 @@
+ @global at let\ = @eatinput
  
- % These macros generate a chapter, section, etc. heading only
- % (including whitespace, linebreaking, etc. around it),
-@@ -3613,8 +5091,6 @@
- %%% Args are the skip and penalty (usually negative)
- \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+ % On the other hand, perhaps the file did not have a `\input texinfo'. Then
+-% the first `\{ in the file would cause an error. This macro tries to fix
++% the first `\' in the file would cause an error. This macro tries to fix
+ % that, assuming it is called before the first `\' could plausibly occur.
+-% Also back turn on active characters that might appear in the input
++% Also turn back on active characters that might appear in the input
+ % file name, in case not using a pre-dumped format.
+ %
+ @gdef at fixbackslash{%
+@@ -5973,15 +8976,11 @@
+ % Say @foo, not \foo, in error messages.
+ @escapechar = `@@
  
--\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+-% These look ok in all fonts, so just make them not special.  
++% These look ok in all fonts, so just make them not special.
+ @catcode`@& = @other
+ @catcode`@# = @other
+ @catcode`@% = @other
+ 
+- at c Set initial fonts.
+- at textfonts
+- at rm
 -
- %%% Define plain chapter starts, and page on/off switching for it
- % Parameter controlling skip before chapter headings (if needed)
  
-@@ -3622,7 +5098,20 @@
+ @c Local variables:
+ @c eval: (add-hook 'write-file-hooks 'time-stamp)
+@@ -5990,3 +8989,9 @@
+ @c time-stamp-format: "%:y-%02m-%02d.%02H"
+ @c time-stamp-end: "}"
+ @c End:
++
++ at c vim:sw=2:
++
++ at ignore
++   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
++ at end ignore
+--- ./ltmain.sh.orig	2002-08-08 23:49:32.000000000 -0600
++++ ./ltmain.sh	2012-01-09 20:36:31.000000000 -0700
+@@ -1,199 +1,928 @@
+-# ltmain.sh - Provide generalized library-building support services.
+-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
+-#
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+-# Free Software Foundation, Inc.
+-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+-#
+-# This program is free software; you can redistribute it and/or modify
++
++# libtool (GNU libtool) 2.4
++# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
++# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++# This is free software; see the source for copying conditions.  There is NO
++# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++# GNU Libtool 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 program is distributed in the hope that it will be useful, but
++# As a special exception to the GNU General Public License,
++# if you distribute this file as part of a program or library that
++# is built using GNU Libtool, you may include this file under the
++# same distribution terms that you use for the rest of that program.
++#
++# GNU Libtool 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, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++# along with GNU Libtool; see the file COPYING.  If not, a copy
++# can be downloaded from http://www.gnu.org/licenses/gpl.html,
++# or obtained by writing to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++# Usage: $progname [OPTION]... [MODE-ARG]...
+ #
+-# As a special exception to the GNU General Public License, if you
+-# distribute this file as part of a program that contains a
+-# configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# Provide generalized library-building support services.
++#
++#       --config             show all configuration variables
++#       --debug              enable verbose shell tracing
++#   -n, --dry-run            display commands without modifying any files
++#       --features           display basic configuration information and exit
++#       --mode=MODE          use operation mode MODE
++#       --preserve-dup-deps  don't remove duplicate dependency libraries
++#       --quiet, --silent    don't print informational messages
++#       --no-quiet, --no-silent
++#                            print informational messages (default)
++#       --tag=TAG            use configuration variables from tag TAG
++#   -v, --verbose            print more informational messages than default
++#       --no-verbose         don't print the extra informational messages
++#       --version            print version information
++#   -h, --help, --help-all   print short, long, or detailed help message
++#
++# MODE must be one of the following:
++#
++#         clean              remove files from the build directory
++#         compile            compile a source file into a libtool object
++#         execute            automatically set library path, then run a program
++#         finish             complete the installation of libtool libraries
++#         install            install libraries or executables
++#         link               create a library or an executable
++#         uninstall          remove libraries from an installed directory
++#
++# MODE-ARGS vary depending on the MODE.  When passed as first option,
++# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
++# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
++#
++# When reporting a bug, please describe a test case to reproduce it and
++# include the following information:
++#
++#         host-triplet:	$host
++#         shell:		$SHELL
++#         compiler:		$LTCC
++#         compiler flags:		$LTCFLAGS
++#         linker:		$LD (gnu? $with_gnu_ld)
++#         $progname:	(GNU libtool) 2.4
++#         automake:	$automake_version
++#         autoconf:	$autoconf_version
++#
++# Report bugs to <bug-libtool at gnu.org>.
++# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
++# General help using GNU software: <http://www.gnu.org/gethelp/>.
+ 
+-# Check that we have a working $echo.
+-if test "X$1" = X--no-reexec; then
+-  # Discard the --no-reexec flag, and continue.
+-  shift
+-elif test "X$1" = X--fallback-echo; then
+-  # Avoid inline document here, it may be left over
+-  :
+-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+-  # Yippee, $echo works!
+-  :
++PROGRAM=libtool
++PACKAGE=libtool
++VERSION=2.4
++TIMESTAMP=""
++package_revision=1.3293
++
++# Be Bourne compatible
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
+ else
+-  # Restart under the correct shell, and then maybe $echo will work.
+-  exec $SHELL "$0" --no-reexec ${1+"$@"}
++  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+ fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
  
- \def\chapbreak{\dobreak \chapheadingskip {-4000}}
- \def\chappager{\par\vfill\supereject}
--\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-+% Because \domark is called before \chapoddpage, the filler page will
-+% get the headings for the next chapter, which is wrong.  But we don't
-+% care -- we just disable all headings on the filler page.
-+\def\chapoddpage{%
-+  \chappager
-+  \ifodd\pageno \else
-+    \begingroup
-+      \evenheadline={\hfil}\evenfootline={\hfil}%
-+      \oddheadline={\hfil}\oddfootline={\hfil}%
-+      \hbox to 0pt{}%
-+      \chappager
-+    \endgroup
-+  \fi
+-if test "X$1" = X--fallback-echo; then
+-  # used as fallback echo
+-  shift
+-  cat <<EOF
+-$*
+-EOF
+-  exit 0
+-fi
++# A function that is used when there is no print builtin or printf.
++func_fallback_echo ()
++{
++  eval 'cat <<_LTECHO_EOF
++$1
++_LTECHO_EOF'
 +}
  
- \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
- 
-@@ -3637,7 +5126,7 @@
- \global\let\pagealignmacro=\chappager
- \global\def\HEADINGSon{\HEADINGSsingle}}
- 
--\def\CHAPPAGodd{
-+\def\CHAPPAGodd{%
- \global\let\contentsalignmacro = \chapoddpage
- \global\let\pchapsepmacro=\chapoddpage
- \global\let\pagealignmacro=\chapoddpage
-@@ -3645,107 +5134,275 @@
- 
- \CHAPPAGon
+-# The name of this program.
+-progname=`$echo "$0" | sed 's%^.*/%%'`
+-modename="$progname"
++# NLS nuisances: We save the old values to restore during execute mode.
++lt_user_locale=
++lt_safe_locale=
++for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++do
++  eval "if test \"\${$lt_var+set}\" = set; then
++          save_$lt_var=\$$lt_var
++          $lt_var=C
++	  export $lt_var
++	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
++	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
++	fi"
++done
++LC_ALL=C
++LANGUAGE=C
++export LANGUAGE LC_ALL
  
--\def\CHAPFplain{
--\global\let\chapmacro=\chfplain
--\global\let\unnumbchapmacro=\unnchfplain
--\global\let\centerchapmacro=\centerchfplain}
--
--% Plain chapter opening.
--% #1 is the text, #2 the chapter number or empty if unnumbered.
--\def\chfplain#1#2{%
-+% Chapter opening.
-+%
-+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
-+% Yappendix, Yomitfromtoc), #3 the chapter number.
-+%
-+% To test against our argument.
-+\def\Ynothingkeyword{Ynothing}
-+\def\Yomitfromtockeyword{Yomitfromtoc}
-+\def\Yappendixkeyword{Yappendix}
-+%
-+\def\chapmacro#1#2#3{%
-+  % Insert the first mark before the heading break (see notes for \domark).
-+  \let\prevchapterdefs=\lastchapterdefs
-+  \let\prevsectiondefs=\lastsectiondefs
-+  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
-+                        \gdef\thissection{}}%
-+  %
-+  \def\temptype{#2}%
-+  \ifx\temptype\Ynothingkeyword
-+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-+                          \gdef\thischapter{\thischaptername}}%
-+  \else\ifx\temptype\Yomitfromtockeyword
-+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-+                          \gdef\thischapter{}}%
-+  \else\ifx\temptype\Yappendixkeyword
-+    \toks0={#1}%
-+    \xdef\lastchapterdefs{%
-+      \gdef\noexpand\thischaptername{\the\toks0}%
-+      \gdef\noexpand\thischapternum{\appendixletter}%
-+      \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum:
-+                                 \noexpand\thischaptername}%
-+    }%
-+  \else
-+    \toks0={#1}%
-+    \xdef\lastchapterdefs{%
-+      \gdef\noexpand\thischaptername{\the\toks0}%
-+      \gdef\noexpand\thischapternum{\the\chapno}%
-+      \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum:
-+                                 \noexpand\thischaptername}%
-+    }%
-+  \fi\fi\fi
-+  %
-+  % Output the mark.  Pass it through \safewhatsit, to take care of
-+  % the preceding space.
-+  \safewhatsit\domark
-+  %
-+  % Insert the chapter heading break.
-   \pchapsepmacro
-+  %
-+  % Now the second mark, after the heading break.  No break points
-+  % between here and the heading.
-+  \let\prevchapterdefs=\lastchapterdefs
-+  \let\prevsectiondefs=\lastsectiondefs
-+  \domark
-+  %
-   {%
-     \chapfonts \rm
--    \def\chapnum{#2}%
--    \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
-+    %
-+    % Have to define \lastsection before calling \donoderef, because the
-+    % xref code eventually uses it.  On the other hand, it has to be called
-+    % after \pchapsepmacro, or the headline will change too soon.
-+    \gdef\lastsection{#1}%
-+    %
-+    % Only insert the separating space if we have a chapter/appendix
-+    % number, and don't print the unnumbered ``number''.
-+    \ifx\temptype\Ynothingkeyword
-+      \setbox0 = \hbox{}%
-+      \def\toctype{unnchap}%
-+    \else\ifx\temptype\Yomitfromtockeyword
-+      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
-+      \def\toctype{omit}%
-+    \else\ifx\temptype\Yappendixkeyword
-+      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
-+      \def\toctype{app}%
-+    \else
-+      \setbox0 = \hbox{#3\enspace}%
-+      \def\toctype{numchap}%
-+    \fi\fi\fi
-+    %
-+    % Write the toc entry for this chapter.  Must come before the
-+    % \donoderef, because we include the current node name in the toc
-+    % entry, and \donoderef resets it to empty.
-+    \writetocentry{\toctype}{#1}{#3}%
-+    %
-+    % For pdftex, we have to write out the node definition (aka, make
-+    % the pdfdest) after any page break, but before the actual text has
-+    % been typeset.  If the destination for the pdf outline is after the
-+    % text, then jumping from the outline may wind up with the text not
-+    % being visible, for instance under high magnification.
-+    \donoderef{#2}%
-+    %
-+    % Typeset the actual heading.
-+    \nobreak % Avoid page breaks at the interline glue.
-     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
--          \hangindent = \wd0 \centerparametersmaybe
-+          \hangindent=\wd0 \centerparametersmaybe
-           \unhbox0 #1\par}%
-   }%
-   \nobreak\bigskip % no page break after a chapter title
-   \nobreak
- }
+-# Constants.
+-PROGRAM=ltmain.sh
+-PACKAGE=libtool
+-VERSION=1.4a-GCC3.0
+-TIMESTAMP=" (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)"
++$lt_unset CDPATH
  
--% Plain opening for unnumbered.
--\def\unnchfplain#1{\chfplain{#1}{}}
--
- % @centerchap -- centered and unnumbered.
- \let\centerparametersmaybe = \relax
--\def\centerchfplain#1{{%
--  \def\centerparametersmaybe{%
--    \advance\rightskip by 3\rightskip
--    \leftskip = \rightskip
--    \parfillskip = 0pt
--  }%
--  \chfplain{#1}{}%
--}}
-+\def\centerparameters{%
-+  \advance\rightskip by 3\rightskip
-+  \leftskip = \rightskip
-+  \parfillskip = 0pt
+-default_mode=
+-help="Try \`$progname --help' for more information."
+-magic="%%%MAGIC variable%%%"
+-mkdir="mkdir"
+-mv="mv -f"
+-rm="rm -f"
+ 
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-Xsed='sed -e 1s/^X//'
+-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+-SP2NL='tr \040 \012'
+-NL2SP='tr \015\012 \040\040'
++# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
++# is ksh but when the shell is invoked as "sh" and the current value of
++# the _XPG environment variable is not equal to 1 (one), the special
++# positional parameter $0, within a function call, is the name of the
++# function.
++progpath="$0"
+ 
+-# NLS nuisances.
+-# Only set LANG and LC_ALL to C if already set.
+-# These must not be set unconditionally because not all systems understand
+-# e.g. LANG=C (notably SCO).
+-# We save the old values to restore during execute mode.
+-if test "${LC_ALL+set}" = set; then
+-  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+-fi
+-if test "${LANG+set}" = set; then
+-  save_LANG="$LANG"; LANG=C; export LANG
+-fi
+ 
+-if test "$LTCONFIG_VERSION" != "$VERSION"; then
+-  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
+-  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+-  exit 1
+-fi
+ 
+-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+-  echo "$modename: not configured to build any kind of library" 1>&2
+-  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+-  exit 1
+-fi
++: ${CP="cp -f"}
++test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
++: ${EGREP="/bin/grep -E"}
++: ${FGREP="/bin/grep -F"}
++: ${GREP="/bin/grep"}
++: ${LN_S="ln -s"}
++: ${MAKE="make"}
++: ${MKDIR="mkdir"}
++: ${MV="mv -f"}
++: ${RM="rm -f"}
++: ${SED="/bin/sed"}
++: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
++: ${Xsed="$SED -e 1s/^X//"}
+ 
+-# Global variables.
+-mode=$default_mode
+-nonopt=
+-prev=
+-prevopt=
+-run=
+-show="$echo"
+-show_help=
+-execute_dlfiles=
+-lo2o="s/\\.lo\$/.${objext}/"
+-o2lo="s/\\.${objext}\$/.lo/"
+-taglist=
++# Global variables:
++EXIT_SUCCESS=0
++EXIT_FAILURE=1
++EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
++EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+ 
+-# Parse our command line options once, thoroughly.
+-while test $# -gt 0
+-do
+-  arg="$1"
+-  shift
++exit_status=$EXIT_SUCCESS
+ 
+-  case $arg in
+-  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+-  *) optarg= ;;
+-  esac
++# Make sure IFS has a sensible default
++lt_nl='
++'
++IFS=" 	$lt_nl"
+ 
+-  # If the previous option needs an argument, assign it.
+-  if test -n "$prev"; then
+-    case $prev in
+-    execute_dlfiles)
+-      execute_dlfiles="$execute_dlfiles $arg"
++dirname="s,/[^/]*$,,"
++basename="s,^.*/,,"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
++    if test "X$func_dirname_result" = "X${1}"; then
++      func_dirname_result="${3}"
++    else
++      func_dirname_result="$func_dirname_result${2}"
++    fi
++} # func_dirname may be replaced by extended shell implementation
++
++
++# func_basename file
++func_basename ()
++{
++    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
++} # func_basename may be replaced by extended shell implementation
++
++
++# func_dirname_and_basename file append nondir_replacement
++# perform func_basename and func_dirname in a single function
++# call:
++#   dirname:  Compute the dirname of FILE.  If nonempty,
++#             add APPEND to the result, otherwise set result
++#             to NONDIR_REPLACEMENT.
++#             value returned in "$func_dirname_result"
++#   basename: Compute filename of FILE.
++#             value retuned in "$func_basename_result"
++# Implementation must be kept synchronized with func_dirname
++# and func_basename. For efficiency, we do not delegate to
++# those functions but instead duplicate the functionality here.
++func_dirname_and_basename ()
++{
++    # Extract subdirectory from the argument.
++    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
++    if test "X$func_dirname_result" = "X${1}"; then
++      func_dirname_result="${3}"
++    else
++      func_dirname_result="$func_dirname_result${2}"
++    fi
++    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
++} # func_dirname_and_basename may be replaced by extended shell implementation
++
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++    case ${2} in
++      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
++      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
++    esac
++} # func_stripname may be replaced by extended shell implementation
++
++
++# These SED scripts presuppose an absolute path with a trailing slash.
++pathcar='s,^/\([^/]*\).*$,\1,'
++pathcdr='s,^/[^/]*,,'
++removedotparts=':dotsl
++		s@/\./@/@g
++		t dotsl
++		s,/\.$,/,'
++collapseslashes='s@/\{1,\}@/@g'
++finalslash='s,/*$,/,'
++
++# func_normal_abspath PATH
++# Remove doubled-up and trailing slashes, "." path components,
++# and cancel out any ".." path components in PATH after making
++# it an absolute path.
++#             value returned in "$func_normal_abspath_result"
++func_normal_abspath ()
++{
++  # Start from root dir and reassemble the path.
++  func_normal_abspath_result=
++  func_normal_abspath_tpath=$1
++  func_normal_abspath_altnamespace=
++  case $func_normal_abspath_tpath in
++    "")
++      # Empty path, that just means $cwd.
++      func_stripname '' '/' "`pwd`"
++      func_normal_abspath_result=$func_stripname_result
++      return
++    ;;
++    # The next three entries are used to spot a run of precisely
++    # two leading slashes without using negated character classes;
++    # we take advantage of case's first-match behaviour.
++    ///*)
++      # Unusual form of absolute path, do nothing.
++    ;;
++    //*)
++      # Not necessarily an ordinary path; POSIX reserves leading '//'
++      # and for example Cygwin uses it to access remote file shares
++      # over CIFS/SMB, so we conserve a leading double slash if found.
++      func_normal_abspath_altnamespace=/
++    ;;
++    /*)
++      # Absolute path, do nothing.
++    ;;
++    *)
++      # Relative path, prepend $cwd.
++      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
++    ;;
++  esac
++  # Cancel out all the simple stuff to save iterations.  We also want
++  # the path to end with a slash for ease of parsing, so make sure
++  # there is one (and only one) here.
++  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
++        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
++  while :; do
++    # Processed it all yet?
++    if test "$func_normal_abspath_tpath" = / ; then
++      # If we ascended to the root using ".." the result may be empty now.
++      if test -z "$func_normal_abspath_result" ; then
++        func_normal_abspath_result=/
++      fi
++      break
++    fi
++    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
++        -e "$pathcar"`
++    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
++        -e "$pathcdr"`
++    # Figure out what to do with it
++    case $func_normal_abspath_tcomponent in
++      "")
++        # Trailing empty path component, ignore it.
+       ;;
+-    tag)
+-      tagname="$arg"
++      ..)
++        # Parent dir; strip last assembled component from result.
++        func_dirname "$func_normal_abspath_result"
++        func_normal_abspath_result=$func_dirname_result
++      ;;
++      *)
++        # Actual path component, append it.
++        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
++      ;;
++    esac
++  done
++  # Restore leading double-slash if one was found on entry.
++  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 +}
  
--\CHAPFplain % The default
- 
-+% I don't think this chapter style is supported any more, so I'm not
-+% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
-+%
-+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-+%
- \def\unnchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                        \parindent=0pt\raggedright
-                        \rm #1\hfill}}\bigskip \par\nobreak
- }
--
- \def\chfopen #1#2{\chapoddpage {\chapfonts
- \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
- \par\penalty 5000 %
- }
--
- \def\centerchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                        \parindent=0pt
-                        \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
- }
--
--\def\CHAPFopen{
--\global\let\chapmacro=\chfopen
--\global\let\unnumbchapmacro=\unnchfopen
--\global\let\centerchapmacro=\centerchfopen}
-+\def\CHAPFopen{%
-+  \global\let\chapmacro=\chfopen
-+  \global\let\centerchapmacro=\centerchfopen}
- 
- 
--% Section titles.
-+% Section titles.  These macros combine the section number parts and
-+% call the generic \sectionheading to do the printing.
-+%
- \newskip\secheadingskip
--\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
--\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
--\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
- 
- % Subsection titles.
--\newskip \subsecheadingskip
--\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
--\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
--\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-+\newskip\subsecheadingskip
-+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
- 
- % Subsubsection titles.
--\let\subsubsecheadingskip = \subsecheadingskip
--\let\subsubsecheadingbreak = \subsecheadingbreak
--\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
--\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
-+\def\subsubsecheadingskip{\subsecheadingskip}
-+\def\subsubsecheadingbreak{\subsecheadingbreak}
- 
+-      # Check whether tagname contains only valid characters
+-      case $tagname in
+-      *[!-_A-Za-z0-9,/]*)
+-	echo "$progname: invalid tag name: $tagname" 1>&2
+-	exit 1
+-        ;;
+-      esac
++# func_relative_path SRCDIR DSTDIR
++# generates a relative path from SRCDIR to DSTDIR, with a trailing
++# slash if non-empty, suitable for immediately appending a filename
++# without needing to append a separator.
++#             value returned in "$func_relative_path_result"
++func_relative_path ()
++{
++  func_relative_path_result=
++  func_normal_abspath "$1"
++  func_relative_path_tlibdir=$func_normal_abspath_result
++  func_normal_abspath "$2"
++  func_relative_path_tbindir=$func_normal_abspath_result
  
--% Print any size section title.
-+% Print any size, any type, section title.
- %
--% #1 is the section type (sec/subsec/subsubsec), #2 is the section
--% number (maybe empty), #3 the text.
--\def\sectionheading#1#2#3{%
--  {%
--    \expandafter\advance\csname #1headingskip\endcsname by \parskip
--    \csname #1headingbreak\endcsname
--  }%
-+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
-+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
-+% section number.
-+%
-+\def\seckeyword{sec}
-+%
-+\def\sectionheading#1#2#3#4{%
-   {%
-     % Switch to the right set of fonts.
--    \csname #1fonts\endcsname \rm
-+    \csname #2fonts\endcsname \rm
-     %
--    % Only insert the separating space if we have a section number.
--    \def\secnum{#2}%
--    \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
-+    \def\sectionlevel{#2}%
-+    \def\temptype{#3}%
-+    %
-+    % Insert first mark before the heading break (see notes for \domark).
-+    \let\prevsectiondefs=\lastsectiondefs
-+    \ifx\temptype\Ynothingkeyword
-+      \ifx\sectionlevel\seckeyword
-+        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
-+                              \gdef\thissection{\thissectionname}}%
-+      \fi
-+    \else\ifx\temptype\Yomitfromtockeyword
-+      % Don't redefine \thissection.
-+    \else\ifx\temptype\Yappendixkeyword
-+      \ifx\sectionlevel\seckeyword
-+        \toks0={#1}%
-+        \xdef\lastsectiondefs{%
-+          \gdef\noexpand\thissectionname{\the\toks0}%
-+          \gdef\noexpand\thissectionnum{#4}%
-+          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
-+                                     \noexpand\thissectionname}%
-+        }%
-+      \fi
-+    \else
-+      \ifx\sectionlevel\seckeyword
-+        \toks0={#1}%
-+        \xdef\lastsectiondefs{%
-+          \gdef\noexpand\thissectionname{\the\toks0}%
-+          \gdef\noexpand\thissectionnum{#4}%
-+          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
-+                                     \noexpand\thissectionname}%
-+        }%
-+      \fi
-+    \fi\fi\fi
-+    %
-+    % Output the mark.  Pass it through \safewhatsit, to take care of
-+    % the preceding space.
-+    \safewhatsit\domark
-+    %
-+    % Insert space above the heading.
-+    \csname #2headingbreak\endcsname
-+    %
-+    % Now the second mark, after the heading break.  No break points
-+    % between here and the heading.
-+    \let\prevsectiondefs=\lastsectiondefs
-+    \domark
-+    %
-+    % Only insert the space after the number if we have a section number.
-+    \ifx\temptype\Ynothingkeyword
-+      \setbox0 = \hbox{}%
-+      \def\toctype{unn}%
-+      \gdef\lastsection{#1}%
-+    \else\ifx\temptype\Yomitfromtockeyword
-+      % for @headings -- no section number, don't include in toc,
-+      % and don't redefine \lastsection.
-+      \setbox0 = \hbox{}%
-+      \def\toctype{omit}%
-+      \let\sectionlevel=\empty
-+    \else\ifx\temptype\Yappendixkeyword
-+      \setbox0 = \hbox{#4\enspace}%
-+      \def\toctype{app}%
-+      \gdef\lastsection{#1}%
-+    \else
-+      \setbox0 = \hbox{#4\enspace}%
-+      \def\toctype{num}%
-+      \gdef\lastsection{#1}%
-+    \fi\fi\fi
-+    %
-+    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
-+    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
-+    %
-+    % Write the node reference (= pdf destination for pdftex).
-+    % Again, see comments in \chapmacro.
-+    \donoderef{#3}%
-+    %
-+    % Interline glue will be inserted when the vbox is completed.
-+    % That glue will be a valid breakpoint for the page, since it'll be
-+    % preceded by a whatsit (usually from the \donoderef, or from the
-+    % \writetocentry if there was no node).  We don't want to allow that
-+    % break, since then the whatsits could end up on page n while the
-+    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
-+    \nobreak
-     %
-+    % Output the actual section heading.
-     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
--          \hangindent = \wd0 % zero if no section number
--          \unhbox0 #3}%
-+          \hangindent=\wd0  % zero if no section number
-+          \unhbox0 #1}%
-   }%
--  \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak
-+  % Add extra space after the heading -- half of whatever came above it.
-+  % Don't allow stretch, though.
-+  \kern .5 \csname #2headingskip\endcsname
-+  %
-+  % Do not let the kern be a potential breakpoint, as it would be if it
-+  % was followed by glue.
-+  \nobreak
-+  %
-+  % We'll almost certainly start a paragraph next, so don't let that
-+  % glue accumulate.  (Not a breakpoint because it's preceded by a
-+  % discardable item.)
-+  \vskip-\parskip
-+  % 
-+  % This is purely so the last item on the list is a known \penalty >
-+  % 10000.  This is so \startdefun can avoid allowing breakpoints after
-+  % section headings.  Otherwise, it would insert a valid breakpoint between:
-+  % 
-+  %   @section sec-whatever
-+  %   @deffn def-whatever
-+  \penalty 10001
- }
+-      case $tagname in
+-      CC)
+-	# Don't test for the "default" C tag, as we know, it's there, but
+-	# not specially marked.
+-	taglist="$taglist $tagname"
+-	;;
++  # Ascend the tree starting from libdir
++  while :; do
++    # check if we have found a prefix of bindir
++    case $func_relative_path_tbindir in
++      $func_relative_path_tlibdir)
++        # found an exact match
++        func_relative_path_tcancelled=
++        break
++        ;;
++      $func_relative_path_tlibdir*)
++        # found a matching prefix
++        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
++        func_relative_path_tcancelled=$func_stripname_result
++        if test -z "$func_relative_path_result"; then
++          func_relative_path_result=.
++        fi
++        break
++        ;;
+       *)
+-        if grep "^### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
+-          taglist="$taglist $tagname"
+-	  # Evaluate the configuration.
+-	  eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
+-        else
+-	  echo "$progname: ignoring unknown tag $tagname" 1>&2
++        func_dirname $func_relative_path_tlibdir
++        func_relative_path_tlibdir=${func_dirname_result}
++        if test "x$func_relative_path_tlibdir" = x ; then
++          # Have to descend all the way to the root!
++          func_relative_path_result=../$func_relative_path_result
++          func_relative_path_tcancelled=$func_relative_path_tbindir
++          break
+         fi
++        func_relative_path_result=../$func_relative_path_result
+         ;;
+-      esac
+-      ;;
+-    *)
+-      eval "$prev=\$arg"
+-      ;;
+     esac
++  done
  
+-    prev=
+-    prevopt=
+-    continue
++  # Now calculate path; take care to avoid doubling-up slashes.
++  func_stripname '' '/' "$func_relative_path_result"
++  func_relative_path_result=$func_stripname_result
++  func_stripname '/' '/' "$func_relative_path_tcancelled"
++  if test "x$func_stripname_result" != x ; then
++    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+   fi
  
-@@ -3754,161 +5411,224 @@
- \newwrite\tocfile
+-  # Have we seen a non-optional argument yet?
+-  case $arg in
+-  --help)
+-    show_help=yes
+-    ;;
++  # Normalisation. If bindir is libdir, return empty string,
++  # else relative path ending with a slash; either way, target
++  # file name can be directly appended.
++  if test ! -z "$func_relative_path_result"; then
++    func_stripname './' '' "$func_relative_path_result/"
++    func_relative_path_result=$func_stripname_result
++  fi
++}
  
- % Write an entry to the toc file, opening it if necessary.
--% Called from @chapter, etc.  We supply {\folio} at the end of the
--% argument, which will end up as the last argument to the \...entry macro.
-+% Called from @chapter, etc.
- %
--% We open the .toc file here instead of at @setfilename or any other
--% given time so that @contents can be put in the document anywhere.
-+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
-+% We append the current node name (if any) and page number as additional
-+% arguments for the \{chap,sec,...}entry macros which will eventually
-+% read this.  The node name is used in the pdf outlines as the
-+% destination to jump to.
-+%
-+% We open the .toc file for writing here instead of at @setfilename (or
-+% any other fixed time) so that @contents can be anywhere in the document.
-+% But if #1 is `omit', then we don't do anything.  This is used for the
-+% table of contents chapter openings themselves.
- %
- \newif\iftocfileopened
--\def\writetocentry#1{%
--  \iftocfileopened\else
--    \immediate\openout\tocfile = \jobname.toc
--    \global\tocfileopenedtrue
-+\def\omitkeyword{omit}%
-+%
-+\def\writetocentry#1#2#3{%
-+  \edef\writetoctype{#1}%
-+  \ifx\writetoctype\omitkeyword \else
-+    \iftocfileopened\else
-+      \immediate\openout\tocfile = \jobname.toc
-+      \global\tocfileopenedtrue
-+    \fi
-+    %
-+    \iflinks
-+      {\atdummies
-+       \edef\temp{%
-+         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
-+       \temp
-+      }%
-+    \fi
-   \fi
--  \iflinks \write\tocfile{#1{\folio}}\fi
-+  %
-+  % Tell \shipout to create a pdf destination on each page, if we're
-+  % writing pdf.  These are used in the table of contents.  We can't
-+  % just write one on every page because the title pages are numbered
-+  % 1 and 2 (the page numbers aren't printed), and so are the first
-+  % two pages of the document.  Thus, we'd have two destinations named
-+  % `1', and two named `2'.
-+  \ifpdf \global\pdfmakepagedesttrue \fi
+-  --version)
+-    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+-    exit 0
++# The name of this program:
++func_dirname_and_basename "$progpath"
++progname=$func_basename_result
++
++# Make sure we have an absolute path for reexecution:
++case $progpath in
++  [\\/]*|[A-Za-z]:\\*) ;;
++  *[\\/]*)
++     progdir=$func_dirname_result
++     progdir=`cd "$progdir" && pwd`
++     progpath="$progdir/$progname"
++     ;;
++  *)
++     save_IFS="$IFS"
++     IFS=:
++     for progdir in $PATH; do
++       IFS="$save_IFS"
++       test -x "$progdir/$progname" && break
++     done
++     IFS="$save_IFS"
++     test -n "$progdir" || progdir=`pwd`
++     progpath="$progdir/$progname"
++     ;;
++esac
++
++# Sed substitution that helps us do robust quoting.  It backslashifies
++# metacharacters that are still active within double-quoted strings.
++Xsed="${SED}"' -e 1s/^X//'
++sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
++
++# Same as above, but do not quote variable references.
++double_quote_subst='s/\(["`\\]\)/\\\1/g'
++
++# Sed substitution that turns a string into a regex matching for the
++# string literally.
++sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
++
++# Sed substitution that converts a w32 file name or path
++# which contains forward slashes, into one that contains
++# (escaped) backslashes.  A very naive implementation.
++lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
++
++# Re-`\' parameter expansions in output of double_quote_subst that were
++# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
++# in input to double_quote_subst, that '$' was protected from expansion.
++# Since each input `\' is now two `\'s, look for any number of runs of
++# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
++bs='\\'
++bs2='\\\\'
++bs4='\\\\\\\\'
++dollar='\$'
++sed_double_backslash="\
++  s/$bs4/&\\
++/g
++  s/^$bs2$dollar/$bs&/
++  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
++  s/\n//g"
++
++# Standard options:
++opt_dry_run=false
++opt_help=false
++opt_quiet=false
++opt_verbose=false
++opt_warning=:
++
++# func_echo arg...
++# Echo program name prefixed message, along with the current mode
++# name if it has been set yet.
++func_echo ()
++{
++    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
++}
++
++# func_verbose arg...
++# Echo program name prefixed message in verbose mode only.
++func_verbose ()
++{
++    $opt_verbose && func_echo ${1+"$@"}
++
++    # A bug in bash halts the script if the last line of a function
++    # fails when set -e is in force, so we need another command to
++    # work around that:
++    :
++}
++
++# func_echo_all arg...
++# Invoke $ECHO with all args, space-separated.
++func_echo_all ()
++{
++    $ECHO "$*"
++}
++
++# func_error arg...
++# Echo program name prefixed message to standard error.
++func_error ()
++{
++    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
++}
++
++# func_warning arg...
++# Echo program name prefixed warning message to standard error.
++func_warning ()
++{
++    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
++
++    # bash bug again:
++    :
++}
++
++# func_fatal_error arg...
++# Echo program name prefixed message to standard error, and exit.
++func_fatal_error ()
++{
++    func_error ${1+"$@"}
++    exit $EXIT_FAILURE
++}
++
++# func_fatal_help arg...
++# Echo program name prefixed message to standard error, followed by
++# a help hint, and exit.
++func_fatal_help ()
++{
++    func_error ${1+"$@"}
++    func_fatal_error "$help"
++}
++help="Try \`$progname --help' for more information."  ## default
++
++
++# func_grep expression filename
++# Check whether EXPRESSION matches any line of FILENAME, without output.
++func_grep ()
++{
++    $GREP "$1" "$2" >/dev/null 2>&1
++}
++
++
++# func_mkdir_p directory-path
++# Make sure the entire path to DIRECTORY-PATH is available.
++func_mkdir_p ()
++{
++    my_directory_path="$1"
++    my_dir_list=
++
++    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
++
++      # Protect directory names starting with `-'
++      case $my_directory_path in
++        -*) my_directory_path="./$my_directory_path" ;;
++      esac
++
++      # While some portion of DIR does not yet exist...
++      while test ! -d "$my_directory_path"; do
++        # ...make a list in topmost first order.  Use a colon delimited
++	# list incase some portion of path contains whitespace.
++        my_dir_list="$my_directory_path:$my_dir_list"
++
++        # If the last portion added has no slash in it, the list is done
++        case $my_directory_path in */*) ;; *) break ;; esac
++
++        # ...otherwise throw away the child directory and loop
++        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
++      done
++      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
++
++      save_mkdir_p_IFS="$IFS"; IFS=':'
++      for my_dir in $my_dir_list; do
++	IFS="$save_mkdir_p_IFS"
++        # mkdir can fail with a `File exist' error if two processes
++        # try to create one of the directories concurrently.  Don't
++        # stop in that case!
++        $MKDIR "$my_dir" 2>/dev/null || :
++      done
++      IFS="$save_mkdir_p_IFS"
++
++      # Bail out if we (or some other process) failed to create a directory.
++      test -d "$my_directory_path" || \
++        func_fatal_error "Failed to create \`$1'"
++    fi
++}
++
++
++# func_mktempdir [string]
++# Make a temporary directory that won't clash with other running
++# libtool processes, and avoids race conditions if possible.  If
++# given, STRING is the basename for that directory.
++func_mktempdir ()
++{
++    my_template="${TMPDIR-/tmp}/${1-$progname}"
++
++    if test "$opt_dry_run" = ":"; then
++      # Return a directory name, but don't create it in dry-run mode
++      my_tmpdir="${my_template}-$$"
++    else
++
++      # If mktemp works, use that first and foremost
++      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
++
++      if test ! -d "$my_tmpdir"; then
++        # Failing that, at least try and use $RANDOM to avoid a race
++        my_tmpdir="${my_template}-${RANDOM-0}$$"
++
++        save_mktempdir_umask=`umask`
++        umask 0077
++        $MKDIR "$my_tmpdir"
++        umask $save_mktempdir_umask
++      fi
++
++      # If we're not in dry-run mode, bomb out on failure
++      test -d "$my_tmpdir" || \
++        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
++    fi
++
++    $ECHO "$my_tmpdir"
++}
++
++
++# func_quote_for_eval arg
++# Aesthetically quote ARG to be evaled later.
++# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
++# is double-quoted, suitable for a subsequent eval, whereas
++# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
++# which are still active within double quotes backslashified.
++func_quote_for_eval ()
++{
++    case $1 in
++      *[\\\`\"\$]*)
++	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
++      *)
++        func_quote_for_eval_unquoted_result="$1" ;;
++    esac
++
++    case $func_quote_for_eval_unquoted_result in
++      # Double-quote args containing shell metacharacters to delay
++      # word splitting, command substitution and and variable
++      # expansion for a subsequent eval.
++      # Many Bourne shells cannot handle close brackets correctly
++      # in scan sets, so we specify it separately.
++      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
++        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
++        ;;
++      *)
++        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
++    esac
++}
++
++
++# func_quote_for_expand arg
++# Aesthetically quote ARG to be evaled later; same as above,
++# but do not quote variable references.
++func_quote_for_expand ()
++{
++    case $1 in
++      *[\\\`\"]*)
++	my_arg=`$ECHO "$1" | $SED \
++	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
++      *)
++        my_arg="$1" ;;
++    esac
++
++    case $my_arg in
++      # Double-quote args containing shell metacharacters to delay
++      # word splitting and command substitution for a subsequent eval.
++      # Many Bourne shells cannot handle close brackets correctly
++      # in scan sets, so we specify it separately.
++      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
++        my_arg="\"$my_arg\""
++        ;;
++    esac
++
++    func_quote_for_expand_result="$my_arg"
++}
++
++
++# func_show_eval cmd [fail_exp]
++# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
++# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
++# is given, then evaluate it.
++func_show_eval ()
++{
++    my_cmd="$1"
++    my_fail_exp="${2-:}"
++
++    ${opt_silent-false} || {
++      func_quote_for_expand "$my_cmd"
++      eval "func_echo $func_quote_for_expand_result"
++    }
++
++    if ${opt_dry_run-false}; then :; else
++      eval "$my_cmd"
++      my_status=$?
++      if test "$my_status" -eq 0; then :; else
++	eval "(exit $my_status); $my_fail_exp"
++      fi
++    fi
++}
++
++
++# func_show_eval_locale cmd [fail_exp]
++# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
++# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
++# is given, then evaluate it.  Use the saved locale for evaluation.
++func_show_eval_locale ()
++{
++    my_cmd="$1"
++    my_fail_exp="${2-:}"
++
++    ${opt_silent-false} || {
++      func_quote_for_expand "$my_cmd"
++      eval "func_echo $func_quote_for_expand_result"
++    }
++
++    if ${opt_dry_run-false}; then :; else
++      eval "$lt_user_locale
++	    $my_cmd"
++      my_status=$?
++      eval "$lt_safe_locale"
++      if test "$my_status" -eq 0; then :; else
++	eval "(exit $my_status); $my_fail_exp"
++      fi
++    fi
++}
++
++# func_tr_sh
++# Turn $1 into a string suitable for a shell variable name.
++# Result is stored in $func_tr_sh_result.  All characters
++# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
++# if $1 begins with a digit, a '_' is prepended as well.
++func_tr_sh ()
++{
++  case $1 in
++  [0-9]* | *[!a-zA-Z0-9_]*)
++    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+     ;;
++  * )
++    func_tr_sh_result=$1
++    ;;
++  esac
++}
++
++
++# func_version
++# Echo version message to standard output and exit.
++func_version ()
++{
++    $opt_debug
++
++    $SED -n '/(C)/!b go
++	:more
++	/\./!{
++	  N
++	  s/\n# / /
++	  b more
++	}
++	:go
++	/^# '$PROGRAM' (GNU /,/# warranty; / {
++        s/^# //
++	s/^# *$//
++        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
++        p
++     }' < "$progpath"
++     exit $?
++}
++
++# func_usage
++# Echo short help message to standard output and exit.
++func_usage ()
++{
++    $opt_debug
++
++    $SED -n '/^# Usage:/,/^#  *.*--help/ {
++        s/^# //
++	s/^# *$//
++	s/\$progname/'$progname'/
++	p
++    }' < "$progpath"
++    echo
++    $ECHO "run \`$progname --help | more' for full usage"
++    exit $?
++}
++
++# func_help [NOEXIT]
++# Echo long help message to standard output and exit,
++# unless 'noexit' is passed as argument.
++func_help ()
++{
++    $opt_debug
++
++    $SED -n '/^# Usage:/,/# Report bugs to/ {
++	:print
++        s/^# //
++	s/^# *$//
++	s*\$progname*'$progname'*
++	s*\$host*'"$host"'*
++	s*\$SHELL*'"$SHELL"'*
++	s*\$LTCC*'"$LTCC"'*
++	s*\$LTCFLAGS*'"$LTCFLAGS"'*
++	s*\$LD*'"$LD"'*
++	s/\$with_gnu_ld/'"$with_gnu_ld"'/
++	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
++	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
++	p
++	d
++     }
++     /^# .* home page:/b print
++     /^# General help using/b print
++     ' < "$progpath"
++    ret=$?
++    if test -z "$1"; then
++      exit $ret
++    fi
++}
++
++# func_missing_arg argname
++# Echo program name prefixed message to standard error and set global
++# exit_cmd.
++func_missing_arg ()
++{
++    $opt_debug
++
++    func_error "missing argument for $1."
++    exit_cmd=exit
 +}
 +
 +
-+% These characters do not print properly in the Computer Modern roman
-+% fonts, so we must take special care.  This is more or less redundant
-+% with the Texinfo input format setup at the end of this file.
-+% 
-+\def\activecatcodes{%
-+  \catcode`\"=\active
-+  \catcode`\$=\active
-+  \catcode`\<=\active
-+  \catcode`\>=\active
-+  \catcode`\\=\active
-+  \catcode`\^=\active
-+  \catcode`\_=\active
-+  \catcode`\|=\active
-+  \catcode`\~=\active
-+}
++# func_split_short_opt shortopt
++# Set func_split_short_opt_name and func_split_short_opt_arg shell
++# variables after splitting SHORTOPT after the 2nd character.
++func_split_short_opt ()
++{
++    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
++    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
 +
++    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
++    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
++} # func_split_short_opt may be replaced by extended shell implementation
 +
-+% Read the toc file, which is essentially Texinfo input.
-+\def\readtocfile{%
-+  \setupdatafile
-+  \activecatcodes
-+  \input \tocreadfilename
- }
- 
- \newskip\contentsrightmargin \contentsrightmargin=1in
- \newcount\savepageno
- \newcount\lastnegativepageno \lastnegativepageno = -1
- 
--% Finish up the main text and prepare to read what we've written
--% to \tocfile.
-+% Prepare to read what we've written to \tocfile.
- %
- \def\startcontents#1{%
--   % If @setchapternewpage on, and @headings double, the contents should
--   % start on an odd page, unlike chapters.  Thus, we maintain
--   % \contentsalignmacro in parallel with \pagealignmacro.
--   % From: Torbjorn Granlund <tege at matematik.su.se>
--   \contentsalignmacro
--   \immediate\closeout\tocfile
--   %
--   % Don't need to put `Contents' or `Short Contents' in the headline.
--   % It is abundantly clear what they are.
--   \unnumbchapmacro{#1}\def\thischapter{}%
--   \savepageno = \pageno
--   \begingroup                  % Set up to handle contents files properly.
--      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
--      % We can't do this, because then an actual ^ in a section
--      % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
--      %\catcode`\^=7 % to see ^^e4 as \"a etc. juha at piuha.ydi.vtt.fi
--      \raggedbottom             % Worry more about breakpoints than the bottom.
--      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
--      %
--      % Roman numerals for page numbers.
--      \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
-+  % If @setchapternewpage on, and @headings double, the contents should
-+  % start on an odd page, unlike chapters.  Thus, we maintain
-+  % \contentsalignmacro in parallel with \pagealignmacro.
-+  % From: Torbjorn Granlund <tege at matematik.su.se>
-+  \contentsalignmacro
-+  \immediate\closeout\tocfile
-+  %
-+  % Don't need to put `Contents' or `Short Contents' in the headline.
-+  % It is abundantly clear what they are.
-+  \chapmacro{#1}{Yomitfromtoc}{}%
-+  %
-+  \savepageno = \pageno
-+  \begingroup                  % Set up to handle contents files properly.
-+    \raggedbottom              % Worry more about breakpoints than the bottom.
-+    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-+    %
-+    % Roman numerals for page numbers.
-+    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
- }
- 
-+% redefined for the two-volume lispref.  We always output on
-+% \jobname.toc even if this is redefined.
-+% 
-+\def\tocreadfilename{\jobname.toc}
- 
- % Normal (long) toc.
-+%
- \def\contents{%
--   \startcontents{\putwordTOC}%
--     \openin 1 \jobname.toc
--     \ifeof 1 \else
--       \closein 1
--       \input \jobname.toc
--     \fi
--     \vfill \eject
--     \contentsalignmacro % in case @setchapternewpage odd is in effect
--     \pdfmakeoutlines
--   \endgroup
--   \lastnegativepageno = \pageno
--   \pageno = \savepageno
-+  \startcontents{\putwordTOC}%
-+    \openin 1 \tocreadfilename\space
-+    \ifeof 1 \else
-+      \readtocfile
-+    \fi
-+    \vfill \eject
-+    \contentsalignmacro % in case @setchapternewpage odd is in effect
-+    \ifeof 1 \else
-+      \pdfmakeoutlines
-+    \fi
-+    \closein 1
-+  \endgroup
-+  \lastnegativepageno = \pageno
-+  \global\pageno = \savepageno
- }
- 
- % And just the chapters.
- \def\summarycontents{%
--   \startcontents{\putwordShortTOC}%
--      %
--      \let\chapentry = \shortchapentry
--      \let\unnumbchapentry = \shortunnumberedentry
--      % We want a true roman here for the page numbers.
--      \secfonts
--      \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
--      \rm
--      \hyphenpenalty = 10000
--      \advance\baselineskip by 1pt % Open it up a little.
--      \def\secentry ##1##2##3##4{}
--      \def\unnumbsecentry ##1##2{}
--      \def\subsecentry ##1##2##3##4##5{}
--      \def\unnumbsubsecentry ##1##2{}
--      \def\subsubsecentry ##1##2##3##4##5##6{}
--      \def\unnumbsubsubsecentry ##1##2{}
--      \openin 1 \jobname.toc
--      \ifeof 1 \else
--        \closein 1
--        \input \jobname.toc
--      \fi
--     \vfill \eject
--     \contentsalignmacro % in case @setchapternewpage odd is in effect
--   \endgroup
--   \lastnegativepageno = \pageno
--   \pageno = \savepageno
-+  \startcontents{\putwordShortTOC}%
-+    %
-+    \let\numchapentry = \shortchapentry
-+    \let\appentry = \shortchapentry
-+    \let\unnchapentry = \shortunnchapentry
-+    % We want a true roman here for the page numbers.
-+    \secfonts
-+    \let\rm=\shortcontrm \let\bf=\shortcontbf
-+    \let\sl=\shortcontsl \let\tt=\shortconttt
-+    \rm
-+    \hyphenpenalty = 10000
-+    \advance\baselineskip by 1pt % Open it up a little.
-+    \def\numsecentry##1##2##3##4{}
-+    \let\appsecentry = \numsecentry
-+    \let\unnsecentry = \numsecentry
-+    \let\numsubsecentry = \numsecentry
-+    \let\appsubsecentry = \numsecentry
-+    \let\unnsubsecentry = \numsecentry
-+    \let\numsubsubsecentry = \numsecentry
-+    \let\appsubsubsecentry = \numsecentry
-+    \let\unnsubsubsecentry = \numsecentry
-+    \openin 1 \tocreadfilename\space
-+    \ifeof 1 \else
-+      \readtocfile
-+    \fi
-+    \closein 1
-+    \vfill \eject
-+    \contentsalignmacro % in case @setchapternewpage odd is in effect
-+  \endgroup
-+  \lastnegativepageno = \pageno
-+  \global\pageno = \savepageno
- }
- \let\shortcontents = \summarycontents
- 
--\ifpdf
--  \pdfcatalog{/PageMode /UseOutlines}%
--\fi
-+% Typeset the label for a chapter or appendix for the short contents.
-+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
-+%
-+\def\shortchaplabel#1{%
-+  % This space should be enough, since a single number is .5em, and the
-+  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-+  % But use \hss just in case.
-+  % (This space doesn't include the extra space that gets added after
-+  % the label; that gets put in by \shortchapentry above.)
-+  %
-+  % We'd like to right-justify chapter numbers, but that looks strange
-+  % with appendix letters.  And right-justifying numbers and
-+  % left-justifying letters looks strange when there is less than 10
-+  % chapters.  Have to read the whole toc once to know how many chapters
-+  % there are before deciding ...
-+  \hbox to 1em{#1\hss}%
++
++# func_split_long_opt longopt
++# Set func_split_long_opt_name and func_split_long_opt_arg shell
++# variables after splitting LONGOPT at the `=' sign.
++func_split_long_opt ()
++{
++    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
++    my_sed_long_arg='1s/^--[^=]*=//'
++
++    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
++    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
++} # func_split_long_opt may be replaced by extended shell implementation
++
++exit_cmd=:
++
++
++
++
++
++magic="%%%MAGIC variable%%%"
++magic_exe="%%%MAGIC EXE variable%%%"
++
++# Global variables.
++nonopt=
++preserve_args=
++lo2o="s/\\.lo\$/.${objext}/"
++o2lo="s/\\.${objext}\$/.lo/"
++extracted_archives=
++extracted_serial=0
++
++# If this variable is set in any of the actions, the command in it
++# will be execed at the end.  This prevents here-documents from being
++# left over by shells.
++exec_cmd=
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++    eval "${1}=\$${1}\${2}"
++} # func_append may be replaced by extended shell implementation
++
++# func_append_quoted var value
++# Quote VALUE and append to the end of shell variable VAR, separated
++# by a space.
++func_append_quoted ()
++{
++    func_quote_for_eval "${2}"
++    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
++} # func_append_quoted may be replaced by extended shell implementation
++
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++    func_arith_result=`expr "${@}"`
++} # func_arith may be replaced by extended shell implementation
++
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
++} # func_len may be replaced by extended shell implementation
++
++
++# func_lo2o object
++func_lo2o ()
++{
++    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
++} # func_lo2o may be replaced by extended shell implementation
++
++
++# func_xform libobj-or-source
++func_xform ()
++{
++    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
++} # func_xform may be replaced by extended shell implementation
++
++
++# func_fatal_configuration arg...
++# Echo program name prefixed message to standard error, followed by
++# a configuration failure hint, and exit.
++func_fatal_configuration ()
++{
++    func_error ${1+"$@"}
++    func_error "See the $PACKAGE documentation for more information."
++    func_fatal_error "Fatal configuration error."
 +}
++
++
++# func_config
++# Display the configuration for all the tags in this script.
++func_config ()
++{
++    re_begincf='^# ### BEGIN LIBTOOL'
++    re_endcf='^# ### END LIBTOOL'
++
++    # Default configuration.
++    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
  
- % These macros generate individual entries in the table of contents.
- % The first argument is the chapter or section name.
- % The last argument is the page number.
- % The arguments in between are the chapter number, section number, ...
+-  --config)
+-    sed -n -e '/^### BEGIN LIBTOOL CONFIG/,/^### END LIBTOOL CONFIG/p' < "$0"
+     # Now print the configurations for the tags.
+     for tagname in $taglist; do
+-      sed -n -e "/^### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
++      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+     done
+-    exit 0
+-    ;;
  
--% Chapter-level things, for both the long and short contents.
--\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+-  --debug)
+-    echo "$progname: enabling shell trace mode"
+-    set -x
+-    ;;
 -
--% See comments in \dochapentry re vbox and related settings
--\def\shortchapentry#1#2#3{%
--  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
-+% Chapters, in the main contents.
-+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-+%
-+% Chapters, in the short toc.
-+% See comments in \dochapentry re vbox and related settings.
-+\def\shortchapentry#1#2#3#4{%
-+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
- }
- 
--% Typeset the label for a chapter or appendix for the short contents.
--% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter.
--% We could simplify the code here by writing out an \appendixentry
--% command in the toc file for appendices, instead of using \chapentry
--% for both, but it doesn't seem worth it.
-+% Appendices, in the main contents.
-+% Need the word Appendix, and a fixed-size box.
- %
--\newdimen\shortappendixwidth
-+\def\appendixbox#1{%
-+  % We use M since it's probably the widest letter.
-+  \setbox0 = \hbox{\putwordAppendix{} M}%
-+  \hbox to \wd0{\putwordAppendix{} #1\hss}}
- %
--\def\shortchaplabel#1{%
--  % Compute width of word "Appendix", may change with language.
--  \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
--  \shortappendixwidth = \wd0
--  %
--  % We typeset #1 in a box of constant width, regardless of the text of
--  % #1, so the chapter titles will come out aligned.
--  \setbox0 = \hbox{#1}%
--  \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi
--  %
--  % This space should be plenty, since a single number is .5em, and the
--  % widest letter (M) is 1em, at least in the Computer Modern fonts.
--  % (This space doesn't include the extra space that gets added after
--  % the label; that gets put in by \shortchapentry above.)
--  \advance\dimen0 by 1.1em
--  \hbox to \dimen0{#1\hfil}%
--}
-+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
- 
--\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
--\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
-+% Unnumbered chapters.
-+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
-+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
- 
- % Sections.
--\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
--\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}}
-+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
-+\let\appsecentry=\numsecentry
-+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
- 
- % Subsections.
--\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
--\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
-+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
-+\let\appsubsecentry=\numsubsecentry
-+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
- 
- % And subsubsections.
--\def\subsubsecentry#1#2#3#4#5#6{%
--  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
--\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}}
-+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
-+\let\appsubsubsecentry=\numsubsubsecentry
-+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
- 
- % This parameter controls the indentation of the various levels.
--\newdimen\tocindent \tocindent = 3pc
-+% Same as \defaultparindent.
-+\newdimen\tocindent \tocindent = 15pt
- 
- % Now for the actual typesetting. In all these, #1 is the text and #2 is the
- % page number.
-@@ -3939,17 +5659,8 @@
-   \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
+-  --dry-run | -n)
+-    run=:
+-    ;;
++    exit $?
++}
  
--% Final typesetting of a toc entry; we use the same \entry macro as for
--% the index entries, but we want to suppress hyphenation here.  (We
--% can't do that in the \entry macro, since index entries might consist
--% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
--\def\tocentry#1#2{\begingroup
--  \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
--  % Do not use \turnoffactive in these arguments.  Since the toc is
--  % typeset in cmr, so characters such as _ would come out wrong; we
--  % have to do the usual translation tricks.
--  \entry{#1}{#2}%
--\endgroup}
-+% We use the same \entry macro as for the index entries.
-+\let\tocentry = \entry
+-  --features)
++# func_features
++# Display the features supported by this script.
++func_features ()
++{
+     echo "host: $host"
+     if test "$build_libtool_libs" = yes; then
+       echo "enable shared libraries"
+@@ -205,349 +934,1184 @@
+     else
+       echo "disable static libraries"
+     fi
+-    exit 0
+-    ;;
  
- % Space between chapter (or whatever) number and the title.
- \def\labelspace{\hskip1em \relax}
-@@ -3959,72 +5670,62 @@
+-  --finish) mode="finish" ;;
++    exit $?
++}
  
- \def\chapentryfonts{\secfonts \rm}
- \def\secentryfonts{\textfonts}
--\let\subsecentryfonts = \textfonts
--\let\subsubsecentryfonts = \textfonts
-+\def\subsecentryfonts{\textfonts}
-+\def\subsubsecentryfonts{\textfonts}
+-  --mode) prevopt="--mode" prev=mode ;;
+-  --mode=*) mode="$optarg" ;;
++# func_enable_tag tagname
++# Verify that TAGNAME is valid, and either flag an error and exit, or
++# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
++# variable here.
++func_enable_tag ()
++{
++  # Global variable:
++  tagname="$1"
  
+-  --quiet | --silent)
+-    show=:
+-    ;;
++  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
++  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
++  sed_extractcf="/$re_begincf/,/$re_endcf/p"
  
- \message{environments,}
- % @foo ... @end foo.
+-  --tag) prevopt="--tag" prev=tag ;;
+-  --tag=*)
+-    set tag "$optarg" ${1+"$@"}
++  # Validate tagname.
++  case $tagname in
++    *[!-_A-Za-z0-9,/]*)
++      func_fatal_error "invalid tag name: $tagname"
++      ;;
++  esac
++
++  # Don't test for the "default" C tag, as we know it's
++  # there but not specially marked.
++  case $tagname in
++    CC) ;;
++    *)
++      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
++	taglist="$taglist $tagname"
++
++	# Evaluate the configuration.  Be careful to quote the path
++	# and the sed script, to avoid splitting on whitespace, but
++	# also don't use non-portable quotes within backquotes within
++	# quotes we have to do it in 2 steps:
++	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
++	eval "$extractedcf"
++      else
++	func_error "ignoring unknown tag $tagname"
++      fi
++      ;;
++  esac
++}
++
++# func_check_version_match
++# Ensure that we are using m4 macros, and libtool script from the same
++# release of libtool.
++func_check_version_match ()
++{
++  if test "$package_revision" != "$macro_revision"; then
++    if test "$VERSION" != "$macro_version"; then
++      if test -z "$macro_version"; then
++        cat >&2 <<_LT_EOF
++$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
++$progname: definition of this LT_INIT comes from an older release.
++$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
++$progname: and run autoconf again.
++_LT_EOF
++      else
++        cat >&2 <<_LT_EOF
++$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
++$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
++$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
++$progname: and run autoconf again.
++_LT_EOF
++      fi
++    else
++      cat >&2 <<_LT_EOF
++$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
++$progname: but the definition of this LT_INIT comes from revision $macro_revision.
++$progname: You should recreate aclocal.m4 with macros from revision $package_revision
++$progname: of $PACKAGE $VERSION and run autoconf again.
++_LT_EOF
++    fi
++
++    exit $EXIT_MISMATCH
++  fi
++}
++
++
++# Shorthand for --mode=foo, only valid as the first argument
++case $1 in
++clean|clea|cle|cl)
++  shift; set dummy --mode clean ${1+"$@"}; shift
++  ;;
++compile|compil|compi|comp|com|co|c)
++  shift; set dummy --mode compile ${1+"$@"}; shift
++  ;;
++execute|execut|execu|exec|exe|ex|e)
++  shift; set dummy --mode execute ${1+"$@"}; shift
++  ;;
++finish|finis|fini|fin|fi|f)
++  shift; set dummy --mode finish ${1+"$@"}; shift
++  ;;
++install|instal|insta|inst|ins|in|i)
++  shift; set dummy --mode install ${1+"$@"}; shift
++  ;;
++link|lin|li|l)
++  shift; set dummy --mode link ${1+"$@"}; shift
++  ;;
++uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
++  shift; set dummy --mode uninstall ${1+"$@"}; shift
++  ;;
++esac
++
++
++
++# Option defaults:
++opt_debug=:
++opt_dry_run=false
++opt_config=false
++opt_preserve_dup_deps=false
++opt_features=false
++opt_finish=false
++opt_help=false
++opt_help_all=false
++opt_silent=:
++opt_verbose=:
++opt_silent=false
++opt_verbose=false
++
++
++# Parse options once, thoroughly.  This comes as soon as possible in the
++# script to make things like `--version' happen as quickly as we can.
++{
++  # this just eases exit handling
++  while test $# -gt 0; do
++    opt="$1"
+     shift
+-    prev=tag
+-    ;;
++    case $opt in
++      --debug|-x)	opt_debug='set -x'
++			func_echo "enabling shell trace mode"
++			$opt_debug
++			;;
++      --dry-run|--dryrun|-n)
++			opt_dry_run=:
++			;;
++      --config)
++			opt_config=:
++func_config
++			;;
++      --dlopen|-dlopen)
++			optarg="$1"
++			opt_dlopen="${opt_dlopen+$opt_dlopen
++}$optarg"
++			shift
++			;;
++      --preserve-dup-deps)
++			opt_preserve_dup_deps=:
++			;;
++      --features)
++			opt_features=:
++func_features
++			;;
++      --finish)
++			opt_finish=:
++set dummy --mode finish ${1+"$@"}; shift
++			;;
++      --help)
++			opt_help=:
++			;;
++      --help-all)
++			opt_help_all=:
++opt_help=': help-all'
++			;;
++      --mode)
++			test $# = 0 && func_missing_arg $opt && break
++			optarg="$1"
++			opt_mode="$optarg"
++case $optarg in
++  # Valid mode arguments:
++  clean|compile|execute|finish|install|link|relink|uninstall) ;;
  
--% Since these characters are used in examples, it should be an even number of
--% \tt widths. Each \tt character is 1en, so two makes it 1em.
--% Furthermore, these definitions must come after we define our fonts.
--\newbox\dblarrowbox    \newbox\longdblarrowbox
--\newbox\pushcharbox    \newbox\bullbox
--\newbox\equivbox       \newbox\errorbox
--
--%{\tentt
--%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
--%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
--%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
--%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
--% Adapted from the manmac format (p.420 of TeXbook)
--%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
--%                                      depth .1ex\hfil}
--%}
--
- % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-+%
-+% Since these characters are used in examples, they should be an even number of
-+% \tt widths. Each \tt character is 1en, so two makes it 1em.
-+%
- \def\point{$\star$}
--\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
--\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
-+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
- \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
--\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+-  -dlopen)
+-    prevopt="-dlopen"
+-    prev=execute_dlfiles
+-    ;;
++  # Catch anything else as an error
++  *) func_error "invalid argument for $opt"
++     exit_cmd=exit
++     break
++     ;;
++esac
++			shift
++			;;
++      --no-silent|--no-quiet)
++			opt_silent=false
++func_append preserve_args " $opt"
++			;;
++      --no-verbose)
++			opt_verbose=false
++func_append preserve_args " $opt"
++			;;
++      --silent|--quiet)
++			opt_silent=:
++func_append preserve_args " $opt"
++        opt_verbose=false
++			;;
++      --verbose|-v)
++			opt_verbose=:
++func_append preserve_args " $opt"
++opt_silent=false
++			;;
++      --tag)
++			test $# = 0 && func_missing_arg $opt && break
++			optarg="$1"
++			opt_tag="$optarg"
++func_append preserve_args " $opt $optarg"
++func_enable_tag "$optarg"
++			shift
++			;;
  
-+% The @error{} command.
- % Adapted from the TeXbook's \boxit.
-+%
-+\newbox\errorbox
-+%
- {\tentt \global\dimen0 = 3em}% Width of the box.
- \dimen2 = .55pt % Thickness of rules
- % The text. (`r' is open on the right, `e' somewhat less so on the left.)
--\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
--
--\global\setbox\errorbox=\hbox to \dimen0{\hfil
-+\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
-+%
-+\setbox\errorbox=\hbox to \dimen0{\hfil
-    \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-    \advance\hsize by -2\dimen2 % Rules.
--   \vbox{
-+   \vbox{%
-       \hrule height\dimen2
-       \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-          \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-          \kern3pt\vrule width\dimen2}% Space to right.
-       \hrule height\dimen2}
-     \hfil}
--
--% The @error{} command.
-+%
- \def\error{\leavevmode\lower.7ex\copy\errorbox}
+-  -*)
+-    $echo "$modename: unrecognized option \`$arg'" 1>&2
+-    $echo "$help" 1>&2
+-    exit 1
++      -\?|-h)		func_usage				;;
++      --help)		func_help				;;
++      --version)	func_version				;;
++
++      # Separate optargs to long options:
++      --*=*)
++			func_split_long_opt "$opt"
++			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
++			shift
++			;;
++
++      # Separate non-argument short options:
++      -\?*|-h*|-n*|-v*)
++			func_split_short_opt "$opt"
++			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
++			shift
++			;;
++
++      --)		break					;;
++      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
++      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
++    esac
++  done
++
++  # Validate options:
++
++  # save first non-option argument
++  if test "$#" -gt 0; then
++    nonopt="$opt"
++    shift
++  fi
++
++  # preserve --debug
++  test "$opt_debug" = : || func_append preserve_args " --debug"
++
++  case $host in
++    *cygwin* | *mingw* | *pw32* | *cegcc*)
++      # don't eliminate duplications in $postdeps and $predeps
++      opt_duplicate_compiler_generated_deps=:
++      ;;
++    *)
++      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
++      ;;
++  esac
++
++  $opt_help || {
++    # Sanity checks first:
++    func_check_version_match
++
++    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
++      func_fatal_configuration "not configured to build any kind of library"
++    fi
++
++    # Darwin sucks
++    eval std_shrext=\"$shrext_cmds\"
++
++    # Only execute mode is allowed to have -dlopen flags.
++    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
++      func_error "unrecognized option \`-dlopen'"
++      $ECHO "$help" 1>&2
++      exit $EXIT_FAILURE
++    fi
++
++    # Change the help message to a mode-specific one.
++    generic_help="$help"
++    help="Try \`$progname --help --mode=$opt_mode' for more information."
++  }
++
++
++  # Bail if the options were screwed
++  $exit_cmd $EXIT_FAILURE
++}
++
++
++
++
++## ----------- ##
++##    Main.    ##
++## ----------- ##
++
++# func_lalib_p file
++# True iff FILE is a libtool `.la' library or `.lo' object file.
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_lalib_p ()
++{
++    test -f "$1" &&
++      $SED -e 4q "$1" 2>/dev/null \
++        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
++}
++
++# func_lalib_unsafe_p file
++# True iff FILE is a libtool `.la' library or `.lo' object file.
++# This function implements the same check as func_lalib_p without
++# resorting to external programs.  To this end, it redirects stdin and
++# closes it afterwards, without saving the original file descriptor.
++# As a safety measure, use it only where a negative result would be
++# fatal anyway.  Works if `file' does not exist.
++func_lalib_unsafe_p ()
++{
++    lalib_p=no
++    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
++	for lalib_p_l in 1 2 3 4
++	do
++	    read lalib_p_line
++	    case "$lalib_p_line" in
++		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
++	    esac
++	done
++	exec 0<&5 5<&-
++    fi
++    test "$lalib_p" = yes
++}
++
++# func_ltwrapper_script_p file
++# True iff FILE is a libtool wrapper script
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_ltwrapper_script_p ()
++{
++    func_lalib_p "$1"
++}
++
++# func_ltwrapper_executable_p file
++# True iff FILE is a libtool wrapper executable
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_ltwrapper_executable_p ()
++{
++    func_ltwrapper_exec_suffix=
++    case $1 in
++    *.exe) ;;
++    *) func_ltwrapper_exec_suffix=.exe ;;
++    esac
++    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
++}
++
++# func_ltwrapper_scriptname file
++# Assumes file is an ltwrapper_executable
++# uses $file to determine the appropriate filename for a
++# temporary ltwrapper_script.
++func_ltwrapper_scriptname ()
++{
++    func_dirname_and_basename "$1" "" "."
++    func_stripname '' '.exe' "$func_basename_result"
++    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
++}
++
++# func_ltwrapper_p file
++# True iff FILE is a libtool wrapper script or wrapper executable
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_ltwrapper_p ()
++{
++    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
++}
++
++
++# func_execute_cmds commands fail_cmd
++# Execute tilde-delimited COMMANDS.
++# If FAIL_CMD is given, eval that upon failure.
++# FAIL_CMD may read-access the current command in variable CMD!
++func_execute_cmds ()
++{
++    $opt_debug
++    save_ifs=$IFS; IFS='~'
++    for cmd in $1; do
++      IFS=$save_ifs
++      eval cmd=\"$cmd\"
++      func_show_eval "$cmd" "${2-:}"
++    done
++    IFS=$save_ifs
++}
++
++
++# func_source file
++# Source FILE, adding directory component if necessary.
++# Note that it is not necessary on cygwin/mingw to append a dot to
++# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
++# behavior happens only for exec(3), not for open(2)!  Also, sourcing
++# `FILE.' does not work on cygwin managed mounts.
++func_source ()
++{
++    $opt_debug
++    case $1 in
++    */* | *\\*)	. "$1" ;;
++    *)		. "./$1" ;;
++    esac
++}
++
++
++# func_resolve_sysroot PATH
++# Replace a leading = in PATH with a sysroot.  Store the result into
++# func_resolve_sysroot_result
++func_resolve_sysroot ()
++{
++  func_resolve_sysroot_result=$1
++  case $func_resolve_sysroot_result in
++  =*)
++    func_stripname '=' '' "$func_resolve_sysroot_result"
++    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+     ;;
++  esac
++}
  
- % @tex ... @end tex    escapes into raw Tex temporarily.
- % One exception: @ is still an escape character, so that @end tex works.
- % But \@ or @@ will get a plain tex @ character.
++# func_replace_sysroot PATH
++# If PATH begins with the sysroot, replace it with = and
++# store the result into func_replace_sysroot_result.
++func_replace_sysroot ()
++{
++  case "$lt_sysroot:$1" in
++  ?*:"$lt_sysroot"*)
++    func_stripname "$lt_sysroot" '' "$1"
++    func_replace_sysroot_result="=$func_stripname_result"
++    ;;
+   *)
+-    nonopt="$arg"
+-    break
++    # Including no sysroot.
++    func_replace_sysroot_result=$1
+     ;;
+   esac
+-done
++}
  
--\def\tex{\begingroup
-+\envdef\tex{%
-   \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-   \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
--  \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-+  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
-   \catcode `\%=14
--  \catcode 43=12 % plus
--  \catcode`\"=12
--  \catcode`\==12
--  \catcode`\|=12
--  \catcode`\<=12
--  \catcode`\>=12
-+  \catcode `\+=\other
-+  \catcode `\"=\other
-+  \catcode `\|=\other
-+  \catcode `\<=\other
-+  \catcode `\>=\other
-   \escapechar=`\\
-   %
-   \let\b=\ptexb
-@@ -4036,20 +5737,26 @@
-   \let\equiv=\ptexequiv
-   \let\!=\ptexexclam
-   \let\i=\ptexi
-+  \let\indent=\ptexindent
-+  \let\noindent=\ptexnoindent
-   \let\{=\ptexlbrace
-   \let\+=\tabalign
-   \let\}=\ptexrbrace
-+  \let\/=\ptexslash
-   \let\*=\ptexstar
-   \let\t=\ptext
-+  \expandafter \let\csname top\endcsname=\ptextop  % outer
-+  \let\frenchspacing=\plainfrenchspacing
-   %
-   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-   \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-   \def\@{@}%
--\let\Etex=\endgroup}
+-if test -n "$prevopt"; then
+-  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+-  $echo "$help" 1>&2
+-  exit 1
+-fi
++# func_infer_tag arg
++# Infer tagged configuration to use if any are available and
++# if one wasn't chosen via the "--tag" command line option.
++# Only attempt this if the compiler in the base compile
++# command doesn't match the default compiler.
++# arg is usually of the form 'gcc ...'
++func_infer_tag ()
++{
++    $opt_debug
++    if test -n "$available_tags" && test -z "$tagname"; then
++      CC_quoted=
++      for arg in $CC; do
++	func_append_quoted CC_quoted "$arg"
++      done
++      CC_expanded=`func_echo_all $CC`
++      CC_quoted_expanded=`func_echo_all $CC_quoted`
++      case $@ in
++      # Blanks in the command may have been stripped by the calling shell,
++      # but not from the CC environment variable when configure was run.
++      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
++      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
++      # Blanks at the start of $base_compile will cause this to fail
++      # if we don't check for them as well.
++      *)
++	for z in $available_tags; do
++	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
++	    # Evaluate the configuration.
++	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
++	    CC_quoted=
++	    for arg in $CC; do
++	      # Double-quote args containing other shell metacharacters.
++	      func_append_quoted CC_quoted "$arg"
++	    done
++	    CC_expanded=`func_echo_all $CC`
++	    CC_quoted_expanded=`func_echo_all $CC_quoted`
++	    case "$@ " in
++	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
++	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
++	      # The compiler in the base compile command matches
++	      # the one in the tagged configuration.
++	      # Assume this is the tagged configuration we want.
++	      tagname=$z
++	      break
++	      ;;
++	    esac
++	  fi
++	done
++	# If $tagname still isn't set, then no tagged configuration
++	# was found and let the user know that the "--tag" command
++	# line option must be used.
++	if test -z "$tagname"; then
++	  func_echo "unable to infer tagged configuration"
++	  func_fatal_error "specify a tag with \`--tag'"
++#	else
++#	  func_verbose "using $tagname tagged configuration"
++	fi
++	;;
++      esac
++    fi
 +}
-+% There is no need to define \Etex.
- 
--% Define @lisp ... @endlisp.
--% @lisp does a \begingroup so it can rebind things,
--% including the definition of @endlisp (which normally is erroneous).
-+% Define @lisp ... @end lisp.
-+% @lisp environment forms a group so it can rebind things,
-+% including the definition of @end lisp (which normally is erroneous).
- 
- % Amount to narrow the margins by for @lisp.
- \newskip\lispnarrowing \lispnarrowing=0.4in
-@@ -4059,34 +5766,34 @@
- % have any width.
- \def\lisppar{\null\endgraf}
- 
--% Make each space character in the input produce a normal interword
--% space in the output.  Don't allow a line break at this space, as this
--% is used only in environments like @example, where each line of input
--% should produce a line of output anyway.
--%
--{\obeyspaces %
--\gdef\sepspaces{\obeyspaces\let =\tie}}
--
--% Define \obeyedspace to be our active space, whatever it is.  This is
--% for use in \parsearg.
--{\sepspaces%
--\global\let\obeyedspace= }
--
- % This space is always present above and below environments.
- \newskip\envskipamount \envskipamount = 0pt
- 
- % Make spacing and below environment symmetrical.  We use \parskip here
- % to help in doing that, since in @example-like environments \parskip
- % is reset to zero; thus the \afterenvbreak inserts no space -- but the
--% start of the next paragraph will insert \parskip
-+% start of the next paragraph will insert \parskip.
- %
--\def\aboveenvbreak{{\advance\envskipamount by \parskip
--\endgraf \ifdim\lastskip<\envskipamount
--\removelastskip \penalty-50 \vskip\envskipamount \fi}}
-+\def\aboveenvbreak{{%
-+  % =10000 instead of <10000 because of a special case in \itemzzz and
-+  % \sectionheading, q.v.
-+  \ifnum \lastpenalty=10000 \else
-+    \advance\envskipamount by \parskip
-+    \endgraf
-+    \ifdim\lastskip<\envskipamount
-+      \removelastskip
-+      % it's not a good place to break if the last penalty was \nobreak
-+      % or better ...
-+      \ifnum\lastpenalty<10000 \penalty-50 \fi
-+      \vskip\envskipamount
-+    \fi
-+  \fi
-+}}
  
- \let\afterenvbreak = \aboveenvbreak
+-# If this variable is set in any of the actions, the command in it
+-# will be execed at the end.  This prevents here-documents from being
+-# left over by shells.
+-exec_cmd=
  
--% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
-+% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
-+% also clear it, so that its embedded environments do the narrowing again.
- \let\nonarrowing=\relax
+-if test -z "$show_help"; then
  
- % @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-@@ -4110,738 +5817,733 @@
- %
- \newskip\lskip\newskip\rskip
+-  # Infer the operation mode.
+-  if test -z "$mode"; then
+-    case $nonopt in
+-    *cc | *++ | gcc* | *-gcc*)
+-      mode=link
+-      for arg
+-      do
+-	case $arg in
+-	-c)
+-	   mode=compile
+-	   break
+-	   ;;
+-	esac
+-      done
+-      ;;
+-    *db | *dbx | *strace | *truss)
+-      mode=execute
+-      ;;
+-    *install*|cp|mv)
+-      mode=install
+-      ;;
+-    *rm)
+-      mode=uninstall
+-      ;;
+-    *)
+-      # If we have no mode, but dlfiles were specified, then do execute mode.
+-      test -n "$execute_dlfiles" && mode=execute
++# func_write_libtool_object output_name pic_name nonpic_name
++# Create a libtool object file (analogous to a ".la" file),
++# but don't create it if we're doing a dry run.
++func_write_libtool_object ()
++{
++    write_libobj=${1}
++    if test "$build_libtool_libs" = yes; then
++      write_lobj=\'${2}\'
++    else
++      write_lobj=none
++    fi
  
--\long\def\cartouche{%
--\begingroup
--        \lskip=\leftskip \rskip=\rightskip
--        \leftskip=0pt\rightskip=0pt %we want these *outside*.
--        \cartinner=\hsize \advance\cartinner by-\lskip
--                          \advance\cartinner by-\rskip
--        \cartouter=\hsize
--        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
--%                                    side, and for 6pt waste from
--%                                    each corner char, and rule thickness
--        \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
--        % Flag to tell @lisp, etc., not to narrow margin.
--        \let\nonarrowing=\comment
--        \vbox\bgroup
--                \baselineskip=0pt\parskip=0pt\lineskip=0pt
--                \carttop
--                \hbox\bgroup
--                        \hskip\lskip
--                        \vrule\kern3pt
--                        \vbox\bgroup
--                                \hsize=\cartinner
--                                \kern3pt
--                                \begingroup
--                                        \baselineskip=\normbskip
--                                        \lineskip=\normlskip
--                                        \parskip=\normpskip
--                                        \vskip -\parskip
-+\envdef\cartouche{%
-+  \ifhmode\par\fi  % can't be in the midst of a paragraph.
-+  \startsavinginserts
-+  \lskip=\leftskip \rskip=\rightskip
-+  \leftskip=0pt\rightskip=0pt % we want these *outside*.
-+  \cartinner=\hsize \advance\cartinner by-\lskip
-+  \advance\cartinner by-\rskip
-+  \cartouter=\hsize
-+  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
-+				% side, and for 6pt waste from
-+				% each corner char, and rule thickness
-+  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-+  % Flag to tell @lisp, etc., not to narrow margin.
-+  \let\nonarrowing = t%
-+  \vbox\bgroup
-+      \baselineskip=0pt\parskip=0pt\lineskip=0pt
-+      \carttop
-+      \hbox\bgroup
-+	  \hskip\lskip
-+	  \vrule\kern3pt
-+	  \vbox\bgroup
-+	      \kern3pt
-+	      \hsize=\cartinner
-+	      \baselineskip=\normbskip
-+	      \lineskip=\normlskip
-+	      \parskip=\normpskip
-+	      \vskip -\parskip
-+	      \comment % For explanation, see the end of \def\group.
+-      # Just use the default operation mode.
+-      if test -z "$mode"; then
+-	if test -n "$nonopt"; then
+-	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+-	else
+-	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+-	fi
++    if test "$build_old_libs" = yes; then
++      write_oldobj=\'${3}\'
++    else
++      write_oldobj=none
++    fi
++
++    $opt_dry_run || {
++      cat >${write_libobj}T <<EOF
++# $write_libobj - a libtool object file
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++#
++# Please DO NOT delete this file!
++# It is necessary for linking the library.
++
++# Name of the PIC object.
++pic_object=$write_lobj
++
++# Name of the non-PIC object
++non_pic_object=$write_oldobj
++
++EOF
++      $MV "${write_libobj}T" "${write_libobj}"
++    }
++}
++
++
++##################################################
++# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
++##################################################
++
++# func_convert_core_file_wine_to_w32 ARG
++# Helper function used by file name conversion functions when $build is *nix,
++# and $host is mingw, cygwin, or some other w32 environment. Relies on a
++# correctly configured wine environment available, with the winepath program
++# in $build's $PATH.
++#
++# ARG is the $build file name to be converted to w32 format.
++# Result is available in $func_convert_core_file_wine_to_w32_result, and will
++# be empty on error (or when ARG is empty)
++func_convert_core_file_wine_to_w32 ()
++{
++  $opt_debug
++  func_convert_core_file_wine_to_w32_result="$1"
++  if test -n "$1"; then
++    # Unfortunately, winepath does not exit with a non-zero error code, so we
++    # are forced to check the contents of stdout. On the other hand, if the
++    # command is not found, the shell will set an exit code of 127 and print
++    # *an error message* to stdout. So we must check for both error code of
++    # zero AND non-empty stdout, which explains the odd construction:
++    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
++    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
++      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
++        $SED -e "$lt_sed_naive_backslashify"`
++    else
++      func_convert_core_file_wine_to_w32_result=
++    fi
++  fi
 +}
- \def\Ecartouche{%
--                                \endgroup
--                                \kern3pt
--                        \egroup
--                        \kern3pt\vrule
--                        \hskip\rskip
--                \egroup
--                \cartbot
--        \egroup
--\endgroup
--}}
-+              \ifhmode\par\fi
-+	      \kern3pt
-+	  \egroup
-+	  \kern3pt\vrule
-+	  \hskip\rskip
-+      \egroup
-+      \cartbot
-+  \egroup
-+  \checkinserts
++# end: func_convert_core_file_wine_to_w32
++
++
++# func_convert_core_path_wine_to_w32 ARG
++# Helper function used by path conversion functions when $build is *nix, and
++# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
++# configured wine environment available, with the winepath program in $build's
++# $PATH. Assumes ARG has no leading or trailing path separator characters.
++#
++# ARG is path to be converted from $build format to win32.
++# Result is available in $func_convert_core_path_wine_to_w32_result.
++# Unconvertible file (directory) names in ARG are skipped; if no directory names
++# are convertible, then the result may be empty.
++func_convert_core_path_wine_to_w32 ()
++{
++  $opt_debug
++  # unfortunately, winepath doesn't convert paths, only file names
++  func_convert_core_path_wine_to_w32_result=""
++  if test -n "$1"; then
++    oldIFS=$IFS
++    IFS=:
++    for func_convert_core_path_wine_to_w32_f in $1; do
++      IFS=$oldIFS
++      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
++      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
++        if test -z "$func_convert_core_path_wine_to_w32_result"; then
++          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
++        else
++          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
++        fi
+       fi
++    done
++    IFS=$oldIFS
++  fi
 +}
- 
- 
- % This macro is called at the beginning of all the @example variants,
- % inside a group.
- \def\nonfillstart{%
-   \aboveenvbreak
--  \inENV % This group ends at the end of the body
-   \hfuzz = 12pt % Don't be fussy
-   \sepspaces % Make spaces be word-separators rather than space tokens.
--  \singlespace
-   \let\par = \lisppar % don't ignore blank lines
-   \obeylines % each line of input is a line of output
-   \parskip = 0pt
-   \parindent = 0pt
-   \emergencystretch = 0pt % don't try to avoid overfull boxes
--  % @cartouche defines \nonarrowing to inhibit narrowing
--  % at next level down.
-   \ifx\nonarrowing\relax
-     \advance \leftskip by \lispnarrowing
-     \exdentamount=\lispnarrowing
--    \let\exdent=\nofillexdent
--    \let\nonarrowing=\relax
-+  \else
-+    \let\nonarrowing = \relax
-   \fi
-+  \let\exdent=\nofillexdent
- }
- 
--% Define the \E... control sequence only if we are inside the particular
--% environment, so the error checking in \end will work.
--%
--% To end an @example-like environment, we first end the paragraph (via
--% \afterenvbreak's vertical glue), and then the group.  That way we keep
--% the zero \parskip that the environments set -- \parskip glue will be
--% inserted at the beginning of the next paragraph in the document, after
--% the environment.
-+% If you want all examples etc. small: @set dispenvsize small.
-+% If you want even small examples the full size: @set dispenvsize nosmall.
-+% This affects the following displayed environments:
-+%    @example, @display, @format, @lisp
- %
--\def\nonfillfinish{\afterenvbreak\endgroup}
-+\def\smallword{small}
-+\def\nosmallword{nosmall}
-+\let\SETdispenvsize\relax
-+\def\setnormaldispenv{%
-+  \ifx\SETdispenvsize\smallword
-+    % end paragraph for sake of leading, in case document has no blank
-+    % line.  This is redundant with what happens in \aboveenvbreak, but
-+    % we need to do it before changing the fonts, and it's inconvenient
-+    % to change the fonts afterward.
-+    \ifnum \lastpenalty=10000 \else \endgraf \fi
-+    \smallexamplefonts \rm
-+  \fi
++# end: func_convert_core_path_wine_to_w32
++
++
++# func_cygpath ARGS...
++# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
++# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
++# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
++# (2), returns the Cygwin file name or path in func_cygpath_result (input
++# file name or path is assumed to be in w32 format, as previously converted
++# from $build's *nix or MSYS format). In case (3), returns the w32 file name
++# or path in func_cygpath_result (input file name or path is assumed to be in
++# Cygwin format). Returns an empty string on error.
++#
++# ARGS are passed to cygpath, with the last one being the file name or path to
++# be converted.
++#
++# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
++# environment variable; do not put it in $PATH.
++func_cygpath ()
++{
++  $opt_debug
++  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
++    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
++    if test "$?" -ne 0; then
++      # on failure, ensure result is empty
++      func_cygpath_result=
++    fi
++  else
++    func_cygpath_result=
++    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
++  fi
 +}
-+\def\setsmalldispenv{%
-+  \ifx\SETdispenvsize\nosmallword
-+  \else
-+    \ifnum \lastpenalty=10000 \else \endgraf \fi
-+    \smallexamplefonts \rm
-+  \fi
++#end: func_cygpath
++
++
++# func_convert_core_msys_to_w32 ARG
++# Convert file name or path ARG from MSYS format to w32 format.  Return
++# result in func_convert_core_msys_to_w32_result.
++func_convert_core_msys_to_w32 ()
++{
++  $opt_debug
++  # awkward: cmd appends spaces to result
++  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
++    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
++}
++#end: func_convert_core_msys_to_w32
++
++
++# func_convert_file_check ARG1 ARG2
++# Verify that ARG1 (a file name in $build format) was converted to $host
++# format in ARG2. Otherwise, emit an error message, but continue (resetting
++# func_to_host_file_result to ARG1).
++func_convert_file_check ()
++{
++  $opt_debug
++  if test -z "$2" && test -n "$1" ; then
++    func_error "Could not determine host file name corresponding to"
++    func_error "  \`$1'"
++    func_error "Continuing, but uninstalled executables may not work."
++    # Fallback:
++    func_to_host_file_result="$1"
++  fi
++}
++# end func_convert_file_check
++
++
++# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
++# Verify that FROM_PATH (a path in $build format) was converted to $host
++# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
++# func_to_host_file_result to a simplistic fallback value (see below).
++func_convert_path_check ()
++{
++  $opt_debug
++  if test -z "$4" && test -n "$3"; then
++    func_error "Could not determine the host path corresponding to"
++    func_error "  \`$3'"
++    func_error "Continuing, but uninstalled executables may not work."
++    # Fallback.  This is a deliberately simplistic "conversion" and
++    # should not be "improved".  See libtool.info.
++    if test "x$1" != "x$2"; then
++      lt_replace_pathsep_chars="s|$1|$2|g"
++      func_to_host_path_result=`echo "$3" |
++        $SED -e "$lt_replace_pathsep_chars"`
++    else
++      func_to_host_path_result="$3"
++    fi
++  fi
++}
++# end func_convert_path_check
++
++
++# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
++# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
++# and appending REPL if ORIG matches BACKPAT.
++func_convert_path_front_back_pathsep ()
++{
++  $opt_debug
++  case $4 in
++  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
++    ;;
++  esac
++  case $4 in
++  $2 ) func_append func_to_host_path_result "$3"
++    ;;
++  esac
++}
++# end func_convert_path_front_back_pathsep
++
++
++##################################################
++# $build to $host FILE NAME CONVERSION FUNCTIONS #
++##################################################
++# invoked via `$to_host_file_cmd ARG'
++#
++# In each case, ARG is the path to be converted from $build to $host format.
++# Result will be available in $func_to_host_file_result.
++
++
++# func_to_host_file ARG
++# Converts the file name ARG from $build format to $host format. Return result
++# in func_to_host_file_result.
++func_to_host_file ()
++{
++  $opt_debug
++  $to_host_file_cmd "$1"
++}
++# end func_to_host_file
++
++
++# func_to_tool_file ARG LAZY
++# converts the file name ARG from $build format to toolchain format. Return
++# result in func_to_tool_file_result.  If the conversion in use is listed
++# in (the comma separated) LAZY, no conversion takes place.
++func_to_tool_file ()
++{
++  $opt_debug
++  case ,$2, in
++    *,"$to_tool_file_cmd",*)
++      func_to_tool_file_result=$1
+       ;;
+-    esac
++    *)
++      $to_tool_file_cmd "$1"
++      func_to_tool_file_result=$func_to_host_file_result
++      ;;
++  esac
 +}
- 
--% @lisp: indented, narrowed, typewriter font.
--\def\lisp{\begingroup
--  \nonfillstart
--  \let\Elisp = \nonfillfinish
--  \tt
--  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
--  \gobble       % eat return
-+% We often define two environments, @foo and @smallfoo.
-+% Let's do it by one command:
-+\def\makedispenv #1#2{
-+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
-+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
-+  \expandafter\let\csname E#1\endcsname \afterenvbreak
-+  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
- }
- 
--% @example: Same as @lisp.
--\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-+% Define two synonyms:
-+\def\maketwodispenvs #1#2#3{
-+  \makedispenv{#1}{#3}
-+  \makedispenv{#2}{#3}
++# end func_to_tool_file
++
++
++# func_convert_file_noop ARG
++# Copy ARG to func_to_host_file_result.
++func_convert_file_noop ()
++{
++  func_to_host_file_result="$1"
 +}
- 
--% @small... is usually equivalent to the non-small (@smallbook
--% redefines).  We must call \example (or whatever) last in the
--% definition, since it reads the return following the @example (or
--% whatever) command.
--%
--% This actually allows (for example) @end display inside an
--% @smalldisplay.  Too bad, but makeinfo will catch the error anyway.
-+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
- %
--\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
--\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
--\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
--\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
--
--% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
-+% @smallexample and @smalllisp: use smaller fonts.
- % Originally contributed by Pavel at xerox.
--\def\smalllispx{\begingroup
--  \def\Esmalllisp{\nonfillfinish\endgroup}%
--  \def\Esmallexample{\nonfillfinish\endgroup}%
--  \smallfonts
--  \lisp
--}
--
--% @display: same as @lisp except keep current font.
- %
--\def\display{\begingroup
-+\maketwodispenvs {lisp}{example}{%
-   \nonfillstart
--  \let\Edisplay = \nonfillfinish
--  \gobble
-+  \tt\quoteexpand
-+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-+  \gobble       % eat return
- }
--
--% @smalldisplay (when @smallbook): @display plus smaller fonts.
-+% @display/@smalldisplay: same as @lisp except keep current font.
- %
--\def\smalldisplayx{\begingroup
--  \def\Esmalldisplay{\nonfillfinish\endgroup}%
--  \smallfonts \rm
--  \display
-+\makedispenv {display}{%
-+  \nonfillstart
-+  \gobble
- }
- 
--% @format: same as @display except don't narrow margins.
-+% @format/@smallformat: same as @display except don't narrow margins.
- %
--\def\format{\begingroup
--  \let\nonarrowing = t
-+\makedispenv{format}{%
-+  \let\nonarrowing = t%
-   \nonfillstart
--  \let\Eformat = \nonfillfinish
-   \gobble
- }
- 
--% @smallformat (when @smallbook): @format plus smaller fonts.
--%
--\def\smallformatx{\begingroup
--  \def\Esmallformat{\nonfillfinish\endgroup}%
--  \smallfonts \rm
--  \format
-+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
-+\envdef\flushleft{%
-+  \let\nonarrowing = t%
-+  \nonfillstart
-+  \gobble
- }
--
--% @flushleft (same as @format).
--%
--\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-+\let\Eflushleft = \afterenvbreak
- 
- % @flushright.
- %
--\def\flushright{\begingroup
--  \let\nonarrowing = t
-+\envdef\flushright{%
-+  \let\nonarrowing = t%
-   \nonfillstart
--  \let\Eflushright = \nonfillfinish
-   \advance\leftskip by 0pt plus 1fill
-   \gobble
- }
-+\let\Eflushright = \afterenvbreak
++# end func_convert_file_noop
 +
++
++# func_convert_file_msys_to_w32 ARG
++# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
++# conversion to w32 is not available inside the cwrapper.  Returns result in
++# func_to_host_file_result.
++func_convert_file_msys_to_w32 ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    func_convert_core_msys_to_w32 "$1"
++    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+   fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_msys_to_w32
  
- % @quotation does normal linebreaking (hence we can't use \nonfillstart)
--% and narrows the margins.
-+% and narrows the margins.  We keep \parskip nonzero in general, since
-+% we're doing normal filling.  So, when using \aboveenvbreak and
-+% \afterenvbreak, temporarily make \parskip 0.
- %
--\def\quotation{%
--  \begingroup\inENV %This group ends at the end of the @quotation body
-+\envdef\quotation{%
-   {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
--  \singlespace
-   \parindent=0pt
--  % We have retained a nonzero parskip for the environment, since we're
--  % doing normal filling. So to avoid extra space below the environment...
--  \def\Equotation{\parskip = 0pt \nonfillfinish}%
-   %
-   % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
-   \ifx\nonarrowing\relax
-     \advance\leftskip by \lispnarrowing
-     \advance\rightskip by \lispnarrowing
-     \exdentamount = \lispnarrowing
-+  \else
-     \let\nonarrowing = \relax
-   \fi
-+  \parsearg\quotationlabel
- }
- 
-+% We have retained a nonzero parskip for the environment, since we're
-+% doing normal filling.
-+%
-+\def\Equotation{%
-+  \par
-+  \ifx\quotationauthor\undefined\else
-+    % indent a bit.
-+    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
-+  \fi
-+  {\parskip=0pt \afterenvbreak}%
+-  # Only execute mode is allowed to have -dlopen flags.
+-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+-    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+-    $echo "$help" 1>&2
+-    exit 1
++
++# func_convert_file_cygwin_to_w32 ARG
++# Convert file name ARG from Cygwin to w32 format.  Returns result in
++# func_to_host_file_result.
++func_convert_file_cygwin_to_w32 ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
++    # LT_CYGPATH in this case.
++    func_to_host_file_result=`cygpath -m "$1"`
+   fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
 +}
++# end func_convert_file_cygwin_to_w32
  
--\message{defuns,}
--% @defun etc.
--
--% Allow user to change definition object font (\df) internally
--\def\setdeffont #1 {\csname DEF#1\endcsname}
--
--\newskip\defbodyindent \defbodyindent=.4in
--\newskip\defargsindent \defargsindent=50pt
--\newskip\deftypemargin \deftypemargin=12pt
--\newskip\deflastargmargin \deflastargmargin=18pt
--
--\newcount\parencount
--% define \functionparens, which makes ( and ) and & do special things.
--% \functionparens affects the group it is contained in.
--\def\activeparens{%
--\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
--\catcode`\[=\active \catcode`\]=\active}
--
--% Make control sequences which act like normal parenthesis chars.
--\let\lparen = ( \let\rparen = )
--
--{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
--
--% Be sure that we always have a definition for `(', etc.  For example,
--% if the fn name has parens in it, \boldbrax will not be in effect yet,
--% so TeX would otherwise complain about undefined control sequence.
--\global\let(=\lparen \global\let)=\rparen
--\global\let[=\lbrack \global\let]=\rbrack
-+% If we're given an argument, typeset it in bold with a colon after.
-+\def\quotationlabel#1{%
-+  \def\temp{#1}%
-+  \ifx\temp\empty \else
-+    {\bf #1: }%
-+  \fi
+-  # Change the help message to a mode-specific one.
+-  generic_help="$help"
+-  help="Try \`$modename --help --mode=$mode' for more information."
+ 
+-  # These modes are in order of execution frequency so that they run quickly.
+-  case $mode in
+-  # libtool compile mode
+-  compile)
+-    modename="$modename: compile"
+-    # Get the compilation command and the source file.
+-    base_compile=
+-    prev=
+-    lastarg=
+-    srcfile="$nonopt"
+-    suppress_output=
++# func_convert_file_nix_to_w32 ARG
++# Convert file name ARG from *nix to w32 format.  Requires a wine environment
++# and a working winepath. Returns result in func_to_host_file_result.
++func_convert_file_nix_to_w32 ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    func_convert_core_file_wine_to_w32 "$1"
++    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
 +}
++# end func_convert_file_nix_to_w32
  
--\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
--\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
--% This is used to turn on special parens
--% but make & act ordinary (given that it's active).
--\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+-    user_target=no
+-    for arg
+-    do
+-      case $prev in
+-      "") ;;
+-      xcompiler)
+-	# Aesthetically quote the previous argument.
+-	prev=
+-	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
  
--% Definitions of (, ) and & used in args for functions.
--% This is the definition of ( outside of all parentheses.
--\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
--  \global\advance\parencount by 1
-+% LaTeX-like @verbatim... at end verbatim and @verb{<char>...<char>}
-+% If we want to allow any <char> as delimiter,
-+% we need the curly braces so that makeinfo sees the @verb command, eg:
-+% `@verbx...x' would look like the '@verbx' command.  --janneke at gnu.org
-+%
-+% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
-+%
-+% [Knuth] p.344; only we need to do the other characters Texinfo sets
-+% active too.  Otherwise, they get lost as the first character on a
-+% verbatim line.
-+\def\dospecials{%
-+  \do\ \do\\\do\{\do\}\do\$\do\&%
-+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
-+  \do\<\do\>\do\|\do\@\do+\do\"%
- }
- %
--% This is the definition of ( when already inside a level of parens.
--\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-+% [Knuth] p. 380
-+\def\uncatcodespecials{%
-+  \def\do##1{\catcode`##1=\other}\dospecials}
- %
--\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
--  % also in that case restore the outer-level definition of (.
--  \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
--  \global\advance \parencount by -1 }
--% If we encounter &foo, then turn on ()-hacking afterwards
--\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-+% [Knuth] pp. 380,381,391
-+% Disable Spanish ligatures ?` and !` of \tt font
-+\begingroup
-+  \catcode`\`=\active\gdef`{\relax\lq}
-+\endgroup
- %
--\gdef\normalparens{\boldbrax\let&=\ampnr}
--} % End of definition inside \activeparens
--%% These parens (in \boldbrax) actually are a little bolder than the
--%% contained text.  This is especially needed for [ and ]
--\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
--\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
--\let\ampnr = \&
--\def\lbrb{{\bf\char`\[}}
--\def\rbrb{{\bf\char`\]}}
--
--% Active &'s sneak into the index arguments, so make sure it's defined.
--{
--  \catcode`& = 13
--  \global\let& = \ampnr
-+% Setup for the @verb command.
-+%
-+% Eight spaces for a tab
-+\begingroup
-+  \catcode`\^^I=\active
-+  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-+\endgroup
-+%
-+\def\setupverb{%
-+  \tt  % easiest (and conventionally used) font for verbatim
-+  \def\par{\leavevmode\endgraf}%
-+  \catcode`\`=\active
-+  \tabeightspaces
-+  % Respect line breaks,
-+  % print special symbols as themselves, and
-+  % make each space count
-+  % must do in this order:
-+  \obeylines \uncatcodespecials \sepspaces
- }
+-	case $arg in
+-	# Double-quote args containing other shell metacharacters.
+-	# Many Bourne shells cannot handle close brackets correctly
+-	# in scan sets, so we specify it separately.
+-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	  arg="\"$arg\""
+-	  ;;
+-	esac
++# func_convert_file_msys_to_cygwin ARG
++# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
++# Returns result in func_to_host_file_result.
++func_convert_file_msys_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    func_convert_core_msys_to_w32 "$1"
++    func_cygpath -u "$func_convert_core_msys_to_w32_result"
++    func_to_host_file_result="$func_cygpath_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
++}
++# end func_convert_file_msys_to_cygwin
  
--% First, defname, which formats the header line itself.
--% #1 should be the function name.
--% #2 should be the type of definition, such as "Function".
-+% Setup for the @verbatim environment
-+%
-+% Real tab expansion
-+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-+%
-+\def\starttabbox{\setbox0=\hbox\bgroup}
+-	# Add the previous argument to base_compile.
+-	if test -z "$base_compile"; then
+-	  base_compile="$lastarg"
+-	else
+-	  base_compile="$base_compile $lastarg"
+-	fi
+-	continue
+-	;;
+-      esac
  
--\def\defname #1#2{%
--% Get the values of \leftskip and \rightskip as they were
--% outside the @def...
--\dimen2=\leftskip
--\advance\dimen2 by -\defbodyindent
--\noindent
--\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
--\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
--\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
--\parshape 2 0in \dimen0 \defargsindent \dimen1
--% Now output arg 2 ("Function" or some such)
--% ending at \deftypemargin from the right margin,
--% but stuck inside a box of width 0 so it does not interfere with linebreaking
--{% Adjust \hsize to exclude the ambient margins,
--% so that \rightline will obey them.
--\advance \hsize by -\dimen2
--\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
--% Make all lines underfull and no complaints:
--\tolerance=10000 \hbadness=10000
--\advance\leftskip by -\defbodyindent
--\exdentamount=\defbodyindent
--{\df #1}\enskip        % Generate function name
-+% Allow an option to not replace quotes with a regular directed right
-+% quote/apostrophe (char 0x27), but instead use the undirected quote
-+% from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it
-+% the default, but it works for pasting with more pdf viewers (at least
-+% evince), the lilypond developers report.  xpdf does work with the
-+% regular 0x27.  
-+% 
-+\def\codequoteright{%
-+  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
-+    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
-+      '%
-+    \else \char'15 \fi
-+  \else \char'15 \fi
- }
-+%
-+% and a similar option for the left quote char vs. a grave accent.
-+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
-+% the code environments to do likewise.
-+% 
-+\def\codequoteleft{%
-+  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
-+    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
-+      `%
-+    \else \char'22 \fi
-+  \else \char'22 \fi
+-      # Accept any command-line options.
+-      case $arg in
+-      -o)
+-	if test "$user_target" != "no"; then
+-	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+-	  exit 1
+-	fi
+-	user_target=next
+-	;;
++# func_convert_file_nix_to_cygwin ARG
++# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
++# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
++# in func_to_host_file_result.
++func_convert_file_nix_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_file_result="$1"
++  if test -n "$1"; then
++    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
++    func_convert_core_file_wine_to_w32 "$1"
++    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
++    func_to_host_file_result="$func_cygpath_result"
++  fi
++  func_convert_file_check "$1" "$func_to_host_file_result"
 +}
-+%
-+\begingroup
-+  \catcode`\^^I=\active
-+  \gdef\tabexpand{%
-+    \catcode`\^^I=\active
-+    \def^^I{\leavevmode\egroup
-+      \dimen0=\wd0 % the width so far, or since the previous tab
-+      \divide\dimen0 by\tabw
-+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
-+      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
-+      \wd0=\dimen0 \box0 \starttabbox
-+    }%
-+  }
-+  \catcode`\'=\active
-+  \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}%
-+  %
-+  \catcode`\`=\active
-+  \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}%
-+  %
-+  \gdef\quoteexpand{\rquoteexpand \lquoteexpand}%
-+\endgroup
++# end func_convert_file_nix_to_cygwin
+ 
+-      -static)
+-	build_old_libs=yes
+-	continue
+-	;;
+ 
+-      -prefer-pic)
+-	pic_mode=yes
+-	continue
+-	;;
++#############################################
++# $build to $host PATH CONVERSION FUNCTIONS #
++#############################################
++# invoked via `$to_host_path_cmd ARG'
++#
++# In each case, ARG is the path to be converted from $build to $host format.
++# The result will be available in $func_to_host_path_result.
++#
++# Path separators are also converted from $build format to $host format.  If
++# ARG begins or ends with a path separator character, it is preserved (but
++# converted to $host format) on output.
++#
++# All path conversion functions are named using the following convention:
++#   file name conversion function    : func_convert_file_X_to_Y ()
++#   path conversion function         : func_convert_path_X_to_Y ()
++# where, for any given $build/$host combination the 'X_to_Y' value is the
++# same.  If conversion functions are added for new $build/$host combinations,
++# the two new functions must follow this pattern, or func_init_to_host_path_cmd
++# will break.
+ 
+-      -prefer-non-pic)
+-	pic_mode=no
+-	continue
+-	;;
  
--% Actually process the body of a definition
--% #1 should be the terminating control sequence, such as \Edefun.
--% #2 should be the "another name" control sequence, such as \defunx.
--% #3 should be the control sequence that actually processes the header,
--%    such as \defunheader.
--
--\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup %
--\catcode 61=\active % 61 is `='
--\obeylines\activeparens\spacesplit#3}
-+% start the verbatim environment.
-+\def\setupverbatim{%
-+  \let\nonarrowing = t%
-+  \nonfillstart
-+  % Easiest (and conventionally used) font for verbatim
-+  \tt
-+  \def\par{\leavevmode\egroup\box0\endgraf}%
-+  \catcode`\`=\active
-+  \tabexpand
-+  \quoteexpand
-+  % Respect line breaks,
-+  % print special symbols as themselves, and
-+  % make each space count
-+  % must do in this order:
-+  \obeylines \uncatcodespecials \sepspaces
-+  \everypar{\starttabbox}%
+-      -Xcompiler)
+-	prev=xcompiler
+-	continue
+-	;;
++# func_init_to_host_path_cmd
++# Ensures that function "pointer" variable $to_host_path_cmd is set to the
++# appropriate value, based on the value of $to_host_file_cmd.
++to_host_path_cmd=
++func_init_to_host_path_cmd ()
++{
++  $opt_debug
++  if test -z "$to_host_path_cmd"; then
++    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
++    to_host_path_cmd="func_convert_path_${func_stripname_result}"
++  fi
 +}
  
--% #1 is the \E... control sequence to end the definition (which we define).
--% #2 is the \...x control sequence for consecutive fns (which we define).
--% #3 is the control sequence to call to resume processing.
--% #4, delimited by the space, is the class name.
-+% Do the @verb magic: verbatim text is quoted by unique
-+% delimiter characters.  Before first delimiter expect a
-+% right brace, after last delimiter expect closing brace:
- %
--\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-+%    \def\doverb'{'<char>#1<char>'}'{#1}
-+%
-+% [Knuth] p. 382; only eat outer {}
-+\begingroup
-+  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
-+  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-+\endgroup
-+%
-+\def\verb{\begingroup\setupverb\doverb}
-+%
-+%
-+% Do the @verbatim magic: define the macro \doverbatim so that
-+% the (first) argument ends when '@end verbatim' is reached, ie:
-+%
-+%     \def\doverbatim#1 at end verbatim{#1}
-+%
-+% For Texinfo it's a lot easier than for LaTeX,
-+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-+% we need not redefine '\', '{' and '}'.
-+%
-+% Inspired by LaTeX's verbatim command set [latex.ltx]
-+%
-+\begingroup
-+  \catcode`\ =\active
-+  \obeylines %
-+  % ignore everything up to the first ^^M, that's the newline at the end
-+  % of the @verbatim input line itself.  Otherwise we get an extra blank
-+  % line in the output.
-+  \xdef\doverbatim#1^^M#2 at end verbatim{#2\noexpand\end\gobble verbatim}%
-+  % We really want {...\end verbatim} in the body of the macro, but
-+  % without the active space; thus we have to use \xdef and \gobble.
-+\endgroup
-+%
-+\envdef\verbatim{%
-+    \setupverbatim\doverbatim
+-      -Wc,*)
+-	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+-	lastarg=
+-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
+-	for arg in $args; do
+-	  IFS="$save_ifs"
+ 
+-	  # Double-quote args containing other shell metacharacters.
+-	  # Many Bourne shells cannot handle close brackets correctly
+-	  # in scan sets, so we specify it separately.
+-	  case $arg in
+-	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	    arg="\"$arg\""
+-	    ;;
+-	  esac
+-	  lastarg="$lastarg $arg"
+-	done
+-	IFS="$save_ifs"
+-	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
++# func_to_host_path ARG
++# Converts the path ARG from $build format to $host format. Return result
++# in func_to_host_path_result.
++func_to_host_path ()
++{
++  $opt_debug
++  func_init_to_host_path_cmd
++  $to_host_path_cmd "$1"
 +}
-+\let\Everbatim = \afterenvbreak
++# end func_to_host_path
  
--% Used for @deftypemethod and @deftypeivar.
--% #1 is the \E... control sequence to end the definition (which we define).
--% #2 is the \...x control sequence for consecutive fns (which we define).
--% #3 is the control sequence to call to resume processing.
--% #4, delimited by a space, is the class name.
--% #5 is the method's return type.
+-	# Add the arguments to base_compile.
+-	if test -z "$base_compile"; then
+-	  base_compile="$lastarg"
+-	else
+-	  base_compile="$base_compile $lastarg"
+-	fi
+-	continue
+-	;;
+-      esac
+ 
+-      case $user_target in
+-      next)
+-	# The next one is the -o target name
+-	user_target=yes
+-	continue
++# func_convert_path_noop ARG
++# Copy ARG to func_to_host_path_result.
++func_convert_path_noop ()
++{
++  func_to_host_path_result="$1"
++}
++# end func_convert_path_noop
 +
-+% @verbatiminclude FILE - insert text of file in verbatim environment.
- %
--\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
--  \medbreak
--  \def#1{\endgraf\endgroup\medbreak}%
--  \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
--  \parindent=0in
--  \advance\leftskip by \defbodyindent
--  \exdentamount=\defbodyindent
--  \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
-+%
-+\def\doverbatiminclude#1{%
-+  {%
-+    \makevalueexpandable
-+    \setupverbatim
-+    \input #1
-+    \afterenvbreak
-+  }%
++
++# func_convert_path_msys_to_w32 ARG
++# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
++# conversion to w32 is not available inside the cwrapper.  Returns result in
++# func_to_host_path_result.
++func_convert_path_msys_to_w32 ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # Remove leading and trailing path separator characters from ARG.  MSYS
++    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
++    # and winepath ignores them completely.
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
++    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
++    func_convert_path_check : ";" \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++  fi
++}
++# end func_convert_path_msys_to_w32
++
++
++# func_convert_path_cygwin_to_w32 ARG
++# Convert path ARG from Cygwin to w32 format.  Returns result in
++# func_to_host_file_result.
++func_convert_path_cygwin_to_w32 ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # See func_convert_path_msys_to_w32:
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
++    func_convert_path_check : ";" \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++  fi
++}
++# end func_convert_path_cygwin_to_w32
++
++
++# func_convert_path_nix_to_w32 ARG
++# Convert path ARG from *nix to w32 format.  Requires a wine environment and
++# a working winepath.  Returns result in func_to_host_file_result.
++func_convert_path_nix_to_w32 ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # See func_convert_path_msys_to_w32:
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
++    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
++    func_convert_path_check : ";" \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
++  fi
++}
++# end func_convert_path_nix_to_w32
++
++
++# func_convert_path_msys_to_cygwin ARG
++# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
++# Returns result in func_to_host_file_result.
++func_convert_path_msys_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # See func_convert_path_msys_to_w32:
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
++    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
++    func_to_host_path_result="$func_cygpath_result"
++    func_convert_path_check : : \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
++  fi
 +}
- 
--% Used for @deftypeop.  The change from \deftypemethparsebody is an
--% extra argument at the beginning which is the `category', instead of it
--% being the hardwired string `Method' or `Instance Variable'.  We have
--% to account for this both in the \...x definition and in parsing the
--% input at hand.  Thus also need a control sequence (passed as #5) for
--% the \E... definition to assign the category name to.
--% 
--\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
--  \medbreak
--  \def#1{\endgraf\endgroup\medbreak}%
--  \def#2##1 ##2 ##3 {%
--    \def#4{##1}%
--    \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
--  \parindent=0in
--  \advance\leftskip by \defbodyindent
--  \exdentamount=\defbodyindent
--  \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
-+% @copying ... @end copying.
-+% Save the text away for @insertcopying later.
-+%
-+% We save the uninterpreted tokens, rather than creating a box.
-+% Saving the text in a box would be much easier, but then all the
-+% typesetting commands (@smallbook, font changes, etc.) have to be done
-+% beforehand -- and a) we want @copying to be done first in the source
-+% file; b) letting users define the frontmatter in as flexible order as
-+% possible is very desirable.
-+%
-+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
-+\def\docopying#1 at end copying{\endgroup\def\copyingtext{#1}}
-+%
-+\def\insertcopying{%
-+  \begingroup
-+    \parindent = 0pt  % paragraph indentation looks wrong on title page
-+    \scanexp\copyingtext
-+  \endgroup
++# end func_convert_path_msys_to_cygwin
++
++
++# func_convert_path_nix_to_cygwin ARG
++# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
++# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
++# func_to_host_file_result.
++func_convert_path_nix_to_cygwin ()
++{
++  $opt_debug
++  func_to_host_path_result="$1"
++  if test -n "$1"; then
++    # Remove leading and trailing path separator characters from
++    # ARG. msys behavior is inconsistent here, cygpath turns them
++    # into '.;' and ';.', and winepath ignores them completely.
++    func_stripname : : "$1"
++    func_to_host_path_tmp1=$func_stripname_result
++    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
++    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
++    func_to_host_path_result="$func_cygpath_result"
++    func_convert_path_check : : \
++      "$func_to_host_path_tmp1" "$func_to_host_path_result"
++    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
++  fi
 +}
++# end func_convert_path_nix_to_cygwin
++
++
++# func_mode_compile arg...
++func_mode_compile ()
++{
++    $opt_debug
++    # Get the compilation command and the source file.
++    base_compile=
++    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
++    suppress_opt=yes
++    suppress_output=
++    arg_mode=normal
++    libobj=
++    later=
++    pie_flag=
++
++    for arg
++    do
++      case $arg_mode in
++      arg  )
++	# do not "continue".  Instead, add this to base_compile
++	lastarg="$arg"
++	arg_mode=normal
+ 	;;
+-      yes)
+-	# We got the output file
+-	user_target=set
++
++      target )
+ 	libobj="$arg"
++	arg_mode=normal
+ 	continue
+ 	;;
+-      esac
  
--\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2##1 ##2 {\def#4{##1}%
--\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
- 
--% These parsing functions are similar to the preceding ones
--% except that they do not make parens into active characters.
--% These are used for "variables" since they have no arguments.
-+\message{defuns,}
-+% @defun etc.
+-      # Accept the current argument as the source file.
+-      lastarg="$srcfile"
+-      srcfile="$arg"
++      normal )
++	# Accept any command-line options.
++	case $arg in
++	-o)
++	  test -n "$libobj" && \
++	    func_fatal_error "you cannot specify \`-o' more than once"
++	  arg_mode=target
++	  continue
++	  ;;
  
--\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2{\begingroup\obeylines\spacesplit#3}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup %
--\catcode 61=\active %
--\obeylines\spacesplit#3}
-+\newskip\defbodyindent \defbodyindent=.4in
-+\newskip\defargsindent \defargsindent=50pt
-+\newskip\deflastargmargin \deflastargmargin=18pt
-+\newcount\defunpenalty
+-      # Aesthetically quote the previous argument.
++	-pie | -fpie | -fPIE)
++          func_append pie_flag " $arg"
++	  continue
++	  ;;
  
--% This is used for \def{tp,vr}parsebody.  It could probably be used for
--% some of the others, too, with some judicious conditionals.
--%
--\def\parsebodycommon#1#2#3{%
--  \begingroup\inENV %
--  \medbreak %
--  % Define the end token that this defining construct specifies
--  % so that it will exit this group.
--  \def#1{\endgraf\endgroup\medbreak}%
--  \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
-+% Start the processing of @deffn:
-+\def\startdefun{%
-+  \ifnum\lastpenalty<10000
-+    \medbreak
-+    \defunpenalty=10003 % Will keep this @deffn together with the
-+                        % following @def command, see below.
-+  \else
-+    % If there are two @def commands in a row, we'll have a \nobreak,
-+    % which is there to keep the function description together with its
-+    % header.  But if there's nothing but headers, we need to allow a
-+    % break somewhere.  Check specifically for penalty 10002, inserted
-+    % by \printdefunline, instead of 10000, since the sectioning
-+    % commands also insert a nobreak penalty, and we don't want to allow
-+    % a break between a section heading and a defun.
-+    %
-+    % As a minor refinement, we avoid "club" headers by signalling
-+    % with penalty of 10003 after the very first @deffn in the
-+    % sequence (see above), and penalty of 10002 after any following
-+    % @def command.
-+    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
-+    %
-+    % Similarly, after a section heading, do not allow a break.
-+    % But do insert the glue.
-+    \medskip  % preceded by discardable penalty, so not a breakpoint
-+  \fi
-+  %
-   \parindent=0in
-   \advance\leftskip by \defbodyindent
-   \exdentamount=\defbodyindent
--  \begingroup\obeylines
- }
+-      # Backslashify any backslashes, double quotes, and dollar signs.
+-      # These are the only characters that are still specially
+-      # interpreted inside of double-quoted scrings.
+-      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
++	-shared | -static | -prefer-pic | -prefer-non-pic)
++	  func_append later " $arg"
++	  continue
++	  ;;
  
--\def\defvrparsebody#1#2#3#4 {%
--  \parsebodycommon{#1}{#2}{#3}%
--  \spacesplit{#3{#4}}%
-+\def\dodefunx#1{%
-+  % First, check whether we are in the right environment:
-+  \checkenv#1%
-+  %
-+  % As above, allow line break if we have multiple x headers in a row.
-+  % It's not a great place, though.
-+  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
-+  %
-+  % And now, it's time to reuse the body of the original defun:
-+  \expandafter\gobbledefun#1%
- }
-+\def\gobbledefun#1\startdefun{}
+-      # Double-quote args containing other shell metacharacters.
+-      # Many Bourne shells cannot handle close brackets correctly
+-      # in scan sets, so we specify it separately.
+-      case $lastarg in
+-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	lastarg="\"$lastarg\""
++	-no-suppress)
++	  suppress_opt=no
++	  continue
++	  ;;
++
++	-Xcompiler)
++	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
++	  continue      #  The current "srcfile" will either be retained or
++	  ;;            #  replaced later.  I would guess that would be a bug.
++
++	-Wc,*)
++	  func_stripname '-Wc,' '' "$arg"
++	  args=$func_stripname_result
++	  lastarg=
++	  save_ifs="$IFS"; IFS=','
++	  for arg in $args; do
++	    IFS="$save_ifs"
++	    func_append_quoted lastarg "$arg"
++	  done
++	  IFS="$save_ifs"
++	  func_stripname ' ' '' "$lastarg"
++	  lastarg=$func_stripname_result
++
++	  # Add the arguments to base_compile.
++	  func_append base_compile " $lastarg"
++	  continue
++	  ;;
++
++	*)
++	  # Accept the current argument as the source file.
++	  # The previous "srcfile" becomes the current argument.
++	  #
++	  lastarg="$srcfile"
++	  srcfile="$arg"
++	  ;;
++	esac  #  case $arg
+ 	;;
+-      esac
++      esac    #  case $arg_mode
  
--% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
--% type is just `struct', because we lose the braces in `{struct
--% termios}' when \spacesplit reads its undelimited argument.  Sigh.
--% \let\deftpparsebody=\defvrparsebody
--%
--% So, to get around this, we put \empty in with the type name.  That
--% way, TeX won't find exactly `{...}' as an undelimited argument, and
--% won't strip off the braces.
-+% \printdefunline \deffnheader{text}
- %
--\def\deftpparsebody #1#2#3#4 {%
--  \parsebodycommon{#1}{#2}{#3}%
--  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-+\def\printdefunline#1#2{%
-+  \begingroup
-+    % call \deffnheader:
-+    #1#2 \endheader
-+    % common ending:
-+    \interlinepenalty = 10000
-+    \advance\rightskip by 0pt plus 1fil
-+    \endgraf
-+    \nobreak\vskip -\parskip
-+    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
-+    % Some of the @defun-type tags do not enable magic parentheses,
-+    % rendering the following check redundant.  But we don't optimize.
-+    \checkparencounts
-+  \endgroup
- }
+-      # Add the previous argument to base_compile.
+-      if test -z "$base_compile"; then
+-	base_compile="$lastarg"
+-      else
+-	base_compile="$base_compile $lastarg"
+-      fi
+-    done
++      # Aesthetically quote the previous argument.
++      func_append_quoted base_compile "$lastarg"
++    done # for arg
  
--% Fine, but then we have to eventually remove the \empty *and* the
--% braces (if any).  That's what this does.
--%
--\def\removeemptybraces\empty#1\relax{#1}
-+\def\Edefun{\endgraf\medbreak}
+-    case $user_target in
+-    set)
++    case $arg_mode in
++    arg)
++      func_fatal_error "you must specify an argument for -Xcompile"
+       ;;
+-    no)
+-      # Get the name of the library object.
+-      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
++    target)
++      func_fatal_error "you must specify a target with \`-o'"
+       ;;
+     *)
+-      $echo "$modename: you must specify a target with \`-o'" 1>&2
+-      exit 1
++      # Get the name of the library object.
++      test -z "$libobj" && {
++	func_basename "$srcfile"
++	libobj="$func_basename_result"
++      }
+       ;;
+     esac
  
--% After \spacesplit has done its work, this is called -- #1 is the final
--% thing to call, #2 the type name (which starts with \empty), and #3
--% (which might be empty) the arguments.
-+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-+% the only thing remaining is to define \deffnheader.
- %
--\def\parsetpheaderline#1#2#3{%
--  #1{\removeemptybraces#2\relax}{#3}%
--}%
+     # Recognize several different file suffixes.
+     # If the user specifies -o file.o, it is replaced with file.lo
+-    xform='[cCFSfmso]'
+     case $libobj in
+-    *.ada) xform=ada ;;
+-    *.adb) xform=adb ;;
+-    *.ads) xform=ads ;;
+-    *.asm) xform=asm ;;
+-    *.c++) xform=c++ ;;
+-    *.cc) xform=cc ;;
+-    *.class) xform=class ;;
+-    *.cpp) xform=cpp ;;
+-    *.cxx) xform=cxx ;;
+-    *.f90) xform=f90 ;;
+-    *.for) xform=for ;;
+-    *.java) xform=java ;;
++    *.[cCFSifmso] | \
++    *.ada | *.adb | *.ads | *.asm | \
++    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
++    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
++      func_xform "$libobj"
++      libobj=$func_xform_result
++      ;;
+     esac
+ 
+-    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
 -
--\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV %
--\medbreak %
--% Define the end token that this defining construct specifies
--% so that it will exit this group.
--\def#1{\endgraf\endgroup\medbreak}%
--\def#2##1 ##2 {\def#4{##1}%
--\begingroup\obeylines\spacesplit{#3{##2}}}%
--\parindent=0in
--\advance\leftskip by \defbodyindent
--\exdentamount=\defbodyindent
--\begingroup\obeylines\spacesplit{#3{#5}}}
-+\def\makedefun#1{%
-+  \expandafter\let\csname E#1\endcsname = \Edefun
-+  \edef\temp{\noexpand\domakedefun
-+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
-+  \temp
-+}
+     case $libobj in
+-    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
++    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+     *)
+-      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+-      exit 1
++      func_fatal_error "cannot determine name of library object from \`$libobj'"
+       ;;
+     esac
  
--% Split up #2 at the first space token.
--% call #1 with two arguments:
--%  the first is all of #2 before the space token,
--%  the second is all of #2 after that space token.
--% If #2 contains no space token, all of it is passed as the first arg
--% and the second is passed as empty.
-+% \domakedefun \deffn \deffnx \deffnheader
-+%
-+% Define \deffn and \deffnx, without parameters.
-+% \deffnheader has to be defined explicitly.
-+%
-+\def\domakedefun#1#2#3{%
-+  \envdef#1{%
-+    \startdefun
-+    \parseargusing\activeparens{\printdefunline#3}%
-+  }%
-+  \def#2{\dodefunx#1}%
-+  \def#3%
-+}
+-    # Infer tagged configuration to use if any are available and
+-    # if one wasn't chosen via the "--tag" command line option.
+-    # Only attempt this if the compiler in the base compile
+-    # command doesn't match the default compiler.
+-    if test -n "$available_tags" && test -z "$tagname"; then
+-      case $base_compile in
+-      "$CC "*) ;;
+-      # Blanks in the command may have been stripped by the calling shell,
+-      # but not from the CC environment variable when ltconfig was run.
+-      "`$echo $CC` "*) ;;
+-      *)
+-        for z in $available_tags; do
+-          if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+-	    # Evaluate the configuration.
+-	    eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+-            case $base_compile in
+-	    "$CC "*)
+-              # The compiler in the base compile command matches
+-              # the one in the tagged configuration.
+-              # Assume this is the tagged configuration we want.
+-              tagname=$z
+-              break
+-              ;;
+-	    "`$echo $CC` "*)
+-	      tagname=$z
+-	      break
+-	      ;;
+-	    esac
+-          fi
+-        done
+-        # If $tagname still isn't set, then no tagged configuration
+-        # was found and let the user know that the "--tag" command
+-        # line option must be used.
+-        if test -z "$tagname"; then
+-          echo "$modename: unable to infer tagged configuration"
+-          echo "$modename: specify a tag with \`--tag'" 1>&2
+-	  exit 1
+-#        else
+-#          echo "$modename: using $tagname tagged configuration"
+-        fi
++    func_infer_tag $base_compile
++
++    for arg in $later; do
++      case $arg in
++      -shared)
++	test "$build_libtool_libs" != yes && \
++	  func_fatal_configuration "can not build a shared library"
++	build_old_libs=no
++	continue
++	;;
++
++      -static)
++	build_libtool_libs=no
++	build_old_libs=yes
++	continue
++	;;
++
++      -prefer-pic)
++	pic_mode=yes
++	continue
++	;;
++
++      -prefer-non-pic)
++	pic_mode=no
++	continue
+ 	;;
+       esac
+-    fi
++    done
  
--{\obeylines
--\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
--\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
--\ifx\relax #3%
--#1{#2}{}\else #1{#2}{#3#4}\fi}}
-+%%% Untyped functions:
+-    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+-    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+-    if test "X$xdir" = "X$obj"; then
+-      xdir=
+-    else
+-      xdir=$xdir/
+-    fi
++    func_quote_for_eval "$libobj"
++    test "X$libobj" != "X$func_quote_for_eval_result" \
++      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
++      && func_warning "libobj name \`$libobj' may not contain shell special characters."
++    func_dirname_and_basename "$obj" "/" ""
++    objname="$func_basename_result"
++    xdir="$func_dirname_result"
+     lobj=${xdir}$objdir/$objname
+ 
+-    if test -z "$base_compile"; then
+-      $echo "$modename: you must specify a compilation command" 1>&2
+-      $echo "$help" 1>&2
+-      exit 1
+-    fi
++    test -z "$base_compile" && \
++      func_fatal_help "you must specify a compilation command"
+ 
+     # Delete any leftover library objects.
+     if test "$build_old_libs" = yes; then
+@@ -556,16 +2120,13 @@
+       removelist="$lobj $libobj ${libobj}T"
+     fi
  
--% So much for the things common to all kinds of definitions.
-+% @deffn category name args
-+\makedefun{deffn}{\deffngeneral{}}
+-    $run $rm $removelist
+-    trap "$run $rm $removelist; exit 1" 1 2 15
+-
+     # On Cygwin there's no "real" PIC flag so we must build both object types
+     case $host_os in
+-    cygwin* | mingw* | pw32* | os2*)
++    cygwin* | mingw* | pw32* | os2* | cegcc*)
+       pic_mode=default
+       ;;
+     esac
+-    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
++    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+       # non-PIC code in shared libraries is not supported
+       pic_mode=default
+     fi
+@@ -573,10 +2134,8 @@
+     # Calculate the filename of the output object if compiler does
+     # not support -o with -c
+     if test "$compiler_c_o" = no; then
+-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
++      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+       lockfile="$output_obj.lock"
+-      removelist="$removelist $output_obj $lockfile"
+-      trap "$run $rm $removelist; exit 1" 1 2 15
+     else
+       output_obj=
+       need_locks=no
+@@ -586,13 +2145,13 @@
+     # Lock this critical section if it is needed
+     # We use this script file to make the link, it avoids creating a new file
+     if test "$need_locks" = yes; then
+-      until $run ln "$0" "$lockfile" 2>/dev/null; do
+-	$show "Waiting for $lockfile to be removed"
++      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
++	func_echo "Waiting for $lockfile to be removed"
+ 	sleep 2
+       done
+     elif test "$need_locks" = warn; then
+       if test -f "$lockfile"; then
+-	echo "\
++	$ECHO "\
+ *** ERROR, $lockfile exists and contains:
+ `cat $lockfile 2>/dev/null`
  
--% Define @defun.
-+% @deffn category class name args
-+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+@@ -603,29 +2162,21 @@
+ avoid parallel builds (make -j) in this platform, or get a better
+ compiler."
  
--% First, define the processing that is wanted for arguments of \defun
--% Use this to expand the args and terminate the paragraph they make up
-+% \defopon {category on}class name args
-+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+-	$run $rm $removelist
+-	exit 1
++	$opt_dry_run || $RM $removelist
++	exit $EXIT_FAILURE
+       fi
+-      echo $srcfile > "$lockfile"
+-    fi
+-
+-    if test -n "$fix_srcfile_path"; then
+-      eval srcfile=\"$fix_srcfile_path\"
++      func_append removelist " $output_obj"
++      $ECHO "$srcfile" > "$lockfile"
+     fi
  
--\def\defunargs#1{\functionparens \sl
--% Expand, preventing hyphenation at `-' chars.
--% Note that groups don't affect changes in \hyphenchar.
--% Set the font temporarily and use \font in case \setfont made \tensl a macro.
--{\tensl\hyphenchar\font=0}%
--#1%
--{\tensl\hyphenchar\font=45}%
--\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
--\interlinepenalty=10000
--\advance\rightskip by 0pt plus 1fil
--\endgraf\nobreak\vskip -\parskip\nobreak
-+% \deffngeneral {subind}category name args
-+%
-+\def\deffngeneral#1#2 #3 #4\endheader{%
-+  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
-+  \dosubind{fn}{\code{#3}}{#1}%
-+  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
- }
+-    $run $rm "$libobj" "${libobj}T"
+-
+-    # Create a libtool object file (analogous to a ".la" file),
+-    # but don't create it if we're doing a dry run.
+-    test -z "$run" && cat > ${libobj}T <<EOF
+-# $libobj - a libtool object file
+-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+-#
+-# Please DO NOT delete this file!
+-# It is necessary for linking the library.
++    $opt_dry_run || $RM $removelist
++    func_append removelist " $lockfile"
++    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
  
--\def\deftypefunargs #1{%
--% Expand, preventing hyphenation at `-' chars.
--% Note that groups don't affect changes in \hyphenchar.
--% Use \boldbraxnoamp, not \functionparens, so that & is not special.
--\boldbraxnoamp
--\tclose{#1}% avoid \code because of side effects on active chars
--\interlinepenalty=10000
--\advance\rightskip by 0pt plus 1fil
--\endgraf\nobreak\vskip -\parskip\nobreak
--}
-+%%% Typed functions:
+-# Name of the PIC object.
+-EOF
++    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
++    srcfile=$func_to_tool_file_result
++    func_quote_for_eval "$srcfile"
++    qsrcfile=$func_quote_for_eval_result
  
--% Do complete processing of one @defun or @defunx line already parsed.
-+% @deftypefn category type name args
-+\makedefun{deftypefn}{\deftypefngeneral{}}
+     # Only build a PIC object if we are building libtool libraries.
+     if test "$build_libtool_libs" = yes; then
+@@ -633,38 +2184,25 @@
+       fbsd_hideous_sh_bug=$base_compile
  
--% @deffn Command forward-char nchars
-+% @deftypeop category class type name args
-+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+       if test "$pic_mode" != no; then
+-	command="$base_compile $srcfile $pic_flag"
++	command="$base_compile $qsrcfile $pic_flag"
+       else
+ 	# Don't build PIC code
+-	command="$base_compile $srcfile"
++	command="$base_compile $qsrcfile"
+       fi
  
--\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-+% \deftypeopon {category on}class type name args
-+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+-      if test ! -d ${xdir}$objdir; then
+-	$show "$mkdir ${xdir}$objdir"
+-	$run $mkdir ${xdir}$objdir
+-	status=$?
+-	if test $status -ne 0 && test ! -d ${xdir}$objdir; then
+-	  exit $status
+-        fi
+-      fi 
++      func_mkdir_p "$xdir$objdir"
  
--\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
--\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
-+% \deftypefngeneral {subind}category type name args
-+%
-+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
-+  \dosubind{fn}{\code{#4}}{#1}%
-+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
- }
+       if test -z "$output_obj"; then
+-        # Place PIC objects in $objdir
+-        command="$command -o $lobj"
++	# Place PIC objects in $objdir
++	func_append command " -o $lobj"
+       fi
  
--% @defun == @deffn Function
+-      $run $rm "$lobj" "$output_obj"
 -
--\def\defun{\defparsebody\Edefun\defunx\defunheader}
-+%%% Typed variables:
+-      $show "$command"
+-      if $run eval "$command"; then :
+-      else
+-	test -n "$output_obj" && $run $rm $removelist
+-	exit 1
+-      fi
++      func_show_eval_locale "$command"	\
++          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
  
--\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{\putwordDeffunc}%
--\defunargs {#2}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
--}
-+% @deftypevr category type var args
-+\makedefun{deftypevr}{\deftypecvgeneral{}}
+       if test "$need_locks" = warn &&
+-	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+-	echo "\
++	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
++	$ECHO "\
+ *** ERROR, $lockfile contains:
+ `cat $lockfile 2>/dev/null`
  
--% @deftypefun int foobar (int @var{foo}, float @var{bar})
-+% @deftypecv category class type var args
-+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+@@ -678,63 +2216,42 @@
+ avoid parallel builds (make -j) in this platform, or get a better
+ compiler."
  
--\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-+% \deftypecvof {category of}class type var args
-+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+-	$run $rm $removelist
+-	exit 1
++	$opt_dry_run || $RM $removelist
++	exit $EXIT_FAILURE
+       fi
  
--% #1 is the data type.  #2 is the name and args.
--\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
--% #1 is the data type, #2 the name, #3 the args.
--\def\deftypefunheaderx #1#2 #3\relax{%
--\doind {fn}{\code{#2}}% Make entry in function index
--\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
--\deftypefunargs {#3}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
-+% \deftypecvgeneral {subind}category type var args
-+%
-+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
-+  \dosubind{vr}{\code{#4}}{#1}%
-+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
- }
+       # Just move the object if needed, then go on to compile the next one
+-      if test -n "$output_obj" && test "x$output_obj" != "x$lobj"; then
+-	$show "$mv $output_obj $lobj"
+-	if $run $mv $output_obj $lobj; then :
+-	else
+-	  error=$?
+-	  $run $rm $removelist
+-	  exit $error
+-	fi
++      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
++	func_show_eval '$MV "$output_obj" "$lobj"' \
++	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+       fi
+ 
+-      # Append the name of the PIC object to the libtool object file.
+-      test -z "$run" && cat >> ${libobj}T <<EOF
+-pic_object='$objdir/$objname'
+-
+-EOF
+-
+       # Allow error messages only from the first compilation.
+-      suppress_output=' >/dev/null 2>&1'
+-    else
+-      # No PIC object so indicate it doesn't exist in the libtool
+-      # object file.
+-      test -z "$run" && cat >> ${libobj}T <<EOF
+-pic_object=none
+-
+-EOF
++      if test "$suppress_opt" = yes; then
++	suppress_output=' >/dev/null 2>&1'
++      fi
+     fi
+ 
+     # Only build a position-dependent object if we build old libraries.
+     if test "$build_old_libs" = yes; then
+       if test "$pic_mode" != yes; then
+ 	# Don't build PIC code
+-	command="$base_compile $srcfile"
++	command="$base_compile $qsrcfile$pie_flag"
+       else
+-	command="$base_compile $srcfile $pic_flag"
++	command="$base_compile $qsrcfile $pic_flag"
+       fi
+       if test "$compiler_c_o" = yes; then
+-	command="$command -o $obj"
++	func_append command " -o $obj"
+       fi
  
--% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
--
--\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
--
--% \defheaderxcond#1\relax$$$
--% puts #1 in @code, followed by a space, but does nothing if #1 is null.
--\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi}
-+%%% Untyped variables:
+       # Suppress compiler output if we already did a PIC compilation.
+-      command="$command$suppress_output"
+-      $run $rm "$obj" "$output_obj"
+-      $show "$command"
+-      if $run eval "$command"; then :
+-      else
+-	$run $rm $removelist
+-	exit 1
+-      fi
++      func_append command "$suppress_output"
++      func_show_eval_locale "$command" \
++        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
  
--% #1 is the classification.  #2 is the data type.  #3 is the name and args.
--\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
--% #1 is the classification, #2 the data type, #3 the name, #4 the args.
--\def\deftypefnheaderx #1#2#3 #4\relax{%
--\doind {fn}{\code{#3}}% Make entry in function index
--\begingroup
--\normalparens % notably, turn off `&' magic, which prevents
--%               at least some C++ text from working
--\defname {\defheaderxcond#2\relax$$$#3}{#1}%
--\deftypefunargs {#4}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
--}
-+% @defvr category var args
-+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+       if test "$need_locks" = warn &&
+-	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+-	echo "\
++	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
++	$ECHO "\
+ *** ERROR, $lockfile contains:
+ `cat $lockfile 2>/dev/null`
  
--% @defmac == @deffn Macro
-+% @defcv category class var args
-+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+@@ -748,57 +2265,2828 @@
+ avoid parallel builds (make -j) in this platform, or get a better
+ compiler."
  
--\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-+% \defcvof {category of}class var args
-+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+-	$run $rm $removelist
+-	exit 1
++	$opt_dry_run || $RM $removelist
++	exit $EXIT_FAILURE
+       fi
  
--\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{\putwordDefmac}%
--\defunargs {#2}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
-+%%% Type:
-+% @deftp category name args
-+\makedefun{deftp}#1 #2 #3\endheader{%
-+  \doind{tp}{\code{#2}}%
-+  \defname{#1}{}{#2}\defunargs{#3\unskip}%
- }
+       # Just move the object if needed
+-      if test -n "$output_obj" && test "x$output_obj" != "x$obj"; then
+-	$show "$mv $output_obj $obj"
+-	if $run $mv $output_obj $obj; then :
++      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
++	func_show_eval '$MV "$output_obj" "$obj"' \
++	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
++      fi
++    fi
++
++    $opt_dry_run || {
++      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
++
++      # Unlock the critical section if it was locked
++      if test "$need_locks" != no; then
++	removelist=$lockfile
++        $RM "$lockfile"
++      fi
++    }
++
++    exit $EXIT_SUCCESS
++}
++
++$opt_help || {
++  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
++}
++
++func_mode_help ()
++{
++    # We need to display help for each of the modes.
++    case $opt_mode in
++      "")
++        # Generic help is extracted from the usage comments
++        # at the start of this file.
++        func_help
++        ;;
++
++      clean)
++        $ECHO \
++"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
++
++Remove files from the build directory.
++
++RM is the name of the program to use to delete files associated with each FILE
++(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
++to RM.
++
++If FILE is a libtool library, object or program, all the files associated
++with it are deleted. Otherwise, only FILE itself is deleted using RM."
++        ;;
++
++      compile)
++      $ECHO \
++"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
++
++Compile a source file into a libtool library object.
++
++This mode accepts the following additional options:
++
++  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
++  -no-suppress      do not suppress compiler output for multiple passes
++  -prefer-pic       try to build PIC objects only
++  -prefer-non-pic   try to build non-PIC objects only
++  -shared           do not build a \`.o' file suitable for static linking
++  -static           only build a \`.o' file suitable for static linking
++  -Wc,FLAG          pass FLAG directly to the compiler
++
++COMPILE-COMMAND is a command to be used in creating a \`standard' object file
++from the given SOURCEFILE.
++
++The output file name is determined by removing the directory component from
++SOURCEFILE, then substituting the C source code suffix \`.c' with the
++library object suffix, \`.lo'."
++        ;;
++
++      execute)
++        $ECHO \
++"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
++
++Automatically set library path, then run a program.
++
++This mode accepts the following additional options:
++
++  -dlopen FILE      add the directory containing FILE to the library path
++
++This mode sets the library path environment variable according to \`-dlopen'
++flags.
++
++If any of the ARGS are libtool executable wrappers, then they are translated
++into their corresponding uninstalled binary, and any of their required library
++directories are added to the library path.
++
++Then, COMMAND is executed, with ARGS as arguments."
++        ;;
++
++      finish)
++        $ECHO \
++"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
++
++Complete the installation of libtool libraries.
++
++Each LIBDIR is a directory that contains libtool libraries.
++
++The commands that this mode executes may require superuser privileges.  Use
++the \`--dry-run' option if you just want to see what would be executed."
++        ;;
++
++      install)
++        $ECHO \
++"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
++
++Install executables or libraries.
++
++INSTALL-COMMAND is the installation command.  The first component should be
++either the \`install' or \`cp' program.
++
++The following components of INSTALL-COMMAND are treated specially:
++
++  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
++
++The rest of the components are interpreted as arguments to that command (only
++BSD-compatible install options are recognized)."
++        ;;
++
++      link)
++        $ECHO \
++"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
++
++Link object files or libraries together to form another library, or to
++create an executable program.
++
++LINK-COMMAND is a command using the C compiler that you would use to create
++a program from several object files.
++
++The following components of LINK-COMMAND are treated specially:
++
++  -all-static       do not do any dynamic linking at all
++  -avoid-version    do not add a version suffix if possible
++  -bindir BINDIR    specify path to binaries directory (for systems where
++                    libraries must be found in the PATH setting at runtime)
++  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
++  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
++  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
++  -export-symbols SYMFILE
++                    try to export only the symbols listed in SYMFILE
++  -export-symbols-regex REGEX
++                    try to export only the symbols matching REGEX
++  -LLIBDIR          search LIBDIR for required installed libraries
++  -lNAME            OUTPUT-FILE requires the installed library libNAME
++  -module           build a library that can dlopened
++  -no-fast-install  disable the fast-install mode
++  -no-install       link a not-installable executable
++  -no-undefined     declare that a library does not refer to external symbols
++  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
++  -objectlist FILE  Use a list of object files found in FILE to specify objects
++  -precious-files-regex REGEX
++                    don't remove output files matching REGEX
++  -release RELEASE  specify package release information
++  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
++  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
++  -shared           only do dynamic linking of libtool libraries
++  -shrext SUFFIX    override the standard shared library file extension
++  -static           do not do any dynamic linking of uninstalled libtool libraries
++  -static-libtool-libs
++                    do not do any dynamic linking of libtool libraries
++  -version-info CURRENT[:REVISION[:AGE]]
++                    specify library version info [each variable defaults to 0]
++  -weak LIBNAME     declare that the target provides the LIBNAME interface
++  -Wc,FLAG
++  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
++  -Wl,FLAG
++  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
++  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
++
++All other options (arguments beginning with \`-') are ignored.
++
++Every other argument is treated as a filename.  Files ending in \`.la' are
++treated as uninstalled libtool libraries, other files are standard or library
++object files.
++
++If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
++only library objects (\`.lo' files) may be specified, and \`-rpath' is
++required, except when creating a convenience library.
++
++If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
++using \`ar' and \`ranlib', or on Windows using \`lib'.
++
++If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
++is created, otherwise an executable program is created."
++        ;;
++
++      uninstall)
++        $ECHO \
++"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
++
++Remove libraries from an installation directory.
++
++RM is the name of the program to use to delete files associated with each FILE
++(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
++to RM.
++
++If FILE is a libtool library, all the files associated with it are deleted.
++Otherwise, only FILE itself is deleted using RM."
++        ;;
++
++      *)
++        func_fatal_help "invalid operation mode \`$opt_mode'"
++        ;;
++    esac
++
++    echo
++    $ECHO "Try \`$progname --help' for more information about other modes."
++}
++
++# Now that we've collected a possible --mode arg, show help if necessary
++if $opt_help; then
++  if test "$opt_help" = :; then
++    func_mode_help
++  else
++    {
++      func_help noexit
++      for opt_mode in compile link execute install finish uninstall clean; do
++	func_mode_help
++      done
++    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
++    {
++      func_help noexit
++      for opt_mode in compile link execute install finish uninstall clean; do
++	echo
++	func_mode_help
++      done
++    } |
++    sed '1d
++      /^When reporting/,/^Report/{
++	H
++	d
++      }
++      $x
++      /information about other modes/d
++      /more detailed .*MODE/d
++      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
++  fi
++  exit $?
++fi
++
++
++# func_mode_execute arg...
++func_mode_execute ()
++{
++    $opt_debug
++    # The first argument is the command name.
++    cmd="$nonopt"
++    test -z "$cmd" && \
++      func_fatal_help "you must specify a COMMAND"
++
++    # Handle -dlopen flags immediately.
++    for file in $opt_dlopen; do
++      test -f "$file" \
++	|| func_fatal_help "\`$file' is not a file"
++
++      dir=
++      case $file in
++      *.la)
++	func_resolve_sysroot "$file"
++	file=$func_resolve_sysroot_result
++
++	# Check to see that this really is a libtool archive.
++	func_lalib_unsafe_p "$file" \
++	  || func_fatal_help "\`$lib' is not a valid libtool archive"
++
++	# Read the libtool library.
++	dlname=
++	library_names=
++	func_source "$file"
++
++	# Skip this library if it cannot be dlopened.
++	if test -z "$dlname"; then
++	  # Warn if it was a shared library.
++	  test -n "$library_names" && \
++	    func_warning "\`$file' was not linked with \`-export-dynamic'"
++	  continue
++	fi
++
++	func_dirname "$file" "" "."
++	dir="$func_dirname_result"
++
++	if test -f "$dir/$objdir/$dlname"; then
++	  func_append dir "/$objdir"
+ 	else
+-	  error=$?
+-	  $run $rm $removelist
+-	  exit $error
++	  if test ! -f "$dir/$dlname"; then
++	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
++	  fi
+ 	fi
++	;;
++
++      *.lo)
++	# Just add the directory containing the .lo file.
++	func_dirname "$file" "" "."
++	dir="$func_dirname_result"
++	;;
++
++      *)
++	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
++	continue
++	;;
++      esac
++
++      # Get the absolute pathname.
++      absdir=`cd "$dir" && pwd`
++      test -n "$absdir" && dir="$absdir"
++
++      # Now add the directory to shlibpath_var.
++      if eval "test -z \"\$$shlibpath_var\""; then
++	eval "$shlibpath_var=\"\$dir\""
++      else
++	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+       fi
++    done
  
--% @defspec == @deffn Special Form
--
--\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
--
--\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{\putwordDefspec}%
--\defunargs {#2}\endgroup %
--\catcode 61=\other % Turn off change made in \defparsebody
--}
-+% Remaining @defun-like shortcuts:
-+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
-+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
-+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
-+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
-+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
-+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
-+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
-+\makedefun{defmethod}{\defopon\putwordMethodon}
-+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
-+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
-+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+-      # Append the name of the non-PIC object the libtool object file.
+-      # Only append if the libtool object file exists.
+-      test -z "$run" && cat >> ${libobj}T <<EOF
+-# Name of the non-PIC object.
+-non_pic_object='$objname'
++    # This variable tells wrapper scripts just to set shlibpath_var
++    # rather than running their programs.
++    libtool_execute_magic="$magic"
  
--% @defop CATEGORY CLASS OPERATION ARG...
-+% \defname, which formats the name of the @def (not the args).
-+% #1 is the category, such as "Function".
-+% #2 is the return type, if any.
-+% #3 is the function name.
- %
--\def\defop #1 {\def\defoptype{#1}%
--\defopparsebody\Edefop\defopx\defopheader\defoptype}
-+% We are followed by (but not passed) the arguments, if any.
- %
--\def\defopheader#1#2#3{%
--\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
--\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
--\defunargs {#3}\endgroup %
-+\def\defname#1#2#3{%
-+  % Get the values of \leftskip and \rightskip as they were outside the @def...
-+  \advance\leftskip by -\defbodyindent
-+  %
-+  % How we'll format the type name.  Putting it in brackets helps
-+  % distinguish it from the body text that may end up on the next line
-+  % just below it.
-+  \def\temp{#1}%
-+  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
-+  %
-+  % Figure out line sizes for the paragraph shape.
-+  % The first line needs space for \box0; but if \rightskip is nonzero,
-+  % we need only space for the part of \box0 which exceeds it:
-+  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
-+  % The continuations:
-+  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
-+  % (plain.tex says that \dimen1 should be used only as global.)
-+  \parshape 2 0in \dimen0 \defargsindent \dimen2
-+  %
-+  % Put the type name to the right margin.
-+  \noindent
-+  \hbox to 0pt{%
-+    \hfil\box0 \kern-\hsize
-+    % \hsize has to be shortened this way:
-+    \kern\leftskip
-+    % Intentionally do not respect \rightskip, since we need the space.
-+  }%
-+  %
-+  % Allow all lines to be underfull without complaint:
-+  \tolerance=10000 \hbadness=10000
-+  \exdentamount=\defbodyindent
-+  {%
-+    % defun fonts. We use typewriter by default (used to be bold) because:
-+    % . we're printing identifiers, they should be in tt in principle.
-+    % . in languages with many accents, such as Czech or French, it's
-+    %   common to leave accents off identifiers.  The result looks ok in
-+    %   tt, but exceedingly strange in rm.
-+    % . we don't want -- and --- to be treated as ligatures.
-+    % . this still does not fix the ?` and !` ligatures, but so far no
-+    %   one has made identifiers using them :).
-+    \df \tt
-+    \def\temp{#2}% return value type
-+    \ifx\temp\empty\else \tclose{\temp} \fi
-+    #3% output function name
-+  }%
-+  {\rm\enskip}% hskip 0.5 em of \tenrm
-+  %
-+  \boldbrax
-+  % arguments will be output next, if any.
- }
+-EOF
++    # Check if any of the arguments is a wrapper script.
++    args=
++    for file
++    do
++      case $file in
++      -* | *.la | *.lo ) ;;
++      *)
++	# Do a test to see if this is really a libtool program.
++	if func_ltwrapper_script_p "$file"; then
++	  func_source "$file"
++	  # Transform arg to wrapped name.
++	  file="$progdir/$program"
++	elif func_ltwrapper_executable_p "$file"; then
++	  func_ltwrapper_scriptname "$file"
++	  func_source "$func_ltwrapper_scriptname_result"
++	  # Transform arg to wrapped name.
++	  file="$progdir/$program"
++	fi
++	;;
++      esac
++      # Quote arguments (to preserve shell metacharacters).
++      func_append_quoted args "$file"
++    done
++
++    if test "X$opt_dry_run" = Xfalse; then
++      if test -n "$shlibpath_var"; then
++	# Export the shlibpath_var.
++	eval "export $shlibpath_var"
++      fi
++
++      # Restore saved environment variables
++      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++      do
++	eval "if test \"\${save_$lt_var+set}\" = set; then
++                $lt_var=\$save_$lt_var; export $lt_var
++	      else
++		$lt_unset $lt_var
++	      fi"
++      done
++
++      # Now prepare to actually exec the command.
++      exec_cmd="\$cmd$args"
+     else
+-      # Append the name of the non-PIC object the libtool object file.
+-      # Only append if the libtool object file exists.
+-      test -z "$run" && cat >> ${libobj}T <<EOF
+-# Name of the non-PIC object.
+-non_pic_object=none
++      # Display what would be done.
++      if test -n "$shlibpath_var"; then
++	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
++	echo "export $shlibpath_var"
++      fi
++      $ECHO "$cmd$args"
++      exit $EXIT_SUCCESS
++    fi
++}
  
--% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
--%
--\def\deftypeop #1 {\def\deftypeopcategory{#1}%
--  \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
--                       \deftypeopcategory}
-+% Print arguments in slanted roman (not ttsl), inconsistently with using
-+% tt for the name.  This is because literal text is sometimes needed in
-+% the argument list (groff manual), and ttsl and tt are not very
-+% distinguishable.  Prevent hyphenation at `-' chars.
- %
--% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
--\def\deftypeopheader#1#2#3#4{%
--  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
--  \begingroup
--    \defname{\defheaderxcond#2\relax$$$#3}
--            {\deftypeopcategory\ \putwordon\ \code{#1}}%
--    \deftypefunargs{#4}%
--  \endgroup
-+\def\defunargs#1{%
-+  % use sl by default (not ttsl),
-+  % tt for the names.
-+  \df \sl \hyphenchar\font=0
-+  %
-+  % On the other hand, if an argument has two dashes (for instance), we
-+  % want a way to get ttsl.  Let's try @var for that.
-+  \let\var=\ttslanted
-+  #1%
-+  \sl\hyphenchar\font=45
- }
+-EOF
++test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
++
++
++# func_mode_finish arg...
++func_mode_finish ()
++{
++    $opt_debug
++    libs=
++    libdirs=
++    admincmds=
++
++    for opt in "$nonopt" ${1+"$@"}
++    do
++      if test -d "$opt"; then
++	func_append libdirs " $opt"
++
++      elif test -f "$opt"; then
++	if func_lalib_unsafe_p "$opt"; then
++	  func_append libs " $opt"
++	else
++	  func_warning "\`$opt' is not a valid libtool archive"
++	fi
++
++      else
++	func_fatal_error "invalid argument \`$opt'"
++      fi
++    done
++
++    if test -n "$libs"; then
++      if test -n "$lt_sysroot"; then
++        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
++        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
++      else
++        sysroot_cmd=
++      fi
++
++      # Remove sysroot references
++      if $opt_dry_run; then
++        for lib in $libs; do
++          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
++        done
++      else
++        tmpdir=`func_mktempdir`
++        for lib in $libs; do
++	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
++	    > $tmpdir/tmp-la
++	  mv -f $tmpdir/tmp-la $lib
++	done
++        ${RM}r "$tmpdir"
++      fi
+     fi
  
--% @deftypemethod CLASS TYPE METHOD ARG...
--%
--\def\deftypemethod{%
--  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-+% We want ()&[] to print specially on the defun line.
- %
--% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
--\def\deftypemethodheader#1#2#3#4{%
--  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
--  \begingroup
--    \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
--    \deftypefunargs{#4}%
--  \endgroup
-+\def\activeparens{%
-+  \catcode`\(=\active \catcode`\)=\active
-+  \catcode`\[=\active \catcode`\]=\active
-+  \catcode`\&=\active
- }
+-    $run $mv "${libobj}T" "${libobj}"
++    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
++      for libdir in $libdirs; do
++	if test -n "$finish_cmds"; then
++	  # Do each command in the finish commands.
++	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
++'"$cmd"'"'
++	fi
++	if test -n "$finish_eval"; then
++	  # Do the single finish_eval.
++	  eval cmds=\"$finish_eval\"
++	  $opt_dry_run || eval "$cmds" || func_append admincmds "
++       $cmds"
++	fi
++      done
++    fi
  
--% @deftypeivar CLASS TYPE VARNAME
--%
--\def\deftypeivar{%
--  \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
--%
--% #1 is the class name, #2 the data type, #3 the variable name.
--\def\deftypeivarheader#1#2#3{%
--  \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
--  \begingroup
--    \defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
--    \defvarargs{#3}%
--  \endgroup
--}
-+% Make control sequences which act like normal parenthesis chars.
-+\let\lparen = ( \let\rparen = )
+-    # Unlock the critical section if it was locked
+-    if test "$need_locks" != no; then
+-      $run $rm "$lockfile"
++    # Exit here if they wanted silent mode.
++    $opt_silent && exit $EXIT_SUCCESS
++
++    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
++      echo "----------------------------------------------------------------------"
++      echo "Libraries have been installed in:"
++      for libdir in $libdirs; do
++	$ECHO "   $libdir"
++      done
++      echo
++      echo "If you ever happen to want to link against installed libraries"
++      echo "in a given directory, LIBDIR, you must either use libtool, and"
++      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
++      echo "flag during linking and do at least one of the following:"
++      if test -n "$shlibpath_var"; then
++	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
++	echo "     during execution"
++      fi
++      if test -n "$runpath_var"; then
++	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
++	echo "     during linking"
++      fi
++      if test -n "$hardcode_libdir_flag_spec"; then
++	libdir=LIBDIR
++	eval flag=\"$hardcode_libdir_flag_spec\"
++
++	$ECHO "   - use the \`$flag' linker flag"
++      fi
++      if test -n "$admincmds"; then
++	$ECHO "   - have your system administrator run these commands:$admincmds"
++      fi
++      if test -f /etc/ld.so.conf; then
++	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
++      fi
++      echo
++
++      echo "See any operating system documentation about shared libraries for"
++      case $host in
++	solaris2.[6789]|solaris2.1[0-9])
++	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
++	  echo "pages."
++	  ;;
++	*)
++	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
++	  ;;
++      esac
++      echo "----------------------------------------------------------------------"
+     fi
++    exit $EXIT_SUCCESS
++}
  
--% @defmethod == @defop Method
--%
--\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
--%
--% #1 is the class name, #2 the method name, #3 the args.
--\def\defmethodheader#1#2#3{%
--  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
--  \begingroup
--    \defname{#2}{\putwordMethodon\ \code{#1}}%
--    \defunargs{#3}%
--  \endgroup
-+% Be sure that we always have a definition for `(', etc.  For example,
-+% if the fn name has parens in it, \boldbrax will not be in effect yet,
-+% so TeX would otherwise complain about undefined control sequence.
+-    exit 0
++test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
++
++
++# func_mode_install arg...
++func_mode_install ()
 +{
-+  \activeparens
-+  \global\let(=\lparen \global\let)=\rparen
-+  \global\let[=\lbrack \global\let]=\rbrack
-+  \global\let& = \&
++    $opt_debug
++    # There may be an optional sh(1) argument at the beginning of
++    # install_prog (especially on Windows NT).
++    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
++       # Allow the use of GNU shtool's install command.
++       case $nonopt in *shtool*) :;; *) false;; esac; then
++      # Aesthetically quote it.
++      func_quote_for_eval "$nonopt"
++      install_prog="$func_quote_for_eval_result "
++      arg=$1
++      shift
++    else
++      install_prog=
++      arg=$nonopt
++    fi
++
++    # The real first argument should be the name of the installation program.
++    # Aesthetically quote it.
++    func_quote_for_eval "$arg"
++    func_append install_prog "$func_quote_for_eval_result"
++    install_shared_prog=$install_prog
++    case " $install_prog " in
++      *[\\\ /]cp\ *) install_cp=: ;;
++      *) install_cp=false ;;
++    esac
++
++    # We need to accept at least all the BSD install flags.
++    dest=
++    files=
++    opts=
++    prev=
++    install_type=
++    isdir=no
++    stripme=
++    no_mode=:
++    for arg
++    do
++      arg2=
++      if test -n "$dest"; then
++	func_append files " $dest"
++	dest=$arg
++	continue
++      fi
++
++      case $arg in
++      -d) isdir=yes ;;
++      -f)
++	if $install_cp; then :; else
++	  prev=$arg
++	fi
++	;;
++      -g | -m | -o)
++	prev=$arg
++	;;
++      -s)
++	stripme=" -s"
++	continue
++	;;
++      -*)
++	;;
++      *)
++	# If the previous option needed an argument, then skip it.
++	if test -n "$prev"; then
++	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
++	    arg2=$install_override_mode
++	    no_mode=false
++	  fi
++	  prev=
++	else
++	  dest=$arg
++	  continue
++	fi
++	;;
++      esac
++
++      # Aesthetically quote the argument.
++      func_quote_for_eval "$arg"
++      func_append install_prog " $func_quote_for_eval_result"
++      if test -n "$arg2"; then
++	func_quote_for_eval "$arg2"
++      fi
++      func_append install_shared_prog " $func_quote_for_eval_result"
++    done
++
++    test -z "$install_prog" && \
++      func_fatal_help "you must specify an install program"
++
++    test -n "$prev" && \
++      func_fatal_help "the \`$prev' option requires an argument"
++
++    if test -n "$install_override_mode" && $no_mode; then
++      if $install_cp; then :; else
++	func_quote_for_eval "$install_override_mode"
++	func_append install_shared_prog " -m $func_quote_for_eval_result"
++      fi
++    fi
++
++    if test -z "$files"; then
++      if test -z "$dest"; then
++	func_fatal_help "no file or destination specified"
++      else
++	func_fatal_help "you must specify a destination"
++      fi
++    fi
++
++    # Strip any trailing slash from the destination.
++    func_stripname '' '/' "$dest"
++    dest=$func_stripname_result
++
++    # Check to see that the destination is a directory.
++    test -d "$dest" && isdir=yes
++    if test "$isdir" = yes; then
++      destdir="$dest"
++      destname=
++    else
++      func_dirname_and_basename "$dest" "" "."
++      destdir="$func_dirname_result"
++      destname="$func_basename_result"
++
++      # Not a directory, so check to see that there is only one file specified.
++      set dummy $files; shift
++      test "$#" -gt 1 && \
++	func_fatal_help "\`$dest' is not a directory"
++    fi
++    case $destdir in
++    [\\/]* | [A-Za-z]:[\\/]*) ;;
++    *)
++      for file in $files; do
++	case $file in
++	*.lo) ;;
++	*)
++	  func_fatal_help "\`$destdir' must be an absolute directory name"
++	  ;;
++	esac
++      done
++      ;;
++    esac
++
++    # This variable tells wrapper scripts just to set variables rather
++    # than running their programs.
++    libtool_install_magic="$magic"
++
++    staticlibs=
++    future_libdirs=
++    current_libdirs=
++    for file in $files; do
++
++      # Do each installation.
++      case $file in
++      *.$libext)
++	# Do the static libraries later.
++	func_append staticlibs " $file"
++	;;
++
++      *.la)
++	func_resolve_sysroot "$file"
++	file=$func_resolve_sysroot_result
++
++	# Check to see that this really is a libtool archive.
++	func_lalib_unsafe_p "$file" \
++	  || func_fatal_help "\`$file' is not a valid libtool archive"
++
++	library_names=
++	old_library=
++	relink_command=
++	func_source "$file"
++
++	# Add the libdir to current_libdirs if it is the destination.
++	if test "X$destdir" = "X$libdir"; then
++	  case "$current_libdirs " in
++	  *" $libdir "*) ;;
++	  *) func_append current_libdirs " $libdir" ;;
++	  esac
++	else
++	  # Note the libdir as a future libdir.
++	  case "$future_libdirs " in
++	  *" $libdir "*) ;;
++	  *) func_append future_libdirs " $libdir" ;;
++	  esac
++	fi
++
++	func_dirname "$file" "/" ""
++	dir="$func_dirname_result"
++	func_append dir "$objdir"
++
++	if test -n "$relink_command"; then
++	  # Determine the prefix the user has applied to our future dir.
++	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
++
++	  # Don't allow the user to place us outside of our expected
++	  # location b/c this prevents finding dependent libraries that
++	  # are installed to the same prefix.
++	  # At present, this check doesn't affect windows .dll's that
++	  # are installed into $libdir/../bin (currently, that works fine)
++	  # but it's something to keep an eye on.
++	  test "$inst_prefix_dir" = "$destdir" && \
++	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
++
++	  if test -n "$inst_prefix_dir"; then
++	    # Stick the inst_prefix_dir data into the link command.
++	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
++	  else
++	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
++	  fi
++
++	  func_warning "relinking \`$file'"
++	  func_show_eval "$relink_command" \
++	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
++	fi
++
++	# See the names of the shared library.
++	set dummy $library_names; shift
++	if test -n "$1"; then
++	  realname="$1"
++	  shift
++
++	  srcname="$realname"
++	  test -n "$relink_command" && srcname="$realname"T
++
++	  # Install the shared library and build the symlinks.
++	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
++	      'exit $?'
++	  tstripme="$stripme"
++	  case $host_os in
++	  cygwin* | mingw* | pw32* | cegcc*)
++	    case $realname in
++	    *.dll.a)
++	      tstripme=""
++	      ;;
++	    esac
++	    ;;
++	  esac
++	  if test -n "$tstripme" && test -n "$striplib"; then
++	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
++	  fi
++
++	  if test "$#" -gt 0; then
++	    # Delete the old symlinks, and create new ones.
++	    # Try `ln -sf' first, because the `ln' binary might depend on
++	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
++	    # so we also need to try rm && ln -s.
++	    for linkname
++	    do
++	      test "$linkname" != "$realname" \
++		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
++	    done
++	  fi
++
++	  # Do each command in the postinstall commands.
++	  lib="$destdir/$realname"
++	  func_execute_cmds "$postinstall_cmds" 'exit $?'
++	fi
++
++	# Install the pseudo-library for information purposes.
++	func_basename "$file"
++	name="$func_basename_result"
++	instname="$dir/$name"i
++	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
++
++	# Maybe install the static library, too.
++	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
++	;;
++
++      *.lo)
++	# Install (i.e. copy) a libtool object.
++
++	# Figure out destination file name, if it wasn't already specified.
++	if test -n "$destname"; then
++	  destfile="$destdir/$destname"
++	else
++	  func_basename "$file"
++	  destfile="$func_basename_result"
++	  destfile="$destdir/$destfile"
++	fi
 +
-+  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-+  \gdef\magicamp{\let&=\amprm}
- }
- 
--% @defcv {Class Option} foo-class foo-flag
-+\newcount\parencount
- 
--\def\defcv #1 {\def\defcvtype{#1}%
--\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-+% If we encounter &foo, then turn on ()-hacking afterwards
-+\newif\ifampseen
-+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
- 
--\def\defcvarheader #1#2#3{%
--\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
--\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
--\defvarargs {#3}\endgroup %
-+\def\parenfont{%
-+  \ifampseen
-+    % At the first level, print parens in roman,
-+    % otherwise use the default font.
-+    \ifnum \parencount=1 \rm \fi
-+  \else
-+    % The \sf parens (in \boldbrax) actually are a little bolder than
-+    % the contained text.  This is especially needed for [ and ] .
-+    \sf
-+  \fi
- }
--
--% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
--%
--\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
--%
--\def\defivarheader#1#2#3{%
--  \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
--  \begingroup
--    \defname{#2}{\putwordInstanceVariableof\ #1}%
--    \defvarargs{#3}%
--  \endgroup
-+\def\infirstlevel#1{%
-+  \ifampseen
-+    \ifnum\parencount=1
-+      #1%
-+    \fi
-+  \fi
- }
-+\def\bfafterword#1 {#1 \bf}
- 
--% @defvar
--% First, define the processing that is wanted for arguments of @defvar.
--% This is actually simple: just print them in roman.
--% This must expand the args and terminate the paragraph they make up
--\def\defvarargs #1{\normalparens #1%
--\interlinepenalty=10000
--\endgraf\nobreak\vskip -\parskip\nobreak}
--
--% @defvr Counter foo-count
--
--\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
--
--\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
--\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
--
--% @defvar == @defvr Variable
--
--\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
--
--\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{\putwordDefvar}%
--\defvarargs {#2}\endgroup %
-+\def\opnr{%
-+  \global\advance\parencount by 1
-+  {\parenfont(}%
-+  \infirstlevel \bfafterword
- }
--
--% @defopt == @defvr {User Option}
--
--\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
--
--\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{\putwordDefopt}%
--\defvarargs {#2}\endgroup %
-+\def\clnr{%
-+  {\parenfont)}%
-+  \infirstlevel \sl
-+  \global\advance\parencount by -1
- }
- 
--% @deftypevar int foobar
--
--\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
--
--% #1 is the data type.  #2 is the name, perhaps followed by text that
--% is actually part of the data type, which should not be put into the index.
--\def\deftypevarheader #1#2{%
--\dovarind#2 \relax% Make entry in variables index
--\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
--\interlinepenalty=10000
--\endgraf\nobreak\vskip -\parskip\nobreak
--\endgroup}
--\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
--
--% @deftypevr {Global Flag} int enable
--
--\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
--
--\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
--\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
--\interlinepenalty=10000
--\endgraf\nobreak\vskip -\parskip\nobreak
--\endgroup}
--
--% Now define @deftp
--% Args are printed in bold, a slight difference from @defvar.
--
--\def\deftpargs #1{\bf \defvarargs{#1}}
--
--% @deftp Class window height width ...
--
--\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
--
--\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
--\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-+\newcount\brackcount
-+\def\lbrb{%
-+  \global\advance\brackcount by 1
-+  {\bf[}%
-+}
-+\def\rbrb{%
-+  {\bf]}%
-+  \global\advance\brackcount by -1
-+}
- 
--% These definitions are used if you use @defunx (etc.)
--% anywhere other than immediately after a @defun or @defunx.
--% 
--\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
--\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
--\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
--\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
--\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
--\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
--\def\defopx#1 {\errmessage{@defopx in invalid context}}
--\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
--\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
--\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
--\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
--\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
--\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
--\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
--\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
--\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
--\def\defunx#1 {\errmessage{@defunx in invalid context}}
--\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
--\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-+\def\checkparencounts{%
-+  \ifnum\parencount=0 \else \badparencount \fi
-+  \ifnum\brackcount=0 \else \badbrackcount \fi
-+}
-+% these should not use \errmessage; the glibc manual, at least, actually
-+% has such constructs (when documenting function pointers).
-+\def\badparencount{%
-+  \message{Warning: unbalanced parentheses in @def...}%
-+  \global\parencount=0
-+}
-+\def\badbrackcount{%
-+  \message{Warning: unbalanced square brackets in @def...}%
-+  \global\brackcount=0
++	# Deduce the name of the destination old-style object file.
++	case $destfile in
++	*.lo)
++	  func_lo2o "$destfile"
++	  staticdest=$func_lo2o_result
++	  ;;
++	*.$objext)
++	  staticdest="$destfile"
++	  destfile=
++	  ;;
++	*)
++	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
++	  ;;
++	esac
++
++	# Install the libtool object if requested.
++	test -n "$destfile" && \
++	  func_show_eval "$install_prog $file $destfile" 'exit $?'
++
++	# Install the old object if enabled.
++	if test "$build_old_libs" = yes; then
++	  # Deduce the name of the old-style object file.
++	  func_lo2o "$file"
++	  staticobj=$func_lo2o_result
++	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
++	fi
++	exit $EXIT_SUCCESS
++	;;
++
++      *)
++	# Figure out destination file name, if it wasn't already specified.
++	if test -n "$destname"; then
++	  destfile="$destdir/$destname"
++	else
++	  func_basename "$file"
++	  destfile="$func_basename_result"
++	  destfile="$destdir/$destfile"
++	fi
++
++	# If the file is missing, and there is a .exe on the end, strip it
++	# because it is most likely a libtool script we actually want to
++	# install
++	stripped_ext=""
++	case $file in
++	  *.exe)
++	    if test ! -f "$file"; then
++	      func_stripname '' '.exe' "$file"
++	      file=$func_stripname_result
++	      stripped_ext=".exe"
++	    fi
++	    ;;
++	esac
++
++	# Do a test to see if this is really a libtool program.
++	case $host in
++	*cygwin* | *mingw*)
++	    if func_ltwrapper_executable_p "$file"; then
++	      func_ltwrapper_scriptname "$file"
++	      wrapper=$func_ltwrapper_scriptname_result
++	    else
++	      func_stripname '' '.exe' "$file"
++	      wrapper=$func_stripname_result
++	    fi
++	    ;;
++	*)
++	    wrapper=$file
++	    ;;
++	esac
++	if func_ltwrapper_script_p "$wrapper"; then
++	  notinst_deplibs=
++	  relink_command=
++
++	  func_source "$wrapper"
++
++	  # Check the variables that should have been set.
++	  test -z "$generated_by_libtool_version" && \
++	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
++
++	  finalize=yes
++	  for lib in $notinst_deplibs; do
++	    # Check to see that each library is installed.
++	    libdir=
++	    if test -f "$lib"; then
++	      func_source "$lib"
++	    fi
++	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
++	    if test -n "$libdir" && test ! -f "$libfile"; then
++	      func_warning "\`$lib' has not been installed in \`$libdir'"
++	      finalize=no
++	    fi
++	  done
++
++	  relink_command=
++	  func_source "$wrapper"
++
++	  outputname=
++	  if test "$fast_install" = no && test -n "$relink_command"; then
++	    $opt_dry_run || {
++	      if test "$finalize" = yes; then
++	        tmpdir=`func_mktempdir`
++		func_basename "$file$stripped_ext"
++		file="$func_basename_result"
++	        outputname="$tmpdir/$file"
++	        # Replace the output file specification.
++	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
++
++	        $opt_silent || {
++	          func_quote_for_expand "$relink_command"
++		  eval "func_echo $func_quote_for_expand_result"
++	        }
++	        if eval "$relink_command"; then :
++	          else
++		  func_error "error: relink \`$file' with the above command before installing it"
++		  $opt_dry_run || ${RM}r "$tmpdir"
++		  continue
++	        fi
++	        file="$outputname"
++	      else
++	        func_warning "cannot relink \`$file'"
++	      fi
++	    }
++	  else
++	    # Install the binary that we compiled earlier.
++	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
++	  fi
++	fi
++
++	# remove .exe since cygwin /usr/bin/install will append another
++	# one anyway
++	case $install_prog,$host in
++	*/usr/bin/install*,*cygwin*)
++	  case $file:$destfile in
++	  *.exe:*.exe)
++	    # this is ok
++	    ;;
++	  *.exe:*)
++	    destfile=$destfile.exe
++	    ;;
++	  *:*.exe)
++	    func_stripname '' '.exe' "$destfile"
++	    destfile=$func_stripname_result
++	    ;;
++	  esac
++	  ;;
++	esac
++	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
++	$opt_dry_run || if test -n "$outputname"; then
++	  ${RM}r "$tmpdir"
++	fi
++	;;
++      esac
++    done
++
++    for file in $staticlibs; do
++      func_basename "$file"
++      name="$func_basename_result"
++
++      # Set up the ranlib parameters.
++      oldlib="$destdir/$name"
++
++      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
++
++      if test -n "$stripme" && test -n "$old_striplib"; then
++	func_show_eval "$old_striplib $oldlib" 'exit $?'
++      fi
++
++      # Do each command in the postinstall commands.
++      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
++    done
++
++    test -n "$future_libdirs" && \
++      func_warning "remember to run \`$progname --finish$future_libdirs'"
++
++    if test -n "$current_libdirs"; then
++      # Maybe just do a dry run.
++      $opt_dry_run && current_libdirs=" -n$current_libdirs"
++      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
++    else
++      exit $EXIT_SUCCESS
++    fi
 +}
- 
- 
- \message{macros,}
-@@ -4850,42 +6552,68 @@
- % To do this right we need a feature of e-TeX, \scantokens,
- % which we arrange to emulate with a temporary file in ordinary TeX.
- \ifx\eTeXversion\undefined
-- \newwrite\macscribble
-- \def\scanmacro#1{%
--   \begingroup \newlinechar`\^^M
--   % Undo catcode changes of \startcontents and \doprintindex
--   \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
--   % Append \endinput to make sure that TeX does not see the ending newline.
--   \toks0={#1\endinput}%
--   \immediate\openout\macscribble=\jobname.tmp
--   \immediate\write\macscribble{\the\toks0}%
--   \immediate\closeout\macscribble
--   \let\xeatspaces\eatspaces
--   \input \jobname.tmp
--   \endgroup
--}
--\else
--\def\scanmacro#1{%
--\begingroup \newlinechar`\^^M
--% Undo catcode changes of \startcontents and \doprintindex
--\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
--\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-+  \newwrite\macscribble
-+  \def\scantokens#1{%
-+    \toks0={#1}%
-+    \immediate\openout\macscribble=\jobname.tmp
-+    \immediate\write\macscribble{\the\toks0}%
-+    \immediate\closeout\macscribble
-+    \input \jobname.tmp
-+  }
- \fi
- 
-+\def\scanmacro#1{%
-+  \begingroup
-+    \newlinechar`\^^M
-+    \let\xeatspaces\eatspaces
-+    % Undo catcode changes of \startcontents and \doprintindex
-+    % When called from @insertcopying or (short)caption, we need active
-+    % backslash to get it printed correctly.  Previously, we had
-+    % \catcode`\\=\other instead.  We'll see whether a problem appears
-+    % with macro expansion.				--kasal, 19aug04
-+    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
-+    % ... and \example
-+    \spaceisspace
-+    %
-+    % Append \endinput to make sure that TeX does not see the ending newline.
-+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
-+    %							--kasal, 29nov03
-+    \scantokens{#1\endinput}%
-+  \endgroup
++
++test "$opt_mode" = install && func_mode_install ${1+"$@"}
++
++
++# func_generate_dlsyms outputname originator pic_p
++# Extract symbols from dlprefiles and create ${outputname}S.o with
++# a dlpreopen symbol table.
++func_generate_dlsyms ()
++{
++    $opt_debug
++    my_outputname="$1"
++    my_originator="$2"
++    my_pic_p="${3-no}"
++    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
++    my_dlsyms=
++
++    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
++      if test -n "$NM" && test -n "$global_symbol_pipe"; then
++	my_dlsyms="${my_outputname}S.c"
++      else
++	func_error "not configured to extract global symbols from dlpreopened files"
++      fi
++    fi
++
++    if test -n "$my_dlsyms"; then
++      case $my_dlsyms in
++      "") ;;
++      *.c)
++	# Discover the nlist of each of the dlfiles.
++	nlist="$output_objdir/${my_outputname}.nm"
++
++	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
++
++	# Parse the name list into a source file.
++	func_verbose "creating $output_objdir/$my_dlsyms"
++
++	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
++/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
++/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
++
++#ifdef __cplusplus
++extern \"C\" {
++#endif
++
++#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
++#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
++#endif
++
++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
++#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
++/* DATA imports from DLLs on WIN32 con't be const, because runtime
++   relocations are performed -- see ld's documentation on pseudo-relocs.  */
++# define LT_DLSYM_CONST
++#elif defined(__osf__)
++/* This system does not cope well with relocations in const data.  */
++# define LT_DLSYM_CONST
++#else
++# define LT_DLSYM_CONST const
++#endif
++
++/* External symbol declarations for the compiler. */\
++"
++
++	if test "$dlself" = yes; then
++	  func_verbose "generating symbol list for \`$output'"
++
++	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
++
++	  # Add our own program objects to the symbol list.
++	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
++	  for progfile in $progfiles; do
++	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
++	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
++	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
++	  done
++
++	  if test -n "$exclude_expsyms"; then
++	    $opt_dry_run || {
++	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
++	      eval '$MV "$nlist"T "$nlist"'
++	    }
++	  fi
++
++	  if test -n "$export_symbols_regex"; then
++	    $opt_dry_run || {
++	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
++	      eval '$MV "$nlist"T "$nlist"'
++	    }
++	  fi
++
++	  # Prepare the list of exported symbols
++	  if test -z "$export_symbols"; then
++	    export_symbols="$output_objdir/$outputname.exp"
++	    $opt_dry_run || {
++	      $RM $export_symbols
++	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
++	      case $host in
++	      *cygwin* | *mingw* | *cegcc* )
++                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
++                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
++	        ;;
++	      esac
++	    }
++	  else
++	    $opt_dry_run || {
++	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
++	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
++	      eval '$MV "$nlist"T "$nlist"'
++	      case $host in
++	        *cygwin* | *mingw* | *cegcc* )
++	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
++	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
++	          ;;
++	      esac
++	    }
++	  fi
++	fi
++
++	for dlprefile in $dlprefiles; do
++	  func_verbose "extracting global C symbols from \`$dlprefile'"
++	  func_basename "$dlprefile"
++	  name="$func_basename_result"
++          case $host in
++	    *cygwin* | *mingw* | *cegcc* )
++	      # if an import library, we need to obtain dlname
++	      if func_win32_import_lib_p "$dlprefile"; then
++	        func_tr_sh "$dlprefile"
++	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
++	        dlprefile_dlbasename=""
++	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
++	          # Use subshell, to avoid clobbering current variable values
++	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
++	          if test -n "$dlprefile_dlname" ; then
++	            func_basename "$dlprefile_dlname"
++	            dlprefile_dlbasename="$func_basename_result"
++	          else
++	            # no lafile. user explicitly requested -dlpreopen <import library>.
++	            $sharedlib_from_linklib_cmd "$dlprefile"
++	            dlprefile_dlbasename=$sharedlib_from_linklib_result
++	          fi
++	        fi
++	        $opt_dry_run || {
++	          if test -n "$dlprefile_dlbasename" ; then
++	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
++	          else
++	            func_warning "Could not compute DLL name from $name"
++	            eval '$ECHO ": $name " >> "$nlist"'
++	          fi
++	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
++	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
++	        }
++	      else # not an import lib
++	        $opt_dry_run || {
++	          eval '$ECHO ": $name " >> "$nlist"'
++	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++	        }
++	      fi
++	    ;;
++	    *)
++	      $opt_dry_run || {
++	        eval '$ECHO ": $name " >> "$nlist"'
++	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
++	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++	      }
++	    ;;
++          esac
++	done
++
++	$opt_dry_run || {
++	  # Make sure we have at least an empty file.
++	  test -f "$nlist" || : > "$nlist"
++
++	  if test -n "$exclude_expsyms"; then
++	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
++	    $MV "$nlist"T "$nlist"
++	  fi
++
++	  # Try sorting and uniquifying the output.
++	  if $GREP -v "^: " < "$nlist" |
++	      if sort -k 3 </dev/null >/dev/null 2>&1; then
++		sort -k 3
++	      else
++		sort +2
++	      fi |
++	      uniq > "$nlist"S; then
++	    :
++	  else
++	    $GREP -v "^: " < "$nlist" > "$nlist"S
++	  fi
++
++	  if test -f "$nlist"S; then
++	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
++	  else
++	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
++	  fi
++
++	  echo >> "$output_objdir/$my_dlsyms" "\
++
++/* The mapping between symbol names and symbols.  */
++typedef struct {
++  const char *name;
++  void *address;
++} lt_dlsymlist;
++extern LT_DLSYM_CONST lt_dlsymlist
++lt_${my_prefix}_LTX_preloaded_symbols[];
++LT_DLSYM_CONST lt_dlsymlist
++lt_${my_prefix}_LTX_preloaded_symbols[] =
++{\
++  { \"$my_originator\", (void *) 0 },"
++
++	  case $need_lib_prefix in
++	  no)
++	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
++	    ;;
++	  *)
++	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
++	    ;;
++	  esac
++	  echo >> "$output_objdir/$my_dlsyms" "\
++  {0, (void *) 0}
++};
++
++/* This works around a problem in FreeBSD linker */
++#ifdef FREEBSD_WORKAROUND
++static const void *lt_preloaded_setup() {
++  return lt_${my_prefix}_LTX_preloaded_symbols;
 +}
++#endif
 +
-+\def\scanexp#1{%
-+  \edef\temp{\noexpand\scanmacro{#1}}%
-+  \temp
++#ifdef __cplusplus
 +}
++#endif\
++"
++	} # !$opt_dry_run
 +
- \newcount\paramno   % Count of parameters
- \newtoks\macname    % Macro name
- \newif\ifrecursive  % Is it recursive?
--\def\macrolist{}    % List of all defined macros in the form
--                    % \do\macro1\do\macro2...
++	pic_flag_for_symtable=
++	case "$compile_command " in
++	*" -static "*) ;;
++	*)
++	  case $host in
++	  # compiling the symbol table file with pic_flag works around
++	  # a FreeBSD bug that causes programs to crash when -lm is
++	  # linked before any other PIC object.  But we must not use
++	  # pic_flag when linking with -static.  The problem exists in
++	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
++	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
++	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
++	  *-*-hpux*)
++	    pic_flag_for_symtable=" $pic_flag"  ;;
++	  *)
++	    if test "X$my_pic_p" != Xno; then
++	      pic_flag_for_symtable=" $pic_flag"
++	    fi
++	    ;;
++	  esac
++	  ;;
++	esac
++	symtab_cflags=
++	for arg in $LTCFLAGS; do
++	  case $arg in
++	  -pie | -fpie | -fPIE) ;;
++	  *) func_append symtab_cflags " $arg" ;;
++	  esac
++	done
 +
-+% List of all defined macros in the form
-+%    \definedummyword\macro1\definedummyword\macro2...
-+% Currently is also contains all @aliases; the list can be split
-+% if there is a need.
-+\def\macrolist{}
++	# Now compile the dynamic symbol file.
++	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
 +
-+% Add the macro to \macrolist
-+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
-+\def\addtomacrolistxxx#1{%
-+     \toks0 = \expandafter{\macrolist\definedummyword#1}%
-+     \xdef\macrolist{\the\toks0}%
++	# Clean up the generated files.
++	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
++
++	# Transform the symbol file into the correct name.
++	symfileobj="$output_objdir/${my_outputname}S.$objext"
++	case $host in
++	*cygwin* | *mingw* | *cegcc* )
++	  if test -f "$output_objdir/$my_outputname.def"; then
++	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
++	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
++	  else
++	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
++	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
++	  fi
++	  ;;
++	*)
++	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
++	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
++	  ;;
++	esac
++	;;
++      *)
++	func_fatal_error "unknown suffix for \`$my_dlsyms'"
++	;;
++      esac
++    else
++      # We keep going just in case the user didn't refer to
++      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
++      # really was required.
++
++      # Nullify the symbol file.
++      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
++      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
++    fi
++}
++
++# func_win32_libid arg
++# return the library type of file 'arg'
++#
++# Need a lot of goo to handle *both* DLLs and import libs
++# Has to be a shell function in order to 'eat' the argument
++# that is supplied when $file_magic_command is called.
++# Despite the name, also deal with 64 bit binaries.
++func_win32_libid ()
++{
++  $opt_debug
++  win32_libid_type="unknown"
++  win32_fileres=`file -L $1 2>/dev/null`
++  case $win32_fileres in
++  *ar\ archive\ import\ library*) # definitely import
++    win32_libid_type="x86 archive import"
++    ;;
++  *ar\ archive*) # could be an import, or static
++    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
++    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
++       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
++      func_to_tool_file "$1" func_convert_file_msys_to_w32
++      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
++	$SED -n -e '
++	    1,100{
++		/ I /{
++		    s,.*,import,
++		    p
++		    q
++		}
++	    }'`
++      case $win32_nmres in
++      import*)  win32_libid_type="x86 archive import";;
++      *)        win32_libid_type="x86 archive static";;
++      esac
++    fi
++    ;;
++  *DLL*)
++    win32_libid_type="x86 DLL"
++    ;;
++  *executable*) # but shell scripts are "executable" too...
++    case $win32_fileres in
++    *MS\ Windows\ PE\ Intel*)
++      win32_libid_type="x86 DLL"
++      ;;
++    esac
+     ;;
++  esac
++  $ECHO "$win32_libid_type"
 +}
  
- % Utility routines.
--% Thisdoes \let #1 = #2, except with \csnames.
-+% This does \let #1 = #2, with \csnames; that is,
-+%   \let \csname#1\endcsname = \csname#2\endcsname
-+% (except of course we have to play expansion games).
-+% 
- \def\cslet#1#2{%
--\expandafter\expandafter
--\expandafter\let
--\expandafter\expandafter
--\csname#1\endcsname
--\csname#2\endcsname}
-+  \expandafter\let
-+  \csname#1\expandafter\endcsname
-+  \csname#2\endcsname
+-  # libtool link mode
+-  link | relink)
+-    modename="$modename: link"
++# func_cygming_dll_for_implib ARG
++#
++# Platform-specific function to extract the
++# name of the DLL associated with the specified
++# import library ARG.
++# Invoked by eval'ing the libtool variable
++#    $sharedlib_from_linklib_cmd
++# Result is available in the variable
++#    $sharedlib_from_linklib_result
++func_cygming_dll_for_implib ()
++{
++  $opt_debug
++  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
 +}
- 
- % Trim leading and trailing spaces off a string.
- % Concepts from aro-bend problem 15 (see CTAN).
-@@ -4898,7 +6626,7 @@
- }
- 
- % Trim a single trailing ^^M off a string.
--{\catcode`\^^M=12\catcode`\Q=3%
-+{\catcode`\^^M=\other \catcode`\Q=3%
- \gdef\eatcr #1{\eatcra #1Q^^MQ}%
- \gdef\eatcra#1^^MQ{\eatcrb#1Q}%
- \gdef\eatcrb#1Q#2Q{#1}%
-@@ -4908,34 +6636,45 @@
- % all characters are catcode 10, 11 or 12, except \ which is active
- % (as in normal texinfo). It is necessary to change the definition of \.
- 
-+% Non-ASCII encodings make 8-bit characters active, so un-activate
-+% them to avoid their expansion.  Must do this non-globally, to
-+% confine the change to the current group.
 +
- % It's necessary to have hard CRs when the macro is executed. This is
- % done by  making ^^M (\endlinechar) catcode 12 when reading the macro
- % body, and then making it the \newlinechar in \scanmacro.
- 
-+\def\scanctxt{%
-+  \catcode`\"=\other
-+  \catcode`\+=\other
-+  \catcode`\<=\other
-+  \catcode`\>=\other
-+  \catcode`\@=\other
-+  \catcode`\^=\other
-+  \catcode`\_=\other
-+  \catcode`\|=\other
-+  \catcode`\~=\other
-+  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
++# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
++#
++# The is the core of a fallback implementation of a
++# platform-specific function to extract the name of the
++# DLL associated with the specified import library LIBNAME.
++#
++# SECTION_NAME is either .idata$6 or .idata$7, depending
++# on the platform and compiler that created the implib.
++#
++# Echos the name of the DLL associated with the
++# specified import library.
++func_cygming_dll_for_implib_fallback_core ()
++{
++  $opt_debug
++  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
++  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
++    $SED '/^Contents of section '"$match_literal"':/{
++      # Place marker at beginning of archive member dllname section
++      s/.*/====MARK====/
++      p
++      d
++    }
++    # These lines can sometimes be longer than 43 characters, but
++    # are always uninteresting
++    /:[	 ]*file format pe[i]\{,1\}-/d
++    /^In archive [^:]*:/d
++    # Ensure marker is printed
++    /^====MARK====/p
++    # Remove all lines with less than 43 characters
++    /^.\{43\}/!d
++    # From remaining lines, remove first 43 characters
++    s/^.\{43\}//' |
++    $SED -n '
++      # Join marker and all lines until next marker into a single line
++      /^====MARK====/ b para
++      H
++      $ b para
++      b
++      :para
++      x
++      s/\n//g
++      # Remove the marker
++      s/^====MARK====//
++      # Remove trailing dots and whitespace
++      s/[\. \t]*$//
++      # Print
++      /./p' |
++    # we now have a list, one entry per line, of the stringified
++    # contents of the appropriate section of all members of the
++    # archive which possess that section. Heuristic: eliminate
++    # all those which have a first or second character that is
++    # a '.' (that is, objdump's representation of an unprintable
++    # character.) This should work for all archives with less than
++    # 0x302f exports -- but will fail for DLLs whose name actually
++    # begins with a literal '.' or a single character followed by
++    # a '.'.
++    #
++    # Of those that remain, print the first one.
++    $SED -e '/^\./d;/^.\./d;q'
 +}
 +
-+\def\scanargctxt{%
-+  \scanctxt
-+  \catcode`\\=\other
-+  \catcode`\^^M=\other
++# func_cygming_gnu_implib_p ARG
++# This predicate returns with zero status (TRUE) if
++# ARG is a GNU/binutils-style import library. Returns
++# with nonzero status (FALSE) otherwise.
++func_cygming_gnu_implib_p ()
++{
++  $opt_debug
++  func_to_tool_file "$1" func_convert_file_msys_to_w32
++  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
++  test -n "$func_cygming_gnu_implib_tmp"
 +}
 +
- \def\macrobodyctxt{%
--  \catcode`\~=12
--  \catcode`\^=12
--  \catcode`\_=12
--  \catcode`\|=12
--  \catcode`\<=12
--  \catcode`\>=12
--  \catcode`\+=12
--  \catcode`\{=12
--  \catcode`\}=12
--  \catcode`\@=12
--  \catcode`\^^M=12
--  \usembodybackslash}
-+  \scanctxt
-+  \catcode`\{=\other
-+  \catcode`\}=\other
-+  \catcode`\^^M=\other
-+  \usembodybackslash
-+}
- 
- \def\macroargctxt{%
--  \catcode`\~=12
--  \catcode`\^=12
--  \catcode`\_=12
--  \catcode`\|=12
--  \catcode`\<=12
--  \catcode`\>=12
--  \catcode`\+=12
--  \catcode`\@=12
--  \catcode`\\=12}
-+  \scanctxt
-+  \catcode`\\=\other
++# func_cygming_ms_implib_p ARG
++# This predicate returns with zero status (TRUE) if
++# ARG is an MS-style import library. Returns
++# with nonzero status (FALSE) otherwise.
++func_cygming_ms_implib_p ()
++{
++  $opt_debug
++  func_to_tool_file "$1" func_convert_file_msys_to_w32
++  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
++  test -n "$func_cygming_ms_implib_tmp"
 +}
- 
- % \mbodybackslash is the definition of \ in @macro bodies.
- % It maps \foo\ => \csname macarg.foo\endcsname => #N
-@@ -4963,45 +6702,42 @@
-      \message{Warning: redefining \the\macname}%
-   \else
-      \expandafter\ifx\csname \the\macname\endcsname \relax
--     \else \errmessage{The name \the\macname\space is reserved}\fi
-+     \else \errmessage{Macro name \the\macname\space already defined}\fi
-      \global\cslet{macsave.\the\macname}{\the\macname}%
-      \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
--     % Add the macroname to \macrolist
--     \toks0 = \expandafter{\macrolist\do}%
--     \xdef\macrolist{\the\toks0
--       \expandafter\noexpand\csname\the\macname\endcsname}%
-+     \addtomacrolist{\the\macname}%
-   \fi
-   \begingroup \macrobodyctxt
-   \ifrecursive \expandafter\parsermacbody
-   \else \expandafter\parsemacbody
-   \fi}
- 
--\def\unmacro{\parsearg\unmacroxxx}
--\def\unmacroxxx#1{%
-+\parseargdef\unmacro{%
-   \if1\csname ismacro.#1\endcsname
-     \global\cslet{#1}{macsave.#1}%
-     \global\expandafter\let \csname ismacro.#1\endcsname=0%
--    % Remove the macro name from \macrolist
-+    % Remove the macro name from \macrolist:
-     \begingroup
--      \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
--      \def\do##1{%
--        \def\tempb{##1}%
--        \ifx\tempa\tempb
--          % remove this
--        \else
--          \toks0 = \expandafter{\newmacrolist\do}%
--          \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
--        \fi}%
--      \def\newmacrolist{}%
--      % Execute macro list to define \newmacrolist
--      \macrolist
--      \global\let\macrolist\newmacrolist
-+      \expandafter\let\csname#1\endcsname \relax
-+      \let\definedummyword\unmacrodo
-+      \xdef\macrolist{\macrolist}%
-     \endgroup
-   \else
-     \errmessage{Macro #1 not defined}%
-   \fi
- }
- 
-+% Called by \do from \dounmacro on each macro.  The idea is to omit any
-+% macro definitions that have been changed to \relax.
-+%
-+\def\unmacrodo#1{%
-+  \ifx #1\relax
-+    % remove this
-+  \else
-+    \noexpand\definedummyword \noexpand#1%
-+  \fi
++
++# func_cygming_dll_for_implib_fallback ARG
++# Platform-specific function to extract the
++# name of the DLL associated with the specified
++# import library ARG.
++#
++# This fallback implementation is for use when $DLLTOOL
++# does not support the --identify-strict option.
++# Invoked by eval'ing the libtool variable
++#    $sharedlib_from_linklib_cmd
++# Result is available in the variable
++#    $sharedlib_from_linklib_result
++func_cygming_dll_for_implib_fallback ()
++{
++  $opt_debug
++  if func_cygming_gnu_implib_p "$1" ; then
++    # binutils import library
++    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
++  elif func_cygming_ms_implib_p "$1" ; then
++    # ms-generated import library
++    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
++  else
++    # unknown
++    sharedlib_from_linklib_result=""
++  fi
 +}
 +
- % This makes use of the obscure feature that if the last token of a
- % <parameter list> is #, then the preceding argument is delimited by
- % an opening brace, and that opening brace is not consumed.
-@@ -5111,34 +6847,31 @@
- % {.  If so it reads up to the closing }, if not, it reads the whole
- % line.  Whatever was read is then fed to the next control sequence
- % as an argument (by \parsebrace or \parsearg)
--\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
- \def\braceorlinexxx{%
-   \ifx\nchar\bgroup\else
-     \expandafter\parsearg
--  \fi \next}
--
--% We mant to disable all macros during \shipout so that they are not
--% expanded by \write.
--\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
--  \edef\next{\macrolist}\expandafter\endgroup\next}
-+  \fi \macnamexxx}
- 
- 
- % @alias.
- % We need some trickery to remove the optional spaces around the equal
- % sign.  Just make them active and then expand them all to nothing.
--\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
-+\def\alias{\parseargusing\obeyspaces\aliasxxx}
- \def\aliasxxx #1{\aliasyyy#1\relax}
--\def\aliasyyy #1=#2\relax{\ignoreactivespaces
--\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
--           \expandafter\noexpand\csname#2\endcsname}%
--\expandafter\endgroup\next}
-+\def\aliasyyy #1=#2\relax{%
-+  {%
-+    \expandafter\let\obeyedspace=\empty
-+    \addtomacrolist{#1}%
-+    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
-+  }%
-+  \next
++
++# func_extract_an_archive dir oldlib
++func_extract_an_archive ()
++{
++    $opt_debug
++    f_ex_an_ar_dir="$1"; shift
++    f_ex_an_ar_oldlib="$1"
++    if test "$lock_old_archive_extraction" = yes; then
++      lockfile=$f_ex_an_ar_oldlib.lock
++      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
++	func_echo "Waiting for $lockfile to be removed"
++	sleep 2
++      done
++    fi
++    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
++		   'stat=$?; rm -f "$lockfile"; exit $stat'
++    if test "$lock_old_archive_extraction" = yes; then
++      $opt_dry_run || rm -f "$lockfile"
++    fi
++    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
++     :
++    else
++      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
++    fi
 +}
- 
- 
- \message{cross references,}
--% @xref etc.
- 
- \newwrite\auxfile
--
- \newif\ifhavexrefs    % True if xref values are known.
- \newif\ifwarnedxrefs  % True if we warned once that they aren't known.
- 
-@@ -5147,56 +6880,68 @@
- \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-   node \samp{\ignorespaces#1{}}}
- 
--% @node's job is to define \lastnode.
--\def\node{\ENVcheck\parsearg\nodezzz}
--\def\nodezzz#1{\nodexxx [#1,]}
--\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-+% @node's only job in TeX is to define \lastnode, which is used in
-+% cross-references.  The @node line might or might not have commas, and
-+% might or might not have spaces before the first comma, like:
-+% @node foo , bar , ...
-+% We don't want such trailing spaces in the node name.
-+%
-+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
-+%
-+% also remove a trailing comma, in case of something like this:
-+% @node Help-Cross,  ,  , Cross-refs
-+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
-+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
 +
- \let\nwnode=\node
--\let\lastnode=\relax
-+\let\lastnode=\empty
- 
--% The sectioning commands (@chapter, etc.) call these.
--\def\donoderef{%
--  \ifx\lastnode\relax\else
--    \expandafter\expandafter\expandafter\setref{\lastnode}%
--      {Ysectionnumberandtype}%
--    \global\let\lastnode=\relax
--  \fi
--}
--\def\unnumbnoderef{%
--  \ifx\lastnode\relax\else
--    \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
--    \global\let\lastnode=\relax
--  \fi
--}
--\def\appendixnoderef{%
--  \ifx\lastnode\relax\else
--    \expandafter\expandafter\expandafter\setref{\lastnode}%
--      {Yappendixletterandtype}%
--    \global\let\lastnode=\relax
-+% Write a cross-reference definition for the current node.  #1 is the
-+% type (Ynumbered, Yappendix, Ynothing).
-+%
-+\def\donoderef#1{%
-+  \ifx\lastnode\empty\else
-+    \setref{\lastnode}{#1}%
-+    \global\let\lastnode=\empty
-   \fi
- }
- 
--
- % @anchor{NAME} -- define xref target at arbitrary point.
- %
- \newcount\savesfregister
--\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
--\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
--\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-+%
-+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
- 
--% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
--% NAME-title, NAME-pg, and NAME-SNT.  Called from \foonoderef.  We have
--% to set \indexdummies so commands such as @code in a section title
--% aren't expanded.  It would be nicer not to expand the titles in the
--% first place, but there's so many layers that that is hard to do.
-+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-+% anchor), which consists of three parts:
-+% 1) NAME-title - the current sectioning name taken from \lastsection,
-+%                 or the anchor name.
-+% 2) NAME-snt   - section number and type, passed as the SNT arg, or
-+%                 empty for anchors.
-+% 3) NAME-pg    - the page number.
- %
--\def\setref#1#2{{%
--  \indexdummies
-+% This is called from \donoderef, \anchor, and \dofloat.  In the case of
-+% floats, there is an additional part, which is not written here:
-+% 4) NAME-lof   - the text as it should appear in a @listoffloats.
-+%
-+\def\setref#1#2{%
-   \pdfmkdest{#1}%
--  \dosetq{#1-title}{Ytitle}%
--  \dosetq{#1-pg}{Ypagenumber}%
--  \dosetq{#1-snt}{#2}%
--}}
-+  \iflinks
-+    {%
-+      \atdummies  % preserve commands, but don't expand them
-+      \edef\writexrdef##1##2{%
-+	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
-+	  ##1}{##2}}% these are parameters of \writexrdef
-+      }%
-+      \toks0 = \expandafter{\lastsection}%
-+      \immediate \writexrdef{title}{\the\toks0 }%
-+      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
-+      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
-+    }%
-+  \fi
++
++# func_extract_archives gentop oldlib ...
++func_extract_archives ()
++{
++    $opt_debug
++    my_gentop="$1"; shift
++    my_oldlibs=${1+"$@"}
++    my_oldobjs=""
++    my_xlib=""
++    my_xabs=""
++    my_xdir=""
++
++    for my_xlib in $my_oldlibs; do
++      # Extract the objects.
++      case $my_xlib in
++	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
++	*) my_xabs=`pwd`"/$my_xlib" ;;
++      esac
++      func_basename "$my_xlib"
++      my_xlib="$func_basename_result"
++      my_xlib_u=$my_xlib
++      while :; do
++        case " $extracted_archives " in
++	*" $my_xlib_u "*)
++	  func_arith $extracted_serial + 1
++	  extracted_serial=$func_arith_result
++	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
++	*) break ;;
++	esac
++      done
++      extracted_archives="$extracted_archives $my_xlib_u"
++      my_xdir="$my_gentop/$my_xlib_u"
++
++      func_mkdir_p "$my_xdir"
++
++      case $host in
++      *-darwin*)
++	func_verbose "Extracting $my_xabs"
++	# Do not bother doing anything if just a dry run
++	$opt_dry_run || {
++	  darwin_orig_dir=`pwd`
++	  cd $my_xdir || exit $?
++	  darwin_archive=$my_xabs
++	  darwin_curdir=`pwd`
++	  darwin_base_archive=`basename "$darwin_archive"`
++	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
++	  if test -n "$darwin_arches"; then
++	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
++	    darwin_arch=
++	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
++	    for darwin_arch in  $darwin_arches ; do
++	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
++	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
++	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
++	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
++	      cd "$darwin_curdir"
++	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
++	    done # $darwin_arches
++            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
++	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
++	    darwin_file=
++	    darwin_files=
++	    for darwin_file in $darwin_filelist; do
++	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
++	      $LIPO -create -output "$darwin_file" $darwin_files
++	    done # $darwin_filelist
++	    $RM -rf unfat-$$
++	    cd "$darwin_orig_dir"
++	  else
++	    cd $darwin_orig_dir
++	    func_extract_an_archive "$my_xdir" "$my_xabs"
++	  fi # $darwin_arches
++	} # !$opt_dry_run
++	;;
++      *)
++        func_extract_an_archive "$my_xdir" "$my_xabs"
++	;;
++      esac
++      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
++    done
++
++    func_extract_archives_result="$my_oldobjs"
 +}
- 
- % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
- % the node name, #2 the name of the Info cross-reference, #3 the printed
-@@ -5209,135 +6954,162 @@
- \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-   \unsepspaces
-   \def\printedmanual{\ignorespaces #5}%
--  \def\printednodename{\ignorespaces #3}%
--  \setbox1=\hbox{\printedmanual}%
--  \setbox0=\hbox{\printednodename}%
-+  \def\printedrefname{\ignorespaces #3}%
-+  \setbox1=\hbox{\printedmanual\unskip}%
-+  \setbox0=\hbox{\printedrefname\unskip}%
-   \ifdim \wd0 = 0pt
-     % No printed node name was explicitly given.
-     \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
-       % Use the node name inside the square brackets.
--      \def\printednodename{\ignorespaces #1}%
-+      \def\printedrefname{\ignorespaces #1}%
-     \else
-       % Use the actual chapter/section title appear inside
-       % the square brackets.  Use the real section title if we have it.
-       \ifdim \wd1 > 0pt
-         % It is in another manual, so we don't have it.
--        \def\printednodename{\ignorespaces #1}%
-+        \def\printedrefname{\ignorespaces #1}%
-       \else
-         \ifhavexrefs
-           % We know the real title if we have the xref values.
--          \def\printednodename{\refx{#1-title}{}}%
-+          \def\printedrefname{\refx{#1-title}{}}%
-         \else
-           % Otherwise just copy the Info node name.
--          \def\printednodename{\ignorespaces #1}%
-+          \def\printedrefname{\ignorespaces #1}%
-         \fi%
-       \fi
-     \fi
-   \fi
-   %
--  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
--  % insert empty discretionaries after hyphens, which means that it will
--  % not find a line break at a hyphen in a node names.  Since some manuals
--  % are best written with fairly long node names, containing hyphens, this
--  % is a loss.  Therefore, we give the text of the node name again, so it
--  % is as if TeX is seeing it for the first time.
-+  % Make link in pdf output.
-   \ifpdf
--    \leavevmode
--    \getfilename{#4}%
--    \ifnum\filenamelength>0
--      \startlink attr{/Border [0 0 0]}%
--        goto file{\the\filename.pdf} name{#1@}%
--    \else
--      \startlink attr{/Border [0 0 0]}%
--        goto name{#1@}%
--    \fi
--    \linkcolor
-+    {\indexnofonts
-+     \turnoffactive
-+     % This expands tokens, so do it after making catcode changes, so _
-+     % etc. don't get their TeX definitions.
-+     \getfilename{#4}%
-+     %
-+     % See comments at \activebackslashdouble.
-+     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
-+      \backslashparens\pdfxrefdest}%
-+     %
-+     \leavevmode
-+     \startlink attr{/Border [0 0 0]}%
-+     \ifnum\filenamelength>0
-+       goto file{\the\filename.pdf} name{\pdfxrefdest}%
-+     \else
-+       goto name{\pdfmkpgn{\pdfxrefdest}}%
-+     \fi
-+    }%
-+    \setcolor{\linkcolor}%
-   \fi
-   %
--  \ifdim \wd1 > 0pt
--    \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
-+  % Float references are printed completely differently: "Figure 1.2"
-+  % instead of "[somenode], p.3".  We distinguish them by the
-+  % LABEL-title being set to a magic string.
-+  {%
-+    % Have to otherify everything special to allow the \csname to
-+    % include an _ in the xref name, etc.
-+    \indexnofonts
-+    \turnoffactive
-+    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
-+      \csname XR#1-title\endcsname
-+  }%
-+  \iffloat\Xthisreftitle
-+    % If the user specified the print name (third arg) to the ref,
-+    % print it instead of our usual "Figure 1.2".
-+    \ifdim\wd0 = 0pt
-+      \refx{#1-snt}{}%
-+    \else
-+      \printedrefname
-+    \fi
-+    %
-+    % if the user also gave the printed manual name (fifth arg), append
-+    % "in MANUALNAME".
-+    \ifdim \wd1 > 0pt
-+      \space \putwordin{} \cite{\printedmanual}%
-+    \fi
-   \else
--    % _ (for example) has to be the character _ for the purposes of the
--    % control sequence corresponding to the node, but it has to expand
--    % into the usual \leavevmode...\vrule stuff for purposes of
--    % printing. So we \turnoffactive for the \refx-snt, back on for the
--    % printing, back off for the \refx-pg.
--    {\normalturnoffactive
--     % Only output a following space if the -snt ref is nonempty; for
--     % @unnumbered and @anchor, it won't be.
--     \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
--     \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
--    }%
--    % [mynode],
--    [\printednodename],\space
--    % page 3
--    \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-+    % node/anchor (non-float) references.
-+    %
-+    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-+    % insert empty discretionaries after hyphens, which means that it will
-+    % not find a line break at a hyphen in a node names.  Since some manuals
-+    % are best written with fairly long node names, containing hyphens, this
-+    % is a loss.  Therefore, we give the text of the node name again, so it
-+    % is as if TeX is seeing it for the first time.
-+    \ifdim \wd1 > 0pt
-+      \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
-+    \else
-+      % _ (for example) has to be the character _ for the purposes of the
-+      % control sequence corresponding to the node, but it has to expand
-+      % into the usual \leavevmode...\vrule stuff for purposes of
-+      % printing. So we \turnoffactive for the \refx-snt, back on for the
-+      % printing, back off for the \refx-pg.
-+      {\turnoffactive
-+       % Only output a following space if the -snt ref is nonempty; for
-+       % @unnumbered and @anchor, it won't be.
-+       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-+       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-+      }%
-+      % output the `[mynode]' via a macro so it can be overridden.
-+      \xrefprintnodename\printedrefname
-+      %
-+      % But we always want a comma and a space:
-+      ,\space
-+      %
-+      % output the `page 3'.
-+      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-+    \fi
-   \fi
-   \endlink
- \endgroup}
- 
--% \dosetq is the interface for calls from other macros
--
--% Use \normalturnoffactive so that punctuation chars such as underscore
--% and backslash work in node names.  (\turnoffactive doesn't do \.)
--\def\dosetq#1#2{%
--  {\let\folio=0%
--   \normalturnoffactive
--   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
--   \iflinks
--     \next
--   \fi
--  }%
--}
--
--% \internalsetq {foo}{page} expands into
--% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
--% When the aux file is read, ' is the escape character
--
--\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
--
--% Things to be expanded by \internalsetq
--
--\def\Ypagenumber{\folio}
--
--\def\Ytitle{\thissection}
--
--\def\Ynothing{}
--
--\def\Ysectionnumberandtype{%
--\ifnum\secno=0 \putwordChapter\xreftie\the\chapno %
--\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno %
--\else \ifnum \subsubsecno=0 %
--\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno %
--\else %
--\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
--\fi \fi \fi }
--
--\def\Yappendixletterandtype{%
--\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}%
--\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno %
--\else \ifnum \subsubsecno=0 %
--\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno %
--\else %
--\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno %
--\fi \fi \fi }
--
--\gdef\xreftie{'tie}
-+% This macro is called from \xrefX for the `[nodename]' part of xref
-+% output.  It's a separate macro only so it can be changed more easily,
-+% since square brackets don't work well in some documents.  Particularly
-+% one that Bob is working on :).
-+%
-+\def\xrefprintnodename#1{[#1]}
- 
--% Use TeX 3.0's \inputlineno to get the line number, for better error
--% messages, but if we're using an old version of TeX, don't do anything.
-+% Things referred to by \setref.
- %
--\ifx\inputlineno\thisisundefined
--  \let\linenumber = \empty % Non-3.0.
--\else
--  \def\linenumber{\the\inputlineno:\space}
--\fi
-+\def\Ynothing{}
-+\def\Yomitfromtoc{}
-+\def\Ynumbered{%
-+  \ifnum\secno=0
-+    \putwordChapter at tie \the\chapno
-+  \else \ifnum\subsecno=0
-+    \putwordSection at tie \the\chapno.\the\secno
-+  \else \ifnum\subsubsecno=0
-+    \putwordSection at tie \the\chapno.\the\secno.\the\subsecno
-+  \else
-+    \putwordSection at tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
-+  \fi\fi\fi
++
++
++# func_emit_wrapper [arg=no]
++#
++# Emit a libtool wrapper script on stdout.
++# Don't directly open a file because we may want to
++# incorporate the script contents within a cygwin/mingw
++# wrapper executable.  Must ONLY be called from within
++# func_mode_link because it depends on a number of variables
++# set therein.
++#
++# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
++# variable will take.  If 'yes', then the emitted script
++# will assume that the directory in which it is stored is
++# the $objdir directory.  This is a cygwin/mingw-specific
++# behavior.
++func_emit_wrapper ()
++{
++	func_emit_wrapper_arg1=${1-no}
++
++	$ECHO "\
++#! $SHELL
++
++# $output - temporary wrapper script for $objdir/$outputname
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++#
++# The $output program cannot be directly executed until all the libtool
++# libraries that it depends on are installed.
++#
++# This wrapper script should never be moved out of the build directory.
++# If it is, it will not operate correctly.
++
++# Sed substitution that helps us do robust quoting.  It backslashifies
++# metacharacters that are still active within double-quoted strings.
++sed_quote_subst='$sed_quote_subst'
++
++# Be Bourne compatible
++if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '\${1+\"\$@\"}'='\"\$@\"'
++  setopt NO_GLOB_SUBST
++else
++  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
++fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++relink_command=\"$relink_command\"
++
++# This environment variable determines our operation mode.
++if test \"\$libtool_install_magic\" = \"$magic\"; then
++  # install mode needs the following variables:
++  generated_by_libtool_version='$macro_version'
++  notinst_deplibs='$notinst_deplibs'
++else
++  # When we are sourced in execute mode, \$file and \$ECHO are already set.
++  if test \"\$libtool_execute_magic\" != \"$magic\"; then
++    file=\"\$0\""
++
++    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
++    $ECHO "\
++
++# A function that is used when there is no print builtin or printf.
++func_fallback_echo ()
++{
++  eval 'cat <<_LTECHO_EOF
++\$1
++_LTECHO_EOF'
 +}
-+\def\Yappendix{%
-+  \ifnum\secno=0
-+     \putwordAppendix at tie @char\the\appendixno{}%
-+  \else \ifnum\subsecno=0
-+     \putwordSection at tie @char\the\appendixno.\the\secno
-+  \else \ifnum\subsubsecno=0
-+    \putwordSection at tie @char\the\appendixno.\the\secno.\the\subsecno
-+  \else
-+    \putwordSection at tie
-+      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
-+  \fi\fi\fi
++    ECHO=\"$qECHO\"
++  fi
++
++# Very basic option parsing. These options are (a) specific to
++# the libtool wrapper, (b) are identical between the wrapper
++# /script/ and the wrapper /executable/ which is used only on
++# windows platforms, and (c) all begin with the string "--lt-"
++# (application programs are unlikely to have options which match
++# this pattern).
++#
++# There are only two supported options: --lt-debug and
++# --lt-dump-script. There is, deliberately, no --lt-help.
++#
++# The first argument to this parsing function should be the
++# script's $0 value, followed by "$@".
++lt_option_debug=
++func_parse_lt_options ()
++{
++  lt_script_arg0=\$0
++  shift
++  for lt_opt
++  do
++    case \"\$lt_opt\" in
++    --lt-debug) lt_option_debug=1 ;;
++    --lt-dump-script)
++        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
++        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
++        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
++        cat \"\$lt_dump_D/\$lt_dump_F\"
++        exit 0
++      ;;
++    --lt-*)
++        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
++        exit 1
++      ;;
++    esac
++  done
++
++  # Print the debug banner immediately:
++  if test -n \"\$lt_option_debug\"; then
++    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
++  fi
 +}
- 
- % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
- % If its value is nonempty, SUFFIX is output afterward.
--
-+%
- \def\refx#1#2{%
--  \expandafter\ifx\csname X#1\endcsname\relax
-+  {%
-+    \indexnofonts
-+    \otherbackslash
-+    \expandafter\global\expandafter\let\expandafter\thisrefX
-+      \csname XR#1\endcsname
-+  }%
-+  \ifx\thisrefX\relax
-     % If not defined, say something at least.
-     \angleleft un\-de\-fined\angleright
-     \iflinks
-@@ -5352,22 +7124,59 @@
-     \fi
-   \else
-     % It's defined, so just use it.
--    \csname X#1\endcsname
-+    \thisrefX
-   \fi
-   #2% Output the suffix in any case.
- }
- 
--% This is the macro invoked by entries in the aux file.
-+% This is the macro invoked by entries in the aux file.  Usually it's
-+% just a \def (we prepend XR to the control sequence name to avoid
-+% collisions).  But if this is a float type, we have more work to do.
- %
--\def\xrdef#1{\begingroup
--  % Reenable \ as an escape while reading the second argument.
--  \catcode`\\ = 0
--  \afterassignment\endgroup
--  \expandafter\gdef\csname X#1\endcsname
-+\def\xrdef#1#2{%
-+  {% The node name might contain 8-bit characters, which in our current
-+   % implementation are changed to commands like @'e.  Don't let these
-+   % mess up the control sequence name.
-+    \indexnofonts
-+    \turnoffactive
-+    \xdef\safexrefname{#1}%
-+  }%
-+  %
-+  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
-+  %
-+  % Was that xref control sequence that we just defined for a float?
-+  \expandafter\iffloat\csname XR\safexrefname\endcsname
-+    % it was a float, and we have the (safe) float type in \iffloattype.
-+    \expandafter\let\expandafter\floatlist
-+      \csname floatlist\iffloattype\endcsname
-+    %
-+    % Is this the first time we've seen this float type?
-+    \expandafter\ifx\floatlist\relax
-+      \toks0 = {\do}% yes, so just \do
-+    \else
-+      % had it before, so preserve previous elements in list.
-+      \toks0 = \expandafter{\floatlist\do}%
-+    \fi
-+    %
-+    % Remember this xref in the control sequence \floatlistFLOATTYPE,
-+    % for later use in \listoffloats.
-+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
-+      {\safexrefname}}%
-+  \fi
- }
- 
- % Read the last existing aux file, if any.  No error if none exists.
--\def\readauxfile{\begingroup
-+%
-+\def\tryauxfile{%
-+  \openin 1 \jobname.aux
-+  \ifeof 1 \else
-+    \readdatafile{aux}%
-+    \global\havexrefstrue
-+  \fi
-+  \closein 1
++
++# Used when --lt-debug. Prints its arguments to stdout
++# (redirection is the responsibility of the caller)
++func_lt_dump_args ()
++{
++  lt_dump_args_N=1;
++  for lt_arg
++  do
++    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
++    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
++  done
++}
++
++# Core function for launching the target application
++func_exec_program_core ()
++{
++"
++  case $host in
++  # Backslashes separate directories on plain windows
++  *-*-mingw | *-*-os2* | *-cegcc*)
++    $ECHO "\
++      if test -n \"\$lt_option_debug\"; then
++        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
++        func_lt_dump_args \${1+\"\$@\"} 1>&2
++      fi
++      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
++"
++    ;;
++
++  *)
++    $ECHO "\
++      if test -n \"\$lt_option_debug\"; then
++        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
++        func_lt_dump_args \${1+\"\$@\"} 1>&2
++      fi
++      exec \"\$progdir/\$program\" \${1+\"\$@\"}
++"
++    ;;
++  esac
++  $ECHO "\
++      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
++      exit 1
++}
++
++# A function to encapsulate launching the target application
++# Strips options in the --lt-* namespace from \$@ and
++# launches target application with the remaining arguments.
++func_exec_program ()
++{
++  for lt_wr_arg
++  do
++    case \$lt_wr_arg in
++    --lt-*) ;;
++    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
++    esac
++    shift
++  done
++  func_exec_program_core \${1+\"\$@\"}
++}
++
++  # Parse options
++  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
++
++  # Find the directory that this script lives in.
++  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
++  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
++
++  # Follow symbolic links until we get to the real thisdir.
++  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
++  while test -n \"\$file\"; do
++    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
++
++    # If there was a directory component, then change thisdir.
++    if test \"x\$destdir\" != \"x\$file\"; then
++      case \"\$destdir\" in
++      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
++      *) thisdir=\"\$thisdir/\$destdir\" ;;
++      esac
++    fi
++
++    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
++    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
++  done
++
++  # Usually 'no', except on cygwin/mingw when embedded into
++  # the cwrapper.
++  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
++  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
++    # special case for '.'
++    if test \"\$thisdir\" = \".\"; then
++      thisdir=\`pwd\`
++    fi
++    # remove .libs from thisdir
++    case \"\$thisdir\" in
++    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
++    $objdir )   thisdir=. ;;
++    esac
++  fi
++
++  # Try to get the absolute directory name.
++  absdir=\`cd \"\$thisdir\" && pwd\`
++  test -n \"\$absdir\" && thisdir=\"\$absdir\"
++"
++
++	if test "$fast_install" = yes; then
++	  $ECHO "\
++  program=lt-'$outputname'$exeext
++  progdir=\"\$thisdir/$objdir\"
++
++  if test ! -f \"\$progdir/\$program\" ||
++     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
++       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
++
++    file=\"\$\$-\$program\"
++
++    if test ! -d \"\$progdir\"; then
++      $MKDIR \"\$progdir\"
++    else
++      $RM \"\$progdir/\$file\"
++    fi"
++
++	  $ECHO "\
++
++    # relink executable if necessary
++    if test -n \"\$relink_command\"; then
++      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
++      else
++	$ECHO \"\$relink_command_output\" >&2
++	$RM \"\$progdir/\$file\"
++	exit 1
++      fi
++    fi
++
++    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
++    { $RM \"\$progdir/\$program\";
++      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
++    $RM \"\$progdir/\$file\"
++  fi"
++	else
++	  $ECHO "\
++  program='$outputname'
++  progdir=\"\$thisdir/$objdir\"
++"
++	fi
++
++	$ECHO "\
++
++  if test -f \"\$progdir/\$program\"; then"
++
++	# fixup the dll searchpath if we need to.
++	#
++	# Fix the DLL searchpath if we need to.  Do this before prepending
++	# to shlibpath, because on Windows, both are PATH and uninstalled
++	# libraries must come first.
++	if test -n "$dllsearchpath"; then
++	  $ECHO "\
++    # Add the dll search path components to the executable PATH
++    PATH=$dllsearchpath:\$PATH
++"
++	fi
++
++	# Export our shlibpath_var if we have one.
++	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
++	  $ECHO "\
++    # Add our own library path to $shlibpath_var
++    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
++
++    # Some systems cannot cope with colon-terminated $shlibpath_var
++    # The second colon is a workaround for a bug in BeOS R4 sed
++    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
++
++    export $shlibpath_var
++"
++	fi
++
++	$ECHO "\
++    if test \"\$libtool_execute_magic\" != \"$magic\"; then
++      # Run the actual program with our arguments.
++      func_exec_program \${1+\"\$@\"}
++    fi
++  else
++    # The program doesn't exist.
++    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
++    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
++    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
++    exit 1
++  fi
++fi\
++"
 +}
 +
-+\def\setupdatafile{%
-   \catcode`\^^@=\other
-   \catcode`\^^A=\other
-   \catcode`\^^B=\other
-@@ -5395,9 +7204,7 @@
-   \catcode`\^^]=\other
-   \catcode`\^^^=\other
-   \catcode`\^^_=\other
--  \catcode`\@=\other
--  \catcode`\^=\other
--  % It was suggested to define this as 7, which would allow ^^e4 etc.
-+  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
-   % in xref tags, i.e., node names.  But since ^^e4 notation isn't
-   % supported in the main text, it doesn't seem desirable.  Furthermore,
-   % that is not enough: for node names that actually contain a ^
-@@ -5410,6 +7217,9 @@
-   % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-   % and then to call \auxhat in \setq.
-   %
-+  \catcode`\^=\other
-+  %
-+  % Special characters.  Should be turned off anyway, but...
-   \catcode`\~=\other
-   \catcode`\[=\other
-   \catcode`\]=\other
-@@ -5421,41 +7231,43 @@
-   \catcode`\$=\other
-   \catcode`\#=\other
-   \catcode`\&=\other
-+  \catcode`\%=\other
-   \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
--  % Make the characters 128-255 be printing characters
-+  %
-+  % This is to support \ in node names and titles, since the \
-+  % characters end up in a \csname.  It's easier than
-+  % leaving it active and making its active definition an actual \
-+  % character.  What I don't understand is why it works in the *value*
-+  % of the xrdef.  Seems like it should be a catcode12 \, and that
-+  % should not typeset properly.  But it works, so I'm moving on for
-+  % now.  --karl, 15jan04.
-+  \catcode`\\=\other
-+  %
-+  % Make the characters 128-255 be printing characters.
-   {%
--    \count 1=128
-+    \count1=128
-     \def\loop{%
--      \catcode\count 1=\other
--      \advance\count 1 by 1
--      \ifnum \count 1<256 \loop \fi
-+      \catcode\count1=\other
-+      \advance\count1 by 1
-+      \ifnum \count1<256 \loop \fi
-     }%
-   }%
--  % The aux file uses ' as the escape (for now).
--  % Turn off \ as an escape so we do not lose on
--  % entries which were dumped with control sequences in their names.
--  % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
--  % Reference to such entries still does not work the way one would wish,
--  % but at least they do not bomb out when the aux file is read in.
-+  %
-+  % @ is our escape character in .aux files, and we need braces.
-   \catcode`\{=1
-   \catcode`\}=2
--  \catcode`\%=\other
--  \catcode`\'=0
--  \catcode`\\=\other
--  %
--  \openin 1 \jobname.aux
--  \ifeof 1 \else
--    \closein 1
--    \input \jobname.aux
--    \global\havexrefstrue
--    \global\warnedobstrue
--  \fi
--  % Open the new aux file.  TeX will close it automatically at exit.
--  \openout\auxfile=\jobname.aux
-+  \catcode`\@=0
-+}
 +
-+\def\readdatafile#1{%
-+\begingroup
-+  \setupdatafile
-+  \input\jobname.#1
- \endgroup}
- 
- 
--% Footnotes.
-+\message{insertions,}
-+% including footnotes.
- 
- \newcount \footnoteno
- 
-@@ -5469,37 +7281,39 @@
- % @footnotestyle is meaningful for info output only.
- \let\footnotestyle=\comment
- 
--\let\ptexfootnote=\footnote
--
- {\catcode `\@=11
- %
- % Auto-number footnotes.  Otherwise like plain.
- \gdef\footnote{%
-+  \let\indent=\ptexindent
-+  \let\noindent=\ptexnoindent
-   \global\advance\footnoteno by \@ne
-   \edef\thisfootno{$^{\the\footnoteno}$}%
-   %
-   % In case the footnote comes at the end of a sentence, preserve the
-   % extra spacing after we do the footnote number.
-   \let\@sf\empty
--  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
-+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
-   %
-   % Remove inadvertent blank space before typesetting the footnote number.
-   \unskip
-   \thisfootno\@sf
--  \footnotezzz
-+  \dofootnote
- }%
- 
- % Don't bother with the trickery in plain.tex to not require the
- % footnote text as a parameter.  Our footnotes don't need to be so general.
- %
--% Oh yes, they do; otherwise, @ifset and anything else that uses
--% \parseargline fail inside footnotes because the tokens are fixed when
-+% Oh yes, they do; otherwise, @ifset (and anything else that uses
-+% \parseargline) fails inside footnotes because the tokens are fixed when
- % the footnote is read.  --karl, 16nov96.
- %
--\long\gdef\footnotezzz{\insert\footins\bgroup
-+\gdef\dofootnote{%
-+  \insert\footins\bgroup
-   % We want to typeset this text as a normal paragraph, even if the
-   % footnote reference occurs in (for example) a display environment.
-   % So reset some parameters.
-+  \hsize=\pagewidth
-   \interlinepenalty\interfootnotelinepenalty
-   \splittopskip\ht\strutbox % top baseline for broken footnotes
-   \splitmaxdepth\dp\strutbox
-@@ -5512,8 +7326,15 @@
-   %
-   \smallfonts \rm
-   %
--  % Hang the footnote text off the number.
--  \hang
-+  % Because we use hanging indentation in footnotes, a @noindent appears
-+  % to exdent this text, so make it be a no-op.  makeinfo does not use
-+  % hanging indentation so @noindent can still be needed within footnote
-+  % text after an @example or the like (not that this is good style).
-+  \let\noindent = \relax
-+  %
-+  % Hang the footnote text off the number.  Use \everypar in case the
-+  % footnote extends for more than one paragraph.
-+  \everypar = {\hang}%
-   \textindent{\thisfootno}%
-   %
-   % Don't crash into the line above the footnote text.  Since this
-@@ -5522,66 +7343,68 @@
-   \footstrut
-   \futurelet\next\fo at t
- }
--\def\fo at t{\ifcat\bgroup\noexpand\next \let\next\f@@t
--  \else\let\next\f at t\fi \next}
--\def\f@@t{\bgroup\aftergroup\@foot\let\next}
--\def\f at t#1{#1\@foot}
--\def\@foot{\strut\par\egroup}
--
- }%end \catcode `\@=11
- 
--% Set the baselineskip to #1, and the lineskip and strut size
--% correspondingly.  There is no deep meaning behind these magic numbers
--% used as factors; they just match (closely enough) what Knuth defined.
--%
--\def\lineskipfactor{.08333}
--\def\strutheightpercent{.70833}
--\def\strutdepthpercent {.29167}
-+% In case a @footnote appears in a vbox, save the footnote text and create
-+% the real \insert just after the vbox finished.  Otherwise, the insertion
-+% would be lost.
-+% Similarly, if a @footnote appears inside an alignment, save the footnote
-+% text to a box and make the \insert when a row of the table is finished.
-+% And the same can be done for other insert classes.  --kasal, 16nov03.
++# func_emit_cwrapperexe_src
++# emit the source code for a wrapper executable on stdout
++# Must ONLY be called from within func_mode_link because
++# it depends on a number of variable set therein.
++func_emit_cwrapperexe_src ()
++{
++	cat <<EOF
++
++/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
++   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++
++   The $output program cannot be directly executed until all the libtool
++   libraries that it depends on are installed.
++
++   This wrapper executable should never be moved out of the build directory.
++   If it is, it will not operate correctly.
++*/
++EOF
++	    cat <<"EOF"
++#ifdef _MSC_VER
++# define _CRT_SECURE_NO_DEPRECATE 1
++#endif
++#include <stdio.h>
++#include <stdlib.h>
++#ifdef _MSC_VER
++# include <direct.h>
++# include <process.h>
++# include <io.h>
++#else
++# include <unistd.h>
++# include <stdint.h>
++# ifdef __CYGWIN__
++#  include <io.h>
++# endif
++#endif
++#include <malloc.h>
++#include <stdarg.h>
++#include <assert.h>
++#include <string.h>
++#include <ctype.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <sys/stat.h>
++
++/* declarations of non-ANSI functions */
++#if defined(__MINGW32__)
++# ifdef __STRICT_ANSI__
++int _putenv (const char *);
++# endif
++#elif defined(__CYGWIN__)
++# ifdef __STRICT_ANSI__
++char *realpath (const char *, char *);
++int putenv (char *);
++int setenv (const char *, const char *, int);
++# endif
++/* #elif defined (other platforms) ... */
++#endif
++
++/* portability defines, excluding path handling macros */
++#if defined(_MSC_VER)
++# define setmode _setmode
++# define stat    _stat
++# define chmod   _chmod
++# define getcwd  _getcwd
++# define putenv  _putenv
++# define S_IXUSR _S_IEXEC
++# ifndef _INTPTR_T_DEFINED
++#  define _INTPTR_T_DEFINED
++#  define intptr_t int
++# endif
++#elif defined(__MINGW32__)
++# define setmode _setmode
++# define stat    _stat
++# define chmod   _chmod
++# define getcwd  _getcwd
++# define putenv  _putenv
++#elif defined(__CYGWIN__)
++# define HAVE_SETENV
++# define FOPEN_WB "wb"
++/* #elif defined (other platforms) ... */
++#endif
++
++#if defined(PATH_MAX)
++# define LT_PATHMAX PATH_MAX
++#elif defined(MAXPATHLEN)
++# define LT_PATHMAX MAXPATHLEN
++#else
++# define LT_PATHMAX 1024
++#endif
++
++#ifndef S_IXOTH
++# define S_IXOTH 0
++#endif
++#ifndef S_IXGRP
++# define S_IXGRP 0
++#endif
++
++/* path handling portability macros */
++#ifndef DIR_SEPARATOR
++# define DIR_SEPARATOR '/'
++# define PATH_SEPARATOR ':'
++#endif
++
++#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
++  defined (__OS2__)
++# define HAVE_DOS_BASED_FILE_SYSTEM
++# define FOPEN_WB "wb"
++# ifndef DIR_SEPARATOR_2
++#  define DIR_SEPARATOR_2 '\\'
++# endif
++# ifndef PATH_SEPARATOR_2
++#  define PATH_SEPARATOR_2 ';'
++# endif
++#endif
++
++#ifndef DIR_SEPARATOR_2
++# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
++#else /* DIR_SEPARATOR_2 */
++# define IS_DIR_SEPARATOR(ch) \
++	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
++#endif /* DIR_SEPARATOR_2 */
++
++#ifndef PATH_SEPARATOR_2
++# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
++#else /* PATH_SEPARATOR_2 */
++# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
++#endif /* PATH_SEPARATOR_2 */
++
++#ifndef FOPEN_WB
++# define FOPEN_WB "w"
++#endif
++#ifndef _O_BINARY
++# define _O_BINARY 0
++#endif
++
++#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
++#define XFREE(stale) do { \
++  if (stale) { free ((void *) stale); stale = 0; } \
++} while (0)
++
++#if defined(LT_DEBUGWRAPPER)
++static int lt_debug = 1;
++#else
++static int lt_debug = 0;
++#endif
++
++const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
++
++void *xmalloc (size_t num);
++char *xstrdup (const char *string);
++const char *base_name (const char *name);
++char *find_executable (const char *wrapper);
++char *chase_symlinks (const char *pathspec);
++int make_executable (const char *path);
++int check_executable (const char *path);
++char *strendzap (char *str, const char *pat);
++void lt_debugprintf (const char *file, int line, const char *fmt, ...);
++void lt_fatal (const char *file, int line, const char *message, ...);
++static const char *nonnull (const char *s);
++static const char *nonempty (const char *s);
++void lt_setenv (const char *name, const char *value);
++char *lt_extend_str (const char *orig_value, const char *add, int to_end);
++void lt_update_exe_path (const char *name, const char *value);
++void lt_update_lib_path (const char *name, const char *value);
++char **prepare_spawn (char **argv);
++void lt_dump_script (FILE *f);
++EOF
++
++	    cat <<EOF
++volatile const char * MAGIC_EXE = "$magic_exe";
++const char * LIB_PATH_VARNAME = "$shlibpath_var";
++EOF
++
++	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
++              func_to_host_path "$temp_rpath"
++	      cat <<EOF
++const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
++EOF
++	    else
++	      cat <<"EOF"
++const char * LIB_PATH_VALUE   = "";
++EOF
++	    fi
++
++	    if test -n "$dllsearchpath"; then
++              func_to_host_path "$dllsearchpath:"
++	      cat <<EOF
++const char * EXE_PATH_VARNAME = "PATH";
++const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
++EOF
++	    else
++	      cat <<"EOF"
++const char * EXE_PATH_VARNAME = "";
++const char * EXE_PATH_VALUE   = "";
++EOF
++	    fi
++
++	    if test "$fast_install" = yes; then
++	      cat <<EOF
++const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
++EOF
++	    else
++	      cat <<EOF
++const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
++EOF
++	    fi
 +
-+% Replace the \insert primitive by a cheating macro.
-+% Deeper inside, just make sure that the saved insertions are not spilled
-+% out prematurely.
- %
--\def\setleading#1{%
--  \normalbaselineskip = #1\relax
--  \normallineskip = \lineskipfactor\normalbaselineskip
--  \normalbaselines
--  \setbox\strutbox =\hbox{%
--    \vrule width0pt height\strutheightpercent\baselineskip
--                    depth \strutdepthpercent \baselineskip
--  }%
-+\def\startsavinginserts{%
-+  \ifx \insert\ptexinsert
-+    \let\insert\saveinsert
-+  \else
-+    \let\checkinserts\relax
-+  \fi
- }
- 
--% @| inserts a changebar to the left of the current line.  It should
--% surround any changed text.  This approach does *not* work if the
--% change spans more than two lines of output.  To handle that, we would
--% have adopt a much more difficult approach (putting marks into the main
--% vertical list for the beginning and end of each change).
-+% This \insert replacement works for both \insert\footins{foo} and
-+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
- %
--\def\|{%
--  % \vadjust can only be used in horizontal mode.
--  \leavevmode
--  %
--  % Append this vertical mode material after the current line in the output.
--  \vadjust{%
--    % We want to insert a rule with the height and depth of the current
--    % leading; that is exactly what \strutbox is supposed to record.
--    \vskip-\baselineskip
--    %
--    % \vadjust-items are inserted at the left edge of the type.  So
--    % the \llap here moves out into the left-hand margin.
--    \llap{%
--      %
--      % For a thicker or thinner bar, change the `1pt'.
--      \vrule height\baselineskip width1pt
--      %
--      % This is the space between the bar and the text.
--      \hskip 12pt
--    }%
--  }%
-+\def\saveinsert#1{%
-+  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
-+  \afterassignment\next
-+  % swallow the left brace
-+  \let\temp =
- }
-+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
-+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
 +
-+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
++	    cat <<"EOF"
 +
-+\def\placesaveins#1{%
-+  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
-+    {\box#1}%
-+}
++#define LTWRAPPER_OPTION_PREFIX         "--lt-"
 +
-+% eat @SAVE -- beware, all of them have catcode \other:
++static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
++static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
++static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
++
++int
++main (int argc, char *argv[])
 +{
-+  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
-+  \gdef\gobblesave @SAVE{}
-+}
++  char **newargz;
++  int  newargc;
++  char *tmp_pathspec;
++  char *actual_cwrapper_path;
++  char *actual_cwrapper_name;
++  char *target_name;
++  char *lt_argv_zero;
++  intptr_t rval = 127;
 +
-+% initialization:
-+\def\newsaveins #1{%
-+  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
-+  \next
-+}
-+\def\newsaveinsX #1{%
-+  \csname newbox\endcsname #1%
-+  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
-+    \checksaveins #1}%
-+}
++  int i;
 +
-+% initialize:
-+\let\checkinserts\empty
-+\newsaveins\footins
-+\newsaveins\margin
- 
--% For a final copy, take out the rectangles
--% that mark overfull boxes (in case you have decided
--% that the text looks ok even though it passes the margin).
--%
--\def\finalout{\overfullrule=0pt}
- 
- % @image.  We use the macros from epsf.tex to support this.
- % If epsf.tex is not installed and @image is used, we complain.
-@@ -5591,12 +7414,12 @@
- % undone and the next image would fail.
- \openin 1 = epsf.tex
- \ifeof 1 \else
--  \closein 1
--  % Do not bother showing banner with post-v2.7 epsf.tex (available in
--  % doc/epsf.tex until it shows up on ctan).
-+  % Do not bother showing banner with epsf.tex v2.7k (available in
-+  % doc/epsf.tex and on ctan).
-   \def\epsfannounce{\toks0 = }%
-   \input epsf.tex
- \fi
-+\closein 1
- %
- % We will only complain once about lack of epsf.tex.
- \newif\ifwarnednoepsf
-@@ -5612,77 +7435,1180 @@
-       \global\warnednoepsftrue
-     \fi
-   \else
--    \imagexxx #1,,,\finish
-+    \imagexxx #1,,,,,\finish
-   \fi
- }
- %
- % Arguments to @image:
- % #1 is (mandatory) image filename; we tack on .eps extension.
- % #2 is (optional) width, #3 is (optional) height.
--% #4 is just the usual extra ignored arg for parsing this stuff.
--\def\imagexxx#1,#2,#3,#4\finish{%
-+% #4 is (ignored optional) html alt text.
-+% #5 is (ignored optional) extension.
-+% #6 is just the usual extra ignored arg for parsing this stuff.
-+\newif\ifimagevmode
-+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
-+  \catcode`\^^M = 5     % in case we're inside an example
-+  \normalturnoffactive  % allow _ et al. in names
-+  % If the image is by itself, center it.
-+  \ifvmode
-+    \imagevmodetrue
-+    \nobreak\medskip
-+    % Usually we'll have text after the image which will insert
-+    % \parskip glue, so insert it here too to equalize the space
-+    % above and below.
-+    \nobreak\vskip\parskip
-+    \nobreak
-+  \fi
-+  %
-+  % Leave vertical mode so that indentation from an enclosing
-+  % environment such as @quotation is respected.  On the other hand, if
-+  % it's at the top level, we don't want the normal paragraph indentation.
-+  \noindent
-+  %
-+  % Output the image.
-   \ifpdf
--    \centerline{\dopdfimage{#1}{#2}{#3}}%
-+    \dopdfimage{#1}{#2}{#3}%
-   \else
-     % \epsfbox itself resets \epsf?size at each figure.
-     \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-     \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
--    \begingroup
--      \catcode`\^^M = 5 % in case we're inside an example
--      % If the image is by itself, center it.
--      \ifvmode
--        \nobreak\bigskip
--        % Usually we'll have text after the image which will insert
--        % \parskip glue, so insert it here too to equalize the space
--        % above and below. 
--        \nobreak\vskip\parskip
--        \nobreak
--        \centerline{\epsfbox{#1.eps}}%
--        \bigbreak
--      \else
--        % In the middle of a paragraph, no extra space.
--        \epsfbox{#1.eps}%
-+    \epsfbox{#1.eps}%
-+  \fi
-+  %
-+  \ifimagevmode \medskip \fi  % space after the standalone image
-+\endgroup}
++  program_name = (char *) xstrdup (base_name (argv[0]));
++  newargz = XMALLOC (char *, argc + 1);
++
++  /* very simple arg parsing; don't want to rely on getopt
++   * also, copy all non cwrapper options to newargz, except
++   * argz[0], which is handled differently
++   */
++  newargc=0;
++  for (i = 1; i < argc; i++)
++    {
++      if (strcmp (argv[i], dumpscript_opt) == 0)
++	{
++EOF
++	    case "$host" in
++	      *mingw* | *cygwin* )
++		# make stdout use "unix" line endings
++		echo "          setmode(1,_O_BINARY);"
++		;;
++	      esac
++
++	    cat <<"EOF"
++	  lt_dump_script (stdout);
++	  return 0;
++	}
++      if (strcmp (argv[i], debug_opt) == 0)
++	{
++          lt_debug = 1;
++          continue;
++	}
++      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
++        {
++          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
++             namespace, but it is not one of the ones we know about and
++             have already dealt with, above (inluding dump-script), then
++             report an error. Otherwise, targets might begin to believe
++             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
++             namespace. The first time any user complains about this, we'll
++             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
++             or a configure.ac-settable value.
++           */
++          lt_fatal (__FILE__, __LINE__,
++		    "unrecognized %s option: '%s'",
++                    ltwrapper_option_prefix, argv[i]);
++        }
++      /* otherwise ... */
++      newargz[++newargc] = xstrdup (argv[i]);
++    }
++  newargz[++newargc] = NULL;
++
++EOF
++	    cat <<EOF
++  /* The GNU banner must be the first non-error debug message */
++  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
++EOF
++	    cat <<"EOF"
++  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
++  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
++
++  tmp_pathspec = find_executable (argv[0]);
++  if (tmp_pathspec == NULL)
++    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
++  lt_debugprintf (__FILE__, __LINE__,
++                  "(main) found exe (before symlink chase) at: %s\n",
++		  tmp_pathspec);
 +
++  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
++  lt_debugprintf (__FILE__, __LINE__,
++                  "(main) found exe (after symlink chase) at: %s\n",
++		  actual_cwrapper_path);
++  XFREE (tmp_pathspec);
 +
-+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
-+% etc.  We don't actually implement floating yet, we always include the
-+% float "here".  But it seemed the best name for the future.
-+%
-+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
++  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
++  strendzap (actual_cwrapper_path, actual_cwrapper_name);
 +
-+% There may be a space before second and/or third parameter; delete it.
-+\def\eatcommaspace#1, {#1,}
++  /* wrapper name transforms */
++  strendzap (actual_cwrapper_name, ".exe");
++  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
++  XFREE (actual_cwrapper_name);
++  actual_cwrapper_name = tmp_pathspec;
++  tmp_pathspec = 0;
 +
-+% #1 is the optional FLOATTYPE, the text label for this float, typically
-+% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
-+% this float will not be numbered and cannot be referred to.
-+%
-+% #2 is the optional xref label.  Also must be present for the float to
-+% be referable.
-+%
-+% #3 is the optional positioning argument; for now, it is ignored.  It
-+% will somehow specify the positions allowed to float to (here, top, bottom).
-+%
-+% We keep a separate counter for each FLOATTYPE, which we reset at each
-+% chapter-level command.
-+\let\resetallfloatnos=\empty
-+%
-+\def\dofloat#1,#2,#3,#4\finish{%
-+  \let\thiscaption=\empty
-+  \let\thisshortcaption=\empty
-+  %
-+  % don't lose footnotes inside @float.
-+  %
-+  % BEWARE: when the floats start float, we have to issue warning whenever an
-+  % insert appears inside a float which could possibly float. --kasal, 26may04
-+  %
-+  \startsavinginserts
-+  %
-+  % We can't be used inside a paragraph.
-+  \par
-+  %
-+  \vtop\bgroup
-+    \def\floattype{#1}%
-+    \def\floatlabel{#2}%
-+    \def\floatloc{#3}% we do nothing with this yet.
-+    %
-+    \ifx\floattype\empty
-+      \let\safefloattype=\empty
-+    \else
-+      {%
-+        % the floattype might have accents or other special characters,
-+        % but we need to use it in a control sequence name.
-+        \indexnofonts
-+        \turnoffactive
-+        \xdef\safefloattype{\floattype}%
-+      }%
-+    \fi
-+    %
-+    % If label is given but no type, we handle that as the empty type.
-+    \ifx\floatlabel\empty \else
-+      % We want each FLOATTYPE to be numbered separately (Figure 1,
-+      % Table 1, Figure 2, ...).  (And if no label, no number.)
-+      %
-+      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
-+      \global\advance\floatno by 1
-+      %
-+      {%
-+        % This magic value for \lastsection is output by \setref as the
-+        % XREFLABEL-title value.  \xrefX uses it to distinguish float
-+        % labels (which have a completely different output format) from
-+        % node and anchor labels.  And \xrdef uses it to construct the
-+        % lists of floats.
-+        %
-+        \edef\lastsection{\floatmagic=\safefloattype}%
-+        \setref{\floatlabel}{Yfloat}%
-+      }%
-+    \fi
-+    %
-+    % start with \parskip glue, I guess.
-+    \vskip\parskip
-+    %
-+    % Don't suppress indentation if a float happens to start a section.
-+    \restorefirstparagraphindent
-+}
++  /* target_name transforms -- use actual target program name; might have lt- prefix */
++  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
++  strendzap (target_name, ".exe");
++  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
++  XFREE (target_name);
++  target_name = tmp_pathspec;
++  tmp_pathspec = 0;
 +
-+% we have these possibilities:
-+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
-+% @float Foo,lbl & no caption:    Foo 1.1
-+% @float Foo & @caption{Cap}:     Foo: Cap
-+% @float Foo & no caption:        Foo
-+% @float ,lbl & Caption{Cap}:     1.1: Cap
-+% @float ,lbl & no caption:       1.1
-+% @float & @caption{Cap}:         Cap
-+% @float & no caption:
-+%
-+\def\Efloat{%
-+    \let\floatident = \empty
-+    %
-+    % In all cases, if we have a float type, it comes first.
-+    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
-+    %
-+    % If we have an xref label, the number comes next.
-+    \ifx\floatlabel\empty \else
-+      \ifx\floattype\empty \else % if also had float type, need tie first.
-+        \appendtomacro\floatident{\tie}%
-       \fi
-+      % the number.
-+      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
-+    \fi
-+    %
-+    % Start the printed caption with what we've constructed in
-+    % \floatident, but keep it separate; we need \floatident again.
-+    \let\captionline = \floatident
-+    %
-+    \ifx\thiscaption\empty \else
-+      \ifx\floatident\empty \else
-+	\appendtomacro\captionline{: }% had ident, so need a colon between
-+      \fi
-+      %
-+      % caption text.
-+      \appendtomacro\captionline{\scanexp\thiscaption}%
-+    \fi
-+    %
-+    % If we have anything to print, print it, with space before.
-+    % Eventually this needs to become an \insert.
-+    \ifx\captionline\empty \else
-+      \vskip.5\parskip
-+      \captionline
-+      %
-+      % Space below caption.
-+      \vskip\parskip
-+    \fi
-+    %
-+    % If have an xref label, write the list of floats info.  Do this
-+    % after the caption, to avoid chance of it being a breakpoint.
-+    \ifx\floatlabel\empty \else
-+      % Write the text that goes in the lof to the aux file as
-+      % \floatlabel-lof.  Besides \floatident, we include the short
-+      % caption if specified, else the full caption if specified, else nothing.
-+      {%
-+        \atdummies
-+        %
-+        % since we read the caption text in the macro world, where ^^M
-+        % is turned into a normal character, we have to scan it back, so
-+        % we don't write the literal three characters "^^M" into the aux file.
-+	\scanexp{%
-+	  \xdef\noexpand\gtemp{%
-+	    \ifx\thisshortcaption\empty
-+	      \thiscaption
-+	    \else
-+	      \thisshortcaption
-+	    \fi
-+	  }%
-+	}%
-+        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
-+	  \ifx\gtemp\empty \else : \gtemp \fi}}%
-+      }%
-+    \fi
-+  \egroup  % end of \vtop
-+  %
-+  % place the captured inserts
-+  %
-+  % BEWARE: when the floats start floating, we have to issue warning
-+  % whenever an insert appears inside a float which could possibly
-+  % float. --kasal, 26may04
-+  %
-+  \checkinserts
-+}
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(main) libtool target name: %s\n",
++		  target_name);
++EOF
 +
-+% Append the tokens #2 to the definition of macro #1, not expanding either.
-+%
-+\def\appendtomacro#1#2{%
-+  \expandafter\def\expandafter#1\expandafter{#1#2}%
-+}
++	    cat <<EOF
++  newargz[0] =
++    XMALLOC (char, (strlen (actual_cwrapper_path) +
++		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
++  strcpy (newargz[0], actual_cwrapper_path);
++  strcat (newargz[0], "$objdir");
++  strcat (newargz[0], "/");
++EOF
++
++	    cat <<"EOF"
++  /* stop here, and copy so we don't have to do this twice */
++  tmp_pathspec = xstrdup (newargz[0]);
++
++  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
++  strcat (newargz[0], actual_cwrapper_name);
++
++  /* DO want the lt- prefix here if it exists, so use target_name */
++  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
++  XFREE (tmp_pathspec);
++  tmp_pathspec = NULL;
++EOF
++
++	    case $host_os in
++	      mingw*)
++	    cat <<"EOF"
++  {
++    char* p;
++    while ((p = strchr (newargz[0], '\\')) != NULL)
++      {
++	*p = '/';
++      }
++    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
++      {
++	*p = '/';
++      }
++  }
++EOF
++	    ;;
++	    esac
++
++	    cat <<"EOF"
++  XFREE (target_name);
++  XFREE (actual_cwrapper_path);
++  XFREE (actual_cwrapper_name);
++
++  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
++  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
++  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
++     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
++     because on Windows, both *_VARNAMEs are PATH but uninstalled
++     libraries must come first. */
++  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
++  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
++
++  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
++		  nonnull (lt_argv_zero));
++  for (i = 0; i < newargc; i++)
++    {
++      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
++		      i, nonnull (newargz[i]));
++    }
++
++EOF
 +
-+% @caption, @shortcaption
-+%
-+\def\caption{\docaption\thiscaption}
-+\def\shortcaption{\docaption\thisshortcaption}
-+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
-+\def\defcaption#1#2{\egroup \def#1{#2}}
++	    case $host_os in
++	      mingw*)
++		cat <<"EOF"
++  /* execv doesn't actually work on mingw as expected on unix */
++  newargz = prepare_spawn (newargz);
++  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
++  if (rval == -1)
++    {
++      /* failed to start process */
++      lt_debugprintf (__FILE__, __LINE__,
++		      "(main) failed to launch target \"%s\": %s\n",
++		      lt_argv_zero, nonnull (strerror (errno)));
++      return 127;
++    }
++  return rval;
++EOF
++		;;
++	      *)
++		cat <<"EOF"
++  execv (lt_argv_zero, newargz);
++  return rval; /* =127, but avoids unused variable warning */
++EOF
++		;;
++	    esac
 +
-+% The parameter is the control sequence identifying the counter we are
-+% going to use.  Create it if it doesn't exist and assign it to \floatno.
-+\def\getfloatno#1{%
-+  \ifx#1\relax
-+      % Haven't seen this figure type before.
-+      \csname newcount\endcsname #1%
-+      %
-+      % Remember to reset this floatno at the next chap.
-+      \expandafter\gdef\expandafter\resetallfloatnos
-+        \expandafter{\resetallfloatnos #1=0 }%
-+  \fi
-+  \let\floatno#1%
++	    cat <<"EOF"
 +}
 +
-+% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
-+% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
-+% first read the @float command.
-+%
-+\def\Yfloat{\floattype at tie \chaplevelprefix\the\floatno}%
-+
-+% Magic string used for the XREFLABEL-title value, so \xrefX can
-+% distinguish floats from other xref types.
-+\def\floatmagic{!!float!!}
++void *
++xmalloc (size_t num)
++{
++  void *p = (void *) malloc (num);
++  if (!p)
++    lt_fatal (__FILE__, __LINE__, "memory exhausted");
 +
-+% #1 is the control sequence we are passed; we expand into a conditional
-+% which is true if #1 represents a float ref.  That is, the magic
-+% \lastsection value which we \setref above.
-+%
-+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
-+%
-+% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
-+% (safe) float type for this float.  We set \iffloattype to #2.
-+%
-+\def\doiffloat#1=#2=#3\finish{%
-+  \def\temp{#1}%
-+  \def\iffloattype{#2}%
-+  \ifx\temp\floatmagic
++  return p;
 +}
 +
-+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
-+%
-+\parseargdef\listoffloats{%
-+  \def\floattype{#1}% floattype
-+  {%
-+    % the floattype might have accents or other special characters,
-+    % but we need to use it in a control sequence name.
-+    \indexnofonts
-+    \turnoffactive
-+    \xdef\safefloattype{\floattype}%
-+  }%
-+  %
-+  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
-+  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
-+    \ifhavexrefs
-+      % if the user said @listoffloats foo but never @float foo.
-+      \message{\linenumber No `\safefloattype' floats to list.}%
-+    \fi
-+  \else
-+    \begingroup
-+      \leftskip=\tocindent  % indent these entries like a toc
-+      \let\do=\listoffloatsdo
-+      \csname floatlist\safefloattype\endcsname
-     \endgroup
-   \fi
- }
- 
-+% This is called on each entry in a list of floats.  We're passed the
-+% xref label, in the form LABEL-title, which is how we save it in the
-+% aux file.  We strip off the -title and look up \XRLABEL-lof, which
-+% has the text we're supposed to typeset here.
-+%
-+% Figures without xref labels will not be included in the list (since
-+% they won't appear in the aux file).
-+%
-+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
-+\def\listoffloatsdoentry#1-title\finish{{%
-+  % Can't fully expand XR#1-lof because it can contain anything.  Just
-+  % pass the control sequence.  On the other hand, XR#1-pg is just the
-+  % page number, and we want to fully expand that so we can get a link
-+  % in pdf output.
-+  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
-+  %
-+  % use the same \entry macro we use to generate the TOC and index.
-+  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
-+  \writeentry
-+}}
-+
- 
- \message{localization,}
--% and i18n.
- 
- % @documentlanguage is usually given very early, just after
- % @setfilename.  If done too late, it may not override everything
--% properly.  Single argument is the language abbreviation.
--% It would be nice if we could set up a hyphenation file here.
-+% properly.  Single argument is the language (de) or locale (de_DE)
-+% abbreviation.  It would be nice if we could set up a hyphenation file.
- %
--\def\documentlanguage{\parsearg\dodocumentlanguage}
--\def\dodocumentlanguage#1{%
++char *
++xstrdup (const char *string)
 +{
-+  \catcode`\_ = \active
-+  \globaldefs=1
-+\parseargdef\documentlanguage{\begingroup
-+  \let_=\normalunderscore  % normal _ character for filenames
-   \tex % read txi-??.tex file in plain TeX.
--  % Read the file if it exists.
-+    % Read the file by the name they passed if it exists.
-+    \openin 1 txi-#1.tex
-+    \ifeof 1
-+      \documentlanguagetrywithoutunderscore{#1_\finish}%
-+    \else
-+      \input txi-#1.tex
-+    \fi
-+    \closein 1
-+  \endgroup
-+\endgroup}
-+}
-+%
-+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
-+% try txi-de.tex.
-+% 
-+\def\documentlanguagetrywithoutunderscore#1_#2\finish{%
-   \openin 1 txi-#1.tex
--  \ifeof1
-+  \ifeof 1
-     \errhelp = \nolanghelp
-     \errmessage{Cannot read language file txi-#1.tex}%
--    \let\temp = \relax
-   \else
--    \def\temp{\input txi-#1.tex }%
-+    \input txi-#1.tex
-   \fi
--  \temp
--  \endgroup
-+  \closein 1
- }
-+%
- \newhelp\nolanghelp{The given language definition file cannot be found or
- is empty.  Maybe you need to install it?  In the current directory
- should work if nowhere else does.}
- 
-+% Set the catcode of characters 128 through 255 to the specified number.
-+%
-+\def\setnonasciicharscatcode#1{%
-+   \count255=128
-+   \loop\ifnum\count255<256
-+      \global\catcode\count255=#1\relax
-+      \advance\count255 by 1
-+   \repeat
++  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
++			  string) : NULL;
 +}
- 
--% @documentencoding should change something in TeX eventually, most
--% likely, but for now just recognize it.
--\let\documentencoding = \comment
-+\def\setnonasciicharscatcodenonglobal#1{%
-+   \count255=128
-+   \loop\ifnum\count255<256
-+      \catcode\count255=#1\relax
-+      \advance\count255 by 1
-+   \repeat
++
++const char *
++base_name (const char *name)
++{
++  const char *base;
++
++#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
++  /* Skip over the disk name in MSDOS pathnames. */
++  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
++    name += 2;
++#endif
++
++  for (base = name; *name; name++)
++    if (IS_DIR_SEPARATOR (*name))
++      base = name + 1;
++  return base;
 +}
 +
-+% @documentencoding sets the definition of non-ASCII characters
-+% according to the specified encoding.
-+%
-+\parseargdef\documentencoding{%
-+  % Encoding being declared for the document.
-+  \def\declaredencoding{\csname #1.enc\endcsname}%
-+  %
-+  % Supported encodings: names converted to tokens in order to be able
-+  % to compare them with \ifx.
-+  \def\ascii{\csname US-ASCII.enc\endcsname}%
-+  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
-+  \def\latone{\csname ISO-8859-1.enc\endcsname}%
-+  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
-+  \def\utfeight{\csname UTF-8.enc\endcsname}%
-+  %
-+  \ifx \declaredencoding \ascii
-+     \asciichardefs
-+  %
-+  \else \ifx \declaredencoding \lattwo
-+     \setnonasciicharscatcode\active
-+     \lattwochardefs
-+  %
-+  \else \ifx \declaredencoding \latone 
-+     \setnonasciicharscatcode\active
-+     \latonechardefs
-+  %
-+  \else \ifx \declaredencoding \latnine
-+     \setnonasciicharscatcode\active
-+     \latninechardefs
-+  %
-+  \else \ifx \declaredencoding \utfeight
-+     \setnonasciicharscatcode\active
-+     \utfeightchardefs
-+  %
-+  \else 
-+    \message{Unknown document encoding #1, ignoring.}%
-+  %
-+  \fi % utfeight
-+  \fi % latnine
-+  \fi % latone
-+  \fi % lattwo
-+  \fi % ascii
++int
++check_executable (const char *path)
++{
++  struct stat st;
++
++  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
++                  nonempty (path));
++  if ((!path) || (!*path))
++    return 0;
++
++  if ((stat (path, &st) >= 0)
++      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
++    return 1;
++  else
++    return 0;
 +}
- 
-+% A message to be logged when using a character that isn't available
-+% the default font encoding (OT1).
-+% 
-+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
- 
--% Page size parameters.
-+% Take account of \c (plain) vs. \, (Texinfo) difference.
-+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
 +
-+% First, make active non-ASCII characters in order for them to be
-+% correctly categorized when TeX reads the replacement text of
-+% macros containing the character definitions.
-+\setnonasciicharscatcode\active
- %
-+% Latin1 (ISO-8859-1) character definitions.
-+\def\latonechardefs{%
-+  \gdef^^a0{~} 
-+  \gdef^^a1{\exclamdown}
-+  \gdef^^a2{\missingcharmsg{CENT SIGN}} 
-+  \gdef^^a3{{\pounds}}
-+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-+  \gdef^^a5{\missingcharmsg{YEN SIGN}}
-+  \gdef^^a6{\missingcharmsg{BROKEN BAR}} 
-+  \gdef^^a7{\S}
-+  \gdef^^a8{\"{}} 
-+  \gdef^^a9{\copyright} 
-+  \gdef^^aa{\ordf}
-+  \gdef^^ab{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}} 
-+  \gdef^^ac{$\lnot$}
-+  \gdef^^ad{\-} 
-+  \gdef^^ae{\registeredsymbol} 
-+  \gdef^^af{\={}}
-+  %
-+  \gdef^^b0{\textdegree}
-+  \gdef^^b1{$\pm$}
-+  \gdef^^b2{$^2$}
-+  \gdef^^b3{$^3$}
-+  \gdef^^b4{\'{}}
-+  \gdef^^b5{$\mu$}
-+  \gdef^^b6{\P}
-+  %
-+  \gdef^^b7{$^.$}
-+  \gdef^^b8{\cedilla\ }
-+  \gdef^^b9{$^1$}
-+  \gdef^^ba{\ordm}
-+  %
-+  \gdef^^bb{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}}
-+  \gdef^^bc{$1\over4$}
-+  \gdef^^bd{$1\over2$}
-+  \gdef^^be{$3\over4$}
-+  \gdef^^bf{\questiondown}
-+  %
-+  \gdef^^c0{\`A}
-+  \gdef^^c1{\'A}
-+  \gdef^^c2{\^A}
-+  \gdef^^c3{\~A}
-+  \gdef^^c4{\"A}
-+  \gdef^^c5{\ringaccent A} 
-+  \gdef^^c6{\AE}
-+  \gdef^^c7{\cedilla C}
-+  \gdef^^c8{\`E}
-+  \gdef^^c9{\'E}
-+  \gdef^^ca{\^E}
-+  \gdef^^cb{\"E}
-+  \gdef^^cc{\`I}
-+  \gdef^^cd{\'I}
-+  \gdef^^ce{\^I}
-+  \gdef^^cf{\"I}
-+  %
-+  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}}
-+  \gdef^^d1{\~N}
-+  \gdef^^d2{\`O}
-+  \gdef^^d3{\'O}
-+  \gdef^^d4{\^O}
-+  \gdef^^d5{\~O}
-+  \gdef^^d6{\"O}
-+  \gdef^^d7{$\times$}
-+  \gdef^^d8{\O}
-+  \gdef^^d9{\`U}
-+  \gdef^^da{\'U}
-+  \gdef^^db{\^U}
-+  \gdef^^dc{\"U}
-+  \gdef^^dd{\'Y}
-+  \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}}
-+  \gdef^^df{\ss}
-+  %
-+  \gdef^^e0{\`a}
-+  \gdef^^e1{\'a}
-+  \gdef^^e2{\^a}
-+  \gdef^^e3{\~a}
-+  \gdef^^e4{\"a}
-+  \gdef^^e5{\ringaccent a}
-+  \gdef^^e6{\ae}
-+  \gdef^^e7{\cedilla c}
-+  \gdef^^e8{\`e}
-+  \gdef^^e9{\'e}
-+  \gdef^^ea{\^e}
-+  \gdef^^eb{\"e}
-+  \gdef^^ec{\`{\dotless i}}
-+  \gdef^^ed{\'{\dotless i}}
-+  \gdef^^ee{\^{\dotless i}}
-+  \gdef^^ef{\"{\dotless i}}
-+  %
-+  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}}
-+  \gdef^^f1{\~n}
-+  \gdef^^f2{\`o}
-+  \gdef^^f3{\'o}
-+  \gdef^^f4{\^o}
-+  \gdef^^f5{\~o}
-+  \gdef^^f6{\"o}
-+  \gdef^^f7{$\div$}
-+  \gdef^^f8{\o}
-+  \gdef^^f9{\`u}
-+  \gdef^^fa{\'u}
-+  \gdef^^fb{\^u}
-+  \gdef^^fc{\"u}
-+  \gdef^^fd{\'y}
-+  \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}}
-+  \gdef^^ff{\"y}
++int
++make_executable (const char *path)
++{
++  int rval = 0;
++  struct stat st;
++
++  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
++                  nonempty (path));
++  if ((!path) || (!*path))
++    return 0;
++
++  if (stat (path, &st) >= 0)
++    {
++      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
++    }
++  return rval;
++}
++
++/* Searches for the full path of the wrapper.  Returns
++   newly allocated full path name if found, NULL otherwise
++   Does not chase symlinks, even on platforms that support them.
++*/
++char *
++find_executable (const char *wrapper)
++{
++  int has_slash = 0;
++  const char *p;
++  const char *p_next;
++  /* static buffer for getcwd */
++  char tmp[LT_PATHMAX + 1];
++  int tmp_len;
++  char *concat_name;
++
++  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
++                  nonempty (wrapper));
++
++  if ((wrapper == NULL) || (*wrapper == '\0'))
++    return NULL;
++
++  /* Absolute path? */
++#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
++  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
++    {
++      concat_name = xstrdup (wrapper);
++      if (check_executable (concat_name))
++	return concat_name;
++      XFREE (concat_name);
++    }
++  else
++    {
++#endif
++      if (IS_DIR_SEPARATOR (wrapper[0]))
++	{
++	  concat_name = xstrdup (wrapper);
++	  if (check_executable (concat_name))
++	    return concat_name;
++	  XFREE (concat_name);
++	}
++#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
++    }
++#endif
++
++  for (p = wrapper; *p; p++)
++    if (*p == '/')
++      {
++	has_slash = 1;
++	break;
++      }
++  if (!has_slash)
++    {
++      /* no slashes; search PATH */
++      const char *path = getenv ("PATH");
++      if (path != NULL)
++	{
++	  for (p = path; *p; p = p_next)
++	    {
++	      const char *q;
++	      size_t p_len;
++	      for (q = p; *q; q++)
++		if (IS_PATH_SEPARATOR (*q))
++		  break;
++	      p_len = q - p;
++	      p_next = (*q == '\0' ? q : q + 1);
++	      if (p_len == 0)
++		{
++		  /* empty path: current directory */
++		  if (getcwd (tmp, LT_PATHMAX) == NULL)
++		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
++                              nonnull (strerror (errno)));
++		  tmp_len = strlen (tmp);
++		  concat_name =
++		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
++		  memcpy (concat_name, tmp, tmp_len);
++		  concat_name[tmp_len] = '/';
++		  strcpy (concat_name + tmp_len + 1, wrapper);
++		}
++	      else
++		{
++		  concat_name =
++		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
++		  memcpy (concat_name, p, p_len);
++		  concat_name[p_len] = '/';
++		  strcpy (concat_name + p_len + 1, wrapper);
++		}
++	      if (check_executable (concat_name))
++		return concat_name;
++	      XFREE (concat_name);
++	    }
++	}
++      /* not found in PATH; assume curdir */
++    }
++  /* Relative path | not found in path: prepend cwd */
++  if (getcwd (tmp, LT_PATHMAX) == NULL)
++    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
++              nonnull (strerror (errno)));
++  tmp_len = strlen (tmp);
++  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
++  memcpy (concat_name, tmp, tmp_len);
++  concat_name[tmp_len] = '/';
++  strcpy (concat_name + tmp_len + 1, wrapper);
++
++  if (check_executable (concat_name))
++    return concat_name;
++  XFREE (concat_name);
++  return NULL;
 +}
 +
-+% Latin9 (ISO-8859-15) encoding character definitions.
-+\def\latninechardefs{%
-+  % Encoding is almost identical to Latin1.
-+  \latonechardefs
-+  %
-+  \gdef^^a4{\euro}
-+  \gdef^^a6{\v S}
-+  \gdef^^a8{\v s}
-+  \gdef^^b4{\v Z}
-+  \gdef^^b8{\v z}
-+  \gdef^^bc{\OE}
-+  \gdef^^bd{\oe}
-+  \gdef^^be{\"Y}
-+}
++char *
++chase_symlinks (const char *pathspec)
++{
++#ifndef S_ISLNK
++  return xstrdup (pathspec);
++#else
++  char buf[LT_PATHMAX];
++  struct stat s;
++  char *tmp_pathspec = xstrdup (pathspec);
++  char *p;
++  int has_symlinks = 0;
++  while (strlen (tmp_pathspec) && !has_symlinks)
++    {
++      lt_debugprintf (__FILE__, __LINE__,
++		      "checking path component for symlinks: %s\n",
++		      tmp_pathspec);
++      if (lstat (tmp_pathspec, &s) == 0)
++	{
++	  if (S_ISLNK (s.st_mode) != 0)
++	    {
++	      has_symlinks = 1;
++	      break;
++	    }
 +
-+% Latin2 (ISO-8859-2) character definitions.
-+\def\lattwochardefs{%
-+  \gdef^^a0{~}
-+  \gdef^^a1{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}}
-+  \gdef^^a2{\u{}}
-+  \gdef^^a3{\L}
-+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-+  \gdef^^a5{\v L}
-+  \gdef^^a6{\'S}
-+  \gdef^^a7{\S}
-+  \gdef^^a8{\"{}}
-+  \gdef^^a9{\v S}
-+  \gdef^^aa{\cedilla S}
-+  \gdef^^ab{\v T}
-+  \gdef^^ac{\'Z}
-+  \gdef^^ad{\-}
-+  \gdef^^ae{\v Z}
-+  \gdef^^af{\dotaccent Z}
-+  %
-+  \gdef^^b0{\textdegree}
-+  \gdef^^b1{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}}
-+  \gdef^^b2{\missingcharmsg{OGONEK}}
-+  \gdef^^b3{\l}
-+  \gdef^^b4{\'{}}
-+  \gdef^^b5{\v l}
-+  \gdef^^b6{\'s}
-+  \gdef^^b7{\v{}}
-+  \gdef^^b8{\cedilla\ }
-+  \gdef^^b9{\v s}
-+  \gdef^^ba{\cedilla s}
-+  \gdef^^bb{\v t}
-+  \gdef^^bc{\'z}
-+  \gdef^^bd{\H{}}
-+  \gdef^^be{\v z}
-+  \gdef^^bf{\dotaccent z}
-+  %
-+  \gdef^^c0{\'R}
-+  \gdef^^c1{\'A}
-+  \gdef^^c2{\^A}
-+  \gdef^^c3{\u A}
-+  \gdef^^c4{\"A}
-+  \gdef^^c5{\'L}
-+  \gdef^^c6{\'C}
-+  \gdef^^c7{\cedilla C}
-+  \gdef^^c8{\v C}
-+  \gdef^^c9{\'E}
-+  \gdef^^ca{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}}
-+  \gdef^^cb{\"E}
-+  \gdef^^cc{\v E}
-+  \gdef^^cd{\'I}
-+  \gdef^^ce{\^I}
-+  \gdef^^cf{\v D}
-+  %
-+  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}}
-+  \gdef^^d1{\'N}
-+  \gdef^^d2{\v N}
-+  \gdef^^d3{\'O}
-+  \gdef^^d4{\^O}
-+  \gdef^^d5{\H O}
-+  \gdef^^d6{\"O}
-+  \gdef^^d7{$\times$}
-+  \gdef^^d8{\v R}
-+  \gdef^^d9{\ringaccent U} 
-+  \gdef^^da{\'U}
-+  \gdef^^db{\H U}
-+  \gdef^^dc{\"U}
-+  \gdef^^dd{\'Y}
-+  \gdef^^de{\cedilla T}
-+  \gdef^^df{\ss}
-+  %
-+  \gdef^^e0{\'r}
-+  \gdef^^e1{\'a}
-+  \gdef^^e2{\^a}
-+  \gdef^^e3{\u a}
-+  \gdef^^e4{\"a}
-+  \gdef^^e5{\'l}
-+  \gdef^^e6{\'c}
-+  \gdef^^e7{\cedilla c}
-+  \gdef^^e8{\v c}
-+  \gdef^^e9{\'e}
-+  \gdef^^ea{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}}
-+  \gdef^^eb{\"e}
-+  \gdef^^ec{\v e}
-+  \gdef^^ed{\'\i}
-+  \gdef^^ee{\^\i}
-+  \gdef^^ef{\v d}
-+  %
-+  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}}
-+  \gdef^^f1{\'n}
-+  \gdef^^f2{\v n}
-+  \gdef^^f3{\'o}
-+  \gdef^^f4{\^o}
-+  \gdef^^f5{\H o}
-+  \gdef^^f6{\"o}
-+  \gdef^^f7{$\div$}
-+  \gdef^^f8{\v r}
-+  \gdef^^f9{\ringaccent u}
-+  \gdef^^fa{\'u}
-+  \gdef^^fb{\H u}
-+  \gdef^^fc{\"u}
-+  \gdef^^fd{\'y}
-+  \gdef^^fe{\cedilla t}
-+  \gdef^^ff{\dotaccent{}}
++	  /* search backwards for last DIR_SEPARATOR */
++	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
++	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
++	    p--;
++	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
++	    {
++	      /* no more DIR_SEPARATORS left */
++	      break;
++	    }
++	  *p = '\0';
++	}
++      else
++	{
++	  lt_fatal (__FILE__, __LINE__,
++		    "error accessing file \"%s\": %s",
++		    tmp_pathspec, nonnull (strerror (errno)));
++	}
++    }
++  XFREE (tmp_pathspec);
++
++  if (!has_symlinks)
++    {
++      return xstrdup (pathspec);
++    }
++
++  tmp_pathspec = realpath (pathspec, buf);
++  if (tmp_pathspec == 0)
++    {
++      lt_fatal (__FILE__, __LINE__,
++		"could not follow symlinks for %s", pathspec);
++    }
++  return xstrdup (tmp_pathspec);
++#endif
 +}
 +
-+% UTF-8 character definitions.
-+% 
-+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
-+% changes for Texinfo conventions.  It is included here under the GPL by
-+% permission from Frank Mittelbach and the LaTeX team.
-+% 
-+\newcount\countUTFx
-+\newcount\countUTFy
-+\newcount\countUTFz
++char *
++strendzap (char *str, const char *pat)
++{
++  size_t len, patlen;
 +
-+\gdef\UTFviiiTwoOctets#1#2{\expandafter
-+   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
-+%
-+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
-+   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
-+%
-+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
-+   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
++  assert (str != NULL);
++  assert (pat != NULL);
 +
-+\gdef\UTFviiiDefined#1{%
-+  \ifx #1\relax
-+    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
-+  \else
-+    \expandafter #1%
-+  \fi
-+}
++  len = strlen (str);
++  patlen = strlen (pat);
 +
-+\begingroup
-+  \catcode`\~13
-+  \catcode`\"12
++  if (patlen <= len)
++    {
++      str += len - patlen;
++      if (strcmp (str, pat) == 0)
++	*str = '\0';
++    }
++  return str;
++}
 +
-+  \def\UTFviiiLoop{%
-+    \global\catcode\countUTFx\active
-+    \uccode`\~\countUTFx
-+    \uppercase\expandafter{\UTFviiiTmp}%
-+    \advance\countUTFx by 1
-+    \ifnum\countUTFx < \countUTFy
-+      \expandafter\UTFviiiLoop
-+    \fi}
++void
++lt_debugprintf (const char *file, int line, const char *fmt, ...)
++{
++  va_list args;
++  if (lt_debug)
++    {
++      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
++      va_start (args, fmt);
++      (void) vfprintf (stderr, fmt, args);
++      va_end (args);
++    }
++}
 +
-+  \countUTFx = "C2
-+  \countUTFy = "E0
-+  \def\UTFviiiTmp{%
-+    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
-+  \UTFviiiLoop
++static void
++lt_error_core (int exit_status, const char *file,
++	       int line, const char *mode,
++	       const char *message, va_list ap)
++{
++  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
++  vfprintf (stderr, message, ap);
++  fprintf (stderr, ".\n");
 +
-+  \countUTFx = "E0
-+  \countUTFy = "F0
-+  \def\UTFviiiTmp{%
-+    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
-+  \UTFviiiLoop
++  if (exit_status >= 0)
++    exit (exit_status);
++}
 +
-+  \countUTFx = "F0
-+  \countUTFy = "F4
-+  \def\UTFviiiTmp{%
-+    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
-+  \UTFviiiLoop
-+\endgroup
++void
++lt_fatal (const char *file, int line, const char *message, ...)
++{
++  va_list ap;
++  va_start (ap, message);
++  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
++  va_end (ap);
++}
 +
-+\begingroup
-+  \catcode`\"=12
-+  \catcode`\<=12
-+  \catcode`\.=12
-+  \catcode`\,=12
-+  \catcode`\;=12
-+  \catcode`\!=12
-+  \catcode`\~=13
++static const char *
++nonnull (const char *s)
++{
++  return s ? s : "(null)";
++}
 +
-+  \gdef\DeclareUnicodeCharacter#1#2{%
-+    \countUTFz = "#1\relax
-+    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
-+    \begingroup
-+      \parseXMLCharref
-+      \def\UTFviiiTwoOctets##1##2{%
-+        \csname u8:##1\string ##2\endcsname}%
-+      \def\UTFviiiThreeOctets##1##2##3{%
-+        \csname u8:##1\string ##2\string ##3\endcsname}%
-+      \def\UTFviiiFourOctets##1##2##3##4{%
-+        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
-+      \expandafter\expandafter\expandafter\expandafter
-+       \expandafter\expandafter\expandafter
-+       \gdef\UTFviiiTmp{#2}%
-+    \endgroup}
++static const char *
++nonempty (const char *s)
++{
++  return (s && !*s) ? "(empty)" : nonnull (s);
++}
 +
-+  \gdef\parseXMLCharref{%
-+    \ifnum\countUTFz < "A0\relax
-+      \errhelp = \EMsimple
-+      \errmessage{Cannot define Unicode char value < 00A0}%
-+    \else\ifnum\countUTFz < "800\relax
-+      \parseUTFviiiA,%
-+      \parseUTFviiiB C\UTFviiiTwoOctets.,%
-+    \else\ifnum\countUTFz < "10000\relax
-+      \parseUTFviiiA;%
-+      \parseUTFviiiA,%
-+      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
-+    \else
-+      \parseUTFviiiA;%
-+      \parseUTFviiiA,%
-+      \parseUTFviiiA!%
-+      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
-+    \fi\fi\fi
++void
++lt_setenv (const char *name, const char *value)
++{
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(lt_setenv) setting '%s' to '%s'\n",
++                  nonnull (name), nonnull (value));
++  {
++#ifdef HAVE_SETENV
++    /* always make a copy, for consistency with !HAVE_SETENV */
++    char *str = xstrdup (value);
++    setenv (name, str, 1);
++#else
++    int len = strlen (name) + 1 + strlen (value) + 1;
++    char *str = XMALLOC (char, len);
++    sprintf (str, "%s=%s", name, value);
++    if (putenv (str) != EXIT_SUCCESS)
++      {
++        XFREE (str);
++      }
++#endif
 +  }
++}
 +
-+  \gdef\parseUTFviiiA#1{%
-+    \countUTFx = \countUTFz
-+    \divide\countUTFz by 64
-+    \countUTFy = \countUTFz
-+    \multiply\countUTFz by 64
-+    \advance\countUTFx by -\countUTFz
-+    \advance\countUTFx by 128
-+    \uccode `#1\countUTFx
-+    \countUTFz = \countUTFy}
++char *
++lt_extend_str (const char *orig_value, const char *add, int to_end)
++{
++  char *new_value;
++  if (orig_value && *orig_value)
++    {
++      int orig_value_len = strlen (orig_value);
++      int add_len = strlen (add);
++      new_value = XMALLOC (char, add_len + orig_value_len + 1);
++      if (to_end)
++        {
++          strcpy (new_value, orig_value);
++          strcpy (new_value + orig_value_len, add);
++        }
++      else
++        {
++          strcpy (new_value, add);
++          strcpy (new_value + add_len, orig_value);
++        }
++    }
++  else
++    {
++      new_value = xstrdup (add);
++    }
++  return new_value;
++}
 +
-+  \gdef\parseUTFviiiB#1#2#3#4{%
-+    \advance\countUTFz by "#10\relax
-+    \uccode `#3\countUTFz
-+    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
-+\endgroup
++void
++lt_update_exe_path (const char *name, const char *value)
++{
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
++                  nonnull (name), nonnull (value));
 +
-+\def\utfeightchardefs{%
-+  \DeclareUnicodeCharacter{00A0}{\tie}
-+  \DeclareUnicodeCharacter{00A1}{\exclamdown}
-+  \DeclareUnicodeCharacter{00A3}{\pounds}
-+  \DeclareUnicodeCharacter{00A8}{\"{ }}
-+  \DeclareUnicodeCharacter{00A9}{\copyright}
-+  \DeclareUnicodeCharacter{00AA}{\ordf}
-+  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-+  \DeclareUnicodeCharacter{00AD}{\-}
-+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
-+  \DeclareUnicodeCharacter{00AF}{\={ }}
++  if (name && *name && value && *value)
++    {
++      char *new_value = lt_extend_str (getenv (name), value, 0);
++      /* some systems can't cope with a ':'-terminated path #' */
++      int len = strlen (new_value);
++      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
++        {
++          new_value[len-1] = '\0';
++        }
++      lt_setenv (name, new_value);
++      XFREE (new_value);
++    }
++}
 +
-+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-+  \DeclareUnicodeCharacter{00B4}{\'{ }}
-+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-+  \DeclareUnicodeCharacter{00BA}{\ordm}
-+  \DeclareUnicodeCharacter{00BB}{\guillemetright}
-+  \DeclareUnicodeCharacter{00BF}{\questiondown}
++void
++lt_update_lib_path (const char *name, const char *value)
++{
++  lt_debugprintf (__FILE__, __LINE__,
++		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
++                  nonnull (name), nonnull (value));
 +
-+  \DeclareUnicodeCharacter{00C0}{\`A}
-+  \DeclareUnicodeCharacter{00C1}{\'A}
-+  \DeclareUnicodeCharacter{00C2}{\^A}
-+  \DeclareUnicodeCharacter{00C3}{\~A}
-+  \DeclareUnicodeCharacter{00C4}{\"A}
-+  \DeclareUnicodeCharacter{00C5}{\AA}
-+  \DeclareUnicodeCharacter{00C6}{\AE}
-+  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
-+  \DeclareUnicodeCharacter{00C8}{\`E}
-+  \DeclareUnicodeCharacter{00C9}{\'E}
-+  \DeclareUnicodeCharacter{00CA}{\^E}
-+  \DeclareUnicodeCharacter{00CB}{\"E}
-+  \DeclareUnicodeCharacter{00CC}{\`I}
-+  \DeclareUnicodeCharacter{00CD}{\'I}
-+  \DeclareUnicodeCharacter{00CE}{\^I}
-+  \DeclareUnicodeCharacter{00CF}{\"I}
++  if (name && *name && value && *value)
++    {
++      char *new_value = lt_extend_str (getenv (name), value, 0);
++      lt_setenv (name, new_value);
++      XFREE (new_value);
++    }
++}
 +
-+  \DeclareUnicodeCharacter{00D1}{\~N}
-+  \DeclareUnicodeCharacter{00D2}{\`O}
-+  \DeclareUnicodeCharacter{00D3}{\'O}
-+  \DeclareUnicodeCharacter{00D4}{\^O}
-+  \DeclareUnicodeCharacter{00D5}{\~O}
-+  \DeclareUnicodeCharacter{00D6}{\"O}
-+  \DeclareUnicodeCharacter{00D8}{\O}
-+  \DeclareUnicodeCharacter{00D9}{\`U}
-+  \DeclareUnicodeCharacter{00DA}{\'U}
-+  \DeclareUnicodeCharacter{00DB}{\^U}
-+  \DeclareUnicodeCharacter{00DC}{\"U}
-+  \DeclareUnicodeCharacter{00DD}{\'Y}
-+  \DeclareUnicodeCharacter{00DF}{\ss}
++EOF
++	    case $host_os in
++	      mingw*)
++		cat <<"EOF"
 +
-+  \DeclareUnicodeCharacter{00E0}{\`a}
-+  \DeclareUnicodeCharacter{00E1}{\'a}
-+  \DeclareUnicodeCharacter{00E2}{\^a}
-+  \DeclareUnicodeCharacter{00E3}{\~a}
-+  \DeclareUnicodeCharacter{00E4}{\"a}
-+  \DeclareUnicodeCharacter{00E5}{\aa}
-+  \DeclareUnicodeCharacter{00E6}{\ae}
-+  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
-+  \DeclareUnicodeCharacter{00E8}{\`e}
-+  \DeclareUnicodeCharacter{00E9}{\'e}
-+  \DeclareUnicodeCharacter{00EA}{\^e}
-+  \DeclareUnicodeCharacter{00EB}{\"e}
-+  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
-+  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
-+  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
-+  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
++/* Prepares an argument vector before calling spawn().
++   Note that spawn() does not by itself call the command interpreter
++     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
++      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
++         GetVersionEx(&v);
++         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
++      }) ? "cmd.exe" : "command.com").
++   Instead it simply concatenates the arguments, separated by ' ', and calls
++   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
++   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
++   special way:
++   - Space and tab are interpreted as delimiters. They are not treated as
++     delimiters if they are surrounded by double quotes: "...".
++   - Unescaped double quotes are removed from the input. Their only effect is
++     that within double quotes, space and tab are treated like normal
++     characters.
++   - Backslashes not followed by double quotes are not special.
++   - But 2*n+1 backslashes followed by a double quote become
++     n backslashes followed by a double quote (n >= 0):
++       \" -> "
++       \\\" -> \"
++       \\\\\" -> \\"
++ */
++#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
++#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
++char **
++prepare_spawn (char **argv)
++{
++  size_t argc;
++  char **new_argv;
++  size_t i;
 +
-+  \DeclareUnicodeCharacter{00F1}{\~n}
-+  \DeclareUnicodeCharacter{00F2}{\`o}
-+  \DeclareUnicodeCharacter{00F3}{\'o}
-+  \DeclareUnicodeCharacter{00F4}{\^o}
-+  \DeclareUnicodeCharacter{00F5}{\~o}
-+  \DeclareUnicodeCharacter{00F6}{\"o}
-+  \DeclareUnicodeCharacter{00F8}{\o}
-+  \DeclareUnicodeCharacter{00F9}{\`u}
-+  \DeclareUnicodeCharacter{00FA}{\'u}
-+  \DeclareUnicodeCharacter{00FB}{\^u}
-+  \DeclareUnicodeCharacter{00FC}{\"u}
-+  \DeclareUnicodeCharacter{00FD}{\'y}
-+  \DeclareUnicodeCharacter{00FF}{\"y}
++  /* Count number of arguments.  */
++  for (argc = 0; argv[argc] != NULL; argc++)
++    ;
 +
-+  \DeclareUnicodeCharacter{0100}{\=A}
-+  \DeclareUnicodeCharacter{0101}{\=a}
-+  \DeclareUnicodeCharacter{0102}{\u{A}}
-+  \DeclareUnicodeCharacter{0103}{\u{a}}
-+  \DeclareUnicodeCharacter{0106}{\'C}
-+  \DeclareUnicodeCharacter{0107}{\'c}
-+  \DeclareUnicodeCharacter{0108}{\^C}
-+  \DeclareUnicodeCharacter{0109}{\^c}
-+  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
-+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
-+  \DeclareUnicodeCharacter{010C}{\v{C}}
-+  \DeclareUnicodeCharacter{010D}{\v{c}}
-+  \DeclareUnicodeCharacter{010E}{\v{D}}
++  /* Allocate new argument vector.  */
++  new_argv = XMALLOC (char *, argc + 1);
 +
-+  \DeclareUnicodeCharacter{0112}{\=E}
-+  \DeclareUnicodeCharacter{0113}{\=e}
-+  \DeclareUnicodeCharacter{0114}{\u{E}}
-+  \DeclareUnicodeCharacter{0115}{\u{e}}
-+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
-+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
-+  \DeclareUnicodeCharacter{011A}{\v{E}}
-+  \DeclareUnicodeCharacter{011B}{\v{e}}
-+  \DeclareUnicodeCharacter{011C}{\^G}
-+  \DeclareUnicodeCharacter{011D}{\^g}
-+  \DeclareUnicodeCharacter{011E}{\u{G}}
-+  \DeclareUnicodeCharacter{011F}{\u{g}}
++  /* Put quoted arguments into the new argument vector.  */
++  for (i = 0; i < argc; i++)
++    {
++      const char *string = argv[i];
 +
-+  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
-+  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
-+  \DeclareUnicodeCharacter{0124}{\^H}
-+  \DeclareUnicodeCharacter{0125}{\^h}
-+  \DeclareUnicodeCharacter{0128}{\~I}
-+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
-+  \DeclareUnicodeCharacter{012A}{\=I}
-+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
-+  \DeclareUnicodeCharacter{012C}{\u{I}}
-+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
++      if (string[0] == '\0')
++	new_argv[i] = xstrdup ("\"\"");
++      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
++	{
++	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
++	  size_t length;
++	  unsigned int backslashes;
++	  const char *s;
++	  char *quoted_string;
++	  char *p;
 +
-+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
-+  \DeclareUnicodeCharacter{0131}{\dotless{i}}
-+  \DeclareUnicodeCharacter{0132}{IJ}
-+  \DeclareUnicodeCharacter{0133}{ij}
-+  \DeclareUnicodeCharacter{0134}{\^J}
-+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
-+  \DeclareUnicodeCharacter{0139}{\'L}
-+  \DeclareUnicodeCharacter{013A}{\'l}
++	  length = 0;
++	  backslashes = 0;
++	  if (quote_around)
++	    length++;
++	  for (s = string; *s != '\0'; s++)
++	    {
++	      char c = *s;
++	      if (c == '"')
++		length += backslashes + 1;
++	      length++;
++	      if (c == '\\')
++		backslashes++;
++	      else
++		backslashes = 0;
++	    }
++	  if (quote_around)
++	    length += backslashes + 1;
 +
-+  \DeclareUnicodeCharacter{0141}{\L}
-+  \DeclareUnicodeCharacter{0142}{\l}
-+  \DeclareUnicodeCharacter{0143}{\'N}
-+  \DeclareUnicodeCharacter{0144}{\'n}
-+  \DeclareUnicodeCharacter{0147}{\v{N}}
-+  \DeclareUnicodeCharacter{0148}{\v{n}}
-+  \DeclareUnicodeCharacter{014C}{\=O}
-+  \DeclareUnicodeCharacter{014D}{\=o}
-+  \DeclareUnicodeCharacter{014E}{\u{O}}
-+  \DeclareUnicodeCharacter{014F}{\u{o}}
++	  quoted_string = XMALLOC (char, length + 1);
 +
-+  \DeclareUnicodeCharacter{0150}{\H{O}}
-+  \DeclareUnicodeCharacter{0151}{\H{o}}
-+  \DeclareUnicodeCharacter{0152}{\OE}
-+  \DeclareUnicodeCharacter{0153}{\oe}
-+  \DeclareUnicodeCharacter{0154}{\'R}
-+  \DeclareUnicodeCharacter{0155}{\'r}
-+  \DeclareUnicodeCharacter{0158}{\v{R}}
-+  \DeclareUnicodeCharacter{0159}{\v{r}}
-+  \DeclareUnicodeCharacter{015A}{\'S}
-+  \DeclareUnicodeCharacter{015B}{\'s}
-+  \DeclareUnicodeCharacter{015C}{\^S}
-+  \DeclareUnicodeCharacter{015D}{\^s}
-+  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
-+  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
++	  p = quoted_string;
++	  backslashes = 0;
++	  if (quote_around)
++	    *p++ = '"';
++	  for (s = string; *s != '\0'; s++)
++	    {
++	      char c = *s;
++	      if (c == '"')
++		{
++		  unsigned int j;
++		  for (j = backslashes + 1; j > 0; j--)
++		    *p++ = '\\';
++		}
++	      *p++ = c;
++	      if (c == '\\')
++		backslashes++;
++	      else
++		backslashes = 0;
++	    }
++	  if (quote_around)
++	    {
++	      unsigned int j;
++	      for (j = backslashes; j > 0; j--)
++		*p++ = '\\';
++	      *p++ = '"';
++	    }
++	  *p = '\0';
 +
-+  \DeclareUnicodeCharacter{0160}{\v{S}}
-+  \DeclareUnicodeCharacter{0161}{\v{s}}
-+  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
-+  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
-+  \DeclareUnicodeCharacter{0164}{\v{T}}
++	  new_argv[i] = quoted_string;
++	}
++      else
++	new_argv[i] = (char *) string;
++    }
++  new_argv[argc] = NULL;
 +
-+  \DeclareUnicodeCharacter{0168}{\~U}
-+  \DeclareUnicodeCharacter{0169}{\~u}
-+  \DeclareUnicodeCharacter{016A}{\=U}
-+  \DeclareUnicodeCharacter{016B}{\=u}
-+  \DeclareUnicodeCharacter{016C}{\u{U}}
-+  \DeclareUnicodeCharacter{016D}{\u{u}}
-+  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
-+  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
++  return new_argv;
++}
++EOF
++		;;
++	    esac
 +
-+  \DeclareUnicodeCharacter{0170}{\H{U}}
-+  \DeclareUnicodeCharacter{0171}{\H{u}}
-+  \DeclareUnicodeCharacter{0174}{\^W}
-+  \DeclareUnicodeCharacter{0175}{\^w}
-+  \DeclareUnicodeCharacter{0176}{\^Y}
-+  \DeclareUnicodeCharacter{0177}{\^y}
-+  \DeclareUnicodeCharacter{0178}{\"Y}
-+  \DeclareUnicodeCharacter{0179}{\'Z}
-+  \DeclareUnicodeCharacter{017A}{\'z}
-+  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
-+  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
-+  \DeclareUnicodeCharacter{017D}{\v{Z}}
-+  \DeclareUnicodeCharacter{017E}{\v{z}}
++            cat <<"EOF"
++void lt_dump_script (FILE* f)
++{
++EOF
++	    func_emit_wrapper yes |
++              $SED -e 's/\([\\"]\)/\\\1/g' \
++	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
 +
-+  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
-+  \DeclareUnicodeCharacter{01C5}{D\v{z}}
-+  \DeclareUnicodeCharacter{01C6}{d\v{z}}
-+  \DeclareUnicodeCharacter{01C7}{LJ}
-+  \DeclareUnicodeCharacter{01C8}{Lj}
-+  \DeclareUnicodeCharacter{01C9}{lj}
-+  \DeclareUnicodeCharacter{01CA}{NJ}
-+  \DeclareUnicodeCharacter{01CB}{Nj}
-+  \DeclareUnicodeCharacter{01CC}{nj}
-+  \DeclareUnicodeCharacter{01CD}{\v{A}}
-+  \DeclareUnicodeCharacter{01CE}{\v{a}}
-+  \DeclareUnicodeCharacter{01CF}{\v{I}}
++            cat <<"EOF"
++}
++EOF
++}
++# end: func_emit_cwrapperexe_src
 +
-+  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
-+  \DeclareUnicodeCharacter{01D1}{\v{O}}
-+  \DeclareUnicodeCharacter{01D2}{\v{o}}
-+  \DeclareUnicodeCharacter{01D3}{\v{U}}
-+  \DeclareUnicodeCharacter{01D4}{\v{u}}
++# func_win32_import_lib_p ARG
++# True if ARG is an import lib, as indicated by $file_magic_cmd
++func_win32_import_lib_p ()
++{
++    $opt_debug
++    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
++    *import*) : ;;
++    *) false ;;
++    esac
++}
++
++# func_mode_link arg...
++func_mode_link ()
++{
++    $opt_debug
+     case $host in
+-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
++    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+       # It is impossible to link a dll without this setting, and
+       # we shouldn't force the makefile maintainer to figure out
+       # which system we are compiling for in order to pass an extra
+-      # flag for every libtool invokation.
++      # flag for every libtool invocation.
+       # allow_undefined=no
+ 
+       # FIXME: Unfortunately, there are problems with the above when trying
+@@ -812,10 +5100,10 @@
+       allow_undefined=yes
+       ;;
+     esac
+-    libtool_args="$nonopt"
+-    base_compile="$nonopt"
+-    compile_command="$nonopt"
+-    finalize_command="$nonopt"
++    libtool_args=$nonopt
++    base_compile="$nonopt $@"
++    compile_command=$nonopt
++    finalize_command=$nonopt
+ 
+     compile_rpath=
+     finalize_rpath=
+@@ -829,8 +5117,11 @@
+     linker_flags=
+     dllsearchpath=
+     lib_search_path=`pwd`
++    inst_prefix_dir=
++    new_inherited_linker_flags=
+ 
+     avoid_version=no
++    bindir=
+     dlfiles=
+     dlprefiles=
+     dlself=no
+@@ -844,6 +5135,7 @@
+     no_install=no
+     objs=
+     non_pic_objects=
++    precious_files_regex=
+     prefer_static_libs=no
+     preload=no
+     prev=
+@@ -855,27 +5147,47 @@
+     temp_rpath=
+     thread_safe=no
+     vinfo=
++    vinfo_number=no
++    weak_libs=
++    single_module="${wl}-single_module"
++    func_infer_tag $base_compile
+ 
+     # We need to know -static, to get the right output filenames.
+     for arg
+     do
+       case $arg in
+-      -all-static | -static)
+-	if test "X$arg" = "X-all-static"; then
++      -shared)
++	test "$build_libtool_libs" != yes && \
++	  func_fatal_configuration "can not build a shared library"
++	build_old_libs=no
++	break
++	;;
++      -all-static | -static | -static-libtool-libs)
++	case $arg in
++	-all-static)
+ 	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+-	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
++	    func_warning "complete static linking is impossible in this configuration"
+ 	  fi
+ 	  if test -n "$link_static_flag"; then
+ 	    dlopen_self=$dlopen_self_static
+ 	  fi
+-	else
++	  prefer_static_libs=yes
++	  ;;
++	-static)
+ 	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ 	    dlopen_self=$dlopen_self_static
+ 	  fi
+-	fi
++	  prefer_static_libs=built
++	  ;;
++	-static-libtool-libs)
++	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
++	    dlopen_self=$dlopen_self_static
++	  fi
++	  prefer_static_libs=yes
++	  ;;
++	esac
+ 	build_libtool_libs=no
+ 	build_old_libs=yes
+-	prefer_static_libs=yes
+ 	break
+ 	;;
+       esac
+@@ -885,33 +5197,33 @@
+     test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+ 
+     # Go through the arguments, transforming them on the way.
+-    while test $# -gt 0; do
++    while test "$#" -gt 0; do
+       arg="$1"
+-      base_compile="$base_compile $arg"
+       shift
+-      case $arg in
+-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+-	;;
+-      *) qarg=$arg ;;
+-      esac
+-      libtool_args="$libtool_args $qarg"
++      func_quote_for_eval "$arg"
++      qarg=$func_quote_for_eval_unquoted_result
++      func_append libtool_args " $func_quote_for_eval_result"
+ 
+       # If the previous option needs an argument, assign it.
+       if test -n "$prev"; then
+ 	case $prev in
+ 	output)
+-	  compile_command="$compile_command @OUTPUT@"
+-	  finalize_command="$finalize_command @OUTPUT@"
++	  func_append compile_command " @OUTPUT@"
++	  func_append finalize_command " @OUTPUT@"
+ 	  ;;
+ 	esac
+ 
+ 	case $prev in
++	bindir)
++	  bindir="$arg"
++	  prev=
++	  continue
++	  ;;
+ 	dlfiles|dlprefiles)
+ 	  if test "$preload" = no; then
+ 	    # Add the symbol object into the linking commands.
+-	    compile_command="$compile_command @SYMFILE@"
+-	    finalize_command="$finalize_command @SYMFILE@"
++	    func_append compile_command " @SYMFILE@"
++	    func_append finalize_command " @SYMFILE@"
+ 	    preload=yes
+ 	  fi
+ 	  case $arg in
+@@ -938,9 +5250,9 @@
+ 	    ;;
+ 	  *)
+ 	    if test "$prev" = dlfiles; then
+-	      dlfiles="$dlfiles $arg"
++	      func_append dlfiles " $arg"
+ 	    else
+-	      dlprefiles="$dlprefiles $arg"
++	      func_append dlprefiles " $arg"
+ 	    fi
+ 	    prev=
+ 	    continue
+@@ -949,10 +5261,8 @@
+ 	  ;;
+ 	expsyms)
+ 	  export_symbols="$arg"
+-	  if test ! -f "$arg"; then
+-	    $echo "$modename: symbol file \`$arg' does not exist"
+-	    exit 1
+-	  fi
++	  test -f "$arg" \
++	    || func_fatal_error "symbol file \`$arg' does not exist"
+ 	  prev=
+ 	  continue
+ 	  ;;
+@@ -961,115 +5271,127 @@
+ 	  prev=
+ 	  continue
+ 	  ;;
+-	release)
+-	  release="-$arg"
++	framework)
++	  case $host in
++	    *-*-darwin*)
++	      case "$deplibs " in
++		*" $qarg.ltframework "*) ;;
++		*) func_append deplibs " $qarg.ltframework" # this is fixed later
++		   ;;
++	      esac
++	      ;;
++	  esac
++	  prev=
++	  continue
++	  ;;
++	inst_prefix)
++	  inst_prefix_dir="$arg"
+ 	  prev=
+ 	  continue
+ 	  ;;
+ 	objectlist)
+ 	  if test -f "$arg"; then
+-            save_arg=$arg
++	    save_arg=$arg
+ 	    moreargs=
+-	    for fil in `cat $save_arg`
++	    for fil in `cat "$save_arg"`
+ 	    do
+-#	      moreargs="$moreargs $fil"
+-              arg=$fil
+-              # A libtool-controlled object.
++#	      func_append moreargs " $fil"
++	      arg=$fil
++	      # A libtool-controlled object.
+ 
+ 	      # Check to see that this really is a libtool object.
+-	      if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+-                pic_object=
+-                non_pic_object=
+-
+-                # Read the .lo file
+-                # If there is no directory component, then add one.
+-                case $arg in
+-                */* | *\\*) . $arg ;;
+-                *) . ./$arg ;;
+-                esac
++	      if func_lalib_unsafe_p "$arg"; then
++		pic_object=
++		non_pic_object=
+ 
+-                if test -z "$pic_object" || \
+-                   test -z "$non_pic_object" ||
+-                   test "$pic_object" = none && \
+-                   test "$non_pic_object" = none; then
+-                  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+-                  exit 1
+-                fi
++		# Read the .lo file
++		func_source "$arg"
+ 
+-	        # Extract subdirectory from the argument.
+-	        xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+-	        if test "X$xdir" = "X$arg"; then
+-	          xdir=
+-	        else
+-	          xdir="$xdir/"
+-	        fi
++		if test -z "$pic_object" ||
++		   test -z "$non_pic_object" ||
++		   test "$pic_object" = none &&
++		   test "$non_pic_object" = none; then
++		  func_fatal_error "cannot find name of object for \`$arg'"
++		fi
+ 
+-                if test "$pic_object" != none; then
+-                  # Prepend the subdirectory the object is found in.
+-	          pic_object="$xdir$pic_object"
++		# Extract subdirectory from the argument.
++		func_dirname "$arg" "/" ""
++		xdir="$func_dirname_result"
+ 
+-	          if test "$prev" = dlfiles; then
+-	            if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+-	              dlfiles="$dlfiles $pic_object"
+-	              prev=
+-	              continue
+-	            else
+-	              # If libtool objects are unsupported, then we need to preload.
+-	              prev=dlprefiles
+-	            fi
+-	          fi
++		if test "$pic_object" != none; then
++		  # Prepend the subdirectory the object is found in.
++		  pic_object="$xdir$pic_object"
+ 
+-	          # CHECK ME:  I think I busted this.  -Ossama
+-                  if test "$prev" = dlprefiles; then
+-	            # Preload the old-style object.
+-	            dlprefiles="$dlprefiles $pic_object"
+-	            prev=
+-                  fi
++		  if test "$prev" = dlfiles; then
++		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
++		      func_append dlfiles " $pic_object"
++		      prev=
++		      continue
++		    else
++		      # If libtool objects are unsupported, then we need to preload.
++		      prev=dlprefiles
++		    fi
++		  fi
+ 
+-                  # A PIC object.
+-	          libobjs="$libobjs $pic_object"
+-	          arg="$pic_object"
+-                fi
++		  # CHECK ME:  I think I busted this.  -Ossama
++		  if test "$prev" = dlprefiles; then
++		    # Preload the old-style object.
++		    func_append dlprefiles " $pic_object"
++		    prev=
++		  fi
+ 
+-                # Non-PIC object.
+-                if test "$non_pic_object" != none; then
+-                  # Prepend the subdirectory the object is found in.
+-	          non_pic_object="$xdir$non_pic_object"
++		  # A PIC object.
++		  func_append libobjs " $pic_object"
++		  arg="$pic_object"
++		fi
+ 
+-                  # A standard non-PIC object
+-                  non_pic_objects="$non_pic_objects $non_pic_object"
+-                  if test -z "$pic_object" || test "$pic_object" = none ; then
+-                    arg="$non_pic_object"
+-                  fi
+-                fi
+-              else
+-                # Only an error if not doing a dry-run.
+-                if test -z "$run"; then
+-                  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+-                  exit 1
+-                else
+-                  # Dry-run case.
++		# Non-PIC object.
++		if test "$non_pic_object" != none; then
++		  # Prepend the subdirectory the object is found in.
++		  non_pic_object="$xdir$non_pic_object"
+ 
+-	          # Extract subdirectory from the argument.
+-	          xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+-	          if test "X$xdir" = "X$arg"; then
+-	            xdir=
+-	          else
+-	            xdir="$xdir/"
+-	          fi
++		  # A standard non-PIC object
++		  func_append non_pic_objects " $non_pic_object"
++		  if test -z "$pic_object" || test "$pic_object" = none ; then
++		    arg="$non_pic_object"
++		  fi
++		else
++		  # If the PIC object exists, use it instead.
++		  # $xdir was prepended to $pic_object above.
++		  non_pic_object="$pic_object"
++		  func_append non_pic_objects " $non_pic_object"
++		fi
++	      else
++		# Only an error if not doing a dry-run.
++		if $opt_dry_run; then
++		  # Extract subdirectory from the argument.
++		  func_dirname "$arg" "/" ""
++		  xdir="$func_dirname_result"
+ 
+-                  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+-                  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+-	          libobjs="$libobjs $pic_object"
+-                  non_pic_objects="$non_pic_objects $non_pic_object"
+-                fi
++		  func_lo2o "$arg"
++		  pic_object=$xdir$objdir/$func_lo2o_result
++		  non_pic_object=$xdir$func_lo2o_result
++		  func_append libobjs " $pic_object"
++		  func_append non_pic_objects " $non_pic_object"
++	        else
++		  func_fatal_error "\`$arg' is not a valid libtool object"
++		fi
+ 	      fi
+ 	    done
+ 	  else
+-	    $echo "$modename: link input file \`$save_arg' does not exist"
+-	    exit 1
++	    func_fatal_error "link input file \`$arg' does not exist"
+ 	  fi
+-          arg=$save_arg
++	  arg=$save_arg
++	  prev=
++	  continue
++	  ;;
++	precious_regex)
++	  precious_files_regex="$arg"
++	  prev=
++	  continue
++	  ;;
++	release)
++	  release="-$arg"
+ 	  prev=
+ 	  continue
+ 	  ;;
+@@ -1078,37 +5400,54 @@
+ 	  case $arg in
+ 	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+ 	  *)
+-	    $echo "$modename: only absolute run-paths are allowed" 1>&2
+-	    exit 1
++	    func_fatal_error "only absolute run-paths are allowed"
+ 	    ;;
+ 	  esac
+ 	  if test "$prev" = rpath; then
+ 	    case "$rpath " in
+ 	    *" $arg "*) ;;
+-	    *) rpath="$rpath $arg" ;;
++	    *) func_append rpath " $arg" ;;
+ 	    esac
+ 	  else
+ 	    case "$xrpath " in
+ 	    *" $arg "*) ;;
+-	    *) xrpath="$xrpath $arg" ;;
++	    *) func_append xrpath " $arg" ;;
+ 	    esac
+ 	  fi
+ 	  prev=
+ 	  continue
+ 	  ;;
++	shrext)
++	  shrext_cmds="$arg"
++	  prev=
++	  continue
++	  ;;
++	weak)
++	  func_append weak_libs " $arg"
++	  prev=
++	  continue
++	  ;;
++	xcclinker)
++	  func_append linker_flags " $qarg"
++	  func_append compiler_flags " $qarg"
++	  prev=
++	  func_append compile_command " $qarg"
++	  func_append finalize_command " $qarg"
++	  continue
++	  ;;
+ 	xcompiler)
+-	  compiler_flags="$compiler_flags $qarg"
++	  func_append compiler_flags " $qarg"
+ 	  prev=
+-	  compile_command="$compile_command $qarg"
+-	  finalize_command="$finalize_command $qarg"
++	  func_append compile_command " $qarg"
++	  func_append finalize_command " $qarg"
+ 	  continue
+ 	  ;;
+ 	xlinker)
+-	  linker_flags="$linker_flags $qarg"
+-	  compiler_flags="$compiler_flags $wl$qarg"
++	  func_append linker_flags " $qarg"
++	  func_append compiler_flags " $wl$qarg"
+ 	  prev=
+-	  compile_command="$compile_command $wl$qarg"
+-	  finalize_command="$finalize_command $wl$qarg"
++	  func_append compile_command " $wl$qarg"
++	  func_append finalize_command " $wl$qarg"
+ 	  continue
+ 	  ;;
+ 	*)
+@@ -1117,23 +5456,23 @@
+ 	  continue
+ 	  ;;
+ 	esac
+-      fi # test -n $prev
++      fi # test -n "$prev"
+ 
+       prevarg="$arg"
+ 
+       case $arg in
+       -all-static)
+ 	if test -n "$link_static_flag"; then
+-	  compile_command="$compile_command $link_static_flag"
+-	  finalize_command="$finalize_command $link_static_flag"
++	  # See comment for -static flag below, for more details.
++	  func_append compile_command " $link_static_flag"
++	  func_append finalize_command " $link_static_flag"
+ 	fi
+ 	continue
+ 	;;
+ 
+       -allow-undefined)
+ 	# FIXME: remove this flag sometime in the future.
+-	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+-	continue
++	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ 	;;
+ 
+       -avoid-version)
+@@ -1141,6 +5480,11 @@
+ 	continue
+ 	;;
+ 
++      -bindir)
++	prev=bindir
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{01E2}{\={\AE}}
-+  \DeclareUnicodeCharacter{01E3}{\={\ae}}
-+  \DeclareUnicodeCharacter{01E6}{\v{G}}
-+  \DeclareUnicodeCharacter{01E7}{\v{g}}
-+  \DeclareUnicodeCharacter{01E8}{\v{K}}
-+  \DeclareUnicodeCharacter{01E9}{\v{k}}
+       -dlopen)
+ 	prev=dlfiles
+ 	continue
+@@ -1158,8 +5502,7 @@
+ 
+       -export-symbols | -export-symbols-regex)
+ 	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+-	  $echo "$modename: more than one -exported-symbols argument is not allowed"
+-	  exit 1
++	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+ 	fi
+ 	if test "X$arg" = "X-export-symbols"; then
+ 	  prev=expsyms
+@@ -1169,44 +5512,74 @@
+ 	continue
+ 	;;
+ 
++      -framework)
++	prev=framework
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
-+  \DeclareUnicodeCharacter{01F1}{DZ}
-+  \DeclareUnicodeCharacter{01F2}{Dz}
-+  \DeclareUnicodeCharacter{01F3}{dz}
-+  \DeclareUnicodeCharacter{01F4}{\'G}
-+  \DeclareUnicodeCharacter{01F5}{\'g}
-+  \DeclareUnicodeCharacter{01F8}{\`N}
-+  \DeclareUnicodeCharacter{01F9}{\`n}
-+  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
-+  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
-+  \DeclareUnicodeCharacter{01FE}{\'{\O}}
-+  \DeclareUnicodeCharacter{01FF}{\'{\o}}
++      -inst-prefix-dir)
++	prev=inst_prefix
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{021E}{\v{H}}
-+  \DeclareUnicodeCharacter{021F}{\v{h}}
+       # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+       # so, if we see these flags be careful not to treat them like -L
+       -L[A-Z][A-Z]*:*)
+ 	case $with_gcc/$host in
+-	no/*-*-irix*)
+-	  compile_command="$compile_command $arg"
+-	  finalize_command="$finalize_command $arg"
++	no/*-*-irix* | /*-*-irix*)
++	  func_append compile_command " $arg"
++	  func_append finalize_command " $arg"
+ 	  ;;
+ 	esac
+ 	continue
+ 	;;
+ 
+       -L*)
+-	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
++	func_stripname "-L" '' "$arg"
++	if test -z "$func_stripname_result"; then
++	  if test "$#" -gt 0; then
++	    func_fatal_error "require no space between \`-L' and \`$1'"
++	  else
++	    func_fatal_error "need path for \`-L' option"
++	  fi
++	fi
++	func_resolve_sysroot "$func_stripname_result"
++	dir=$func_resolve_sysroot_result
+ 	# We need an absolute path.
+ 	case $dir in
+ 	[\\/]* | [A-Za-z]:[\\/]*) ;;
+ 	*)
+ 	  absdir=`cd "$dir" && pwd`
+-	  if test -z "$absdir"; then
+-	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+-	    exit 1
+-	  fi
++	  test -z "$absdir" && \
++	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ 	  dir="$absdir"
+ 	  ;;
+ 	esac
+ 	case "$deplibs " in
+-	*" -L$dir "*) ;;
++	*" -L$dir "* | *" $arg "*)
++	  # Will only happen for absolute or sysroot arguments
++	  ;;
+ 	*)
+-	  deplibs="$deplibs -L$dir"
+-	  lib_search_path="$lib_search_path $dir"
++	  # Preserve sysroot, but never include relative directories
++	  case $dir in
++	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
++	    *) func_append deplibs " -L$dir" ;;
++	  esac
++	  func_append lib_search_path " $dir"
+ 	  ;;
+ 	esac
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
++	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$dir:"*) ;;
+-	  *) dllsearchpath="$dllsearchpath:$dir";;
++	  ::) dllsearchpath=$dir;;
++	  *) func_append dllsearchpath ":$dir";;
++	  esac
++	  case :$dllsearchpath: in
++	  *":$testbindir:"*) ;;
++	  ::) dllsearchpath=$testbindir;;
++	  *) func_append dllsearchpath ":$testbindir";;
+ 	  esac
+ 	  ;;
+ 	esac
+@@ -1216,17 +5589,41 @@
+       -l*)
+ 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
++	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # These systems don't actually have a C or math library (as such)
+ 	    continue
+ 	    ;;
+-	  *-*-mingw* | *-*-os2*)
++	  *-*-os2*)
+ 	    # These systems don't actually have a C library (as such)
+ 	    test "X$arg" = "X-lc" && continue
+ 	    ;;
++	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
++	    # Do not include libc due to us having libc/libc_r.
++	    test "X$arg" = "X-lc" && continue
++	    ;;
++	  *-*-rhapsody* | *-*-darwin1.[012])
++	    # Rhapsody C and math libraries are in the System framework
++	    func_append deplibs " System.ltframework"
++	    continue
++	    ;;
++	  *-*-sco3.2v5* | *-*-sco5v6*)
++	    # Causes problems with __ctype
++	    test "X$arg" = "X-lc" && continue
++	    ;;
++	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
++	    # Compiler inserts libc in the correct place for threads to work
++	    test "X$arg" = "X-lc" && continue
++	    ;;
+ 	  esac
++	elif test "X$arg" = "X-lc_r"; then
++	 case $host in
++	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
++	   # Do not include libc_r directly, use -pthread flag.
++	   continue
++	   ;;
++	 esac
+ 	fi
+-	deplibs="$deplibs $arg"
++	func_append deplibs " $arg"
+ 	continue
+ 	;;
+ 
+@@ -1235,6 +5632,33 @@
+ 	continue
+ 	;;
+ 
++      # Tru64 UNIX uses -model [arg] to determine the layout of C++
++      # classes, name mangling, and exception handling.
++      # Darwin uses the -arch flag to determine output architecture.
++      -model|-arch|-isysroot|--sysroot)
++	func_append compiler_flags " $arg"
++	func_append compile_command " $arg"
++	func_append finalize_command " $arg"
++	prev=xcompiler
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
-+  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
-+  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
-+  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
-+  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
-+  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
++      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++	func_append compiler_flags " $arg"
++	func_append compile_command " $arg"
++	func_append finalize_command " $arg"
++	case "$new_inherited_linker_flags " in
++	    *" $arg "*) ;;
++	    * ) func_append new_inherited_linker_flags " $arg" ;;
++	esac
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{0232}{\=Y}
-+  \DeclareUnicodeCharacter{0233}{\=y}
-+  \DeclareUnicodeCharacter{0237}{\dotless{j}}
++      -multi_module)
++	single_module="${wl}-multi_module"
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
-+  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
-+  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
-+  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
-+  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
-+  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
-+  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
-+  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
-+  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
-+  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
-+  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
-+  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+       -no-fast-install)
+ 	fast_install=no
+ 	continue
+@@ -1242,11 +5666,11 @@
+ 
+       -no-install)
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
++	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ 	  # The PATH hackery in wrapper scripts is required on Windows
+-	  # in order for the loader to find any dlls it needs.
+-	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+-	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
++	  # and Darwin in order for the loader to find any dlls it needs.
++	  func_warning "\`-no-install' is ignored for $host"
++	  func_warning "assuming \`-no-fast-install' instead"
+ 	  fast_install=no
+ 	  ;;
+ 	*) no_install=yes ;;
+@@ -1266,6 +5690,11 @@
+ 
+       -o) prev=output ;;
+ 
++      -precious-files-regex)
++	prev=precious_regex
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
-+  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+       -release)
+ 	prev=release
+ 	continue
+@@ -1282,23 +5711,37 @@
+ 	;;
+ 
+       -R*)
+-	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
++	func_stripname '-R' '' "$arg"
++	dir=$func_stripname_result
+ 	# We need an absolute path.
+ 	case $dir in
+ 	[\\/]* | [A-Za-z]:[\\/]*) ;;
++	=*)
++	  func_stripname '=' '' "$dir"
++	  dir=$lt_sysroot$func_stripname_result
++	  ;;
+ 	*)
+-	  $echo "$modename: only absolute run-paths are allowed" 1>&2
+-	  exit 1
++	  func_fatal_error "only absolute run-paths are allowed"
+ 	  ;;
+ 	esac
+ 	case "$xrpath " in
+ 	*" $dir "*) ;;
+-	*) xrpath="$xrpath $dir" ;;
++	*) func_append xrpath " $dir" ;;
+ 	esac
+ 	continue
+ 	;;
+ 
+-      -static)
++      -shared)
++	# The effects of -shared are defined in a previous loop.
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E20}{\=G}
-+  \DeclareUnicodeCharacter{1E21}{\=g}
-+  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
-+  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
-+  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
-+  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
-+  \DeclareUnicodeCharacter{1E26}{\"H}
-+  \DeclareUnicodeCharacter{1E27}{\"h}
++      -shrext)
++	prev=shrext
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E30}{\'K}
-+  \DeclareUnicodeCharacter{1E31}{\'k}
-+  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
-+  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
-+  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
-+  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
-+  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
-+  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
-+  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
-+  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
-+  \DeclareUnicodeCharacter{1E3E}{\'M}
-+  \DeclareUnicodeCharacter{1E3F}{\'m}
++      -static | -static-libtool-libs)
+ 	# The effects of -static are defined in a previous loop.
+ 	# We used to do the same as -all-static on platforms that
+ 	# didn't have a PIC flag, but the assumption that the effects
+@@ -1317,41 +5760,48 @@
+ 	continue
+ 	;;
+ 
++      -version-number)
++	prev=vinfo
++	vinfo_number=yes
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
-+  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
-+  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
-+  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
-+  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
-+  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
-+  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
-+  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
-+  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
-+  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
++      -weak)
++        prev=weak
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E54}{\'P}
-+  \DeclareUnicodeCharacter{1E55}{\'p}
-+  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
-+  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
-+  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
-+  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
-+  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
-+  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
-+  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
-+  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+       -Wc,*)
+-	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
++	func_stripname '-Wc,' '' "$arg"
++	args=$func_stripname_result
+ 	arg=
+-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
++	save_ifs="$IFS"; IFS=','
+ 	for flag in $args; do
+ 	  IFS="$save_ifs"
+-	  case $flag in
+-	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	    flag="\"$flag\""
+-	    ;;
+-	  esac
+-	  arg="$arg $wl$flag"
+-	  compiler_flags="$compiler_flags $flag"
++          func_quote_for_eval "$flag"
++	  func_append arg " $func_quote_for_eval_result"
++	  func_append compiler_flags " $func_quote_for_eval_result"
+ 	done
+ 	IFS="$save_ifs"
+-	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
++	func_stripname ' ' '' "$arg"
++	arg=$func_stripname_result
+ 	;;
+ 
+       -Wl,*)
+-	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
++	func_stripname '-Wl,' '' "$arg"
++	args=$func_stripname_result
+ 	arg=
+-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=','
++	save_ifs="$IFS"; IFS=','
+ 	for flag in $args; do
+ 	  IFS="$save_ifs"
+-	  case $flag in
+-	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	    flag="\"$flag\""
+-	    ;;
+-	  esac
+-	  arg="$arg $wl$flag"
+-	  compiler_flags="$compiler_flags $wl$flag"
+-	  linker_flags="$linker_flags $flag"
++          func_quote_for_eval "$flag"
++	  func_append arg " $wl$func_quote_for_eval_result"
++	  func_append compiler_flags " $wl$func_quote_for_eval_result"
++	  func_append linker_flags " $func_quote_for_eval_result"
+ 	done
+ 	IFS="$save_ifs"
+-	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
++	func_stripname ' ' '' "$arg"
++	arg=$func_stripname_result
+ 	;;
+ 
+       -Xcompiler)
+@@ -1364,136 +5814,156 @@
+ 	continue
+ 	;;
+ 
++      -XCClinker)
++	prev=xcclinker
++	continue
++	;;
 +
-+  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
-+  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
-+  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
-+  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
-+  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
-+  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
-+  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
-+  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
-+  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
-+  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
++      # -msg_* for osf cc
++      -msg_*)
++	func_quote_for_eval "$arg"
++	arg="$func_quote_for_eval_result"
++	;;
 +
-+  \DeclareUnicodeCharacter{1E7C}{\~V}
-+  \DeclareUnicodeCharacter{1E7D}{\~v}
-+  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
-+  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
++      # Flags to be passed through unchanged, with rationale:
++      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
++      # -r[0-9][0-9]*        specify processor for the SGI compiler
++      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
++      # +DA*, +DD*           enable 64-bit mode for the HP compiler
++      # -q*                  compiler args for the IBM compiler
++      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
++      # -F/path              path to uninstalled frameworks, gcc on darwin
++      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
++      # @file                GCC response files
++      # -tp=*                Portland pgcc target processor selection
++      # --sysroot=*          for sysroot support
++      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
++      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
++      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
++      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
++        func_quote_for_eval "$arg"
++	arg="$func_quote_for_eval_result"
++        func_append compile_command " $arg"
++        func_append finalize_command " $arg"
++        func_append compiler_flags " $arg"
++        continue
++        ;;
 +
-+  \DeclareUnicodeCharacter{1E80}{\`W}
-+  \DeclareUnicodeCharacter{1E81}{\`w}
-+  \DeclareUnicodeCharacter{1E82}{\'W}
-+  \DeclareUnicodeCharacter{1E83}{\'w}
-+  \DeclareUnicodeCharacter{1E84}{\"W}
-+  \DeclareUnicodeCharacter{1E85}{\"w}
-+  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
-+  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
-+  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
-+  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
-+  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
-+  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
-+  \DeclareUnicodeCharacter{1E8C}{\"X}
-+  \DeclareUnicodeCharacter{1E8D}{\"x}
-+  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
-+  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+       # Some other compiler flag.
+       -* | +*)
+-	# Unknown arguments in both finalize_command and compile_command need
+-	# to be aesthetically quoted because they are evaled later.
+-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+-	case $arg in
+-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	  arg="\"$arg\""
+-	  ;;
+-	esac
++        func_quote_for_eval "$arg"
++	arg="$func_quote_for_eval_result"
+ 	;;
+ 
+       *.$objext)
+ 	# A standard object.
+-	objs="$objs $arg"
++	func_append objs " $arg"
+ 	;;
+ 
+       *.lo)
+ 	# A libtool-controlled object.
+ 
+ 	# Check to see that this really is a libtool object.
+-	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+-          pic_object=
+-          non_pic_object=
++	if func_lalib_unsafe_p "$arg"; then
++	  pic_object=
++	  non_pic_object=
+ 
+-          # Read the .lo file
+-          # If there is no directory component, then add one.
+-          case $arg in
+-          */* | *\\*) . $arg ;;
+-          *) . ./$arg ;;
+-          esac
++	  # Read the .lo file
++	  func_source "$arg"
+ 
+-          if test -z "$pic_object" || \
+-             test -z "$non_pic_object" ||
+-             test "$pic_object" = none && \
+-             test "$non_pic_object" = none; then
+-            $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+-            exit 1
+-          fi
++	  if test -z "$pic_object" ||
++	     test -z "$non_pic_object" ||
++	     test "$pic_object" = none &&
++	     test "$non_pic_object" = none; then
++	    func_fatal_error "cannot find name of object for \`$arg'"
++	  fi
+ 
+ 	  # Extract subdirectory from the argument.
+-	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+-	  if test "X$xdir" = "X$arg"; then
+-	    xdir=
+-	  else
+-	    xdir="$xdir/"
+-	  fi
++	  func_dirname "$arg" "/" ""
++	  xdir="$func_dirname_result"
+ 
+-          if test "$pic_object" != none; then
+-            # Prepend the subdirectory the object is found in.
++	  if test "$pic_object" != none; then
++	    # Prepend the subdirectory the object is found in.
+ 	    pic_object="$xdir$pic_object"
+ 
+ 	    if test "$prev" = dlfiles; then
+ 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+-	        dlfiles="$dlfiles $pic_object"
+-	        prev=
+-	        continue
++		func_append dlfiles " $pic_object"
++		prev=
++		continue
+ 	      else
+-	        # If libtool objects are unsupported, then we need to preload.
+-	        prev=dlprefiles
++		# If libtool objects are unsupported, then we need to preload.
++		prev=dlprefiles
+ 	      fi
+ 	    fi
+ 
+ 	    # CHECK ME:  I think I busted this.  -Ossama
+-            if test "$prev" = dlprefiles; then
++	    if test "$prev" = dlprefiles; then
+ 	      # Preload the old-style object.
+-	      dlprefiles="$dlprefiles $pic_object"
++	      func_append dlprefiles " $pic_object"
+ 	      prev=
+-            fi
++	    fi
+ 
+-            # A PIC object.
+-	    libobjs="$libobjs $pic_object"
++	    # A PIC object.
++	    func_append libobjs " $pic_object"
+ 	    arg="$pic_object"
+-          fi
++	  fi
+ 
+-          # Non-PIC object.
+-          if test "$non_pic_object" != none; then
+-            # Prepend the subdirectory the object is found in.
++	  # Non-PIC object.
++	  if test "$non_pic_object" != none; then
++	    # Prepend the subdirectory the object is found in.
+ 	    non_pic_object="$xdir$non_pic_object"
+ 
+-            # A standard non-PIC object
+-            non_pic_objects="$non_pic_objects $non_pic_object"
+-            if test -z "$pic_object" || test "$pic_object" = none ; then
+-              arg="$non_pic_object"
+-            fi
+-          fi
+-        else
+-          # Only an error if not doing a dry-run.
+-          if test -z "$run"; then
+-            $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+-            exit 1
+-          else
+-            # Dry-run case.
+-
+-	    # Extract subdirectory from the argument.
+-	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+-	    if test "X$xdir" = "X$arg"; then
+-	      xdir=
+-	    else
+-	      xdir="$xdir/"
++	    # A standard non-PIC object
++	    func_append non_pic_objects " $non_pic_object"
++	    if test -z "$pic_object" || test "$pic_object" = none ; then
++	      arg="$non_pic_object"
+ 	    fi
++	  else
++	    # If the PIC object exists, use it instead.
++	    # $xdir was prepended to $pic_object above.
++	    non_pic_object="$pic_object"
++	    func_append non_pic_objects " $non_pic_object"
++	  fi
++	else
++	  # Only an error if not doing a dry-run.
++	  if $opt_dry_run; then
++	    # Extract subdirectory from the argument.
++	    func_dirname "$arg" "/" ""
++	    xdir="$func_dirname_result"
+ 
+-            pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+-            non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+-	    libobjs="$libobjs $pic_object"
+-            non_pic_objects="$non_pic_objects $non_pic_object"
+-          fi
++	    func_lo2o "$arg"
++	    pic_object=$xdir$objdir/$func_lo2o_result
++	    non_pic_object=$xdir$func_lo2o_result
++	    func_append libobjs " $pic_object"
++	    func_append non_pic_objects " $non_pic_object"
++	  else
++	    func_fatal_error "\`$arg' is not a valid libtool object"
++	  fi
+ 	fi
+ 	;;
+ 
+       *.$libext)
+ 	# An archive.
+-	deplibs="$deplibs $arg"
+-	old_deplibs="$old_deplibs $arg"
++	func_append deplibs " $arg"
++	func_append old_deplibs " $arg"
+ 	continue
+ 	;;
+ 
+       *.la)
+ 	# A libtool-controlled library.
+ 
++	func_resolve_sysroot "$arg"
+ 	if test "$prev" = dlfiles; then
+ 	  # This library was specified with -dlopen.
+-	  dlfiles="$dlfiles $arg"
++	  func_append dlfiles " $func_resolve_sysroot_result"
+ 	  prev=
+ 	elif test "$prev" = dlprefiles; then
+ 	  # The library was specified with -dlpreopen.
+-	  dlprefiles="$dlprefiles $arg"
++	  func_append dlprefiles " $func_resolve_sysroot_result"
+ 	  prev=
+ 	else
+-	  deplibs="$deplibs $arg"
++	  func_append deplibs " $func_resolve_sysroot_result"
+ 	fi
+ 	continue
+ 	;;
+@@ -1502,113 +5972,53 @@
+       *)
+ 	# Unknown arguments in both finalize_command and compile_command need
+ 	# to be aesthetically quoted because they are evaled later.
+-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+-	case $arg in
+-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+-	  arg="\"$arg\""
+-	  ;;
+-	esac
++	func_quote_for_eval "$arg"
++	arg="$func_quote_for_eval_result"
+ 	;;
+       esac # arg
+ 
+       # Now actually substitute the argument into the commands.
+       if test -n "$arg"; then
+-	compile_command="$compile_command $arg"
+-	finalize_command="$finalize_command $arg"
++	func_append compile_command " $arg"
++	func_append finalize_command " $arg"
+       fi
+     done # argument parsing loop
+ 
+-    if test -n "$prev"; then
+-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+-      $echo "$help" 1>&2
+-      exit 1
+-    fi
+-
+-    # Infer tagged configuration to use if any are available and
+-    # if one wasn't chosen via the "--tag" command line option.
+-    # Only attempt this if the compiler in the base link
+-    # command doesn't match the default compiler.
+-    if test -n "$available_tags" && test -z "$tagname"; then
+-      case $base_compile in
+-      "$CC "*) ;;
+-      # Blanks in the command may have been stripped by the calling shell,
+-      # but not from the CC environment variable when ltconfig was run.
+-      "`$echo $CC` "*) ;;
+-      *)
+-        for z in $available_tags; do
+-          if grep "^### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+-	    # Evaluate the configuration.
+-	    eval "`sed -n -e '/^### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+-            case $base_compile in
+-	    "$CC "*)
+-              # The compiler in $compile_command matches
+-              # the one in the tagged configuration.
+-              # Assume this is the tagged configuration we want.
+-              tagname=$z
+-              break
+-	      ;;
+-	    "`$echo $CC` "*)
+-	      tagname=$z
+-	      break
+-	      ;;
+-	    esac
+-          fi
+-        done
+-        # If $tagname still isn't set, then no tagged configuration
+-        # was found and let the user know that the "--tag" command
+-        # line option must be used.
+-        if test -z "$tagname"; then
+-          echo "$modename: unable to infer tagged configuration"
+-          echo "$modename: specify a tag with \`--tag'" 1>&2
+-	  exit 1
+-#       else
+-#         echo "$modename: using $tagname tagged configuration"
+-        fi
+-	;;
+-      esac
+-    fi
++    test -n "$prev" && \
++      func_fatal_help "the \`$prevarg' option requires an argument"
+ 
+     if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+       eval arg=\"$export_dynamic_flag_spec\"
+-      compile_command="$compile_command $arg"
+-      finalize_command="$finalize_command $arg"
++      func_append compile_command " $arg"
++      func_append finalize_command " $arg"
+     fi
+ 
++    oldlibs=
+     # calculate the name of the file, without its directory
+-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
++    func_basename "$output"
++    outputname="$func_basename_result"
+     libobjs_save="$libobjs"
+ 
+     if test -n "$shlibpath_var"; then
+       # get the directories listed in $shlibpath_var
+-      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
++      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+     else
+       shlib_search_path=
+     fi
+     eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+     eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+ 
+-    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+-    if test "X$output_objdir" = "X$output"; then
+-      output_objdir="$objdir"
+-    else
+-      output_objdir="$output_objdir/$objdir"
+-    fi
++    func_dirname "$output" "/" ""
++    output_objdir="$func_dirname_result$objdir"
++    func_to_tool_file "$output_objdir/"
++    tool_output_objdir=$func_to_tool_file_result
+     # Create the object directory.
+-    if test ! -d $output_objdir; then
+-      $show "$mkdir $output_objdir"
+-      $run $mkdir $output_objdir
+-      status=$?
+-      if test $status -ne 0 && test ! -d $output_objdir; then
+-	exit $status
+-      fi
+-    fi
++    func_mkdir_p "$output_objdir"
+ 
+     # Determine the type of output
+     case $output in
+     "")
+-      $echo "$modename: you must specify an output file" 1>&2
+-      $echo "$help" 1>&2
+-      exit 1
++      func_fatal_help "you must specify an output file"
+       ;;
+     *.$libext) linkmode=oldlib ;;
+     *.lo | *.$objext) linkmode=obj ;;
+@@ -1617,29 +6027,34 @@
+     esac
+ 
+     specialdeplibs=
 +
-+  \DeclareUnicodeCharacter{1E90}{\^Z}
-+  \DeclareUnicodeCharacter{1E91}{\^z}
-+  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
-+  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
-+  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
-+  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
-+  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
-+  \DeclareUnicodeCharacter{1E97}{\"t}
-+  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
-+  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+     libs=
+     # Find all interdependent deplibs by searching for libraries
+     # that are linked more than once (e.g. -la -lb -la)
+     for deplib in $deplibs; do
+-      case "$libs " in
+-      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+-      esac
+-      libs="$libs $deplib"
++      if $opt_preserve_dup_deps ; then
++	case "$libs " in
++	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
++	esac
++      fi
++      func_append libs " $deplib"
+     done
+ 
+-    if test $linkmode = lib; then
++    if test "$linkmode" = lib; then
+       libs="$predeps $libs $compiler_lib_search_path $postdeps"
+ 
+       # Compute libraries that are listed more than once in $predeps
+       # $postdeps and mark them as special (i.e., whose duplicates are
+       # not to be eliminated).
+       pre_post_deps=
+-      for pre_post_dep in $predeps $postdeps; do
+-        case "$pre_post_deps " in
+-	*" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+-	esac
+-	pre_post_deps="$pre_post_deps $pre_post_dep"
+-      done
++      if $opt_duplicate_compiler_generated_deps; then
++	for pre_post_dep in $predeps $postdeps; do
++	  case "$pre_post_deps " in
++	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
++	  esac
++	  func_append pre_post_deps " $pre_post_dep"
++	done
++      fi
+       pre_post_deps=
+     fi
+ 
+@@ -1649,15 +6064,15 @@
+     need_relink=no # whether we're linking any uninstalled libtool libraries
+     notinst_deplibs= # not-installed libtool libraries
+     notinst_path= # paths that contain not-installed libtool libraries
 +
-+  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
-+  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+     case $linkmode in
+     lib)
+-	passes="conv link"
++	passes="conv dlpreopen link"
+ 	for file in $dlfiles $dlprefiles; do
+ 	  case $file in
+ 	  *.la) ;;
+ 	  *)
+-	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+-	    exit 1
++	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+ 	    ;;
+ 	  esac
+ 	done
+@@ -1673,40 +6088,105 @@
+     *)  passes="conv"
+ 	;;
+     esac
 +
-+  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
-+  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
-+  \DeclareUnicodeCharacter{1EBC}{\~E}
-+  \DeclareUnicodeCharacter{1EBD}{\~e}
+     for pass in $passes; do
+-      if test $linkmode = prog; then
+-	# Determine which files to process
++      # The preopen pass in lib mode reverses $deplibs; put it back here
++      # so that -L comes before libs that need it for instance...
++      if test "$linkmode,$pass" = "lib,link"; then
++	## FIXME: Find the place where the list is rebuilt in the wrong
++	##        order, and fix it there properly
++        tmp_deplibs=
++	for deplib in $deplibs; do
++	  tmp_deplibs="$deplib $tmp_deplibs"
++	done
++	deplibs="$tmp_deplibs"
++      fi
 +
-+  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
-+  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
-+  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
-+  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
++      if test "$linkmode,$pass" = "lib,link" ||
++	 test "$linkmode,$pass" = "prog,scan"; then
++	libs="$deplibs"
++	deplibs=
++      fi
++      if test "$linkmode" = prog; then
+ 	case $pass in
+-	dlopen)
+-	  libs="$dlfiles"
+-	  save_deplibs="$deplibs" # Collect dlpreopened libraries
+-	  deplibs=
+-	  ;;
++	dlopen) libs="$dlfiles" ;;
+ 	dlpreopen) libs="$dlprefiles" ;;
+ 	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ 	esac
+       fi
++      if test "$linkmode,$pass" = "lib,dlpreopen"; then
++	# Collect and forward deplibs of preopened libtool libs
++	for lib in $dlprefiles; do
++	  # Ignore non-libtool-libs
++	  dependency_libs=
++	  func_resolve_sysroot "$lib"
++	  case $lib in
++	  *.la)	func_source "$func_resolve_sysroot_result" ;;
++	  esac
 +
-+  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
-+  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
++	  # Collect preopened libtool deplibs, except any this library
++	  # has declared as weak libs
++	  for deplib in $dependency_libs; do
++	    func_basename "$deplib"
++            deplib_base=$func_basename_result
++	    case " $weak_libs " in
++	    *" $deplib_base "*) ;;
++	    *) func_append deplibs " $deplib" ;;
++	    esac
++	  done
++	done
++	libs="$dlprefiles"
++      fi
++      if test "$pass" = dlopen; then
++	# Collect dlpreopened libraries
++	save_deplibs="$deplibs"
++	deplibs=
++      fi
 +
-+  \DeclareUnicodeCharacter{1EF2}{\`Y}
-+  \DeclareUnicodeCharacter{1EF3}{\`y}
-+  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+       for deplib in $libs; do
+ 	lib=
+ 	found=no
+ 	case $deplib in
++	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++	  if test "$linkmode,$pass" = "prog,link"; then
++	    compile_deplibs="$deplib $compile_deplibs"
++	    finalize_deplibs="$deplib $finalize_deplibs"
++	  else
++	    func_append compiler_flags " $deplib"
++	    if test "$linkmode" = lib ; then
++		case "$new_inherited_linker_flags " in
++		    *" $deplib "*) ;;
++		    * ) func_append new_inherited_linker_flags " $deplib" ;;
++		esac
++	    fi
++	  fi
++	  continue
++	  ;;
+ 	-l*)
+-	  if test $linkmode = oldlib && test $linkmode = obj; then
+-	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
++	  if test "$linkmode" != lib && test "$linkmode" != prog; then
++	    func_warning "\`-l' is ignored for archives/objects"
+ 	    continue
+ 	  fi
+-	  if test $pass = conv; then
+-	    deplibs="$deplib $deplibs"
+-	    continue
++	  func_stripname '-l' '' "$deplib"
++	  name=$func_stripname_result
++	  if test "$linkmode" = lib; then
++	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
++	  else
++	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ 	  fi
+-	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+-	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+-	    # Search the libtool library
+-	    lib="$searchdir/lib${name}.la"
+-	    if test -f "$lib"; then
+-	      found=yes
+-	      break
+-	    fi
++	  for searchdir in $searchdirs; do
++	    for search_ext in .la $std_shrext .so .a; do
++	      # Search the libtool library
++	      lib="$searchdir/lib${name}${search_ext}"
++	      if test -f "$lib"; then
++		if test "$search_ext" = ".la"; then
++		  found=yes
++		else
++		  found=no
++		fi
++		break 2
++	      fi
++	    done
+ 	  done
+ 	  if test "$found" != yes; then
+ 	    # deplib doesn't seem to be a libtool library
+@@ -1715,74 +6195,153 @@
+ 	      finalize_deplibs="$deplib $finalize_deplibs"
+ 	    else
+ 	      deplibs="$deplib $deplibs"
+-	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
++	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ 	    fi
+ 	    continue
++	  else # deplib is a libtool library
++	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
++	    # We need to do some special things here, and not later.
++	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++	      case " $predeps $postdeps " in
++	      *" $deplib "*)
++		if func_lalib_p "$lib"; then
++		  library_names=
++		  old_library=
++		  func_source "$lib"
++		  for l in $old_library $library_names; do
++		    ll="$l"
++		  done
++		  if test "X$ll" = "X$old_library" ; then # only static version available
++		    found=no
++		    func_dirname "$lib" "" "."
++		    ladir="$func_dirname_result"
++		    lib=$ladir/$old_library
++		    if test "$linkmode,$pass" = "prog,link"; then
++		      compile_deplibs="$deplib $compile_deplibs"
++		      finalize_deplibs="$deplib $finalize_deplibs"
++		    else
++		      deplibs="$deplib $deplibs"
++		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
++		    fi
++		    continue
++		  fi
++		fi
++		;;
++	      *) ;;
++	      esac
++	    fi
+ 	  fi
+ 	  ;; # -l
++	*.ltframework)
++	  if test "$linkmode,$pass" = "prog,link"; then
++	    compile_deplibs="$deplib $compile_deplibs"
++	    finalize_deplibs="$deplib $finalize_deplibs"
++	  else
++	    deplibs="$deplib $deplibs"
++	    if test "$linkmode" = lib ; then
++		case "$new_inherited_linker_flags " in
++		    *" $deplib "*) ;;
++		    * ) func_append new_inherited_linker_flags " $deplib" ;;
++		esac
++	    fi
++	  fi
++	  continue
++	  ;;
+ 	-L*)
+ 	  case $linkmode in
+ 	  lib)
+ 	    deplibs="$deplib $deplibs"
+-	    test $pass = conv && continue
++	    test "$pass" = conv && continue
+ 	    newdependency_libs="$deplib $newdependency_libs"
+-	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
++	    func_stripname '-L' '' "$deplib"
++	    func_resolve_sysroot "$func_stripname_result"
++	    func_append newlib_search_path " $func_resolve_sysroot_result"
+ 	    ;;
+ 	  prog)
+-	    if test $pass = conv; then
++	    if test "$pass" = conv; then
+ 	      deplibs="$deplib $deplibs"
+ 	      continue
+ 	    fi
+-	    if test $pass = scan; then
++	    if test "$pass" = scan; then
+ 	      deplibs="$deplib $deplibs"
+-	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ 	    else
+ 	      compile_deplibs="$deplib $compile_deplibs"
+ 	      finalize_deplibs="$deplib $finalize_deplibs"
+ 	    fi
++	    func_stripname '-L' '' "$deplib"
++	    func_resolve_sysroot "$func_stripname_result"
++	    func_append newlib_search_path " $func_resolve_sysroot_result"
+ 	    ;;
+ 	  *)
+-	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
++	    func_warning "\`-L' is ignored for archives/objects"
+ 	    ;;
+ 	  esac # linkmode
+ 	  continue
+ 	  ;; # -L
+ 	-R*)
+-	  if test $pass = link; then
+-	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
++	  if test "$pass" = link; then
++	    func_stripname '-R' '' "$deplib"
++	    func_resolve_sysroot "$func_stripname_result"
++	    dir=$func_resolve_sysroot_result
+ 	    # Make sure the xrpath contains only unique directories.
+ 	    case "$xrpath " in
+ 	    *" $dir "*) ;;
+-	    *) xrpath="$xrpath $dir" ;;
++	    *) func_append xrpath " $dir" ;;
+ 	    esac
+ 	  fi
+ 	  deplibs="$deplib $deplibs"
+ 	  continue
+ 	  ;;
+-	*.la) lib="$deplib" ;;
++	*.la)
++	  func_resolve_sysroot "$deplib"
++	  lib=$func_resolve_sysroot_result
++	  ;;
+ 	*.$libext)
+-	  if test $pass = conv; then
++	  if test "$pass" = conv; then
+ 	    deplibs="$deplib $deplibs"
+ 	    continue
+ 	  fi
+ 	  case $linkmode in
+ 	  lib)
+-	    if test "$deplibs_check_method" != pass_all; then
+-	      echo
+-	      echo "*** Warning: This library needs some functionality provided by $deplib."
+-	      echo "*** I have the capability to make that library automatically link in when"
+-	      echo "*** you link to this library.  But I can only do this if you have a"
+-	      echo "*** shared version of the library, which you do not appear to have."
+-	    else
+-	      echo
+-	      echo "*** Warning: Linking the shared library $output against the"
+-	      echo "*** static library $deplib is not portable!"
+-	      deplibs="$deplib $deplibs"
+-	    fi
++	    # Linking convenience modules into shared libraries is allowed,
++	    # but linking other static libraries is non-portable.
++	    case " $dlpreconveniencelibs " in
++	    *" $deplib "*) ;;
++	    *)
++	      valid_a_lib=no
++	      case $deplibs_check_method in
++		match_pattern*)
++		  set dummy $deplibs_check_method; shift
++		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
++		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
++		    | $EGREP "$match_pattern_regex" > /dev/null; then
++		    valid_a_lib=yes
++		  fi
++		;;
++		pass_all)
++		  valid_a_lib=yes
++		;;
++	      esac
++	      if test "$valid_a_lib" != yes; then
++		echo
++		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
++		echo "*** I have the capability to make that library automatically link in when"
++		echo "*** you link to this library.  But I can only do this if you have a"
++		echo "*** shared version of the library, which you do not appear to have"
++		echo "*** because the file extensions .$libext of this argument makes me believe"
++		echo "*** that it is just a static archive that I should not use here."
++	      else
++		echo
++		$ECHO "*** Warning: Linking the shared library $output against the"
++		$ECHO "*** static library $deplib is not portable!"
++		deplibs="$deplib $deplibs"
++	      fi
++	      ;;
++	    esac
+ 	    continue
+ 	    ;;
+ 	  prog)
+-	    if test $pass != link; then
++	    if test "$pass" != link; then
+ 	      deplibs="$deplib $deplibs"
+ 	    else
+ 	      compile_deplibs="$deplib $compile_deplibs"
+@@ -1793,14 +6352,18 @@
+ 	  esac # linkmode
+ 	  ;; # *.$libext
+ 	*.lo | *.$objext)
+-	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+-	    # If there is no dlopen support or we're linking statically,
+-	    # we need to preload.
+-	    newdlprefiles="$newdlprefiles $deplib"
+-	    compile_deplibs="$deplib $compile_deplibs"
+-	    finalize_deplibs="$deplib $finalize_deplibs"
+-	  else
+-	    newdlfiles="$newdlfiles $deplib"
++	  if test "$pass" = conv; then
++	    deplibs="$deplib $deplibs"
++	  elif test "$linkmode" = prog; then
++	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
++	      # If there is no dlopen support or we're linking statically,
++	      # we need to preload.
++	      func_append newdlprefiles " $deplib"
++	      compile_deplibs="$deplib $compile_deplibs"
++	      finalize_deplibs="$deplib $finalize_deplibs"
++	    else
++	      func_append newdlfiles " $deplib"
++	    fi
+ 	  fi
+ 	  continue
+ 	  ;;
+@@ -1809,21 +6372,18 @@
+ 	  continue
+ 	  ;;
+ 	esac # case $deplib
+-	if test $found = yes || test -f "$lib"; then :
 +
-+  \DeclareUnicodeCharacter{1EF8}{\~Y}
-+  \DeclareUnicodeCharacter{1EF9}{\~y}
++	if test "$found" = yes || test -f "$lib"; then :
+ 	else
+-	  $echo "$modename: cannot find the library \`$lib'" 1>&2
+-	  exit 1
++	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+ 	fi
+ 
+ 	# Check to see that this really is a libtool archive.
+-	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+-	else
+-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+-	  exit 1
+-	fi
++	func_lalib_unsafe_p "$lib" \
++	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+ 
+-	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+-	test "X$ladir" = "X$lib" && ladir="."
++	func_dirname "$lib" "" "."
++	ladir="$func_dirname_result"
+ 
+ 	dlname=
+ 	dlopen=
+@@ -1831,72 +6391,92 @@
+ 	libdir=
+ 	library_names=
+ 	old_library=
++	inherited_linker_flags=
+ 	# If the library was installed with an old release of libtool,
+-	# it will not redefine variable installed.
++	# it will not redefine variables installed, or shouldnotlink
+ 	installed=yes
++	shouldnotlink=no
++	avoidtemprpath=
 +
-+  \DeclareUnicodeCharacter{2013}{--}
-+  \DeclareUnicodeCharacter{2014}{---}
-+  \DeclareUnicodeCharacter{2018}{\quoteleft}
-+  \DeclareUnicodeCharacter{2019}{\quoteright}
-+  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
-+  \DeclareUnicodeCharacter{201C}{\quotedblleft}
-+  \DeclareUnicodeCharacter{201D}{\quotedblright}
-+  \DeclareUnicodeCharacter{201E}{\quotedblbase}
-+  \DeclareUnicodeCharacter{2022}{\bullet}
-+  \DeclareUnicodeCharacter{2026}{\dots}
-+  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
-+  \DeclareUnicodeCharacter{203A}{\guilsinglright}
-+  \DeclareUnicodeCharacter{20AC}{\euro}
+ 
+ 	# Read the .la file
+-	case $lib in
+-	*/* | *\\*) . $lib ;;
+-	*) . ./$lib ;;
+-	esac
++	func_source "$lib"
+ 
++	# Convert "-framework foo" to "foo.ltframework"
++	if test -n "$inherited_linker_flags"; then
++	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
++	    case " $new_inherited_linker_flags " in
++	      *" $tmp_inherited_linker_flag "*) ;;
++	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
++	    esac
++	  done
++	fi
++	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 	if test "$linkmode,$pass" = "lib,link" ||
+ 	   test "$linkmode,$pass" = "prog,scan" ||
+-	   { test $linkmode = oldlib && test $linkmode = obj; }; then
+-	   # Add dl[pre]opened files of deplib
+-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
++	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
++	  test -n "$dlopen" && func_append dlfiles " $dlopen"
++	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ 	fi
+ 
+-	if test $pass = conv; then
++	if test "$pass" = conv; then
+ 	  # Only check for convenience libraries
+ 	  deplibs="$lib $deplibs"
+ 	  if test -z "$libdir"; then
+ 	    if test -z "$old_library"; then
+-	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+-	      exit 1
++	      func_fatal_error "cannot find name of link library for \`$lib'"
+ 	    fi
+ 	    # It is a libtool convenience library, so add in its objects.
+-	    convenience="$convenience $ladir/$objdir/$old_library"
+-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+-	    tmp_libs=
+-	    for deplib in $dependency_libs; do
+-	      deplibs="$deplib $deplibs"
++	    func_append convenience " $ladir/$objdir/$old_library"
++	    func_append old_convenience " $ladir/$objdir/$old_library"
++	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
++	    func_fatal_error "\`$lib' is not a convenience library"
++	  fi
++	  tmp_libs=
++	  for deplib in $dependency_libs; do
++	    deplibs="$deplib $deplibs"
++	    if $opt_preserve_dup_deps ; then
+ 	      case "$tmp_libs " in
+-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ 	      esac
+-	      tmp_libs="$tmp_libs $deplib"
+-	    done
+-	  elif test $linkmode != prog && test $linkmode != lib; then
+-	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
+-	    exit 1
+-	  fi
++	    fi
++	    func_append tmp_libs " $deplib"
++	  done
+ 	  continue
+ 	fi # $pass = conv
+ 
 +
-+  \DeclareUnicodeCharacter{2192}{\expansion}
-+  \DeclareUnicodeCharacter{21D2}{\result}
+ 	# Get the name of the library we link against.
+ 	linklib=
+-	for l in $old_library $library_names; do
+-	  linklib="$l"
+-	done
++	if test -n "$old_library" &&
++	   { test "$prefer_static_libs" = yes ||
++	     test "$prefer_static_libs,$installed" = "built,no"; }; then
++	  linklib=$old_library
++	else
++	  for l in $old_library $library_names; do
++	    linklib="$l"
++	  done
++	fi
+ 	if test -z "$linklib"; then
+-	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+-	  exit 1
++	  func_fatal_error "cannot find name of link library for \`$lib'"
+ 	fi
+ 
+ 	# This library was specified with -dlopen.
+-	if test $pass = dlopen; then
++	if test "$pass" = dlopen; then
+ 	  if test -z "$libdir"; then
+-	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+-	    exit 1
++	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ 	  fi
+-	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
++	  if test -z "$dlname" ||
++	     test "$dlopen_support" != yes ||
++	     test "$build_libtool_libs" = no; then
+ 	    # If there is no dlname, no dlopen support or we're linking
+-	    # statically, we need to preload.
+-	    dlprefiles="$dlprefiles $lib"
++	    # statically, we need to preload.  We also need to preload any
++	    # dependent libraries so libltdl's deplib preloader doesn't
++	    # bomb out in the load deplibs phase.
++	    func_append dlprefiles " $lib $dependency_libs"
+ 	  else
+-	    newdlfiles="$newdlfiles $lib"
++	    func_append newdlfiles " $lib"
+ 	  fi
+ 	  continue
+ 	fi # $pass = dlopen
+@@ -1907,66 +6487,106 @@
+ 	*)
+ 	  abs_ladir=`cd "$ladir" && pwd`
+ 	  if test -z "$abs_ladir"; then
+-	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+-	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
++	    func_warning "cannot determine absolute directory name of \`$ladir'"
++	    func_warning "passing it literally to the linker, although it might fail"
+ 	    abs_ladir="$ladir"
+ 	  fi
+ 	  ;;
+ 	esac
+-	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
++	func_basename "$lib"
++	laname="$func_basename_result"
+ 
+ 	# Find the relevant object directory and library name.
+ 	if test "X$installed" = Xyes; then
+-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+-	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
++	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
++	    func_warning "library \`$lib' was moved."
+ 	    dir="$ladir"
+ 	    absdir="$abs_ladir"
+ 	    libdir="$abs_ladir"
+ 	  else
+-	    dir="$libdir"
+-	    absdir="$libdir"
++	    dir="$lt_sysroot$libdir"
++	    absdir="$lt_sysroot$libdir"
+ 	  fi
++	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ 	else
+-	  dir="$ladir/$objdir"
+-	  absdir="$abs_ladir/$objdir"
+-	  # Remove this search path later
+-	  notinst_path="$notinst_path $abs_ladir"
++	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
++	    dir="$ladir"
++	    absdir="$abs_ladir"
++	    # Remove this search path later
++	    func_append notinst_path " $abs_ladir"
++	  else
++	    dir="$ladir/$objdir"
++	    absdir="$abs_ladir/$objdir"
++	    # Remove this search path later
++	    func_append notinst_path " $abs_ladir"
++	  fi
+ 	fi # $installed = yes
+-	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
++	func_stripname 'lib' '.la' "$laname"
++	name=$func_stripname_result
+ 
+ 	# This library was specified with -dlpreopen.
+-	if test $pass = dlpreopen; then
+-	  if test -z "$libdir"; then
+-	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+-	    exit 1
+-	  fi
+-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+-	  # are required to link).
+-	  if test -n "$old_library"; then
+-	    newdlprefiles="$newdlprefiles $dir/$old_library"
+-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+-	  elif test -n "$dlname"; then
+-	    newdlprefiles="$newdlprefiles $dir/$dlname"
+-	  else
+-	    newdlprefiles="$newdlprefiles $dir/$linklib"
++	if test "$pass" = dlpreopen; then
++	  if test -z "$libdir" && test "$linkmode" = prog; then
++	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ 	  fi
++	  case "$host" in
++	    # special handling for platforms with PE-DLLs.
++	    *cygwin* | *mingw* | *cegcc* )
++	      # Linker will automatically link against shared library if both
++	      # static and shared are present.  Therefore, ensure we extract
++	      # symbols from the import library if a shared library is present
++	      # (otherwise, the dlopen module name will be incorrect).  We do
++	      # this by putting the import library name into $newdlprefiles.
++	      # We recover the dlopen module name by 'saving' the la file
++	      # name in a special purpose variable, and (later) extracting the
++	      # dlname from the la file.
++	      if test -n "$dlname"; then
++	        func_tr_sh "$dir/$linklib"
++	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
++	        func_append newdlprefiles " $dir/$linklib"
++	      else
++	        func_append newdlprefiles " $dir/$old_library"
++	        # Keep a list of preopened convenience libraries to check
++	        # that they are being used correctly in the link pass.
++	        test -z "$libdir" && \
++	          func_append dlpreconveniencelibs " $dir/$old_library"
++	      fi
++	    ;;
++	    * )
++	      # Prefer using a static library (so that no silly _DYNAMIC symbols
++	      # are required to link).
++	      if test -n "$old_library"; then
++	        func_append newdlprefiles " $dir/$old_library"
++	        # Keep a list of preopened convenience libraries to check
++	        # that they are being used correctly in the link pass.
++	        test -z "$libdir" && \
++	          func_append dlpreconveniencelibs " $dir/$old_library"
++	      # Otherwise, use the dlname, so that lt_dlopen finds it.
++	      elif test -n "$dlname"; then
++	        func_append newdlprefiles " $dir/$dlname"
++	      else
++	        func_append newdlprefiles " $dir/$linklib"
++	      fi
++	    ;;
++	  esac
+ 	fi # $pass = dlpreopen
+ 
+ 	if test -z "$libdir"; then
+ 	  # Link the convenience library
+-	  if test $linkmode = lib; then
++	  if test "$linkmode" = lib; then
+ 	    deplibs="$dir/$old_library $deplibs"
+ 	  elif test "$linkmode,$pass" = "prog,link"; then
+ 	    compile_deplibs="$dir/$old_library $compile_deplibs"
+ 	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ 	  else
+-	    deplibs="$lib $deplibs"
++	    deplibs="$lib $deplibs" # used for prog,scan pass
+ 	  fi
+ 	  continue
+ 	fi
+ 
+-	if test $linkmode = prog && test $pass != link; then
+-	  newlib_search_path="$newlib_search_path $ladir"
 +
-+  \DeclareUnicodeCharacter{2212}{\minus}
-+  \DeclareUnicodeCharacter{2217}{\point}
-+  \DeclareUnicodeCharacter{2261}{\equiv}
-+}% end of \utfeightchardefs
++	if test "$linkmode" = prog && test "$pass" != link; then
++	  func_append newlib_search_path " $ladir"
+ 	  deplibs="$lib $deplibs"
+ 
+ 	  linkalldeplibs=no
+@@ -1978,31 +6598,43 @@
+ 	  tmp_libs=
+ 	  for deplib in $dependency_libs; do
+ 	    case $deplib in
+-	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
++	    -L*) func_stripname '-L' '' "$deplib"
++	         func_resolve_sysroot "$func_stripname_result"
++	         func_append newlib_search_path " $func_resolve_sysroot_result"
++		 ;;
+ 	    esac
+ 	    # Need to link against all dependency_libs?
+-	    if test $linkalldeplibs = yes; then
++	    if test "$linkalldeplibs" = yes; then
+ 	      deplibs="$deplib $deplibs"
+ 	    else
+ 	      # Need to hardcode shared library paths
+ 	      # or/and link against static libraries
+ 	      newdependency_libs="$deplib $newdependency_libs"
+ 	    fi
+-	    case "$tmp_libs " in
+-	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+-	    esac
+-	    tmp_libs="$tmp_libs $deplib"
++	    if $opt_preserve_dup_deps ; then
++	      case "$tmp_libs " in
++	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
++	      esac
++	    fi
++	    func_append tmp_libs " $deplib"
+ 	  done # for deplib
+ 	  continue
+ 	fi # $linkmode = prog...
+ 
+-	link_static=no # Whether the deplib will be linked statically
+-	if test -n "$library_names" &&
+-	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+-	  # Link against this shared library
++	if test "$linkmode,$pass" = "prog,link"; then
++	  if test -n "$library_names" &&
++	     { { test "$prefer_static_libs" = no ||
++	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
++	       test -z "$old_library"; }; then
++	    # We need to hardcode the library path
++	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
++	      # Make sure the rpath contains only unique directories.
++	      case "$temp_rpath:" in
++	      *"$absdir:"*) ;;
++	      *) func_append temp_rpath "$absdir:" ;;
++	      esac
++	    fi
+ 
+-	  if test "$linkmode,$pass" = "prog,link" ||
+-	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
+ 	    # Hardcode the library path.
+ 	    # Skip directories that are in the system default run-time
+ 	    # search path.
+@@ -2011,7 +6643,7 @@
+ 	    *)
+ 	      case "$compile_rpath " in
+ 	      *" $absdir "*) ;;
+-	      *) compile_rpath="$compile_rpath $absdir"
++	      *) func_append compile_rpath " $absdir" ;;
+ 	      esac
+ 	      ;;
+ 	    esac
+@@ -2020,21 +6652,10 @@
+ 	    *)
+ 	      case "$finalize_rpath " in
+ 	      *" $libdir "*) ;;
+-	      *) finalize_rpath="$finalize_rpath $libdir"
++	      *) func_append finalize_rpath " $libdir" ;;
+ 	      esac
+ 	      ;;
+ 	    esac
+-	    if test $linkmode = prog; then
+-	      # We need to hardcode the library path
+-	      if test -n "$shlibpath_var"; then
+-		# Make sure the rpath contains only unique directories.
+-		case "$temp_rpath " in
+-		*" $dir "*) ;;
+-		*" $absdir "*) ;;
+-		*) temp_rpath="$temp_rpath $dir" ;;
+-		esac
+-	      fi
+-	    fi
+ 	  fi # $linkmode,$pass = prog,link...
+ 
+ 	  if test "$alldeplibs" = yes &&
+@@ -2044,26 +6665,89 @@
+ 	    # We only need to search for static libraries
+ 	    continue
+ 	  fi
++	fi
+ 
+-	  if test "$installed" = no; then
+-	    notinst_deplibs="$notinst_deplibs $lib"
+-	    need_relink=yes
++	link_static=no # Whether the deplib will be linked statically
++	use_static_libs=$prefer_static_libs
++	if test "$use_static_libs" = built && test "$installed" = yes; then
++	  use_static_libs=no
++	fi
++	if test -n "$library_names" &&
++	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
++	  case $host in
++	  *cygwin* | *mingw* | *cegcc*)
++	      # No point in relinking DLLs because paths are not encoded
++	      func_append notinst_deplibs " $lib"
++	      need_relink=no
++	    ;;
++	  *)
++	    if test "$installed" = no; then
++	      func_append notinst_deplibs " $lib"
++	      need_relink=yes
++	    fi
++	    ;;
++	  esac
++	  # This is a shared library
 +
++	  # Warn about portability, can't link against -module's on some
++	  # systems (darwin).  Don't bleat about dlopened modules though!
++	  dlopenmodule=""
++	  for dlpremoduletest in $dlprefiles; do
++	    if test "X$dlpremoduletest" = "X$lib"; then
++	      dlopenmodule="$dlpremoduletest"
++	      break
++	    fi
++	  done
++	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
++	    echo
++	    if test "$linkmode" = prog; then
++	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
++	    else
++	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
++	    fi
++	    $ECHO "*** $linklib is not portable!"
++	  fi
++	  if test "$linkmode" = lib &&
++	     test "$hardcode_into_libs" = yes; then
++	    # Hardcode the library path.
++	    # Skip directories that are in the system default run-time
++	    # search path.
++	    case " $sys_lib_dlsearch_path " in
++	    *" $absdir "*) ;;
++	    *)
++	      case "$compile_rpath " in
++	      *" $absdir "*) ;;
++	      *) func_append compile_rpath " $absdir" ;;
++	      esac
++	      ;;
++	    esac
++	    case " $sys_lib_dlsearch_path " in
++	    *" $libdir "*) ;;
++	    *)
++	      case "$finalize_rpath " in
++	      *" $libdir "*) ;;
++	      *) func_append finalize_rpath " $libdir" ;;
++	      esac
++	      ;;
++	    esac
+ 	  fi
+ 
+ 	  if test -n "$old_archive_from_expsyms_cmds"; then
+ 	    # figure out the soname
+ 	    set dummy $library_names
+-	    realname="$2"
+-	    shift; shift
+-	    libname=`eval \\$echo \"$libname_spec\"`
++	    shift
++	    realname="$1"
++	    shift
++	    libname=`eval "\\$ECHO \"$libname_spec\""`
+ 	    # use dlname if we got it. it's perfectly good, no?
+ 	    if test -n "$dlname"; then
+ 	      soname="$dlname"
+ 	    elif test -n "$soname_spec"; then
+ 	      # bleh windows
+ 	      case $host in
+-	      *cygwin*)
+-		major=`expr $current - $age`
++	      *cygwin* | mingw* | *cegcc*)
++	        func_arith $current - $age
++		major=$func_arith_result
+ 		versuffix="-$major"
+ 		;;
+ 	      esac
+@@ -2074,41 +6758,29 @@
+ 
+ 	    # Make a new name for the extract_expsyms_cmds to use
+ 	    soroot="$soname"
+-	    soname=`echo $soroot | sed -e 's/^.*\///'`
+-	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
++	    func_basename "$soroot"
++	    soname="$func_basename_result"
++	    func_stripname 'lib' '.dll' "$soname"
++	    newlib=libimp-$func_stripname_result.a
+ 
+ 	    # If the library has no export list, then create one now
+ 	    if test -f "$output_objdir/$soname-def"; then :
+ 	    else
+-	      $show "extracting exported symbol list from \`$soname'"
+-	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	      eval cmds=\"$extract_expsyms_cmds\"
+-	      for cmd in $cmds; do
+-		IFS="$save_ifs"
+-		$show "$cmd"
+-		$run eval "$cmd" || exit $?
+-	      done
+-	      IFS="$save_ifs"
++	      func_verbose "extracting exported symbol list from \`$soname'"
++	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ 	    fi
+ 
+ 	    # Create $newlib
+ 	    if test -f "$output_objdir/$newlib"; then :; else
+-	      $show "generating import library for \`$soname'"
+-	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	      eval cmds=\"$old_archive_from_expsyms_cmds\"
+-	      for cmd in $cmds; do
+-		IFS="$save_ifs"
+-		$show "$cmd"
+-		$run eval "$cmd" || exit $?
+-	      done
+-	      IFS="$save_ifs"
++	      func_verbose "generating import library for \`$soname'"
++	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ 	    fi
+ 	    # make sure the library variables are pointing to the new library
+ 	    dir=$output_objdir
+ 	    linklib=$newlib
+-	  fi # test -n $old_archive_from_expsyms_cmds
++	  fi # test -n "$old_archive_from_expsyms_cmds"
+ 
+-	  if test $linkmode = prog || test "$mode" != relink; then
++	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+ 	    add_shlibpath=
+ 	    add_dir=
+ 	    add=
+@@ -2117,6 +6789,30 @@
+ 	    immediate | unsupported)
+ 	      if test "$hardcode_direct" = no; then
+ 		add="$dir/$linklib"
++		case $host in
++		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
++		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
++		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
++		    *-*-unixware7*) add_dir="-L$dir" ;;
++		  *-*-darwin* )
++		    # if the lib is a (non-dlopened) module then we can not
++		    # link against it, someone is ignoring the earlier warnings
++		    if /usr/bin/file -L $add 2> /dev/null |
++			 $GREP ": [^:]* bundle" >/dev/null ; then
++		      if test "X$dlopenmodule" != "X$lib"; then
++			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
++			if test -z "$old_library" ; then
++			  echo
++			  echo "*** And there doesn't seem to be a static archive available"
++			  echo "*** The link will probably fail, sorry"
++			else
++			  add="$dir/$old_library"
++			fi
++		      elif test -n "$old_library"; then
++			add="$dir/$old_library"
++		      fi
++		    fi
++		esac
+ 	      elif test "$hardcode_minus_L" = no; then
+ 		case $host in
+ 		*-*-sunos*) add_shlibpath="$dir" ;;
+@@ -2131,10 +6827,19 @@
+ 	      fi
+ 	      ;;
+ 	    relink)
+-	      if test "$hardcode_direct" = yes; then
++	      if test "$hardcode_direct" = yes &&
++	         test "$hardcode_direct_absolute" = no; then
+ 		add="$dir/$linklib"
+ 	      elif test "$hardcode_minus_L" = yes; then
+ 		add_dir="-L$dir"
++		# Try looking first in the location we're being installed to.
++		if test -n "$inst_prefix_dir"; then
++		  case $libdir in
++		    [\\/]*)
++		      func_append add_dir " -L$inst_prefix_dir$libdir"
++		      ;;
++		  esac
++		fi
+ 		add="-l$name"
+ 	      elif test "$hardcode_shlibpath_var" = yes; then
+ 		add_shlibpath="$dir"
+@@ -2147,39 +6852,39 @@
+ 	    esac
+ 
+ 	    if test "$lib_linked" != yes; then
+-	      $echo "$modename: configuration error: unsupported hardcode properties"
+-	      exit 1
++	      func_fatal_configuration "unsupported hardcode properties"
+ 	    fi
+ 
+ 	    if test -n "$add_shlibpath"; then
+ 	      case :$compile_shlibpath: in
+ 	      *":$add_shlibpath:"*) ;;
+-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
++	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ 	      esac
+ 	    fi
+-	    if test $linkmode = prog; then
++	    if test "$linkmode" = prog; then
+ 	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ 	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ 	    else
+ 	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ 	      test -n "$add" && deplibs="$add $deplibs"
+-	      if test "$hardcode_direct" != yes && \
+-		 test "$hardcode_minus_L" != yes && \
++	      if test "$hardcode_direct" != yes &&
++		 test "$hardcode_minus_L" != yes &&
+ 		 test "$hardcode_shlibpath_var" = yes; then
+ 		case :$finalize_shlibpath: in
+ 		*":$libdir:"*) ;;
+-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++		*) func_append finalize_shlibpath "$libdir:" ;;
+ 		esac
+ 	      fi
+ 	    fi
+ 	  fi
+ 
+-	  if test $linkmode = prog || test "$mode" = relink; then
++	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+ 	    add_shlibpath=
+ 	    add_dir=
+ 	    add=
+ 	    # Finalize command for both is simple: just hardcode it.
+-	    if test "$hardcode_direct" = yes; then
++	    if test "$hardcode_direct" = yes &&
++	       test "$hardcode_direct_absolute" = no; then
+ 	      add="$libdir/$linklib"
+ 	    elif test "$hardcode_minus_L" = yes; then
+ 	      add_dir="-L$libdir"
+@@ -2187,16 +6892,31 @@
+ 	    elif test "$hardcode_shlibpath_var" = yes; then
+ 	      case :$finalize_shlibpath: in
+ 	      *":$libdir:"*) ;;
+-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++	      *) func_append finalize_shlibpath "$libdir:" ;;
+ 	      esac
+ 	      add="-l$name"
++	    elif test "$hardcode_automatic" = yes; then
++	      if test -n "$inst_prefix_dir" &&
++		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
++		add="$inst_prefix_dir$libdir/$linklib"
++	      else
++		add="$libdir/$linklib"
++	      fi
+ 	    else
+ 	      # We cannot seem to hardcode it, guess we'll fake it.
+ 	      add_dir="-L$libdir"
++	      # Try looking first in the location we're being installed to.
++	      if test -n "$inst_prefix_dir"; then
++		case $libdir in
++		  [\\/]*)
++		    func_append add_dir " -L$inst_prefix_dir$libdir"
++		    ;;
++		esac
++	      fi
+ 	      add="-l$name"
+ 	    fi
+ 
+-	    if test $linkmode = prog; then
++	    if test "$linkmode" = prog; then
+ 	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ 	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ 	    else
+@@ -2204,16 +6924,7 @@
+ 	      test -n "$add" && deplibs="$add $deplibs"
+ 	    fi
+ 	  fi
+-	elif test $linkmode = prog; then
+-	  if test "$alldeplibs" = yes &&
+-	     { test "$deplibs_check_method" = pass_all ||
+-	       { test "$build_libtool_libs" = yes &&
+-		 test -n "$library_names"; }; }; then
+-	    # We only need to search for static libraries
+-	    continue
+-	  fi
+-
+-	  # Try to link the static library
++	elif test "$linkmode" = prog; then
+ 	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+ 	  # is not unsupported.  This is valid on all known static and
+ 	  # shared platforms.
+@@ -2234,101 +6945,133 @@
+ 	    # Just print a warning and add the library to dependency_libs so
+ 	    # that the program can be linked against the static library.
+ 	    echo
+-	    echo "*** Warning: This library needs some functionality provided by $lib."
++	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ 	    echo "*** I have the capability to make that library automatically link in when"
+ 	    echo "*** you link to this library.  But I can only do this if you have a"
+ 	    echo "*** shared version of the library, which you do not appear to have."
+ 	    if test "$module" = yes; then
+-	      echo "*** Therefore, libtool will create a static module, that should work "
+-	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
++	      echo "*** But as you try to build a module library, libtool will still create "
++	      echo "*** a static module, that should work as long as the dlopening application"
++	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ 	      if test -z "$global_symbol_pipe"; then
+-	        echo
+-	        echo "*** However, this would only work if libtool was able to extract symbol"
+-	        echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+-	        echo "*** not find such a program.  So, this module is probably useless."
+-	        echo "*** \`nm' from GNU binutils and a full rebuild may help."
++		echo
++		echo "*** However, this would only work if libtool was able to extract symbol"
++		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
++		echo "*** not find such a program.  So, this module is probably useless."
++		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ 	      fi
+ 	      if test "$build_old_libs" = no; then
+-	        build_libtool_libs=module
+-	        build_old_libs=yes
++		build_libtool_libs=module
++		build_old_libs=yes
+ 	      else
+-	        build_libtool_libs=no
++		build_libtool_libs=no
+ 	      fi
+ 	    fi
+ 	  else
+-	    convenience="$convenience $dir/$old_library"
+-	    old_convenience="$old_convenience $dir/$old_library"
+ 	    deplibs="$dir/$old_library $deplibs"
+ 	    link_static=yes
+ 	  fi
+ 	fi # link shared/static library?
+ 
+-	if test $linkmode = lib; then
++	if test "$linkmode" = lib; then
+ 	  if test -n "$dependency_libs" &&
+-	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
+-	       test $link_static = yes; }; then
++	     { test "$hardcode_into_libs" != yes ||
++	       test "$build_old_libs" = yes ||
++	       test "$link_static" = yes; }; then
+ 	    # Extract -R from dependency_libs
+ 	    temp_deplibs=
+ 	    for libdir in $dependency_libs; do
+ 	      case $libdir in
+-	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
++	      -R*) func_stripname '-R' '' "$libdir"
++	           temp_xrpath=$func_stripname_result
+ 		   case " $xrpath " in
+ 		   *" $temp_xrpath "*) ;;
+-		   *) xrpath="$xrpath $temp_xrpath";;
++		   *) func_append xrpath " $temp_xrpath";;
+ 		   esac;;
+-	      *) temp_deplibs="$temp_deplibs $libdir";;
++	      *) func_append temp_deplibs " $libdir";;
+ 	      esac
+ 	    done
+ 	    dependency_libs="$temp_deplibs"
+ 	  fi
+ 
+-	  newlib_search_path="$newlib_search_path $absdir"
++	  func_append newlib_search_path " $absdir"
+ 	  # Link against this library
+ 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ 	  # ... and its dependency_libs
+ 	  tmp_libs=
+ 	  for deplib in $dependency_libs; do
+ 	    newdependency_libs="$deplib $newdependency_libs"
+-	    case "$tmp_libs " in
+-	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+-	    esac
+-	    tmp_libs="$tmp_libs $deplib"
++	    case $deplib in
++              -L*) func_stripname '-L' '' "$deplib"
++                   func_resolve_sysroot "$func_stripname_result";;
++              *) func_resolve_sysroot "$deplib" ;;
++            esac
++	    if $opt_preserve_dup_deps ; then
++	      case "$tmp_libs " in
++	      *" $func_resolve_sysroot_result "*)
++                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
++	      esac
++	    fi
++	    func_append tmp_libs " $func_resolve_sysroot_result"
+ 	  done
+ 
+-	  if test $link_all_deplibs != no; then
++	  if test "$link_all_deplibs" != no; then
+ 	    # Add the search paths of all dependency libraries
+ 	    for deplib in $dependency_libs; do
++	      path=
+ 	      case $deplib in
+ 	      -L*) path="$deplib" ;;
+ 	      *.la)
+-		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+-		test "X$dir" = "X$deplib" && dir="."
++	        func_resolve_sysroot "$deplib"
++	        deplib=$func_resolve_sysroot_result
++	        func_dirname "$deplib" "" "."
++		dir=$func_dirname_result
+ 		# We need an absolute path.
+ 		case $dir in
+ 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ 		*)
+ 		  absdir=`cd "$dir" && pwd`
+ 		  if test -z "$absdir"; then
+-		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
++		    func_warning "cannot determine absolute directory name of \`$dir'"
+ 		    absdir="$dir"
+ 		  fi
+ 		  ;;
+ 		esac
+-		if grep "^installed=no" $deplib > /dev/null; then
++		if $GREP "^installed=no" $deplib > /dev/null; then
++		case $host in
++		*-*-darwin*)
++		  depdepl=
++		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
++		  if test -n "$deplibrary_names" ; then
++		    for tmp in $deplibrary_names ; do
++		      depdepl=$tmp
++		    done
++		    if test -f "$absdir/$objdir/$depdepl" ; then
++		      depdepl="$absdir/$objdir/$depdepl"
++		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
++                      if test -z "$darwin_install_name"; then
++                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
++                      fi
++		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
++		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
++		      path=
++		    fi
++		  fi
++		  ;;
++		*)
+ 		  path="-L$absdir/$objdir"
++		  ;;
++		esac
+ 		else
+-		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+-		  if test -z "$libdir"; then
+-		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+-		    exit 1
+-		  fi
+-		  if test "$absdir" != "$libdir"; then
+-		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+-		  fi
++		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++		  test -z "$libdir" && \
++		    func_fatal_error "\`$deplib' is not a valid libtool archive"
++		  test "$absdir" != "$libdir" && \
++		    func_warning "\`$deplib' seems to be moved"
 +
-+% US-ASCII character definitions.
-+\def\asciichardefs{% nothing need be done
-+   \relax
-+}
+ 		  path="-L$absdir"
+ 		fi
+ 		;;
+-	      *) continue ;;
+ 	      esac
+ 	      case " $deplibs " in
+ 	      *" $path "*) ;;
+@@ -2338,21 +7081,29 @@
+ 	  fi # link_all_deplibs != no
+ 	fi # linkmode = lib
+       done # for deplib in $libs
+-      if test $pass = dlpreopen; then
++      if test "$pass" = link; then
++	if test "$linkmode" = "prog"; then
++	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
++	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
++	else
++	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	fi
++      fi
++      dependency_libs="$newdependency_libs"
++      if test "$pass" = dlpreopen; then
+ 	# Link the dlpreopened libraries before other libraries
+ 	for deplib in $save_deplibs; do
+ 	  deplibs="$deplib $deplibs"
+ 	done
+       fi
+-      if test $pass != dlopen; then
+-	test $pass != scan && dependency_libs="$newdependency_libs"
+-	if test $pass != conv; then
++      if test "$pass" != dlopen; then
++	if test "$pass" != conv; then
+ 	  # Make sure lib_search_path contains only unique directories.
+ 	  lib_search_path=
+ 	  for dir in $newlib_search_path; do
+ 	    case "$lib_search_path " in
+ 	    *" $dir "*) ;;
+-	    *) lib_search_path="$lib_search_path $dir" ;;
++	    *) func_append lib_search_path " $dir" ;;
+ 	    esac
+ 	  done
+ 	  newlib_search_path=
+@@ -2368,9 +7119,30 @@
+ 	  eval tmp_libs=\"\$$var\"
+ 	  new_libs=
+ 	  for deplib in $tmp_libs; do
++	    # FIXME: Pedantically, this is the right thing to do, so
++	    #        that some nasty dependency loop isn't accidentally
++	    #        broken:
++	    #new_libs="$deplib $new_libs"
++	    # Pragmatically, this seems to cause very few problems in
++	    # practice:
+ 	    case $deplib in
+ 	    -L*) new_libs="$deplib $new_libs" ;;
++	    -R*) ;;
+ 	    *)
++	      # And here is the reason: when a library appears more
++	      # than once as an explicit dependence of a library, or
++	      # is implicitly linked in more than once by the
++	      # compiler, it is considered special, and multiple
++	      # occurrences thereof are not removed.  Compare this
++	      # with having the same library being listed as a
++	      # dependency of multiple other libraries: in this case,
++	      # we know (pedantically, we assume) the library does not
++	      # need to be listed more than once, so we keep only the
++	      # last copy.  This is not always right, but it is rare
++	      # enough that we require users that really mean to play
++	      # such unportable linking tricks to link the library
++	      # using -Wl,-lname, so that libtool does not consider it
++	      # for duplicate removal.
+ 	      case " $specialdeplibs " in
+ 	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ 	      *)
+@@ -2389,171 +7161,216 @@
+ 	    -L*)
+ 	      case " $tmp_libs " in
+ 	      *" $deplib "*) ;;
+-	      *) tmp_libs="$tmp_libs $deplib" ;;
++	      *) func_append tmp_libs " $deplib" ;;
+ 	      esac
+ 	      ;;
+-	    *) tmp_libs="$tmp_libs $deplib" ;;
++	    *) func_append tmp_libs " $deplib" ;;
+ 	    esac
+ 	  done
+ 	  eval $var=\"$tmp_libs\"
+ 	done # for var
+       fi
+-      if test "$pass" = "conv" &&
+-       { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
+-	libs="$deplibs" # reset libs
+-	deplibs=
+-      fi
++      # Last step: remove runtime libs from dependency_libs
++      # (they stay in deplibs)
++      tmp_libs=
++      for i in $dependency_libs ; do
++	case " $predeps $postdeps $compiler_lib_search_path " in
++	*" $i "*)
++	  i=""
++	  ;;
++	esac
++	if test -n "$i" ; then
++	  func_append tmp_libs " $i"
++	fi
++      done
++      dependency_libs=$tmp_libs
+     done # for pass
+-    if test $linkmode = prog; then
++    if test "$linkmode" = prog; then
+       dlfiles="$newdlfiles"
++    fi
++    if test "$linkmode" = prog || test "$linkmode" = lib; then
+       dlprefiles="$newdlprefiles"
+     fi
+ 
+     case $linkmode in
+     oldlib)
+       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+-	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
++	func_warning "\`-dlopen' is ignored for archives"
+       fi
+ 
+-      if test -n "$rpath"; then
+-	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+-      fi
++      case " $deplibs" in
++      *\ -l* | *\ -L*)
++	func_warning "\`-l' and \`-L' are ignored for archives" ;;
++      esac
+ 
+-      if test -n "$xrpath"; then
+-	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+-      fi
++      test -n "$rpath" && \
++	func_warning "\`-rpath' is ignored for archives"
+ 
+-      if test -n "$vinfo"; then
+-	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
+-      fi
++      test -n "$xrpath" && \
++	func_warning "\`-R' is ignored for archives"
+ 
+-      if test -n "$release"; then
+-	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+-      fi
++      test -n "$vinfo" && \
++	func_warning "\`-version-info/-version-number' is ignored for archives"
+ 
+-      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+-	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+-      fi
++      test -n "$release" && \
++	func_warning "\`-release' is ignored for archives"
 +
-+% Make non-ASCII characters printable again for compatibility with
-+% existing Texinfo documents that may use them, even without declaring a
-+% document encoding.
-+%
-+\setnonasciicharscatcode \other
++      test -n "$export_symbols$export_symbols_regex" && \
++	func_warning "\`-export-symbols' is ignored for archives"
+ 
+       # Now set the variables for building old libraries.
+       build_libtool_libs=no
+       oldlibs="$output"
+-      objs="$objs$old_deplibs"
++      func_append objs "$old_deplibs"
+       ;;
+ 
+     lib)
+       # Make sure we only generate libraries of the form `libNAME.la'.
+       case $outputname in
+       lib*)
+-	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
++	func_stripname 'lib' '.la' "$outputname"
++	name=$func_stripname_result
++	eval shared_ext=\"$shrext_cmds\"
+ 	eval libname=\"$libname_spec\"
+ 	;;
+       *)
+-	if test "$module" = no; then
+-	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+-	  $echo "$help" 1>&2
+-	  exit 1
+-	fi
++	test "$module" = no && \
++	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
 +
+ 	if test "$need_lib_prefix" != no; then
+ 	  # Add the "lib" prefix for modules if required
+-	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
++	  func_stripname '' '.la' "$outputname"
++	  name=$func_stripname_result
++	  eval shared_ext=\"$shrext_cmds\"
+ 	  eval libname=\"$libname_spec\"
+ 	else
+-	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
++	  func_stripname '' '.la' "$outputname"
++	  libname=$func_stripname_result
+ 	fi
+ 	;;
+       esac
+ 
+       if test -n "$objs"; then
+ 	if test "$deplibs_check_method" != pass_all; then
+-	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+-	  exit 1
++	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ 	else
+ 	  echo
+-	  echo "*** Warning: Linking the shared library $output against the non-libtool"
+-	  echo "*** objects $objs is not portable!"
+-	  libobjs="$libobjs $objs"
++	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
++	  $ECHO "*** objects $objs is not portable!"
++	  func_append libobjs " $objs"
+ 	fi
+       fi
+ 
+-      if test "$dlself" != no; then
+-	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+-      fi
++      test "$dlself" != no && \
++	func_warning "\`-dlopen self' is ignored for libtool libraries"
+ 
+       set dummy $rpath
+-      if test $# -gt 2; then
+-	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+-      fi
+-      install_libdir="$2"
++      shift
++      test "$#" -gt 1 && \
++	func_warning "ignoring multiple \`-rpath's for a libtool library"
 +
-+\message{formatting,}
++      install_libdir="$1"
+ 
+       oldlibs=
+       if test -z "$rpath"; then
+ 	if test "$build_libtool_libs" = yes; then
+ 	  # Building a libtool convenience library.
+ 	  # Some compilers have problems with a `.al' extension so
+-          # convenience libraries should have the same extension an
+-          # archive normally would.
++	  # convenience libraries should have the same extension an
++	  # archive normally would.
+ 	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ 	  build_libtool_libs=convenience
+ 	  build_old_libs=yes
+ 	fi
+ 
+-	if test -n "$vinfo"; then
+-	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
+-	fi
++	test -n "$vinfo" && \
++	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+ 
+-	if test -n "$release"; then
+-	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+-	fi
++	test -n "$release" && \
++	  func_warning "\`-release' is ignored for convenience libraries"
+       else
+ 
+ 	# Parse the version information argument.
+-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
++	save_ifs="$IFS"; IFS=':'
+ 	set dummy $vinfo 0 0 0
++	shift
+ 	IFS="$save_ifs"
+ 
+-	if test -n "$8"; then
+-	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
+-	  $echo "$help" 1>&2
+-	  exit 1
+-	fi
++	test -n "$7" && \
++	  func_fatal_help "too many parameters to \`-version-info'"
+ 
+-	current="$2"
+-	revision="$3"
+-	age="$4"
++	# convert absolute version numbers to libtool ages
++	# this retains compatibility with .la files and attempts
++	# to make the code below a bit more comprehensible
 +
- \newdimen\defaultparindent \defaultparindent = 15pt
++	case $vinfo_number in
++	yes)
++	  number_major="$1"
++	  number_minor="$2"
++	  number_revision="$3"
++	  #
++	  # There are really only two kinds -- those that
++	  # use the current revision as the major version
++	  # and those that subtract age and use age as
++	  # a minor version.  But, then there is irix
++	  # which has an extra 1 added just for fun
++	  #
++	  case $version_type in
++	  darwin|linux|osf|windows|none)
++	    func_arith $number_major + $number_minor
++	    current=$func_arith_result
++	    age="$number_minor"
++	    revision="$number_revision"
++	    ;;
++	  freebsd-aout|freebsd-elf|qnx|sunos)
++	    current="$number_major"
++	    revision="$number_minor"
++	    age="0"
++	    ;;
++	  irix|nonstopux)
++	    func_arith $number_major + $number_minor
++	    current=$func_arith_result
++	    age="$number_minor"
++	    revision="$number_minor"
++	    lt_irix_increment=no
++	    ;;
++	  esac
++	  ;;
++	no)
++	  current="$1"
++	  revision="$2"
++	  age="$3"
++	  ;;
++	esac
  
- \chapheadingskip = 15pt plus 4pt minus 2pt
-@@ -5695,7 +8621,7 @@
- % Don't be so finicky about underfull hboxes, either.
- \hbadness = 2000
+ 	# Check that each of the things are valid numbers.
+ 	case $current in
+-	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
++	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ 	*)
+-	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+-	  exit 1
++	  func_error "CURRENT \`$current' must be a nonnegative integer"
++	  func_fatal_error "\`$vinfo' is not valid version information"
+ 	  ;;
+ 	esac
  
--% Following George Bush, just get rid of widows and orphans.
-+% Following George Bush, get rid of widows and orphans.
- \widowpenalty=10000
- \clubpenalty=10000
+ 	case $revision in
+-	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
++	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ 	*)
+-	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+-	  exit 1
++	  func_error "REVISION \`$revision' must be a nonnegative integer"
++	  func_fatal_error "\`$vinfo' is not valid version information"
+ 	  ;;
+ 	esac
  
-@@ -5713,11 +8639,14 @@
-   \fi
- }
+ 	case $age in
+-	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
++	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ 	*)
+-	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+-	  exit 1
++	  func_error "AGE \`$age' must be a nonnegative integer"
++	  func_fatal_error "\`$vinfo' is not valid version information"
+ 	  ;;
+ 	esac
  
--% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
--% 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can
--% set \parskip and call \setleading for \baselineskip.
-+% Parameters in order: 1) textheight; 2) textwidth;
-+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
-+% 7) physical page height; 8) physical page width.
- %
--\def\internalpagesizes#1#2#3#4#5#6{%
-+% We also call \setleading{\textleading}, so the caller should define
-+% \textleading.  The caller should also set \parskip.
-+%
-+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
-   \voffset = #3\relax
-   \topskip = #6\relax
-   \splittopskip = \topskip
-@@ -5736,6 +8665,17 @@
-   \normaloffset = #4\relax
-   \bindingoffset = #5\relax
-   %
-+  \ifpdf
-+    \pdfpageheight #7\relax
-+    \pdfpagewidth #8\relax
-+    % if we don't reset these, they will remain at "1 true in" of
-+    % whatever layout pdftex was dumped with.
-+    \pdfhorigin = 1 true in
-+    \pdfvorigin = 1 true in
-+  \fi
-+  %
-+  \setleading{\textleading}
-+  %
-   \parindent = \defaultparindent
-   \setemergencystretch
- }
-@@ -5743,76 +8683,140 @@
- % @letterpaper (the default).
- \def\letterpaper{{\globaldefs = 1
-   \parskip = 3pt plus 2pt minus 1pt
--  \setleading{13.2pt}%
-+  \textleading = 13.2pt
-   %
-   % If page is nothing but text, make it come out even.
--  \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
-+  \internalpagesizes{607.2pt}{6in}% that's 46 lines
-+                    {\voffset}{.25in}%
-+                    {\bindingoffset}{36pt}%
-+                    {11in}{8.5in}%
- }}
+-	if test $age -gt $current; then
+-	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+-	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+-	  exit 1
++	if test "$age" -gt "$current"; then
++	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
++	  func_fatal_error "\`$vinfo' is not valid version information"
+ 	fi
  
--% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-+% Use @smallbook to reset parameters for 7x9.25 trim size.
- \def\smallbook{{\globaldefs = 1
-   \parskip = 2pt plus 1pt
--  \setleading{12pt}%
-+  \textleading = 12pt
-   %
--  \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
-+  \internalpagesizes{7.5in}{5in}%
-+                    {-.2in}{0in}%
-+                    {\bindingoffset}{16pt}%
-+                    {9.25in}{7in}%
-   %
-   \lispnarrowing = 0.3in
-   \tolerance = 700
-   \hfuzz = 1pt
-   \contentsrightmargin = 0pt
--  \deftypemargin = 0pt
-   \defbodyindent = .5cm
-+}}
-+
-+% Use @smallerbook to reset parameters for 6x9 trim size.
-+% (Just testing, parameters still in flux.)
-+\def\smallerbook{{\globaldefs = 1
-+  \parskip = 1.5pt plus 1pt
-+  \textleading = 12pt
-   %
--  \let\smalldisplay = \smalldisplayx
--  \let\smallexample = \smalllispx
--  \let\smallformat = \smallformatx
--  \let\smalllisp = \smalllispx
-+  \internalpagesizes{7.4in}{4.8in}%
-+                    {-.2in}{-.4in}%
-+                    {0pt}{14pt}%
-+                    {9in}{6in}%
-+  %
-+  \lispnarrowing = 0.25in
-+  \tolerance = 700
-+  \hfuzz = 1pt
-+  \contentsrightmargin = 0pt
-+  \defbodyindent = .4cm
- }}
+ 	# Calculate the version variables.
+@@ -2566,10 +7383,13 @@
+ 	darwin)
+ 	  # Like Linux, but with the current version available in
+ 	  # verstring for coding it into the library header
+-	  major=.`expr $current - $age`
++	  func_arith $current - $age
++	  major=.$func_arith_result
+ 	  versuffix="$major.$age.$revision"
+ 	  # Darwin ld doesn't like 0 for these options...
+-	  minor_current=`expr $current + 1`
++	  func_arith $current + 1
++	  minor_current=$func_arith_result
++	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ 	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ 	  ;;
  
- % Use @afourpaper to print on European A4 paper.
- \def\afourpaper{{\globaldefs = 1
--  \setleading{12pt}%
-   \parskip = 3pt plus 2pt minus 1pt
-+  \textleading = 13.2pt
-   %
--  \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
-+  % Double-side printing via postscript on Laserjet 4050
-+  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
-+  % To change the settings for a different printer or situation, adjust
-+  % \normaloffset until the front-side and back-side texts align.  Then
-+  % do the same for \bindingoffset.  You can set these for testing in
-+  % your texinfo source file like this:
-+  % @tex
-+  % \global\normaloffset = -6mm
-+  % \global\bindingoffset = 10mm
-+  % @end tex
-+  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
-+                    {\voffset}{\hoffset}%
-+                    {\bindingoffset}{44pt}%
-+                    {297mm}{210mm}%
-   %
-   \tolerance = 700
-   \hfuzz = 1pt
-+  \contentsrightmargin = 0pt
-+  \defbodyindent = 5mm
- }}
+@@ -2580,19 +7400,31 @@
  
--% A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
--% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
--\def\afourlatex{{\globaldefs = 1
--  \setleading{13.6pt}%
-+% Use @afivepaper to print on European A5 paper.
-+% From romildo at urano.iceb.ufop.br, 2 July 2000.
-+% He also recommends making @example and @lisp be small.
-+\def\afivepaper{{\globaldefs = 1
-+  \parskip = 2pt plus 1pt minus 0.1pt
-+  \textleading = 12.5pt
-   %
-+  \internalpagesizes{160mm}{120mm}%
-+                    {\voffset}{\hoffset}%
-+                    {\bindingoffset}{8pt}%
-+                    {210mm}{148mm}%
-+  %
-+  \lispnarrowing = 0.2in
-+  \tolerance = 800
-+  \hfuzz = 1.2pt
-+  \contentsrightmargin = 0pt
-+  \defbodyindent = 2mm
-+  \tableindent = 12mm
-+}}
+ 	freebsd-elf)
+ 	  major=".$current"
+-	  versuffix=".$current";
++	  versuffix=".$current"
+ 	  ;;
+ 
+-	irix)
+-	  major=`expr $current - $age + 1`
+-	  verstring="sgi$major.$revision"
++	irix | nonstopux)
++	  if test "X$lt_irix_increment" = "Xno"; then
++	    func_arith $current - $age
++	  else
++	    func_arith $current - $age + 1
++	  fi
++	  major=$func_arith_result
 +
-+% A specific text layout, 24x15cm overall, intended for A4 paper.
-+\def\afourlatex{{\globaldefs = 1
-   \afourpaper
--  \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
-+  \internalpagesizes{237mm}{150mm}%
-+                    {\voffset}{4.6mm}%
-+                    {\bindingoffset}{7mm}%
-+                    {297mm}{210mm}%
-   %
-+  % Must explicitly reset to 0 because we call \afourpaper.
-   \globaldefs = 0
- }}
++	  case $version_type in
++	    nonstopux) verstring_prefix=nonstopux ;;
++	    *)         verstring_prefix=sgi ;;
++	  esac
++	  verstring="$verstring_prefix$major.$revision"
  
--% Use @afourwide to print on European A4 paper in wide format.
--\def\afourwide{%
-+% Use @afourwide to print on A4 paper in landscape format.
-+\def\afourwide{{\globaldefs = 1
-   \afourpaper
--  \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
--  %
-+  \internalpagesizes{241mm}{165mm}%
-+                    {\voffset}{-2.95mm}%
-+                    {\bindingoffset}{7mm}%
-+                    {297mm}{210mm}%
-   \globaldefs = 0
--}
-+}}
+ 	  # Add in all the interfaces that we are compatible with.
+ 	  loop=$revision
+-	  while test $loop != 0; do
+-	    iface=`expr $revision - $loop`
+-	    loop=`expr $loop - 1`
+-	    verstring="sgi$major.$iface:$verstring"
++	  while test "$loop" -ne 0; do
++	    func_arith $revision - $loop
++	    iface=$func_arith_result
++	    func_arith $loop - 1
++	    loop=$func_arith_result
++	    verstring="$verstring_prefix$major.$iface:$verstring"
+ 	  done
  
- % @pagesizes TEXTHEIGHT[,TEXTWIDTH]
- % Perhaps we should allow setting the margins, \topskip, \parskip,
- % and/or leading, also. Or perhaps we should compute them somehow.
- %
--\def\pagesizes{\parsearg\pagesizesxxx}
--\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
- \def\pagesizesyyy#1,#2,#3\finish{{%
-   \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-   \globaldefs = 1
-   %
-   \parskip = 3pt plus 2pt minus 1pt
--  \setleading{13.2pt}%
-+  \setleading{\textleading}%
-   %
--  \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
-+  \dimen0 = #1\relax
-+  \advance\dimen0 by \voffset
-+  %
-+  \dimen2 = \hsize
-+  \advance\dimen2 by \normaloffset
-+  %
-+  \internalpagesizes{#1}{\hsize}%
-+                    {\voffset}{\normaloffset}%
-+                    {\bindingoffset}{44pt}%
-+                    {\dimen0}{\dimen2}%
- }}
+ 	  # Before this point, $major must not contain `.'.
+@@ -2601,25 +7433,34 @@
+ 	  ;;
  
- % Set default to letter.
-@@ -5840,10 +8844,10 @@
- \def\normalless{<}
- \def\normalgreater{>}
- \def\normalplus{+}
--\def\normaldollar{$}
-+\def\normaldollar{$}%$ font-lock fix
+ 	linux)
+-	  major=.`expr $current - $age`
++	  func_arith $current - $age
++	  major=.$func_arith_result
+ 	  versuffix="$major.$age.$revision"
+ 	  ;;
  
--% This macro is used to make a character print one way in ttfont
--% where it can probably just be output, and another way in other fonts,
-+% This macro is used to make a character print one way in \tt
-+% (where it can probably be output as-is), and another way in other fonts,
- % where something hairier probably needs to be done.
- %
- % #1 is what to print if we are indeed using \tt; #2 is what to print
-@@ -5875,8 +8879,9 @@
+ 	osf)
+-	  major=`expr $current - $age`
++	  func_arith $current - $age
++	  major=.$func_arith_result
+ 	  versuffix=".$current.$age.$revision"
+ 	  verstring="$current.$age.$revision"
  
- \catcode`\_=\active
- \def_{\ifusingtt\normalunderscore\_}
-+\let\realunder=_
- % Subroutine for the previous macro.
--\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+ 	  # Add in all the interfaces that we are compatible with.
+ 	  loop=$age
+-	  while test $loop != 0; do
+-	    iface=`expr $current - $loop`
+-	    loop=`expr $loop - 1`
++	  while test "$loop" -ne 0; do
++	    func_arith $current - $loop
++	    iface=$func_arith_result
++	    func_arith $loop - 1
++	    loop=$func_arith_result
+ 	    verstring="$verstring:${iface}.0"
+ 	  done
  
- \catcode`\|=\active
- \def|{{\tt\char124}}
-@@ -5889,16 +8894,7 @@
- \catcode`\+=\active
- \def+{{\tt \char 43}}
- \catcode`\$=\active
--\def${\ifusingit{{\sl\$}}\normaldollar}
--%\catcode 27=\active
--%\def^^[{$\diamondsuit$}
--
--% Set up an active definition for =, but don't enable it most of the time.
--{\catcode`\==\active
--\global\def={{\tt \char 61}}}
--
--\catcode`+=\active
--\catcode`\_=\active
-+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+ 	  # Make executables depend on our current version.
+-	  verstring="$verstring:${current}.0"
++	  func_append verstring ":${current}.0"
++	  ;;
++
++	qnx)
++	  major=".$current"
++	  versuffix=".$current"
+ 	  ;;
  
- % If a .fmt file is being used, characters that might appear in a file
- % name cannot be active until we have parsed the command line.
-@@ -5906,46 +8902,53 @@
- % \otherifyactive is called near the end of this file.
- \def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+ 	sunos)
+@@ -2630,21 +7471,29 @@
+ 	windows)
+ 	  # Use '-' rather than '.', since we only want one
+ 	  # extension on DOS 8.3 filesystems.
+-	  major=`expr $current - $age`
++	  func_arith $current - $age
++	  major=$func_arith_result
+ 	  versuffix="-$major"
+ 	  ;;
  
--\catcode`\@=0
-+% Used sometimes to turn off (effectively) the active characters even after
-+% parsing them.
-+\def\turnoffactive{%
-+  \normalturnoffactive
-+  \otherbackslash
-+}
+ 	*)
+-	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
+-	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+-	  exit 1
++	  func_fatal_configuration "unknown library version type \`$version_type'"
+ 	  ;;
+ 	esac
  
--% \rawbackslashxx output one backslash character in current font
--\global\chardef\rawbackslashxx=`\\
--%{\catcode`\\=\other
--%@gdef at rawbackslashxx{\}}
-+\catcode`\@=0
+ 	# Clear the version info if we defaulted, and they specified a release.
+ 	if test -z "$vinfo" && test -n "$release"; then
+ 	  major=
+-	  verstring="0.0"
++	  case $version_type in
++	  darwin)
++	    # we can't check for "0.0" in archive_cmds due to quoting
++	    # problems, so we reset it completely
++	    verstring=
++	    ;;
++	  *)
++	    verstring="0.0"
++	    ;;
++	  esac
+ 	  if test "$need_version" = no; then
+ 	    versuffix=
+ 	  else
+@@ -2662,7 +7511,7 @@
+ 	# Check to see if the archive will have undefined symbols.
+ 	if test "$allow_undefined" = yes; then
+ 	  if test "$allow_undefined_flag" = unsupported; then
+-	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
++	    func_warning "undefined symbols not allowed in $host shared libraries"
+ 	    build_libtool_libs=no
+ 	    build_old_libs=yes
+ 	  fi
+@@ -2670,55 +7519,65 @@
+ 	  # Don't allow undefined symbols.
+ 	  allow_undefined_flag="$no_undefined_flag"
+ 	fi
++
+       fi
  
--% \rawbackslash redefines \ as input to do \rawbackslashxx.
--{\catcode`\\=\active
-- at gdef@rawbackslash{@let\=@rawbackslashxx }}
-+% \backslashcurfont outputs one backslash character in current font,
-+% as in \char`\\.
-+\global\chardef\backslashcurfont=`\\
-+\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
+-      if test "$mode" != relink; then
++      func_generate_dlsyms "$libname" "$libname" "yes"
++      func_append libobjs " $symfileobj"
++      test "X$libobjs" = "X " && libobjs=
++
++      if test "$opt_mode" != relink; then
+ 	# Remove our outputs, but don't remove object files since they
+-        # may have been created when compiling PIC objects.
+-        removelist=
+-        tempremovelist=`echo "$output_objdir/*"`
++	# may have been created when compiling PIC objects.
++	removelist=
++	tempremovelist=`$ECHO "$output_objdir/*"`
+ 	for p in $tempremovelist; do
+-          case $p in
+-            *.$objext)
+-               ;;
+-            $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+-               removelist="$removelist $p"
+-               ;;
+-            *) ;;
+-          esac
+-        done
+-        if test -n "$removelist"; then
+-	  $show "${rm}r $removelist"
+-	  $run ${rm}r $removelist
+-        fi
++	  case $p in
++	    *.$objext | *.gcno)
++	       ;;
++	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
++	       if test "X$precious_files_regex" != "X"; then
++		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
++		 then
++		   continue
++		 fi
++	       fi
++	       func_append removelist " $p"
++	       ;;
++	    *) ;;
++	  esac
++	done
++	test -n "$removelist" && \
++	  func_show_eval "${RM}r \$removelist"
+       fi
  
--% \normalbackslash outputs one backslash in fixed width font.
--\def\normalbackslash{{\tt\rawbackslashxx}}
-+% \realbackslash is an actual character `\' with catcode other, and
-+% \doublebackslash is two of them (for the pdf outlines).
-+{\catcode`\\=\other @gdef at realbackslash{\} @gdef at doublebackslash{\\}}
+       # Now set the variables for building old libraries.
+       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
++	func_append oldlibs " $output_objdir/$libname.$libext"
  
--% \catcode 17=0   % Define control-q
-+% In texinfo, backslash is an active character; it prints the backslash
-+% in fixed width font.
- \catcode`\\=\active
-+ at def@normalbackslash{{@tt at backslashcurfont}}
-+% On startup, @fixbackslash assigns:
-+%  @let \ = @normalbackslash
+ 	# Transform .lo files to .o files.
+-	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
++	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+       fi
  
--% Used sometimes to turn off (effectively) the active characters
--% even after parsing them.
-- at def@turnoffactive{@let"=@normaldoublequote
-- at let\=@realbackslash
-- at let~=@normaltilde
-- at let^=@normalcaret
-- at let_=@normalunderscore
-- at let|=@normalverticalbar
-- at let<=@normalless
-- at let>=@normalgreater
-- at let+=@normalplus
-- at let$=@normaldollar}
-+% \rawbackslash defines an active \ to do \backslashcurfont.
-+% \otherbackslash defines an active \ to be a literal `\' character with
-+% catcode other.
-+ at gdef@rawbackslash{@let\=@backslashcurfont}
-+ at gdef@otherbackslash{@let\=@realbackslash}
+       # Eliminate all temporary directories.
+-      for path in $notinst_path; do
+-	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
+-	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
+-	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
+-      done
++      #for path in $notinst_path; do
++      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
++      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
++      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
++      #done
  
-- at def@normalturnoffactive{@let"=@normaldoublequote
-- at let\=@normalbackslash
-- at let~=@normaltilde
-- at let^=@normalcaret
-- at let_=@normalunderscore
-- at let|=@normalverticalbar
-- at let<=@normalless
-- at let>=@normalgreater
-- at let+=@normalplus
-- at let$=@normaldollar}
-+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-+% the literal character `\'.
-+% 
-+ at def@normalturnoffactive{%
-+  @let\=@normalbackslash
-+  @let"=@normaldoublequote
-+  @let~=@normaltilde
-+  @let^=@normalcaret
-+  @let_=@normalunderscore
-+  @let|=@normalverticalbar
-+  @let<=@normalless
-+  @let>=@normalgreater
-+  @let+=@normalplus
-+  @let$=@normaldollar %$ font-lock fix
-+  @unsepspaces
-+}
+       if test -n "$xrpath"; then
+ 	# If the user specified any rpath flags, then add them.
+ 	temp_xrpath=
+ 	for libdir in $xrpath; do
+-	  temp_xrpath="$temp_xrpath -R$libdir"
++	  func_replace_sysroot "$libdir"
++	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+ 	  case "$finalize_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
++	  *) func_append finalize_rpath " $libdir" ;;
+ 	  esac
+ 	done
+-	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
++	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ 	  dependency_libs="$temp_xrpath $dependency_libs"
+ 	fi
+       fi
+@@ -2729,7 +7588,7 @@
+       for lib in $old_dlfiles; do
+ 	case " $dlprefiles $dlfiles " in
+ 	*" $lib "*) ;;
+-	*) dlfiles="$dlfiles $lib" ;;
++	*) func_append dlfiles " $lib" ;;
+ 	esac
+       done
  
- % Make _ and + \other characters, temporarily.
- % This is canceled by @fixbackslash.
-@@ -5959,9 +8962,9 @@
- @global at let\ = @eatinput
+@@ -2739,27 +7598,36 @@
+       for lib in $old_dlprefiles; do
+ 	case "$dlprefiles " in
+ 	*" $lib "*) ;;
+-	*) dlprefiles="$dlprefiles $lib" ;;
++	*) func_append dlprefiles " $lib" ;;
+ 	esac
+       done
  
- % On the other hand, perhaps the file did not have a `\input texinfo'. Then
--% the first `\{ in the file would cause an error. This macro tries to fix
-+% the first `\' in the file would cause an error. This macro tries to fix
- % that, assuming it is called before the first `\' could plausibly occur.
--% Also back turn on active characters that might appear in the input
-+% Also turn back on active characters that might appear in the input
- % file name, in case not using a pre-dumped format.
- %
- @gdef at fixbackslash{%
-@@ -5973,15 +8976,11 @@
- % Say @foo, not \foo, in error messages.
- @escapechar = `@@
+       if test "$build_libtool_libs" = yes; then
+ 	if test -n "$rpath"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
++	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # these systems don't actually have a c library (as such)!
+ 	    ;;
+ 	  *-*-rhapsody* | *-*-darwin1.[012])
+ 	    # Rhapsody C library is in the System framework
+-	    deplibs="$deplibs -framework System"
++	    func_append deplibs " System.ltframework"
+ 	    ;;
+ 	  *-*-netbsd*)
+ 	    # Don't link with libc until the a.out ld.so is fixed.
+ 	    ;;
++	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
++	    # Do not include libc due to us having libc/libc_r.
++	    ;;
++	  *-*-sco3.2v5* | *-*-sco5v6*)
++	    # Causes problems with __ctype
++	    ;;
++	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
++	    # Compiler inserts libc in the correct place for threads to work
++	    ;;
+ 	  *)
+ 	    # Add libc to deplibs on all other systems if necessary.
+-	    if test $build_libtool_need_lc = "yes"; then
+-	      deplibs="$deplibs -lc"
++	    if test "$build_libtool_need_lc" = "yes"; then
++	      func_append deplibs " -lc"
+ 	    fi
+ 	    ;;
+ 	  esac
+@@ -2785,7 +7653,7 @@
+ 	  # This might be a little naive.  We might want to check
+ 	  # whether the library exists or not.  But this is on
+ 	  # osf3 & osf4 and I'm not really sure... Just
+-	  # implementing what was already the behaviour.
++	  # implementing what was already the behavior.
+ 	  newdeplibs=$deplibs
+ 	  ;;
+ 	test_compile)
+@@ -2793,90 +7661,139 @@
+ 	  # limits. Maybe even breaks it.  We compile a program, linking it
+ 	  # against the deplibs as a proxy for the library.  Then we can check
+ 	  # whether they linked in statically or dynamically with ldd.
+-	  $rm conftest.c
++	  $opt_dry_run || $RM conftest.c
+ 	  cat > conftest.c <<EOF
+ 	  int main() { return 0; }
+ EOF
+-	  $rm conftest
+-	  $LTCC -o conftest conftest.c $deplibs
+-	  if test $? -eq 0 ; then
++	  $opt_dry_run || $RM conftest
++	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ 	    ldd_output=`ldd conftest`
+ 	    for i in $deplibs; do
+-	      name="`expr $i : '-l\(.*\)'`"
+-	      # If $name is empty we are operating on a -L argument.
+-	      if test -n "$name" && test "$name" != "0"; then
+-		libname=`eval \\$echo \"$libname_spec\"`
+-		deplib_matches=`eval \\$echo \"$library_names_spec\"`
+-		set dummy $deplib_matches
+-		deplib_match=$2
+-		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+-		  newdeplibs="$newdeplibs $i"
+-		else
+-		  droppeddeps=yes
+-		  echo
+-		  echo "*** Warning: This library needs some functionality provided by $i."
+-		  echo "*** I have the capability to make that library automatically link in when"
+-		  echo "*** you link to this library.  But I can only do this if you have a"
+-		  echo "*** shared version of the library, which you do not appear to have."
++	      case $i in
++	      -l*)
++		func_stripname -l '' "$i"
++		name=$func_stripname_result
++		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++		  case " $predeps $postdeps " in
++		  *" $i "*)
++		    func_append newdeplibs " $i"
++		    i=""
++		    ;;
++		  esac
+ 		fi
+-	      else
+-		newdeplibs="$newdeplibs $i"
+-	      fi
+-	    done
+-	  else
+-	    # Error occured in the first compile.  Let's try to salvage the situation:
+-	    # Compile a seperate program for each library.
+-	    for i in $deplibs; do
+-	      name="`expr $i : '-l\(.*\)'`"
+-	     # If $name is empty we are operating on a -L argument.
+-	      if test -n "$name" && test "$name" != "0"; then
+-		$rm conftest
+-		$LTCC -o conftest conftest.c $i
+-		# Did it work?
+-		if test $? -eq 0 ; then
+-		  ldd_output=`ldd conftest`
+-		  libname=`eval \\$echo \"$libname_spec\"`
+-		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
+-		  set dummy $deplib_matches
+-		  deplib_match=$2
++		if test -n "$i" ; then
++		  libname=`eval "\\$ECHO \"$libname_spec\""`
++		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
++		  set dummy $deplib_matches; shift
++		  deplib_match=$1
+ 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+-		    newdeplibs="$newdeplibs $i"
++		    func_append newdeplibs " $i"
+ 		  else
+ 		    droppeddeps=yes
+ 		    echo
+-		    echo "*** Warning: This library needs some functionality provided by $i."
++		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ 		    echo "*** I have the capability to make that library automatically link in when"
+ 		    echo "*** you link to this library.  But I can only do this if you have a"
+-		    echo "*** shared version of the library, which you do not appear to have."
++		    echo "*** shared version of the library, which I believe you do not have"
++		    echo "*** because a test_compile did reveal that the linker did not use it for"
++		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
++		  fi
++		fi
++		;;
++	      *)
++		func_append newdeplibs " $i"
++		;;
++	      esac
++	    done
++	  else
++	    # Error occurred in the first compile.  Let's try to salvage
++	    # the situation: Compile a separate program for each library.
++	    for i in $deplibs; do
++	      case $i in
++	      -l*)
++		func_stripname -l '' "$i"
++		name=$func_stripname_result
++		$opt_dry_run || $RM conftest
++		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
++		  ldd_output=`ldd conftest`
++		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++		    case " $predeps $postdeps " in
++		    *" $i "*)
++		      func_append newdeplibs " $i"
++		      i=""
++		      ;;
++		    esac
++		  fi
++		  if test -n "$i" ; then
++		    libname=`eval "\\$ECHO \"$libname_spec\""`
++		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
++		    set dummy $deplib_matches; shift
++		    deplib_match=$1
++		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
++		      func_append newdeplibs " $i"
++		    else
++		      droppeddeps=yes
++		      echo
++		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
++		      echo "*** I have the capability to make that library automatically link in when"
++		      echo "*** you link to this library.  But I can only do this if you have a"
++		      echo "*** shared version of the library, which you do not appear to have"
++		      echo "*** because a test_compile did reveal that the linker did not use this one"
++		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
++		    fi
+ 		  fi
+ 		else
+ 		  droppeddeps=yes
+ 		  echo
+-		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
+-		  echo "***  make it link in!  You will probably need to install it or some"
++		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
++		  echo "*** make it link in!  You will probably need to install it or some"
+ 		  echo "*** library that it depends on before this library will be fully"
+ 		  echo "*** functional.  Installing it before continuing would be even better."
+ 		fi
+-	      else
+-		newdeplibs="$newdeplibs $i"
+-	      fi
++		;;
++	      *)
++		func_append newdeplibs " $i"
++		;;
++	      esac
+ 	    done
+ 	  fi
+ 	  ;;
+ 	file_magic*)
+-	  set dummy $deplibs_check_method
+-	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
++	  set dummy $deplibs_check_method; shift
++	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ 	  for a_deplib in $deplibs; do
+-	    name="`expr $a_deplib : '-l\(.*\)'`"
+-	    # If $name is empty we are operating on a -L argument.
+-	    if test -n "$name" && test "$name" != "0"; then
+-	      libname=`eval \\$echo \"$libname_spec\"`
+-	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+-		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+-		    for potent_lib in $potential_libs; do
++	    case $a_deplib in
++	    -l*)
++	      func_stripname -l '' "$a_deplib"
++	      name=$func_stripname_result
++	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++		case " $predeps $postdeps " in
++		*" $a_deplib "*)
++		  func_append newdeplibs " $a_deplib"
++		  a_deplib=""
++		  ;;
++		esac
++	      fi
++	      if test -n "$a_deplib" ; then
++		libname=`eval "\\$ECHO \"$libname_spec\""`
++		if test -n "$file_magic_glob"; then
++		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
++		else
++		  libnameglob=$libname
++		fi
++		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
++		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
++		  if test "$want_nocaseglob" = yes; then
++		    shopt -s nocaseglob
++		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++		    $nocaseglob
++		  else
++		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
++		  fi
++		  for potent_lib in $potential_libs; do
+ 		      # Follow soft links.
+-		      if ls -lLd "$potent_lib" 2>/dev/null \
+-			 | grep " -> " >/dev/null; then
++		      if ls -lLd "$potent_lib" 2>/dev/null |
++			 $GREP " -> " >/dev/null; then
+ 			continue
+ 		      fi
+ 		      # The statement above tries to avoid entering an
+@@ -2886,81 +7803,110 @@
+ 		      # but so what?
+ 		      potlib="$potent_lib"
+ 		      while test -h "$potlib" 2>/dev/null; do
+-			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
++			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ 			case $potliblink in
+ 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+-			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
++			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+ 			esac
+ 		      done
+-		      # It is ok to link against an archive when
+-		      # building a shared library.
+-		      if $AR -t $potlib > /dev/null 2>&1; then
+-			newdeplibs="$newdeplibs $a_deplib"
+-			a_deplib=""
+-			break 2
+-		      fi
+-		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+-			 | sed 10q \
+-			 | egrep "$file_magic_regex" > /dev/null; then
+-			newdeplibs="$newdeplibs $a_deplib"
++		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
++			 $SED -e 10q |
++			 $EGREP "$file_magic_regex" > /dev/null; then
++			func_append newdeplibs " $a_deplib"
+ 			a_deplib=""
+ 			break 2
+ 		      fi
+-		    done
+-	      done
++		  done
++		done
++	      fi
+ 	      if test -n "$a_deplib" ; then
+ 		droppeddeps=yes
+ 		echo
+-		echo "*** Warning: This library needs some functionality provided by $a_deplib."
++		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ 		echo "*** I have the capability to make that library automatically link in when"
+ 		echo "*** you link to this library.  But I can only do this if you have a"
+-		echo "*** shared version of the library, which you do not appear to have."
++		echo "*** shared version of the library, which you do not appear to have"
++		echo "*** because I did check the linker path looking for a file starting"
++		if test -z "$potlib" ; then
++		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
++		else
++		  $ECHO "*** with $libname and none of the candidates passed a file format test"
++		  $ECHO "*** using a file magic. Last file checked: $potlib"
++		fi
+ 	      fi
+-	    else
++	      ;;
++	    *)
+ 	      # Add a -L argument.
+-	      newdeplibs="$newdeplibs $a_deplib"
+-	    fi
++	      func_append newdeplibs " $a_deplib"
++	      ;;
++	    esac
+ 	  done # Gone through all deplibs.
+ 	  ;;
+ 	match_pattern*)
+-	  set dummy $deplibs_check_method
+-	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
++	  set dummy $deplibs_check_method; shift
++	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ 	  for a_deplib in $deplibs; do
+-	    name="`expr $a_deplib : '-l\(.*\)'`"
+-	    # If $name is empty we are operating on a -L argument.
+-	    if test -n "$name" && test "$name" != "0"; then
+-	      libname=`eval \\$echo \"$libname_spec\"`
+-	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+-		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+-		for potent_lib in $potential_libs; do
+-		  if eval echo \"$potent_lib\" 2>/dev/null \
+-		      | sed 10q \
+-		      | egrep "$match_pattern_regex" > /dev/null; then
+-		    newdeplibs="$newdeplibs $a_deplib"
+-		    a_deplib=""
+-		    break 2
+-		  fi
++	    case $a_deplib in
++	    -l*)
++	      func_stripname -l '' "$a_deplib"
++	      name=$func_stripname_result
++	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++		case " $predeps $postdeps " in
++		*" $a_deplib "*)
++		  func_append newdeplibs " $a_deplib"
++		  a_deplib=""
++		  ;;
++		esac
++	      fi
++	      if test -n "$a_deplib" ; then
++		libname=`eval "\\$ECHO \"$libname_spec\""`
++		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
++		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
++		  for potent_lib in $potential_libs; do
++		    potlib="$potent_lib" # see symlink-check above in file_magic test
++		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
++		       $EGREP "$match_pattern_regex" > /dev/null; then
++		      func_append newdeplibs " $a_deplib"
++		      a_deplib=""
++		      break 2
++		    fi
++		  done
+ 		done
+-	      done
++	      fi
+ 	      if test -n "$a_deplib" ; then
+ 		droppeddeps=yes
+ 		echo
+-		echo "*** Warning: This library needs some functionality provided by $a_deplib."
++		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ 		echo "*** I have the capability to make that library automatically link in when"
+ 		echo "*** you link to this library.  But I can only do this if you have a"
+-		echo "*** shared version of the library, which you do not appear to have."
++		echo "*** shared version of the library, which you do not appear to have"
++		echo "*** because I did check the linker path looking for a file starting"
++		if test -z "$potlib" ; then
++		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
++		else
++		  $ECHO "*** with $libname and none of the candidates passed a file format test"
++		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
++		fi
+ 	      fi
+-	    else
++	      ;;
++	    *)
+ 	      # Add a -L argument.
+-	      newdeplibs="$newdeplibs $a_deplib"
+-	    fi
++	      func_append newdeplibs " $a_deplib"
++	      ;;
++	    esac
+ 	  done # Gone through all deplibs.
+ 	  ;;
+ 	none | unknown | *)
+ 	  newdeplibs=""
+-	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+-	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
+-	     grep . >/dev/null; then
++	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
++	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++	    for i in $predeps $postdeps ; do
++	      # can't use Xsed below, because $i might contain '/'
++	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
++	    done
++	  fi
++	  case $tmp_deplibs in
++	  *[!\	\ ]*)
+ 	    echo
+ 	    if test "X$deplibs_check_method" = "Xnone"; then
+ 	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+@@ -2969,7 +7915,8 @@
+ 	    fi
+ 	    echo "*** All declared inter-library dependencies are being dropped."
+ 	    droppeddeps=yes
+-	  fi
++	    ;;
++	  esac
+ 	  ;;
+ 	esac
+ 	versuffix=$versuffix_save
+@@ -2980,8 +7927,8 @@
  
--% These look ok in all fonts, so just make them not special.  
-+% These look ok in all fonts, so just make them not special.
- @catcode`@& = @other
- @catcode`@# = @other
- @catcode`@% = @other
+ 	case $host in
+ 	*-*-rhapsody* | *-*-darwin1.[012])
+-	  # On Rhapsody replace the C library is the System framework
+-	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
++	  # On Rhapsody replace the C library with the System framework
++	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ 	  ;;
+ 	esac
  
-- at c Set initial fonts.
-- at textfonts
-- at rm
--
+@@ -2989,7 +7936,7 @@
+ 	  if test "$module" = yes; then
+ 	    echo
+ 	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+-	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
++	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+ 	    echo "*** a static module, that should work as long as the dlopening"
+ 	    echo "*** application is linked with the -dlopen flag."
+ 	    if test -z "$global_symbol_pipe"; then
+@@ -3011,7 +7958,7 @@
+ 	    echo "*** automatically added whenever a program is linked with this library"
+ 	    echo "*** or is declared to -dlopen it."
  
- @c Local variables:
- @c eval: (add-hook 'write-file-hooks 'time-stamp)
-@@ -5990,3 +8989,9 @@
- @c time-stamp-format: "%:y-%02m-%02d.%02H"
- @c time-stamp-end: "}"
- @c End:
-+
-+ at c vim:sw=2:
+-	    if test $allow_undefined = no; then
++	    if test "$allow_undefined" = no; then
+ 	      echo
+ 	      echo "*** Since this library must not contain undefined symbols,"
+ 	      echo "*** because either the platform does not support them or"
+@@ -3030,6 +7977,41 @@
+ 	# Done checking deplibs!
+ 	deplibs=$newdeplibs
+       fi
++      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
++      case $host in
++	*-*-darwin*)
++	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	  ;;
++      esac
 +
-+ at ignore
-+   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-+ at end ignore
---- ./configure.in.orig	2012-01-09 20:21:02.000000000 -0700
-+++ ./configure.in	2012-01-09 20:41:39.017551755 -0700
-@@ -1,4 +1,4 @@
--AC_INIT()
-+AC_INIT
- AC_PREREQ([2.61])
- AC_CONFIG_HEADER(h/gclincl.h)
- 
-@@ -445,7 +445,7 @@
-    AC_MSG_CHECKING([for CFLAG $TMPF])
-    CFLAGS_ORI=$CFLAGS
-    CFLAGS="$CFLAGS $TMPF"
--   AC_TRY_RUN([int main() {return 0;}],TCFLAGS="$TCFLAGS $TMPF";AC_MSG_RESULT(yes),AC_MSG_RESULT(no))
-+   AC_RUN_IFELSE([AC_LANG_PROGRAM([],[[return 0;]])],TCFLAGS="$TCFLAGS $TMPF";AC_MSG_RESULT(yes),AC_MSG_RESULT(no))
-    CFLAGS=$CFLAGS_ORI
- 
- else
-@@ -629,9 +629,6 @@
- AC_MSG_CHECKING([system version (for dynamic loading)])
- if machine=`uname -m` ; then true; else machine=unknown ; fi
- 
--AC_CHECK_PROGS(MAKEINFO,makeinfo,"false")
--AC_SUBST(MAKEINFO)
--
- if test -f /usr/lib/NextStep/software_version; then
-     system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
- else
-@@ -672,21 +669,24 @@
- 
- AC_CHECK_HEADER(unistd.h,
- 	AC_CHECK_LIB(c,sysconf,
--		AC_MSG_CHECKING("for _SC_CLK_TCK")
--		AC_TRY_RUN([#include <unistd.h>
-+		AC_MSG_CHECKING([for _SC_CLK_TCK])
-+		AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+		            #include <unistd.h>
- 		            #include <stdio.h>
--		            int
--			    main() {
-+		            ]],[[
- 			   	FILE *fp=fopen("conftest1","w");
- 				fprintf(fp,"%lu\n",sysconf(_SC_CLK_TCK));
- 				fclose(fp);
- 			        return 0;
--			    }],
-+			    ]])],
- 			    hz=`cat conftest1`
- 			    AC_DEFINE_UNQUOTED(HZ,$hz)
- 			    ,hz=0,hz=0)
- 	        [AC_MSG_RESULT($hz)]))
- 
-+AC_PROG_EGREP
-+AC_CHECK_PROGS(MAKEINFO,makeinfo,"false")
-+AC_SUBST(MAKEINFO)
- 
- #MY_SUBDIRS=
++      # move library search paths that coincide with paths to not yet
++      # installed libraries to the beginning of the library search list
++      new_libs=
++      for path in $notinst_path; do
++	case " $new_libs " in
++	*" -L$path/$objdir "*) ;;
++	*)
++	  case " $deplibs " in
++	  *" -L$path/$objdir "*)
++	    func_append new_libs " -L$path/$objdir" ;;
++	  esac
++	  ;;
++	esac
++      done
++      for deplib in $deplibs; do
++	case $deplib in
++	-L*)
++	  case " $new_libs " in
++	  *" $deplib "*) ;;
++	  *) func_append new_libs " $deplib" ;;
++	  esac
++	  ;;
++	*) func_append new_libs " $deplib" ;;
++	esac
++      done
++      deplibs="$new_libs"
  
-@@ -703,17 +703,19 @@
-  if test "$enable_dynsysgmp" = "yes" ; then
- 	AC_CHECK_HEADER(gmp.h,
- 		AC_CHECK_LIB(gmp,__gmpz_init,
--			AC_MSG_CHECKING("for external gmp version")
--			AC_TRY_RUN([#include <gmp.h>
--				    int main() {
-+			AC_MSG_CHECKING([for external gmp version])
-+			AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+				    #include <gmp.h>
-+				]],[[
- 				    #if __GNU_MP_VERSION == 4 || __GNU_MP_VERSION == 5
- 					return 0;
- 				    #else
- 					return -1;
- 				    #endif
--				    }],
-+				    ]])],
- #				MPFILES=$GMPDIR/mpn/mul_n.o
- #				PATCHED_SYMBOLS=__gmpn_toom3_mul_n
-+				AC_MSG_RESULT([4/5])
- 				MPFILES=
- 				PATCHED_SYMBOLS=
- #				if test "$use" = "m68k-linux" ; then
-@@ -725,7 +727,8 @@
- 				echo "int main() {return 0;}" >>foo.c
- 				MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
- 				rm -f foo.c,
--				echo "Cannot use dynamic gmp lib" , echo "Cannot use dynamic gmp lib" ),
-+				AC_MSG_RESULT([Cannot use dynamic gmp lib]),
-+				AC_MSG_RESULT([Cannot use dynamic gmp lib])),
- 			echo "Cannot use dynamic gmp lib" ,),
- 		echo "Cannot use dynamic gmp lib" ,)
- fi
-@@ -772,7 +775,7 @@
+       # All the library-specific variables (install_libdir is set above).
+       library_names=
+@@ -3038,15 +8020,17 @@
  
- fi
+       # Test again, we may have decided not to build it any more
+       if test "$build_libtool_libs" = yes; then
+-	if test $hardcode_into_libs = yes; then
++	if test "$hardcode_into_libs" = yes; then
+ 	  # Hardcode the library paths
+ 	  hardcode_libdirs=
+ 	  dep_rpath=
+ 	  rpath="$finalize_rpath"
+-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
++	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+ 	  for libdir in $rpath; do
+ 	    if test -n "$hardcode_libdir_flag_spec"; then
+ 	      if test -n "$hardcode_libdir_separator"; then
++		func_replace_sysroot "$libdir"
++		libdir=$func_replace_sysroot_result
+ 		if test -z "$hardcode_libdirs"; then
+ 		  hardcode_libdirs="$libdir"
+ 		else
+@@ -3055,18 +8039,18 @@
+ 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ 		    ;;
+ 		  *)
+-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ 		    ;;
+ 		  esac
+ 		fi
+ 	      else
+ 		eval flag=\"$hardcode_libdir_flag_spec\"
+-		dep_rpath="$dep_rpath $flag"
++		func_append dep_rpath " $flag"
+ 	      fi
+ 	    elif test -n "$runpath_var"; then
+ 	      case "$perm_rpath " in
+ 	      *" $libdir "*) ;;
+-	      *) perm_rpath="$perm_rpath $libdir" ;;
++	      *) func_append perm_rpath " $libdir" ;;
+ 	      esac
+ 	    fi
+ 	  done
+@@ -3074,13 +8058,17 @@
+ 	  if test -n "$hardcode_libdir_separator" &&
+ 	     test -n "$hardcode_libdirs"; then
+ 	    libdir="$hardcode_libdirs"
+-	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
++	    if test -n "$hardcode_libdir_flag_spec_ld"; then
++	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
++	    else
++	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
++	    fi
+ 	  fi
+ 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ 	    # We should set the runpath_var.
+ 	    rpath=
+ 	    for dir in $perm_rpath; do
+-	      rpath="$rpath$dir:"
++	      func_append rpath "$dir:"
+ 	    done
+ 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ 	  fi
+@@ -3088,140 +8076,222 @@
+ 	fi
  
--AC_MSG_CHECKING("for leading underscore in object symbols")
-+AC_MSG_CHECKING([for leading underscore in object symbols])
- cat>foo.c <<EOFF
- #include <math.h>
- #include <stdio.h>
-@@ -782,60 +785,62 @@
- if nm foo.o |grep " U " | grep "_cos" >/dev/null || nm foo.o |grep " U " | grep " _getc" >/dev/null ; then
- 	LEADING_UNDERSCORE=1
- 	AC_DEFINE(LEADING_UNDERSCORE)
--	AC_MSG_RESULT("yes")
-+	AC_MSG_RESULT([yes])
- else
- 	LEADING_UNDERSCORE=""
--	AC_MSG_RESULT("no")
-+	AC_MSG_RESULT([no])
- fi
--AC_MSG_CHECKING("for GNU ld option -Map")
-+AC_MSG_CHECKING([for GNU ld option -Map])
- touch map
- $CC -o foo [ -Wl,-Map ] map foo.o >/dev/null 2>&1
- if test `cat map | wc -l` != "0" ; then
--	AC_MSG_RESULT("yes")
-+	AC_MSG_RESULT([yes])
- 	AC_DEFINE(HAVE_GNU_LD)
- 	GNU_LD=1
- else
--	AC_MSG_RESULT("no")
-+	AC_MSG_RESULT([no])
- 	GNU_LD=
- fi
- rm -f foo.c foo.o foo map
+ 	shlibpath="$finalize_shlibpath"
+-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
++	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ 	if test -n "$shlibpath"; then
+ 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ 	fi
  
-- AC_MSG_CHECKING("for size of gmp limbs")
-- AC_TRY_RUN([#include <stdio.h>
-+ AC_MSG_CHECKING([for size of gmp limbs])
-+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+	#include <stdio.h>
- 	#include "$MP_INCLUDE"
--	int main() {
-+	]],[[
- 	FILE *fp=fopen("conftest1","w");
- 	fprintf(fp,"%u",sizeof(mp_limb_t));
- 	fclose(fp);
- 	return 0;
--	}],mpsize=`cat conftest1`,mpsize=0,mpsize=0)
-+	]])],mpsize=`cat conftest1`,mpsize=0,mpsize=0)
-  if test "$mpsize" = "0" ; then
--	echo "Cannot determine mpsize"
--	exit 1
-+	AC_MSG_ERROR([Cannot determine mpsize], 1)
-  fi
-  AC_DEFINE_UNQUOTED(MP_LIMB_BYTES,$mpsize)
-  AC_MSG_RESULT($mpsize) 
+ 	# Get the real and link names of the library.
++	eval shared_ext=\"$shrext_cmds\"
+ 	eval library_names=\"$library_names_spec\"
+ 	set dummy $library_names
+-	realname="$2"
+-	shift; shift
++	shift
++	realname="$1"
++	shift
  
-- AC_MSG_CHECKING("_SHORT_LIMB")
-- AC_TRY_RUN([#include <stdio.h>
-+ AC_MSG_CHECKING([_SHORT_LIMB])
-+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+	#include <stdio.h>
- 	#include "$MP_INCLUDE"
--	int main() {
-+	]],[[
- 	#ifdef _SHORT_LIMB
- 	return 0;
- 	#else
- 	return 1;
- 	#endif
--	}],AC_DEFINE(__SHORT_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
-- AC_MSG_CHECKING("_LONG_LONG_LIMB")
-- AC_TRY_RUN([#include <stdio.h>
-+	]])],AC_DEFINE(__SHORT_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
-+ AC_MSG_CHECKING([_LONG_LONG_LIMB])
-+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+	#include <stdio.h>
- 	#include "$MP_INCLUDE"
--	int main() {
-+	]],[[
- 	#ifdef _LONG_LONG_LIMB
- 	return 0;
- 	#else
- 	return 1;
- 	#endif
--	}],AC_DEFINE(__LONG_LONG_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
-+	]])],AC_DEFINE(__LONG_LONG_LIMB) AC_MSG_RESULT(yes),AC_MSG_RESULT(no),AC_MSG_RESULT(no))
+ 	if test -n "$soname_spec"; then
+ 	  eval soname=\"$soname_spec\"
+ 	else
+ 	  soname="$realname"
+ 	fi
+-	test -z "$dlname" && dlname=$soname
++	if test -z "$dlname"; then
++	  dlname=$soname
++	fi
  
-  GMP=1
-  AC_DEFINE(GMP)
-@@ -891,10 +896,9 @@
+ 	lib="$output_objdir/$realname"
++	linknames=
+ 	for link
+ 	do
+-	  linknames="$linknames $link"
++	  func_append linknames " $link"
+ 	done
  
-  	AC_CHECK_LIB(dl,dlopen,have_dl=1,have_dl=0)
-  	if test "$have_dl" = "0" ; then
-- 		echo "Cannot find dlopen in -dl"
-- 		exit 1
-+ 		AC_MSG_ERROR([Cannot find dlopen in -dl], 1)
-  	fi
--dnl	AC_SEARCH_LIBS(dlopen, dl, have_dl=1, AC_ERROR(dlopen not found))
-+dnl	AC_SEARCH_LIBS(dlopen, dl, have_dl=1, AC_MSG_ERROR([dlopen not found]))
- dnl LIBS and TLIBS - why not merged from the beginning?
+-#	# Ensure that we have .o objects for linkers which dislike .lo
+-#	# (e.g. aix) in case we are running --disable-static
+-#	for obj in $libobjs; do
+-#	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+-#	  if test "X$xdir" = "X$obj"; then
+-#	    xdir="."
+-#	  else
+-#	    xdir="$xdir"
+-#	  fi
+-#	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+-#	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
+-#	  if test ! -f $xdir/$oldobj && test "$baseobj" != "$oldobj"; then
+-#	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
+-#	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
+-#	  fi
+-#	done
+-
+ 	# Use standard objects if they are pic
+-	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
++	test "X$libobjs" = "X " && libobjs=
++
++	delfiles=
++	if test -n "$export_symbols" && test -n "$include_expsyms"; then
++	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
++	  export_symbols="$output_objdir/$libname.uexp"
++	  func_append delfiles " $export_symbols"
++	fi
++
++	orig_export_symbols=
++	case $host_os in
++	cygwin* | mingw* | cegcc*)
++	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
++	    # exporting using user supplied symfile
++	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
++	      # and it's NOT already a .def file. Must figure out
++	      # which of the given symbols are data symbols and tag
++	      # them as such. So, trigger use of export_symbols_cmds.
++	      # export_symbols gets reassigned inside the "prepare
++	      # the list of exported symbols" if statement, so the
++	      # include_expsyms logic still works.
++	      orig_export_symbols="$export_symbols"
++	      export_symbols=
++	      always_export_symbols=yes
++	    fi
++	  fi
++	  ;;
++	esac
  
- 	TLIBS="$TLIBS -ldl -rdynamic"
-@@ -908,15 +912,17 @@
- 		#
- 		# Old binutils appear to need CONST defined to const
- 		#
--			AC_MSG_CHECKING(if need to define CONST for bfd)
--			AC_TRY_RUN([#define IN_GCC
-+			AC_MSG_CHECKING([if need to define CONST for bfd])
-+			AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+				    #define IN_GCC
- 				    #include <bfd.h>
--				    int main() { symbol_info t; return 0;}],
-+				    ]],[[symbol_info t; return 0;]])],
- 				AC_MSG_RESULT(no),
--				AC_TRY_RUN([#define CONST const
-+				AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+					    #define CONST const
-                                             #define IN_GCC
- 					    #include <bfd.h>
--					    int main() {symbol_info t; return 0;}],
-+					    ]],[[symbol_info t; return 0;]])],
- 					AC_MSG_RESULT(yes) 
- 					AC_DEFINE(NEED_CONST),
- 					AC_MSG_ERROR([cannot use bfd]),
-@@ -930,11 +936,12 @@
- # BFD boolean syntax
- #
+ 	# Prepare the list of exported symbols
+ 	if test -z "$export_symbols"; then
+ 	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+-	    $show "generating symbol list for \`$libname.la'"
++	    func_verbose "generating symbol list for \`$libname.la'"
+ 	    export_symbols="$output_objdir/$libname.exp"
+-	    $run $rm $export_symbols
+-	    eval cmds=\"$export_symbols_cmds\"
+-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	    for cmd in $cmds; do
++	    $opt_dry_run || $RM $export_symbols
++	    cmds=$export_symbols_cmds
++	    save_ifs="$IFS"; IFS='~'
++	    for cmd1 in $cmds; do
+ 	      IFS="$save_ifs"
+-	      $show "$cmd"
+-	      $run eval "$cmd" || exit $?
++	      # Take the normal branch if the nm_file_list_spec branch
++	      # doesn't work or if tool conversion is not needed.
++	      case $nm_file_list_spec~$to_tool_file_cmd in
++		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
++		  try_normal_branch=yes
++		  eval cmd=\"$cmd1\"
++		  func_len " $cmd"
++		  len=$func_len_result
++		  ;;
++		*)
++		  try_normal_branch=no
++		  ;;
++	      esac
++	      if test "$try_normal_branch" = yes \
++		 && { test "$len" -lt "$max_cmd_len" \
++		      || test "$max_cmd_len" -le -1; }
++	      then
++		func_show_eval "$cmd" 'exit $?'
++		skipped_export=false
++	      elif test -n "$nm_file_list_spec"; then
++		func_basename "$output"
++		output_la=$func_basename_result
++		save_libobjs=$libobjs
++		save_output=$output
++		output=${output_objdir}/${output_la}.nm
++		func_to_tool_file "$output"
++		libobjs=$nm_file_list_spec$func_to_tool_file_result
++		func_append delfiles " $output"
++		func_verbose "creating $NM input file list: $output"
++		for obj in $save_libobjs; do
++		  func_to_tool_file "$obj"
++		  $ECHO "$func_to_tool_file_result"
++		done > "$output"
++		eval cmd=\"$cmd1\"
++		func_show_eval "$cmd" 'exit $?'
++		output=$save_output
++		libobjs=$save_libobjs
++		skipped_export=false
++	      else
++		# The command line is too long to execute in one step.
++		func_verbose "using reloadable object file for export list..."
++		skipped_export=:
++		# Break out early, otherwise skipped_export may be
++		# set to false by a later but shorter cmd.
++		break
++	      fi
+ 	    done
+ 	    IFS="$save_ifs"
+-	    if test -n "$export_symbols_regex"; then
+-	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+-	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+-	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+-	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
++	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
++	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
++	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ 	    fi
+ 	  fi
+ 	fi
  
--	AC_MSG_CHECKING(for useable bfd_boolean)
--	AC_TRY_RUN([#define IN_GCC
-+	AC_MSG_CHECKING([for usable bfd_boolean])
-+	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+		    #define IN_GCC
- 		    #include <bfd.h>
- 		    bfd_boolean foo() {return FALSE;}
--		    int main() {return 0;}],
-+		    ]],[[return 0;]])],
- 		AC_MSG_RESULT(yes) 
- 		AC_DEFINE(HAVE_BFD_BOOLEAN),
- 		AC_MSG_RESULT(no),
-@@ -945,10 +952,11 @@
- # bfd_link_info.output_bfd minimal configure change check
- #
+ 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+-	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
++	  tmp_export_symbols="$export_symbols"
++	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
++	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
++	fi
++
++	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
++	  # The given exports_symbols file has to be filtered, so filter it.
++	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
++	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
++	  # 's' commands which not all seds can handle. GNU sed should be fine
++	  # though. Also, the filter scales superlinearly with the number of
++	  # global variables. join(1) would be nice here, but unfortunately
++	  # isn't a blessed tool.
++	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
++	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
++	  export_symbols=$output_objdir/$libname.def
++	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ 	fi
  
--	AC_MSG_CHECKING(for bfd_link_info.output_bfd)
--	AC_TRY_RUN([#include <bfd.h>
-+	AC_MSG_CHECKING([for bfd_link_info.output_bfd])
-+	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+		    #include <bfd.h>
- 		    #include <bfdlink.h>
--		    int main() {struct bfd_link_info i;i.output_bfd=0;return 0;}],
-+		    ]],[[struct bfd_link_info i;i.output_bfd=0;return 0;]])],
- 		AC_MSG_RESULT(yes) 
- 		AC_DEFINE(HAVE_OUTPUT_BFD),
- 		AC_MSG_RESULT(no),
-@@ -1056,45 +1064,47 @@
- # mechanism, in the PAGE macro.  This offset is subtracted from
- # addresses, in calculating a page for an address in the heap.
++	tmp_deplibs=
++	for test_deplib in $deplibs; do
++	  case " $convenience " in
++	  *" $test_deplib "*) ;;
++	  *)
++	    func_append tmp_deplibs " $test_deplib"
++	    ;;
++	  esac
++	done
++	deplibs="$tmp_deplibs"
++
+ 	if test -n "$convenience"; then
++	  if test -n "$whole_archive_flag_spec" &&
++	    test "$compiler_needs_object" = yes &&
++	    test -z "$libobjs"; then
++	    # extract the archives, so we have objects to list.
++	    # TODO: could optimize this to just extract one archive.
++	    whole_archive_flag_spec=
++	  fi
+ 	  if test -n "$whole_archive_flag_spec"; then
+ 	    save_libobjs=$libobjs
+ 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
++	    test "X$libobjs" = "X " && libobjs=
+ 	  else
+ 	    gentop="$output_objdir/${outputname}x"
+-	    $show "${rm}r $gentop"
+-	    $run ${rm}r "$gentop"
+-	    $show "$mkdir $gentop"
+-	    $run $mkdir "$gentop"
+-	    status=$?
+-	    if test $status -ne 0 && test ! -d "$gentop"; then
+-	      exit $status
+-	    fi
+-	    generated="$generated $gentop"
+-
+-	    for xlib in $convenience; do
+-	      # Extract the objects.
+-	      case $xlib in
+-	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+-	      *) xabs=`pwd`"/$xlib" ;;
+-	      esac
+-	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+-	      xdir="$gentop/$xlib"
+-
+-	      $show "${rm}r $xdir"
+-	      $run ${rm}r "$xdir"
+-	      $show "$mkdir $xdir"
+-	      $run $mkdir "$xdir"
+-	      status=$?
+-	      if test $status -ne 0 && test ! -d "$xdir"; then
+-		exit $status
+-	      fi
+-	      $show "(cd $xdir && $AR x $xabs)"
+-	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
++	    func_append generated " $gentop"
  
--AC_CHECK_SIZEOF(long,0)
-+AC_CHECK_SIZEOF(long)
- AC_MSG_CHECKING(sizeof struct contblock)
+-	      libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+-	    done
++	    func_extract_archives $gentop $convenience
++	    func_append libobjs " $func_extract_archives_result"
++	    test "X$libobjs" = "X " && libobjs=
+ 	  fi
+ 	fi
  
- # work around MSYS pwd result incompatibility
- if test "$use" = "mingw" ; then
--AC_TRY_RUN([#include <stdio.h>
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+	#include <stdio.h>
- 	#define EXTER
- 	#include "$MP_INCLUDE"
- 	#include "h/enum.h"
- 	#include "h/object.h"
--	int main(int argc,char **argv,char **envp) {
-+	]],[[
- 	FILE *f=fopen("conftest1","w");
- 	fprintf(f,"%u",sizeof(struct contblock));
- 	fclose(f);
- 	return 0;
--	}],sizeof_contblock=`cat conftest1`,
--	   echo Cannot find sizeof struct contblock;exit 1,
--	   echo Cannot find sizeof struct contblock;exit 1)
-+	]])],sizeof_contblock=`cat conftest1`,
-+	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1),
-+	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1))
- else
--AC_TRY_RUN([#include <stdio.h>
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+	#include <stdio.h>
- 	#define EXTER
- 	#include "$MP_INCLUDE"
- 	#include "`pwd`/h/enum.h"
- 	#include "`pwd`/h/object.h"
--	int main(int argc,char **argv,char **envp) {
-+	]],[[
- 	FILE *f=fopen("conftest1","w");
- 	fprintf(f,"%u",sizeof(struct contblock));
- 	fclose(f);
- 	return 0;
--	}],sizeof_contblock=`cat conftest1`,
--	   echo Cannot find sizeof struct contblock;exit 1,
--	   echo Cannot find sizeof struct contblock;exit 1)
-+	]])],sizeof_contblock=`cat conftest1`,
-+	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1),
-+	AC_MSG_ERROR([Cannot find sizeof struct contblock], 1))
- fi
- AC_MSG_RESULT($sizeof_contblock)
- AC_DEFINE_UNQUOTED(SIZEOF_CONTBLOCK,$sizeof_contblock)
+ 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ 	  eval flag=\"$thread_safe_flag_spec\"
+-	  linker_flags="$linker_flags $flag"
++	  func_append linker_flags " $flag"
+ 	fi
  
+ 	# Make a backup of the uninstalled library when relinking
+-	if test "$mode" = relink; then
+-	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
++	if test "$opt_mode" = relink; then
++	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ 	fi
  
--AC_MSG_CHECKING(for word order)
--AC_TRY_RUN([int main () {
-+AC_MSG_CHECKING([for word order])
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([],[[
-   /* Are we little or big endian?  Adapted from Harbison&Steele.  */
-   union
-   {
-@@ -1103,7 +1113,7 @@
-   } u;
-   u.d = 1.0;
-   return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
--}],AC_MSG_RESULT(little) 
-+]])],AC_MSG_RESULT(little) 
-    AC_DEFINE(LITTLE_END),
-    AC_MSG_RESULT(big),
-    AC_MSG_RESULT([WARNING: ASSUMING LITTLE ENDIAN FOR CROSS COMPILING !!!]
-@@ -1116,15 +1126,16 @@
+ 	# Do each of the archive commands.
+-	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+-	  eval cmds=\"$archive_expsym_cmds\"
++	if test "$module" = yes && test -n "$module_cmds" ; then
++	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
++	    eval test_cmds=\"$module_expsym_cmds\"
++	    cmds=$module_expsym_cmds
++	  else
++	    eval test_cmds=\"$module_cmds\"
++	    cmds=$module_cmds
++	  fi
+ 	else
+-	  eval cmds=\"$archive_cmds\"
++	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
++	    eval test_cmds=\"$archive_expsym_cmds\"
++	    cmds=$archive_expsym_cmds
++	  else
++	    eval test_cmds=\"$archive_cmds\"
++	    cmds=$archive_cmds
++	  fi
+ 	fi
+-        if len=`expr "X$cmds" : ".*"` &&
+-           test $len -le $max_cmd_len; then
+-          :
+-        else
+-	  # The command line is too long to link in one step, link piecewise.
+-          $echo "creating reloadable object files..."
++
++	if test "X$skipped_export" != "X:" &&
++	   func_len " $test_cmds" &&
++	   len=$func_len_result &&
++	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++	  :
++	else
++	  # The command line is too long to link in one step, link piecewise
++	  # or, if using GNU ld and skipped_export is not :, use a linker
++	  # script.
  
- AC_MSG_CHECKING([for sbrk])
- HAVE_SBRK=""
--AC_TRY_RUN([#include <unistd.h>
--	    #include <stdio.h>
--	    int main() {
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+		#include <unistd.h>
-+		#include <stdio.h>
-+		]],[[
- 		FILE *f;
- 		if (!(f=fopen("conftest1","w")))
- 			return -1;
- 		fprintf(f,"%u",sbrk(0));
- 		return 0;
--		}],
-+		]])],
- 		HAVE_SBRK=1
- 		AC_MSG_RESULT(yes),
- 		AC_MSG_RESULT([no: WARNING you must be able to emulate sbrk: as on mingw or macosx]),
-@@ -1136,14 +1147,15 @@
- #		   AC_MSG_RESULT(sys/personality.h not found))
+ 	  # Save the value of $output and $libobjs because we want to
+ 	  # use them later.  If we have whole_archive_flag_spec, we
+@@ -3234,109 +8304,255 @@
+ 	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ 	    save_libobjs=$libobjs
+ 	  fi
+-          save_output=$output
++	  save_output=$output
++	  func_basename "$output"
++	  output_la=$func_basename_result
  
- 	AC_MSG_CHECKING([for ADDR_NO_RANDOMIZE constant])
--	AC_TRY_RUN([#include <sys/personality.h>
--         	    #include <stdio.h>
--		    int main(int argc,char *argv[],char *envp[]) {
-+	AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+			#include <sys/personality.h>
-+			#include <stdio.h>
-+			]],[[
- 			FILE *f;
- 			if (!(f=fopen("conftest1","w"))) return -1;
- 			fprintf(f,"%x",ADDR_NO_RANDOMIZE);
- 			return 0;
--			}],
-+			]])],
- 			ADDR_NO_RANDOMIZE=`cat conftest1`,ADDR_NO_RANDOMIZE=0,ADDR_NO_RANDOMIZE=0)
- 	if test "$ADDR_NO_RANDOMIZE" = "0" ; then
- 		AC_MSG_RESULT([no, assuming 0x40000])
-@@ -1153,10 +1165,11 @@
- 	fi
+ 	  # Clear the reloadable object creation command queue and
+ 	  # initialize k to one.
+-          test_cmds=
+-          concat_cmds=
+-          objlist=
+-          delfiles=
+-          last_robj=
+-          k=1
+-          output=$output_objdir/$save_output-${k}.$objext
+-	  # Loop over the list of objects to be linked.
+-          for obj in $save_libobjs
+-          do
+-            eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+-            if test "X$objlist" = X ||
+-	       { len=`expr "X$test_cmds" : ".*"` &&
+-                 test $len -le $max_cmd_len; }; then
+-              objlist="$objlist $obj"
+-            else
+-	      # The command $test_cmds is almost too long, add a
+-	      # command to the queue.
+-              if test $k -eq 1 ; then
+-	        # The first file doesn't have a previous command to add.
+-                eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+-              else
+-	        # All subsequent reloadable object files will link in
+-	        # the last one created.
+-                eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+-              fi
+-              last_robj=$output_objdir/$save_output-${k}.$objext
+-              k=`expr $k + 1`
+-              output=$output_objdir/$save_output-${k}.$objext
+-              objlist=$obj
+-              len=1
+-            fi
+-          done
+-	  # Handle the remaining objects by creating one last
+-	  # reloadable object file.  All subsequent reloadable object
+-	  # files will link in the last one created.
+-	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+-          eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
++	  test_cmds=
++	  concat_cmds=
++	  objlist=
++	  last_robj=
++	  k=1
  
- 	AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
--	AC_TRY_RUN([void gprof_cleanup() {};
-+	AC_RUN_IFELSE([AC_LANG_SOURCE([[
-+		    void gprof_cleanup() {}
- 		    int main(int argc,char *argv[],char *envp[]) {
- 	            #include "h/unrandomize.h"
--		    return 0;}],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
-+		    return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
+-	  # Set up a command to remove the reloadale object files
+-	  # after they are used.
+-          i=0
+-          while test $i -lt $k
+-          do
+-            i=`expr $i + 1`
+-            delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+-          done
++	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
++	    output=${output_objdir}/${output_la}.lnkscript
++	    func_verbose "creating GNU ld script: $output"
++	    echo 'INPUT (' > $output
++	    for obj in $save_libobjs
++	    do
++	      func_to_tool_file "$obj"
++	      $ECHO "$func_to_tool_file_result" >> $output
++	    done
++	    echo ')' >> $output
++	    func_append delfiles " $output"
++	    func_to_tool_file "$output"
++	    output=$func_to_tool_file_result
++	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
++	    output=${output_objdir}/${output_la}.lnk
++	    func_verbose "creating linker input file list: $output"
++	    : > $output
++	    set x $save_libobjs
++	    shift
++	    firstobj=
++	    if test "$compiler_needs_object" = yes; then
++	      firstobj="$1 "
++	      shift
++	    fi
++	    for obj
++	    do
++	      func_to_tool_file "$obj"
++	      $ECHO "$func_to_tool_file_result" >> $output
++	    done
++	    func_append delfiles " $output"
++	    func_to_tool_file "$output"
++	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
++	  else
++	    if test -n "$save_libobjs"; then
++	      func_verbose "creating reloadable object files..."
++	      output=$output_objdir/$output_la-${k}.$objext
++	      eval test_cmds=\"$reload_cmds\"
++	      func_len " $test_cmds"
++	      len0=$func_len_result
++	      len=$len0
  
- 	if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
- 		AC_MSG_RESULT(yes)
-@@ -1166,8 +1179,9 @@
- 	fi
+-          $echo "creating a temporary reloadable object file: $output"
++	      # Loop over the list of objects to be linked.
++	      for obj in $save_libobjs
++	      do
++		func_len " $obj"
++		func_arith $len + $func_len_result
++		len=$func_arith_result
++		if test "X$objlist" = X ||
++		   test "$len" -lt "$max_cmd_len"; then
++		  func_append objlist " $obj"
++		else
++		  # The command $test_cmds is almost too long, add a
++		  # command to the queue.
++		  if test "$k" -eq 1 ; then
++		    # The first file doesn't have a previous command to add.
++		    reload_objs=$objlist
++		    eval concat_cmds=\"$reload_cmds\"
++		  else
++		    # All subsequent reloadable object files will link in
++		    # the last one created.
++		    reload_objs="$objlist $last_robj"
++		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
++		  fi
++		  last_robj=$output_objdir/$output_la-${k}.$objext
++		  func_arith $k + 1
++		  k=$func_arith_result
++		  output=$output_objdir/$output_la-${k}.$objext
++		  objlist=" $obj"
++		  func_len " $last_robj"
++		  func_arith $len0 + $func_len_result
++		  len=$func_arith_result
++		fi
++	      done
++	      # Handle the remaining objects by creating one last
++	      # reloadable object file.  All subsequent reloadable object
++	      # files will link in the last one created.
++	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
++	      reload_objs="$objlist $last_robj"
++	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
++	      if test -n "$last_robj"; then
++	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
++	      fi
++	      func_append delfiles " $output"
  
- 	AC_MSG_CHECKING([that sbrk is (now) non-random])
--	AC_TRY_RUN([#include <stdio.h>
--	            void gprof_cleanup() {};
-+	AC_RUN_IFELSE([AC_LANG_SOURCE([[
-+		    #include <stdio.h>
-+	            void gprof_cleanup() {}
- 		    int main(int argc,char * argv[],char * envp[]) {
- 			FILE *f;
- 			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -1175,13 +1189,13 @@
- 			#endif
- 			if (!(f=fopen("conftest1","w"))) return -1;
- 			fprintf(f,"%u",sbrk(0));
--			return 0;}],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
-+			return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
- 	if test "$SBRK" = "0" ; then
--		AC_MSG_RESULT(cannot trap sbrk)
--		exit 1
-+		AC_MSG_ERROR([cannot trap sbrk], 1)
- 	fi
--	AC_TRY_RUN([#include <stdio.h>
--                    void gprof_cleanup() {};
-+	AC_RUN_IFELSE([AC_LANG_SOURCE([[
-+		    #include <stdio.h>
-+                    void gprof_cleanup() {}
- 		    int main(int argc,char * argv[],char * envp[]) {
- 			FILE *f;
- 			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -1189,10 +1203,9 @@
- 			#endif
- 			if (!(f=fopen("conftest1","w"))) return -1;
- 			fprintf(f,"%u",sbrk(0));
--			return 0;}],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
-+			return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
- 	if test "$SBRK1" = "0" ; then
--		AC_MSG_RESULT(cannot trap sbrk)
--		exit 1
-+		AC_MSG_ERROR([cannot trap sbrk], 1)
- 	fi
- 	if test "$SBRK" = "$SBRK1" ; then
- 		AC_MSG_RESULT(yes)
-@@ -1207,15 +1220,17 @@
- fi
+-	  # Loop through the commands generated above and execute them.
+-          IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-          for cmd in $concat_cmds; do
+-            IFS="$save_ifs"
+-            $show "$cmd"
+-            $run eval "$cmd" || exit $?
+-          done
+-          IFS="$save_ifs"
++	    else
++	      output=
++	    fi
+ 
+-          libobjs=$output
++	    if ${skipped_export-false}; then
++	      func_verbose "generating symbol list for \`$libname.la'"
++	      export_symbols="$output_objdir/$libname.exp"
++	      $opt_dry_run || $RM $export_symbols
++	      libobjs=$output
++	      # Append the command to create the export file.
++	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
++	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
++	      if test -n "$last_robj"; then
++		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
++	      fi
++	    fi
++
++	    test -n "$save_libobjs" &&
++	      func_verbose "creating a temporary reloadable object file: $output"
++
++	    # Loop through the commands generated above and execute them.
++	    save_ifs="$IFS"; IFS='~'
++	    for cmd in $concat_cmds; do
++	      IFS="$save_ifs"
++	      $opt_silent || {
++		  func_quote_for_expand "$cmd"
++		  eval "func_echo $func_quote_for_expand_result"
++	      }
++	      $opt_dry_run || eval "$cmd" || {
++		lt_exit=$?
++
++		# Restore the uninstalled library and exit
++		if test "$opt_mode" = relink; then
++		  ( cd "$output_objdir" && \
++		    $RM "${realname}T" && \
++		    $MV "${realname}U" "$realname" )
++		fi
++
++		exit $lt_exit
++	      }
++	    done
++	    IFS="$save_ifs"
++
++	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
++	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
++	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
++	    fi
++	  fi
++
++          if ${skipped_export-false}; then
++	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
++	      tmp_export_symbols="$export_symbols"
++	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
++	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
++	    fi
++
++	    if test -n "$orig_export_symbols"; then
++	      # The given exports_symbols file has to be filtered, so filter it.
++	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
++	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
++	      # 's' commands which not all seds can handle. GNU sed should be fine
++	      # though. Also, the filter scales superlinearly with the number of
++	      # global variables. join(1) would be nice here, but unfortunately
++	      # isn't a blessed tool.
++	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
++	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
++	      export_symbols=$output_objdir/$libname.def
++	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
++	    fi
++	  fi
++
++	  libobjs=$output
+ 	  # Restore the value of output.
+-          output=$save_output
++	  output=$save_output
  
- # pagewidth
--AC_MSG_CHECKING(for pagewidth)
--AC_TRY_RUN([#include <stdio.h>
-+AC_MSG_CHECKING([for pagewidth])
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+	    #include <stdio.h>
-             #include <unistd.h>
--int main() {size_t i=getpagesize(),j; 
-+	    ]],[[
-+	    size_t i=getpagesize(),j; 
- 	    FILE *fp=fopen("conftest1","w");
- 	    for (j=0;i>>=1;j++);
- 	    if (j<12) {printf("pagewidth %u is too small\n",j);return -1;}
- 	    fprintf(fp,"%u",j);
--	    return 0;}],PAGEWIDTH=`cat conftest1`,PAGEWIDTH=0,PAGEWIDTH=0)
-+	    return 0;]])],PAGEWIDTH=`cat conftest1`,PAGEWIDTH=0,PAGEWIDTH=0)
- AC_MSG_RESULT($PAGEWIDTH)
- AC_DEFINE_UNQUOTED(PAGEWIDTH,$PAGEWIDTH)
- AC_SUBST(PAGEWIDTH)
-@@ -1223,11 +1238,12 @@
+ 	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
++	    test "X$libobjs" = "X " && libobjs=
+ 	  fi
+ 	  # Expand the library linking commands again to reset the
+ 	  # value of $libobjs for piecewise linking.
  
- old_LDFLAGS="$LDFLAGS"
- LDFLAGS="$TLDFLAGS"
--AC_MSG_CHECKING("finding DBEGIN")
--AC_TRY_RUN([#include <stdio.h>
--            #include <stdlib.h>
-+AC_MSG_CHECKING([finding DBEGIN])
-+AC_RUN_IFELSE([AC_LANG_SOURCE([[
-+#include <stdio.h>
-+#include <stdlib.h>
+ 	  # Do each of the archive commands.
+-          if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+-            eval cmds=\"$archive_expsym_cmds\"
+-          else
+-            eval cmds=\"$archive_cmds\"
+-          fi
++	  if test "$module" = yes && test -n "$module_cmds" ; then
++	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
++	      cmds=$module_expsym_cmds
++	    else
++	      cmds=$module_cmds
++	    fi
++	  else
++	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
++	      cmds=$archive_expsym_cmds
++	    else
++	      cmds=$archive_cmds
++	    fi
++	  fi
++	fi
  
--void gprof_cleanup() {};
-+void gprof_cleanup() {}
- int
- main(int argc,char * argv[],char *envp[])
- {
-@@ -1252,36 +1268,35 @@
- #endif
-   fclose(fp);
-   return 0;
--}],dbegin=`cat conftest1`,dbegin=0,dbegin=0)
-+}]])],dbegin=`cat conftest1`,dbegin=0,dbegin=0)
- AC_DEFINE_UNQUOTED(DBEGIN,$dbegin /* where data begins */)
- AC_MSG_RESULT(got $dbegin)
- LDFLAGS="$old_LDFLAGS"
+-	  # Append the command to remove the reloadable object files
+-	  # to the just-reset $cmds.
+-          eval cmds=\"\$cmds~$rm $delfiles\"
+-        fi
+-        IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-        for cmd in $cmds; do
+-          IFS="$save_ifs"
+-          $show "$cmd"
+-          $run eval "$cmd" || exit $?
+-        done
+-        IFS="$save_ifs"
++	if test -n "$delfiles"; then
++	  # Append the command to remove temporary files to $cmds.
++	  eval cmds=\"\$cmds~\$RM $delfiles\"
++	fi
++
++	# Add any objects from preloaded convenience libraries
++	if test -n "$dlprefiles"; then
++	  gentop="$output_objdir/${outputname}x"
++	  func_append generated " $gentop"
++
++	  func_extract_archives $gentop $dlprefiles
++	  func_append libobjs " $func_extract_archives_result"
++	  test "X$libobjs" = "X " && libobjs=
++	fi
++
++	save_ifs="$IFS"; IFS='~'
++	for cmd in $cmds; do
++	  IFS="$save_ifs"
++	  eval cmd=\"$cmd\"
++	  $opt_silent || {
++	    func_quote_for_expand "$cmd"
++	    eval "func_echo $func_quote_for_expand_result"
++	  }
++	  $opt_dry_run || eval "$cmd" || {
++	    lt_exit=$?
++
++	    # Restore the uninstalled library and exit
++	    if test "$opt_mode" = relink; then
++	      ( cd "$output_objdir" && \
++	        $RM "${realname}T" && \
++		$MV "${realname}U" "$realname" )
++	    fi
++
++	    exit $lt_exit
++	  }
++	done
++	IFS="$save_ifs"
  
+ 	# Restore the uninstalled library and exit
+-	if test "$mode" = relink; then
+-	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+-	  exit 0
++	if test "$opt_mode" = relink; then
++	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
++
++	  if test -n "$convenience"; then
++	    if test -z "$whole_archive_flag_spec"; then
++	      func_show_eval '${RM}r "$gentop"'
++	    fi
++	  fi
++
++	  exit $EXIT_SUCCESS
+ 	fi
  
--AC_MSG_CHECKING("finding CSTACK_ADDRESS")
--AC_TRY_RUN([#include <stdio.h>
--main()
--{
-+AC_MSG_CHECKING([finding CSTACK_ADDRESS])
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+#include <stdio.h>
-+]],[[
-   char *b ;
-   FILE *fp = fopen("conftest1","w");
-   fprintf(fp,"%ld",((long) &b));
-   fclose(fp);
-   return 0;
--}],cstack_address=`cat conftest1`,cstack_address=0,cstack_address=0)
-+]])],cstack_address=`cat conftest1`,cstack_address=0,cstack_address=0)
- AC_DEFINE_UNQUOTED(CSTACK_ADDRESS,$cstack_address \
- )
- AC_MSG_RESULT(got $cstack_address)
+ 	# Create links to the real library.
+ 	for linkname in $linknames; do
+ 	  if test "$realname" != "$linkname"; then
+-	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+-	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
++	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ 	  fi
+ 	done
  
+@@ -3349,38 +8565,35 @@
+       ;;
  
+     obj)
+-      if test -n "$deplibs"; then
+-	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+-      fi
+-
+       if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+-	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
++	func_warning "\`-dlopen' is ignored for objects"
+       fi
  
--AC_MSG_CHECKING("sizeof long long int")
--AC_TRY_RUN([#include <stdio.h>
--main()
--{
-+AC_MSG_CHECKING([sizeof long long int])
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+#include <stdio.h>
-+]],[[
-   if (sizeof(long long int) == 2*sizeof(long)) return 0;
-   return 1;
--}
--],[AC_DEFINE(HAVE_LONG_LONG)
-+]])],[AC_DEFINE(HAVE_LONG_LONG)
- AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no),
- AC_MSG_RESULT(no)
-@@ -1450,7 +1465,6 @@
- #	   To get around this problem, check for both libraries together
- #	   if -lsocket doesn't work by itself.
- #--------------------------------------------------------------------
--AC_MSG_CHECKING([for sockets])
- tcl_checkBoth=0
- AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
- if test "$tcl_checkSocket" = 1; then
-@@ -1487,8 +1501,8 @@
- AC_SUBST(RL_OBJS)
- AC_SUBST(RL_LIB)
+-      if test -n "$rpath"; then
+-	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+-      fi
++      case " $deplibs" in
++      *\ -l* | *\ -L*)
++	func_warning "\`-l' and \`-L' are ignored for objects" ;;
++      esac
  
--AC_MSG_CHECKING(For network code for nsocket.c)
--AC_TRY_LINK([
-+AC_MSG_CHECKING([for network code for nsocket.c])
-+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- #include <sys/time.h>
- #include <sys/types.h>
- #include <unistd.h>
-@@ -1505,24 +1519,25 @@
- #include <netinet/in.h>		/* struct in_addr, struct sockaddr_in */
- #include <arpa/inet.h>		/* inet_ntoa() */
- #include <netdb.h>		/* gethostbyname() */
--],[ connect(0,(struct sockaddr *)0,0);
-+]],[[connect(0,(struct sockaddr *)0,0);
-     gethostbyname("jil");
-     socket(AF_INET, SOCK_STREAM, 0);
--	],
-+	]])],
- [AC_DEFINE(HAVE_NSOCKET)
-  AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))
+-      if test -n "$xrpath"; then
+-	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+-      fi
++      test -n "$rpath" && \
++	func_warning "\`-rpath' is ignored for objects"
  
+-      if test -n "$vinfo"; then
+-	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+-      fi
++      test -n "$xrpath" && \
++	func_warning "\`-R' is ignored for objects"
  
--AC_MSG_CHECKING(check for listen using fcntl)
--AC_TRY_COMPILE([#include <stdio.h>
-+AC_MSG_CHECKING([for listen using fcntl])
-+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+#include <stdio.h>
- #include <fcntl.h>
--],
--[FILE *fp=fopen("configure.in","r");
-+]],
-+[[FILE *fp=fopen("configure.in","r");
-   int orig;
-   orig = fcntl(fileno(fp), F_GETFL);
-   if (! (orig & O_NONBLOCK )) return 0;
--],
-+]])],
- [AC_DEFINE(LISTEN_USE_FCNTL)
-  AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))
-@@ -1543,7 +1558,7 @@
- AC_SUBST(USE_CLEANUP)
- gcl_ok=no
+-      if test -n "$release"; then
+-	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+-      fi
++      test -n "$vinfo" && \
++	func_warning "\`-version-info' is ignored for objects"
++
++      test -n "$release" && \
++	func_warning "\`-release' is ignored for objects"
  
--AC_HEADER_EGREP(LITTLE_ENDIAN, ctype.h, gcl_ok=yes, gcl_ok=noo)
-+AC_EGREP_HEADER(LITTLE_ENDIAN, ctype.h, gcl_ok=yes, gcl_ok=no)
- if test $gcl_ok = yes ; then
- AC_DEFINE(ENDIAN_ALREADY_DEFINED)
- fi
-@@ -1575,32 +1590,32 @@
- esac
+       case $output in
+       *.lo)
+-	if test -n "$objs$old_deplibs"; then
+-	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+-	  exit 1
+-	fi
+-	libobj="$output"
+-	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
++	test -n "$objs$old_deplibs" && \
++	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
++
++	libobj=$output
++	func_lo2o "$libobj"
++	obj=$func_lo2o_result
+ 	;;
+       *)
+ 	libobj=
+@@ -3389,7 +8602,7 @@
+       esac
  
+       # Delete the old objects.
+-      $run $rm $obj $libobj
++      $opt_dry_run || $RM $obj $libobj
  
--AC_MSG_CHECKING(check for SV_ONSTACK)
--AC_TRY_COMPILE([#include <signal.h>
--int joe=SV_ONSTACK;
--],
--[],
-+AC_MSG_CHECKING([for SV_ONSTACK])
-+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+#include <signal.h>
-+]],
-+[[return SV_ONSTACK;]])],
- [AC_DEFINE(HAVE_SV_ONSTACK)
-  AC_SUBST(HAVE_SV_ONSTACK)
-  AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))
+       # Objects from convenience libraries.  This assumes
+       # single-version convenience libraries.  Whenever we create
+@@ -3398,150 +8611,141 @@
+       reload_conv_objs=
+       gentop=
+       # reload_cmds runs $LD directly, so let us get rid of
+-      # -Wl from whole_archive_flag_spec
++      # -Wl from whole_archive_flag_spec and hope we can get by with
++      # turning comma into space..
+       wl=
  
--AC_MSG_CHECKING(check for SIGSYS)
--AC_TRY_COMPILE([#include <signal.h>
--int joe=SIGSYS;
--],
--[],
-+AC_MSG_CHECKING([for SIGSYS])
-+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+#include <signal.h>
-+]],
-+[[return SIGSYS;]])],
- [AC_DEFINE(HAVE_SIGSYS)
-  AC_SUBST(HAVE_SIGSYS)
-  AC_MSG_RESULT(yes)],
- AC_MSG_RESULT(no))
+       if test -n "$convenience"; then
+ 	if test -n "$whole_archive_flag_spec"; then
+-	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
++	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
++	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ 	else
+ 	  gentop="$output_objdir/${obj}x"
+-	  $show "${rm}r $gentop"
+-	  $run ${rm}r "$gentop"
+-	  $show "$mkdir $gentop"
+-	  $run $mkdir "$gentop"
+-	  status=$?
+-	  if test $status -ne 0 && test ! -d "$gentop"; then
+-	    exit $status
+-	  fi
+-	  generated="$generated $gentop"
+-
+-	  for xlib in $convenience; do
+-	    # Extract the objects.
+-	    case $xlib in
+-	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+-	    *) xabs=`pwd`"/$xlib" ;;
+-	    esac
+-	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+-	    xdir="$gentop/$xlib"
+-
+-	    $show "${rm}r $xdir"
+-	    $run ${rm}r "$xdir"
+-	    $show "$mkdir $xdir"
+-	    $run $mkdir "$xdir"
+-	    status=$?
+-	    if test $status -ne 0 && test ! -d "$xdir"; then
+-	      exit $status
+-	    fi
+-	    $show "(cd $xdir && $AR x $xabs)"
+-	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
++	  func_append generated " $gentop"
  
+-	    reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+-	  done
++	  func_extract_archives $gentop $convenience
++	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+ 	fi
+       fi
  
--AC_MSG_CHECKING(check for SIGEMT)
--AC_TRY_COMPILE([#include <signal.h>
--int joe=SIGEMT;
--],
--[],
-+AC_MSG_CHECKING([for SIGEMT])
-+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+#include <signal.h>
-+]],
-+[[return SIGEMT;]])],
- [AC_DEFINE(HAVE_SIGEMT)
-  AC_SUBST(HAVE_SIGEMT)
-  AC_MSG_RESULT(yes)],
-@@ -1612,12 +1627,13 @@
- #if test $use = "386-linux" ; then
- 	AC_CHECK_HEADERS(asm/sigcontext.h)
- 	AC_CHECK_HEADERS(asm/signal.h)
--	AC_MSG_CHECKING([for sigcontext...])
--        AC_TRY_COMPILE([#include <signal.h>
--       ],
--       [
-+	AC_MSG_CHECKING([for sigcontext])
-+	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+	#include <signal.h>
-+       ]],
-+       [[
-         struct sigcontext foo;
--       ],
-+       ]])],
-        [
-         sigcontext_works=1;
-         AC_DEFINE(SIGNAL_H_HAS_SIGCONTEXT)
-@@ -1628,18 +1644,19 @@
-          AC_MSG_RESULT(sigcontext NOT in signal.h)]
-        )
-        if test "$sigcontext_works" = 0 ; then
--       AC_MSG_CHECKING([for sigcontext...])
--       AC_TRY_COMPILE([#include <signal.h>
-+       AC_MSG_CHECKING([for sigcontext])
-+       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-+             #include <signal.h>
-              #ifdef HAVE_ASM_SIGCONTEXT_H     
-              #include <asm/sigcontext.h>
-              #endif
-              #ifdef HAVE_ASM_SIGNAL_H          
-              #include <asm/signal.h>
-              #endif
--          ],
--        [ 
-+          ]],
-+        [[
-         struct sigcontext foo;
--        ],
-+        ]])],
-         [
-         AC_DEFINE(HAVE_SIGCONTEXT)
- 	AC_MSG_RESULT(sigcontext in asm files)
-@@ -1749,6 +1766,8 @@
++      # If we're not building shared, we need to use non_pic_objs
++      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
++
+       # Create the old-style object.
+-      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
++      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
  
- if test "$enable_tcltk" = "yes" ; then
+       output="$obj"
+-      eval cmds=\"$reload_cmds\"
+-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-      for cmd in $cmds; do
+-	IFS="$save_ifs"
+-	$show "$cmd"
+-	$run eval "$cmd" || exit $?
+-      done
+-      IFS="$save_ifs"
++      func_execute_cmds "$reload_cmds" 'exit $?'
  
-+AC_CHECK_LIB(ieee,main,have_ieee=1,have_ieee=0)
-+AC_CHECK_PROG(TCLSH,tclsh,tclsh,${TCLSH})
- AC_MSG_CHECKING([for tcl/tk])
+       # Exit if we aren't doing a library object file.
+       if test -z "$libobj"; then
+ 	if test -n "$gentop"; then
+-	  $show "${rm}r $gentop"
+-	  $run ${rm}r $gentop
++	  func_show_eval '${RM}r "$gentop"'
+ 	fi
  
+-	exit 0
++	exit $EXIT_SUCCESS
+       fi
  
-@@ -1769,9 +1788,6 @@
- EOF
- #cp conftest.tcl foo.tcl
+       if test "$build_libtool_libs" != yes; then
+ 	if test -n "$gentop"; then
+-	  $show "${rm}r $gentop"
+-	  $run ${rm}r $gentop
++	  func_show_eval '${RM}r "$gentop"'
+ 	fi
  
--AC_CHECK_PROG(TCLSH,tclsh,tclsh,${TCLSH})
--#AC_CHECK_PROG(TCLSH,tclsh8.0,tclsh8.0,${TCLSH})
--
- if test "${TCLSH}" = "" ; then true ; else
- TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
- fi
-@@ -1845,7 +1861,6 @@
+ 	# Create an invalid libtool object if no PIC, so that we don't
+ 	# accidentally link it into a program.
+ 	# $show "echo timestamp > $libobj"
+-	# $run eval "echo timestamp > $libobj" || exit $?
+-	exit 0
++	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
++	exit $EXIT_SUCCESS
+       fi
  
- fi
+       if test -n "$pic_flag" || test "$pic_mode" != default; then
+ 	# Only do commands if we really have different PIC objects.
+ 	reload_objs="$libobjs $reload_conv_objs"
+ 	output="$libobj"
+-	eval cmds=\"$reload_cmds\"
+-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	for cmd in $cmds; do
+-	  IFS="$save_ifs"
+-	  $show "$cmd"
+-	  $run eval "$cmd" || exit $?
+-	done
+-	IFS="$save_ifs"
+-#     else
+-#	# Just create a symlink.
+-#	$show $rm $libobj
+-#	$run $rm $libobj
+-#	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
+-#	if test "X$xdir" = "X$libobj"; then
+-#	  xdir="."
+-#	else
+-#	  xdir="$xdir"
+-#	fi
+-#	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+-#	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
+-#	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
+-#	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
++	func_execute_cmds "$reload_cmds" 'exit $?'
+       fi
  
--AC_CHECK_LIB(lieee,main,have_ieee=1,have_ieee=0)
- if test "$have_ieee" = "0" ; then
-  TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
- fi
-@@ -1889,15 +1904,18 @@
+       if test -n "$gentop"; then
+-	$show "${rm}r $gentop"
+-	$run ${rm}r $gentop
++	func_show_eval '${RM}r "$gentop"'
+       fi
  
- # the time handling for unixtime, add timezone
+-      exit 0
++      exit $EXIT_SUCCESS
+       ;;
  
--AC_MSG_CHECKING([alloca])
--AC_TRY_RUN([int main() { exit(alloca(500) != NULL ? 0 : 1);}],
-+# alloca
-+
-+AC_MSG_CHECKING([for alloca])
-+AC_RUN_IFELSE([AC_LANG_PROGRAM([],[[exit(alloca(500) != NULL ? 0 : 1);]])],
-   ,gcl_ok=yes, gcl_ok=no,gcl_ok=no)
- if test $gcl_ok = yes ; then
-     AC_MSG_RESULT(yes)
-     AC_DEFINE(HAVE_ALLOCA)
- else
--  AC_TRY_RUN([#include <alloca.h>
--  int main() { exit(alloca(500) != NULL ? 0 : 1);}],
-+  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-+  #include <alloca.h>
-+  ]],[[exit(alloca(500) != NULL ? 0 : 1);]])],
-   ,gcl_ok=yes, gcl_ok=no,gcl_ok=no)
-  if test $gcl_ok = yes ; then
-     AC_MSG_RESULT(yes)
-@@ -1916,8 +1934,6 @@
+     prog)
+       case $host in
+-	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
++	*cygwin*) func_stripname '' '.exe' "$output"
++	          output=$func_stripname_result.exe;;
+       esac
+-      if test -n "$vinfo"; then
+-	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+-      fi
++      test -n "$vinfo" && \
++	func_warning "\`-version-info' is ignored for programs"
  
+-      if test -n "$release"; then
+-	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+-      fi
++      test -n "$release" && \
++	func_warning "\`-release' is ignored for programs"
  
+-      if test "$preload" = yes; then
+-	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+-	   test "$dlopen_self_static" = unknown; then
+-	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+-	fi
+-      fi
++      test "$preload" = yes \
++        && test "$dlopen_support" = unknown \
++	&& test "$dlopen_self" = unknown \
++	&& test "$dlopen_self_static" = unknown && \
++	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
  
--# alloca
--
- # dlopen etc
- # idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
- # then dlload("foo.o") a lisp file can refer to things in libX.so
-@@ -1941,7 +1957,7 @@
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+ 	# On Rhapsody replace the C library is the System framework
+-	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+-	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
++	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
++	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ 	;;
+       esac
  
- # redhat/cygnus released for some reason a buggy version of gcc,
- # which no one else released.   Catch that here.
--AC_MSG_CHECKING([Checking for buggy gcc version from redhat])
-+AC_MSG_CHECKING([for buggy gcc version from redhat])
- if  2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null 
-    then 
-         BROKEN_O4_OPT=1
-@@ -1976,7 +1992,8 @@
- if test -f h/$use.defs  ; then
+-      compile_command="$compile_command $compile_deplibs"
+-      finalize_command="$finalize_command $finalize_deplibs"
++      case $host in
++      *-*-darwin*)
++	# Don't allow lazy linking, it breaks C++ global constructors
++	# But is supposedly fixed on 10.4 or later (yay!).
++	if test "$tagname" = CXX ; then
++	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
++	    10.[0123])
++	      func_append compile_command " ${wl}-bind_at_load"
++	      func_append finalize_command " ${wl}-bind_at_load"
++	    ;;
++	  esac
++	fi
++	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
++	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
++	;;
++      esac
++
++
++      # move library search paths that coincide with paths to not yet
++      # installed libraries to the beginning of the library search list
++      new_libs=
++      for path in $notinst_path; do
++	case " $new_libs " in
++	*" -L$path/$objdir "*) ;;
++	*)
++	  case " $compile_deplibs " in
++	  *" -L$path/$objdir "*)
++	    func_append new_libs " -L$path/$objdir" ;;
++	  esac
++	  ;;
++	esac
++      done
++      for deplib in $compile_deplibs; do
++	case $deplib in
++	-L*)
++	  case " $new_libs " in
++	  *" $deplib "*) ;;
++	  *) func_append new_libs " $deplib" ;;
++	  esac
++	  ;;
++	*) func_append new_libs " $deplib" ;;
++	esac
++      done
++      compile_deplibs="$new_libs"
++
++
++      func_append compile_command " $compile_deplibs"
++      func_append finalize_command " $finalize_deplibs"
  
-   AC_SUBST(use)
--  AC_OUTPUT(makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp )
-+  AC_CONFIG_FILES(makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp )
-+  AC_OUTPUT
-   echo makedefc
-   cat makedefc
+       if test -n "$rpath$xrpath"; then
+ 	# If the user specified any rpath flags, then add them.
+@@ -3549,7 +8753,7 @@
+ 	  # This is the magic to use -rpath.
+ 	  case "$finalize_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
++	  *) func_append finalize_rpath " $libdir" ;;
+ 	  esac
+ 	done
+       fi
+@@ -3568,25 +8772,32 @@
+ 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ 		;;
+ 	      *)
+-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ 		;;
+ 	      esac
+ 	    fi
+ 	  else
+ 	    eval flag=\"$hardcode_libdir_flag_spec\"
+-	    rpath="$rpath $flag"
++	    func_append rpath " $flag"
+ 	  fi
+ 	elif test -n "$runpath_var"; then
+ 	  case "$perm_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) perm_rpath="$perm_rpath $libdir" ;;
++	  *) func_append perm_rpath " $libdir" ;;
+ 	  esac
+ 	fi
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
++	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$libdir:"*) ;;
+-	  *) dllsearchpath="$dllsearchpath:$libdir";;
++	  ::) dllsearchpath=$libdir;;
++	  *) func_append dllsearchpath ":$libdir";;
++	  esac
++	  case :$dllsearchpath: in
++	  *":$testbindir:"*) ;;
++	  ::) dllsearchpath=$testbindir;;
++	  *) func_append dllsearchpath ":$testbindir";;
+ 	  esac
+ 	  ;;
+ 	esac
+@@ -3612,18 +8823,18 @@
+ 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ 		;;
+ 	      *)
+-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ 		;;
+ 	      esac
+ 	    fi
+ 	  else
+ 	    eval flag=\"$hardcode_libdir_flag_spec\"
+-	    rpath="$rpath $flag"
++	    func_append rpath " $flag"
+ 	  fi
+ 	elif test -n "$runpath_var"; then
+ 	  case "$finalize_perm_rpath " in
+ 	  *" $libdir "*) ;;
+-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
++	  *) func_append finalize_perm_rpath " $libdir" ;;
+ 	  esac
+ 	fi
+       done
+@@ -3635,227 +8846,57 @@
+       fi
+       finalize_rpath="$rpath"
  
---- ./configure.orig	2012-01-09 20:21:02.000000000 -0700
-+++ ./configure	2012-01-09 20:41:41.703495184 -0700
-@@ -651,10 +651,10 @@
- XMKMF
- GMPDIR
- GMP
-+MAKEINFO
- HAVE_MALLOC_ZONE_MEMALIGN
- EGREP
- GREP
--MAKEINFO
- AWK
- CPP
- OBJEXT
-@@ -4023,7 +4023,14 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--int main() {return 0;}
-+
-+int
-+main ()
-+{
-+return 0;
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   TCFLAGS="$TCFLAGS $TMPF";{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -4269,51 +4276,6 @@
- $as_echo_n "checking system version (for dynamic loading)... " >&6; }
- if machine=`uname -m` ; then true; else machine=unknown ; fi
+-      dlsyms=
+-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+-	if test -n "$NM" && test -n "$global_symbol_pipe"; then
+-	  dlsyms="${outputname}S.c"
+-	else
+-	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+-	fi
++      if test -n "$libobjs" && test "$build_old_libs" = yes; then
++	# Transform all the library objects into standard objects.
++	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
++	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       fi
  
--for ac_prog in makeinfo
--do
--  # Extract the first word of "$ac_prog", so it can be a program name with args.
--set dummy $ac_prog; ac_word=$2
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--$as_echo_n "checking for $ac_word... " >&6; }
--if ${ac_cv_prog_MAKEINFO+:} false; then :
--  $as_echo_n "(cached) " >&6
--else
--  if test -n "$MAKEINFO"; then
--  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--    for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
--    ac_cv_prog_MAKEINFO="$ac_prog"
--    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--  done
--IFS=$as_save_IFS
+-      if test -n "$dlsyms"; then
+-	case $dlsyms in
+-	"") ;;
+-	*.c)
+-	  # Discover the nlist of each of the dlfiles.
+-	  nlist="$output_objdir/${outputname}.nm"
 -
--fi
--fi
--MAKEINFO=$ac_cv_prog_MAKEINFO
--if test -n "$MAKEINFO"; then
--  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
--$as_echo "$MAKEINFO" >&6; }
--else
--  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
--$as_echo "no" >&6; }
--fi
+-	  $show "$rm $nlist ${nlist}S ${nlist}T"
+-	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
 -
+-	  # Parse the name list into a source file.
+-	  $show "creating $output_objdir/$dlsyms"
 -
--  test -n "$MAKEINFO" && break
--done
--test -n "$MAKEINFO" || MAKEINFO=""false""
+-	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
 -
+-#ifdef __cplusplus
+-extern \"C\" {
+-#endif
 -
+-/* Prevent the only kind of declaration conflicts we can make. */
+-#define lt_preloaded_symbols some_other_symbol
 -
- if test -f /usr/lib/NextStep/software_version; then
-     system=NEXTSTEP-`${AWK} '/3/,/3/' /usr/lib/NextStep/software_version`
- else
-@@ -4711,22 +4673,29 @@
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sysconf" >&5
- $as_echo "$ac_cv_lib_c_sysconf" >&6; }
- if test "x$ac_cv_lib_c_sysconf" = xyes; then :
--  { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for _SC_CLK_TCK\"" >&5
--$as_echo_n "checking \"for _SC_CLK_TCK\"... " >&6; }
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _SC_CLK_TCK" >&5
-+$as_echo_n "checking for _SC_CLK_TCK... " >&6; }
- 		if test "$cross_compiling" = yes; then :
-   hz=0
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <unistd.h>
-+
-+		            #include <unistd.h>
- 		            #include <stdio.h>
--		            int
--			    main() {
-+
-+int
-+main ()
-+{
-+
- 			   	FILE *fp=fopen("conftest1","w");
- 				fprintf(fp,"%lu\n",sysconf(_SC_CLK_TCK));
- 				fclose(fp);
- 			        return 0;
--			    }
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   hz=`cat conftest1`
-@@ -4750,6 +4719,117 @@
+-/* External symbol declarations for the compiler. */\
+-"
+-
+-	  if test "$dlself" = yes; then
+-	    $show "generating symbol list for \`$output'"
+-
+-	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+-
+-	    # Add our own program objects to the symbol list.
+-	    progfiles="$objs$old_deplibs"
+-	    for arg in $progfiles; do
+-	      $show "extracting global C symbols from \`$arg'"
+-	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+-	    done
+-
+-	    if test -n "$exclude_expsyms"; then
+-	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+-	      $run eval '$mv "$nlist"T "$nlist"'
+-	    fi
+-
+-	    if test -n "$export_symbols_regex"; then
+-	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+-	      $run eval '$mv "$nlist"T "$nlist"'
+-	    fi
+-
+-	    # Prepare the list of exported symbols
+-	    if test -z "$export_symbols"; then
+-	      export_symbols="$output_objdir/$output.exp"
+-	      $run $rm $export_symbols
+-	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+-	    else
+-	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+-	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+-	      $run eval 'mv "$nlist"T "$nlist"'
+-	    fi
+-	  fi
+-
+-	  for arg in $dlprefiles; do
+-	    $show "extracting global C symbols from \`$arg'"
+-	    name=`echo "$arg" | sed -e 's%^.*/%%'`
+-	    $run eval 'echo ": $name " >> "$nlist"'
+-	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+-	  done
+-
+-	  if test -z "$run"; then
+-	    # Make sure we have at least an empty file.
+-	    test -f "$nlist" || : > "$nlist"
+-
+-	    if test -n "$exclude_expsyms"; then
+-	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+-	      $mv "$nlist"T "$nlist"
+-	    fi
+-
+-	    # Try sorting and uniquifying the output.
+-	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
+-	      :
+-	    else
+-	      grep -v "^: " < "$nlist" > "$nlist"S
+-	    fi
+-
+-	    if test -f "$nlist"S; then
+-	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+-	    else
+-	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
+-	    fi
+-
+-	    $echo >> "$output_objdir/$dlsyms" "\
+-
+-#undef lt_preloaded_symbols
+-
+-#if defined (__STDC__) && __STDC__
+-# define lt_ptr_t void *
+-#else
+-# define lt_ptr_t char *
+-# define const
+-#endif
+-
+-/* The mapping between symbol names and symbols. */
+-const struct {
+-  const char *name;
+-  lt_ptr_t address;
+-}
+-lt_preloaded_symbols[] =
+-{\
+-"
+-
+-	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
+-		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
+-		  < "$nlist" >> "$output_objdir/$dlsyms"
+-
+-	    $echo >> "$output_objdir/$dlsyms" "\
+-  {0, (lt_ptr_t) 0}
+-};
+-
+-/* This works around a problem in FreeBSD linker */
+-#ifdef FREEBSD_WORKAROUND
+-static const void *lt_preloaded_setup() {
+-  return lt_preloaded_symbols;
+-}
+-#endif
+-
+-#ifdef __cplusplus
+-}
+-#endif\
+-"
+-	  fi
+-
+-	  pic_flag_for_symtable=
+-	  case $host in
+-	  # compiling the symbol table file with pic_flag works around
+-	  # a FreeBSD bug that causes programs to crash when -lm is
+-	  # linked before any other PIC object.  But we must not use
+-	  # pic_flag when linking with -static.  The problem exists in
+-	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+-	    case "$compile_command " in
+-	    *" -static "*) ;;
+-	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+-	    esac;;
+-	  *-*-hpux*)
+-	    case "$compile_command " in
+-	    *" -static "*) ;;
+-	    *) pic_flag_for_symtable=" $pic_flag";;
+-	    esac
+-	  esac
+-
+-	  # Now compile the dynamic symbol file.
+-	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+-	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+-
+-	  # Clean up the generated files.
+-	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+-	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+-
+-	  # Transform the symbol file into the correct name.
+-	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+-	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+-	  ;;
+-	*)
+-	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+-	  exit 1
+-	  ;;
+-	esac
+-      else
+-	# We keep going just in case the user didn't refer to
+-	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+-	# really was required.
++      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
  
+-	# Nullify the symbol file.
+-	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+-	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
++      # template prelinking step
++      if test -n "$prelink_cmds"; then
++	func_execute_cmds "$prelink_cmds" 'exit $?'
+       fi
  
+-      if test $need_relink = no || test "$build_libtool_libs" != yes; then
++      wrappers_required=yes
++      case $host in
++      *cegcc* | *mingw32ce*)
++        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
++        wrappers_required=no
++        ;;
++      *cygwin* | *mingw* )
++        if test "$build_libtool_libs" != yes; then
++          wrappers_required=no
++        fi
++        ;;
++      *)
++        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
++          wrappers_required=no
++        fi
++        ;;
++      esac
++      if test "$wrappers_required" = no; then
+ 	# Replace the output file specification.
+-	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ 	link_command="$compile_command$compile_rpath"
  
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-+$as_echo_n "checking for egrep... " >&6; }
-+if ${ac_cv_path_EGREP+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-+   then ac_cv_path_EGREP="$GREP -E"
-+   else
-+     if test -z "$EGREP"; then
-+  ac_path_EGREP_found=false
-+  # Loop through the user's path and test for each of PROGNAME-LIST
-+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+    for ac_prog in egrep; do
-+    for ac_exec_ext in '' $ac_executable_extensions; do
-+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-+# Check for GNU ac_path_EGREP and select it if it is found.
-+  # Check for GNU $ac_path_EGREP
-+case `"$ac_path_EGREP" --version 2>&1` in
-+*GNU*)
-+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-+*)
-+  ac_count=0
-+  $as_echo_n 0123456789 >"conftest.in"
-+  while :
-+  do
-+    cat "conftest.in" "conftest.in" >"conftest.tmp"
-+    mv "conftest.tmp" "conftest.in"
-+    cp "conftest.in" "conftest.nl"
-+    $as_echo 'EGREP' >> "conftest.nl"
-+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-+    as_fn_arith $ac_count + 1 && ac_count=$as_val
-+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-+      # Best one so far, save it but keep looking for a better one
-+      ac_cv_path_EGREP="$ac_path_EGREP"
-+      ac_path_EGREP_max=$ac_count
-+    fi
-+    # 10*(2^10) chars as input seems more than enough
-+    test $ac_count -gt 10 && break
-+  done
-+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-+esac
-+
-+      $ac_path_EGREP_found && break 3
-+    done
-+  done
-+  done
-+IFS=$as_save_IFS
-+  if test -z "$ac_cv_path_EGREP"; then
-+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-+  fi
-+else
-+  ac_cv_path_EGREP=$EGREP
-+fi
-+
-+   fi
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-+$as_echo "$ac_cv_path_EGREP" >&6; }
-+ EGREP="$ac_cv_path_EGREP"
-+
-+
-+for ac_prog in makeinfo
-+do
-+  # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_prog_MAKEINFO+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  if test -n "$MAKEINFO"; then
-+  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+    for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_prog_MAKEINFO="$ac_prog"
-+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+  done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+MAKEINFO=$ac_cv_prog_MAKEINFO
-+if test -n "$MAKEINFO"; then
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
-+$as_echo "$MAKEINFO" >&6; }
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+  test -n "$MAKEINFO" && break
-+done
-+test -n "$MAKEINFO" || MAKEINFO=""false""
-+
-+
+ 	# We have no uninstalled library dependencies, so finalize right now.
+-	$show "$link_command"
+-	$run eval "$link_command"
+-	status=$?
++	exit_status=0
++	func_show_eval "$link_command" 'exit_status=$?'
  
- #MY_SUBDIRS=
+-	# Delete the generated files.
+-	if test -n "$dlsyms"; then
+-	  $show "$rm $output_objdir/${outputname}S.${objext}"
+-	  $run $rm "$output_objdir/${outputname}S.${objext}"
++	if test -n "$postlink_cmds"; then
++	  func_to_tool_file "$output"
++	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++	  func_execute_cmds "$postlink_cmds" 'exit $?'
+ 	fi
  
-@@ -4803,25 +4883,36 @@
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5
- $as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; }
- if test "x$ac_cv_lib_gmp___gmpz_init" = xyes; then :
--  { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for external gmp version\"" >&5
--$as_echo_n "checking \"for external gmp version\"... " >&6; }
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for external gmp version" >&5
-+$as_echo_n "checking for external gmp version... " >&6; }
- 			if test "$cross_compiling" = yes; then :
--  echo "Cannot use dynamic gmp lib"
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cannot use dynamic gmp lib" >&5
-+$as_echo "Cannot use dynamic gmp lib" >&6; }
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <gmp.h>
--				    int main() {
-+
-+				    #include <gmp.h>
-+
-+int
-+main ()
-+{
+-	exit $status
+-      fi
++	# Delete the generated files.
++	if test -f "$output_objdir/${outputname}S.${objext}"; then
++	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
++	fi
+ 
+-      if test -n "$shlibpath_var"; then
+-	# We should set the shlibpath_var
+-	rpath=
+-	for dir in $temp_rpath; do
+-	  case $dir in
+-	  [\\/]* | [A-Za-z]:[\\/]*)
+-	    # Absolute path.
+-	    rpath="$rpath$dir:"
+-	    ;;
+-	  *)
+-	    # Relative path: add a thisdir entry.
+-	    rpath="$rpath\$thisdir/$dir:"
+-	    ;;
+-	  esac
+-	done
+-	temp_rpath="$rpath"
++	exit $exit_status
+       fi
+ 
+       if test -n "$compile_shlibpath$finalize_shlibpath"; then
+@@ -3872,7 +8913,7 @@
+ 	  # We should set the runpath_var.
+ 	  rpath=
+ 	  for dir in $perm_rpath; do
+-	    rpath="$rpath$dir:"
++	    func_append rpath "$dir:"
+ 	  done
+ 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ 	fi
+@@ -3880,7 +8921,7 @@
+ 	  # We should set the runpath_var.
+ 	  rpath=
+ 	  for dir in $finalize_perm_rpath; do
+-	    rpath="$rpath$dir:"
++	    func_append rpath "$dir:"
+ 	  done
+ 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ 	fi
+@@ -3890,13 +8931,19 @@
+ 	# We don't need to create a wrapper script.
+ 	link_command="$compile_var$compile_command$compile_rpath"
+ 	# Replace the output file specification.
+-	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ 	# Delete the old output file.
+-	$run $rm $output
++	$opt_dry_run || $RM $output
+ 	# Link the executable and exit
+-	$show "$link_command"
+-	$run eval "$link_command" || exit $?
+-	exit 0
++	func_show_eval "$link_command" 'exit $?'
 +
- 				    #if __GNU_MP_VERSION == 4 || __GNU_MP_VERSION == 5
- 					return 0;
- 				    #else
- 					return -1;
- 				    #endif
--				    }
++	if test -n "$postlink_cmds"; then
++	  func_to_tool_file "$output"
++	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++	  func_execute_cmds "$postlink_cmds" 'exit $?'
++	fi
 +
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   #				MPFILES=$GMPDIR/mpn/mul_n.o
- #				PATCHED_SYMBOLS=__gmpn_toom3_mul_n
-+				{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 4/5" >&5
-+$as_echo "4/5" >&6; }
- 				MPFILES=
- 				PATCHED_SYMBOLS=
- #				if test "$use" = "m68k-linux" ; then
-@@ -4834,7 +4925,8 @@
- 				MP_INCLUDE=`cpp foo.c | grep /gmp.h | head -n 1 | $AWK '{print $3}' | tr -d '"'`
- 				rm -f foo.c
- else
--  echo "Cannot use dynamic gmp lib"
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cannot use dynamic gmp lib" >&5
-+$as_echo "Cannot use dynamic gmp lib" >&6; }
- fi
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-   conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -4894,8 +4986,8 @@
++	exit $EXIT_SUCCESS
+       fi
  
- fi
+       if test "$hardcode_action" = relink; then
+@@ -3904,13 +8951,13 @@
+ 	link_command="$compile_var$compile_command$compile_rpath"
+ 	relink_command="$finalize_var$finalize_command$finalize_rpath"
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for leading underscore in object symbols\"" >&5
--$as_echo_n "checking \"for leading underscore in object symbols\"... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for leading underscore in object symbols" >&5
-+$as_echo_n "checking for leading underscore in object symbols... " >&6; }
- cat>foo.c <<EOFF
- #include <math.h>
- #include <stdio.h>
-@@ -4906,45 +4998,53 @@
- 	LEADING_UNDERSCORE=1
- 	$as_echo "#define LEADING_UNDERSCORE 1" >>confdefs.h
+-	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+-	$echo "$modename: \`$output' will be relinked during installation" 1>&2
++	func_warning "this platform does not like uninstalled shared libraries"
++	func_warning "\`$output' will be relinked during installation"
+       else
+ 	if test "$fast_install" != no; then
+ 	  link_command="$finalize_var$compile_command$finalize_rpath"
+ 	  if test "$fast_install" = yes; then
+-	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
++	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ 	  else
+ 	    # fast_install is set to needless
+ 	    relink_command=
+@@ -3922,246 +8969,99 @@
+       fi
  
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"yes\"" >&5
--$as_echo "\"yes\"" >&6; }
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
- else
- 	LEADING_UNDERSCORE=""
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"no\"" >&5
--$as_echo "\"no\"" >&6; }
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
- fi
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for GNU ld option -Map\"" >&5
--$as_echo_n "checking \"for GNU ld option -Map\"... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld option -Map" >&5
-+$as_echo_n "checking for GNU ld option -Map... " >&6; }
- touch map
- $CC -o foo  -Wl,-Map  map foo.o >/dev/null 2>&1
- if test `cat map | wc -l` != "0" ; then
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"yes\"" >&5
--$as_echo "\"yes\"" >&6; }
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
- 	$as_echo "#define HAVE_GNU_LD 1" >>confdefs.h
+       # Replace the output file specification.
+-      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
++      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
  
- 	GNU_LD=1
- else
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"no\"" >&5
--$as_echo "\"no\"" >&6; }
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
- 	GNU_LD=
- fi
- rm -f foo.c foo.o foo map
+       # Delete the old output files.
+-      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
++      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
  
-- { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for size of gmp limbs\"" >&5
--$as_echo_n "checking \"for size of gmp limbs\"... " >&6; }
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for size of gmp limbs" >&5
-+$as_echo_n "checking for size of gmp limbs... " >&6; }
-  if test "$cross_compiling" = yes; then :
-   mpsize=0
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
-+
-+	#include <stdio.h>
- 	#include "$MP_INCLUDE"
--	int main() {
-+
-+int
-+main ()
-+{
-+
- 	FILE *fp=fopen("conftest1","w");
- 	fprintf(fp,"%u",sizeof(mp_limb_t));
- 	fclose(fp);
- 	return 0;
--	}
+-      $show "$link_command"
+-      $run eval "$link_command" || exit $?
++      func_show_eval "$link_command" 'exit $?'
 +
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   mpsize=`cat conftest1`
-@@ -4956,8 +5056,7 @@
- fi
++      if test -n "$postlink_cmds"; then
++	func_to_tool_file "$output_objdir/$outputname"
++	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
++	func_execute_cmds "$postlink_cmds" 'exit $?'
++      fi
  
-  if test "$mpsize" = "0" ; then
--	echo "Cannot determine mpsize"
+       # Now create the wrapper script.
+-      $show "creating $output"
++      func_verbose "creating $output"
+ 
+       # Quote the relink command for shipping.
+       if test -n "$relink_command"; then
+ 	# Preserve any variables that may affect compiler behavior
+ 	for var in $variables_saved_for_relink; do
+ 	  if eval test -z \"\${$var+set}\"; then
+-	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
++	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ 	  elif eval var_value=\$$var; test -z "$var_value"; then
+ 	    relink_command="$var=; export $var; $relink_command"
+ 	  else
+-	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+-	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
++	    func_quote_for_eval "$var_value"
++	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ 	  fi
+ 	done
+-	relink_command="cd `pwd`; $relink_command"
+-	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+-      fi
+-
+-      # Quote $echo for shipping.
+-      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
+-	case $0 in
+-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
+-	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+-	esac
+-	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+-      else
+-	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
++	relink_command="(cd `pwd`; $relink_command)"
++	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+       fi
+ 
+-      # Only actually do things if our run command is non-null.
+-      if test -z "$run"; then
++      # Only actually do things if not in dry run mode.
++      $opt_dry_run || {
+ 	# win32 will think the script is a binary if it has
+ 	# a .exe suffix, so we strip it off here.
+ 	case $output in
+-	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
++	  *.exe) func_stripname '' '.exe' "$output"
++	         output=$func_stripname_result ;;
+ 	esac
+ 	# test for cygwin because mv fails w/o .exe extensions
+ 	case $host in
+-	  *cygwin*) exeext=.exe ;;
++	  *cygwin*)
++	    exeext=.exe
++	    func_stripname '' '.exe' "$outputname"
++	    outputname=$func_stripname_result ;;
+ 	  *) exeext= ;;
+ 	esac
+-	$rm $output
+-	trap "$rm $output; exit 1" 1 2 15
+-
+-	$echo > $output "\
+-#! $SHELL
+-
+-# $output - temporary wrapper script for $objdir/$outputname
+-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+-#
+-# The $output program cannot be directly executed until all the libtool
+-# libraries that it depends on are installed.
+-#
+-# This wrapper script should never be moved out of the build directory.
+-# If it is, it will not operate correctly.
+-
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-Xsed='sed -e 1s/^X//'
+-sed_quote_subst='$sed_quote_subst'
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+-
+-relink_command=\"$relink_command > /dev/null 2>&1\"
+-
+-# This environment variable determines our operation mode.
+-if test \"\$libtool_install_magic\" = \"$magic\"; then
+-  # install mode needs the following variable:
+-  notinst_deplibs='$notinst_deplibs'
+-else
+-  # When we are sourced in execute mode, \$file and \$echo are already set.
+-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+-    echo=\"$qecho\"
+-    file=\"\$0\"
+-    # Make sure echo works.
+-    if test \"X\$1\" = X--no-reexec; then
+-      # Discard the --no-reexec flag, and continue.
+-      shift
+-    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+-      # Yippee, \$echo works!
+-      :
+-    else
+-      # Restart under the correct shell, and then maybe \$echo will work.
+-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+-    fi
+-  fi\
+-"
+-	$echo >> $output "\
+-
+-  # Find the directory that this script lives in.
+-  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+-
+-  # Follow symbolic links until we get to the real thisdir.
+-  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+-  while test -n \"\$file\"; do
+-    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+-
+-    # If there was a directory component, then change thisdir.
+-    if test \"x\$destdir\" != \"x\$file\"; then
+-      case \"\$destdir\" in
+-      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+-      *) thisdir=\"\$thisdir/\$destdir\" ;;
+-      esac
+-    fi
+-
+-    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+-    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+-  done
+-
+-  # Try to get the absolute directory name.
+-  absdir=\`cd \"\$thisdir\" && pwd\`
+-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+-"
+-
+-	if test "$fast_install" = yes; then
+-	  echo >> $output "\
+-  program=lt-'$outputname'$exeext
+-  progdir=\"\$thisdir/$objdir\"
+-
+-  if test ! -f \"\$progdir/\$program\" || \\
+-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
+-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+-
+-    file=\"\$\$-\$program\"
+-
+-    if test ! -d \"\$progdir\"; then
+-      $mkdir \"\$progdir\"
+-    else
+-      $rm \"\$progdir/\$file\"
+-    fi"
+-
+-	  echo >> $output "\
+-
+-    # relink executable if necessary
+-    if test -n \"\$relink_command\"; then
+-      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+-      else
+-        $echo \"\$relink_command_output\" >&2
+-	$rm \"\$progdir/\$file\"
 -	exit 1
-+	as_fn_error 1 "Cannot determine mpsize" "$LINENO" 5
-  fi
-  cat >>confdefs.h <<_ACEOF
- #define MP_LIMB_BYTES $mpsize
-@@ -4966,23 +5065,31 @@
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mpsize" >&5
- $as_echo "$mpsize" >&6; }
- 
-- { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"_SHORT_LIMB\"" >&5
--$as_echo_n "checking \"_SHORT_LIMB\"... " >&6; }
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking _SHORT_LIMB" >&5
-+$as_echo_n "checking _SHORT_LIMB... " >&6; }
-  if test "$cross_compiling" = yes; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
-+
-+	#include <stdio.h>
- 	#include "$MP_INCLUDE"
--	int main() {
-+
-+int
-+main ()
-+{
-+
- 	#ifdef _SHORT_LIMB
- 	return 0;
- 	#else
- 	return 1;
- 	#endif
--	}
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   $as_echo "#define __SHORT_LIMB 1" >>confdefs.h
-@@ -4996,23 +5103,31 @@
-   conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
- 
-- { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"_LONG_LONG_LIMB\"" >&5
--$as_echo_n "checking \"_LONG_LONG_LIMB\"... " >&6; }
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking _LONG_LONG_LIMB" >&5
-+$as_echo_n "checking _LONG_LONG_LIMB... " >&6; }
-  if test "$cross_compiling" = yes; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
-+
-+	#include <stdio.h>
- 	#include "$MP_INCLUDE"
--	int main() {
-+
-+int
-+main ()
-+{
-+
- 	#ifdef _LONG_LONG_LIMB
- 	return 0;
- 	#else
- 	return 1;
- 	#endif
--	}
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   $as_echo "#define __LONG_LONG_LIMB 1" >>confdefs.h
-@@ -5351,8 +5466,7 @@
- fi
+-      fi
+-    fi
+-
+-    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+-    { $rm \"\$progdir/\$program\";
+-      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+-    $rm \"\$progdir/\$file\"
+-  fi"
+-	else
+-	  echo >> $output "\
+-  program='$outputname'
+-  progdir=\"\$thisdir/$objdir\"
+-"
+-	fi
+-
+-	echo >> $output "\
+-
+-  if test -f \"\$progdir/\$program\"; then"
+-
+-	# Export our shlibpath_var if we have one.
+-	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+-	  $echo >> $output "\
+-    # Add our own library path to $shlibpath_var
+-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+-
+-    # Some systems cannot cope with colon-terminated $shlibpath_var
+-    # The second colon is a workaround for a bug in BeOS R4 sed
+-    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+-
+-    export $shlibpath_var
+-"
+-	fi
++	case $host in
++	  *cygwin* | *mingw* )
++	    func_dirname_and_basename "$output" "" "."
++	    output_name=$func_basename_result
++	    output_path=$func_dirname_result
++	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
++	    cwrapper="$output_path/$output_name.exe"
++	    $RM $cwrappersource $cwrapper
++	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
  
-  	if test "$have_dl" = "0" ; then
-- 		echo "Cannot find dlopen in -dl"
-- 		exit 1
-+ 		as_fn_error 1 "Cannot find dlopen in -dl" "$LINENO" 5
-  	fi
+-	# fixup the dll searchpath if we need to.
+-	if test -n "$dllsearchpath"; then
+-	  $echo >> $output "\
+-    # Add the dll search path components to the executable PATH
+-    PATH=$dllsearchpath:\$PATH
+-"
+-	fi
++	    func_emit_cwrapperexe_src > $cwrappersource
  
- 	TLIBS="$TLIBS -ldl -rdynamic"
-@@ -5410,9 +5524,17 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#define IN_GCC
-+
-+				    #define IN_GCC
- 				    #include <bfd.h>
--				    int main() { symbol_info t; return 0;}
-+
-+int
-+main ()
-+{
-+symbol_info t; return 0;
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-@@ -5423,10 +5545,18 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#define CONST const
-+
-+					    #define CONST const
-                                             #define IN_GCC
- 					    #include <bfd.h>
--					    int main() {symbol_info t; return 0;}
-+
-+int
-+main ()
-+{
-+symbol_info t; return 0;
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5459,18 +5589,26 @@
- # BFD boolean syntax
- #
+-	$echo >> $output "\
+-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+-      # Run the actual program with our arguments.
+-"
+-	case $host in
+-	# win32 systems need to use the prog path for dll
+-	# lookup to work
+-	*-*-cygwin* | *-*-pw32*)
+-	  $echo >> $output "\
+-      exec \$progdir/\$program \${1+\"\$@\"}
+-"
+-	  ;;
++	    # The wrapper executable is built using the $host compiler,
++	    # because it contains $host paths and files. If cross-
++	    # compiling, it, like the target executable, must be
++	    # executed on the $host or under an emulation environment.
++	    $opt_dry_run || {
++	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
++	      $STRIP $cwrapper
++	    }
  
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for useable bfd_boolean" >&5
--$as_echo_n "checking for useable bfd_boolean... " >&6; }
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable bfd_boolean" >&5
-+$as_echo_n "checking for usable bfd_boolean... " >&6; }
- 	if test "$cross_compiling" = yes; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#define IN_GCC
-+
-+		    #define IN_GCC
- 		    #include <bfd.h>
- 		    bfd_boolean foo() {return FALSE;}
--		    int main() {return 0;}
-+
-+int
-+main ()
-+{
-+return 0;
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5499,9 +5637,17 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <bfd.h>
-+
-+		    #include <bfd.h>
- 		    #include <bfdlink.h>
--		    int main() {struct bfd_link_info i;i.output_bfd=0;return 0;}
-+
-+int
-+main ()
-+{
-+struct bfd_link_info i;i.output_bfd=0;return 0;
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -5783,26 +5929,34 @@
- # work around MSYS pwd result incompatibility
- if test "$use" = "mingw" ; then
- if test "$cross_compiling" = yes; then :
--  echo Cannot find sizeof struct contblock;exit 1
-+  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
-+
-+	#include <stdio.h>
- 	#define EXTER
- 	#include "$MP_INCLUDE"
- 	#include "h/enum.h"
- 	#include "h/object.h"
--	int main(int argc,char **argv,char **envp) {
-+
-+int
-+main ()
-+{
-+
- 	FILE *f=fopen("conftest1","w");
- 	fprintf(f,"%u",sizeof(struct contblock));
- 	fclose(f);
- 	return 0;
--	}
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   sizeof_contblock=`cat conftest1`
- else
--  echo Cannot find sizeof struct contblock;exit 1
-+  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
- fi
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-   conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -5810,26 +5964,34 @@
+-	# Backslashes separate directories on plain windows
+-	*-*-mingw | *-*-os2*)
+-	  $echo >> $output "\
+-      exec \$progdir\\\\\$program \${1+\"\$@\"}
+-"
++	    # Now, create the wrapper script for func_source use:
++	    func_ltwrapper_scriptname $cwrapper
++	    $RM $func_ltwrapper_scriptname_result
++	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
++	    $opt_dry_run || {
++	      # note: this script will not be executed, so do not chmod.
++	      if test "x$build" = "x$host" ; then
++		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
++	      else
++		func_emit_wrapper no > $func_ltwrapper_scriptname_result
++	      fi
++	    }
+ 	  ;;
++	  * )
++	    $RM $output
++	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
  
- else
- if test "$cross_compiling" = yes; then :
--  echo Cannot find sizeof struct contblock;exit 1
-+  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
-+
-+	#include <stdio.h>
- 	#define EXTER
- 	#include "$MP_INCLUDE"
- 	#include "`pwd`/h/enum.h"
- 	#include "`pwd`/h/object.h"
--	int main(int argc,char **argv,char **envp) {
-+
-+int
-+main ()
-+{
-+
- 	FILE *f=fopen("conftest1","w");
- 	fprintf(f,"%u",sizeof(struct contblock));
- 	fclose(f);
- 	return 0;
--	}
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   sizeof_contblock=`cat conftest1`
- else
--  echo Cannot find sizeof struct contblock;exit 1
-+  as_fn_error 1 "Cannot find sizeof struct contblock" "$LINENO" 5
- fi
- rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-   conftest.$ac_objext conftest.beam conftest.$ac_ext
-@@ -5856,7 +6018,11 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--int main () {
-+
-+int
-+main ()
-+{
-+
-   /* Are we little or big endian?  Adapted from Harbison&Steele.  */
-   union
-   {
-@@ -5865,6 +6031,9 @@
-   } u;
-   u.d = 1.0;
-   return u.l[sizeof(double)/sizeof(int)-1] ? 0 : 1;
-+
-+  ;
-+  return 0;
- }
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-@@ -5895,15 +6064,23 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <unistd.h>
--	    #include <stdio.h>
--	    int main() {
-+
-+		#include <unistd.h>
-+		#include <stdio.h>
-+
-+int
-+main ()
-+{
-+
- 		FILE *f;
- 		if (!(f=fopen("conftest1","w")))
- 			return -1;
- 		fprintf(f,"%u",sbrk(0));
- 		return 0;
--		}
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   HAVE_SBRK=1
-@@ -5930,14 +6107,22 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <sys/personality.h>
--         	    #include <stdio.h>
--		    int main(int argc,char *argv[],char *envp[]) {
-+
-+			#include <sys/personality.h>
-+			#include <stdio.h>
-+
-+int
-+main ()
-+{
-+
- 			FILE *f;
- 			if (!(f=fopen("conftest1","w"))) return -1;
- 			fprintf(f,"%x",ADDR_NO_RANDOMIZE);
- 			return 0;
--			}
-+
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   ADDR_NO_RANDOMIZE=`cat conftest1`
-@@ -5967,7 +6152,8 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--void gprof_cleanup() {};
+-	*)
+-	  $echo >> $output "\
+-      # Export the path to the program.
+-      PATH=\"\$progdir:\$PATH\"
+-      export PATH
+-
+-      exec \$program \${1+\"\$@\"}
+-"
++	    func_emit_wrapper no > $output
++	    chmod +x $output
+ 	  ;;
+ 	esac
+-	$echo >> $output "\
+-      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+-      exit 1
+-    fi
+-  else
+-    # The program doesn't exist.
+-    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+-    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+-    echo \"See the $PACKAGE documentation for more information.\" 1>&2
+-    exit 1
+-  fi
+-fi\
+-"
+-	chmod +x $output
+-      fi
+-      exit 0
++      }
++      exit $EXIT_SUCCESS
+       ;;
+     esac
+ 
+@@ -4169,7 +9069,7 @@
+     for oldlib in $oldlibs; do
+ 
+       if test "$build_libtool_libs" = convenience; then
+-	oldobjs="$libobjs_save"
++	oldobjs="$libobjs_save $symfileobj"
+ 	addlibs="$convenience"
+ 	build_libtool_libs=no
+       else
+@@ -4177,146 +9077,177 @@
+ 	  oldobjs="$libobjs_save"
+ 	  build_libtool_libs=no
+ 	else
+-	  oldobjs="$objs$old_deplibs $non_pic_objects"
++	  oldobjs="$old_deplibs $non_pic_objects"
++	  if test "$preload" = yes && test -f "$symfileobj"; then
++	    func_append oldobjs " $symfileobj"
++	  fi
+ 	fi
+ 	addlibs="$old_convenience"
+       fi
+ 
+       if test -n "$addlibs"; then
+ 	gentop="$output_objdir/${outputname}x"
+-	$show "${rm}r $gentop"
+-	$run ${rm}r "$gentop"
+-	$show "$mkdir $gentop"
+-	$run $mkdir "$gentop"
+-	status=$?
+-	if test $status -ne 0 && test ! -d "$gentop"; then
+-	  exit $status
+-	fi
+-	generated="$generated $gentop"
+-
+-	# Add in members from convenience archives.
+-	for xlib in $addlibs; do
+-	  # Extract the objects.
+-	  case $xlib in
+-	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+-	  *) xabs=`pwd`"/$xlib" ;;
+-	  esac
+-	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+-	  xdir="$gentop/$xlib"
+-
+-	  $show "${rm}r $xdir"
+-	  $run ${rm}r "$xdir"
+-	  $show "$mkdir $xdir"
+-	  $run $mkdir "$xdir"
+-	  status=$?
+-	  if test $status -ne 0 && test ! -d "$xdir"; then
+-	    exit $status
+-	  fi
+-	  $show "(cd $xdir && $AR x $xabs)"
+-	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
++	func_append generated " $gentop"
+ 
+-	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print | $NL2SP`
+-	done
++	func_extract_archives $gentop $addlibs
++	func_append oldobjs " $func_extract_archives_result"
+       fi
+ 
+       # Do each command in the archive commands.
+       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+-	eval cmds=\"$old_archive_from_new_cmds\"
++	cmds=$old_archive_from_new_cmds
+       else
+-#	# Ensure that we have .o objects in place in case we decided
+-#	# not to build a shared library, and have fallen back to building
+-#	# static libs even though --disable-static was passed!
+-#	for oldobj in $oldobjs; do
+-#	  if test ! -f $oldobj; then
+-#	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
+-#	    if test "X$xdir" = "X$oldobj"; then
+-#	      xdir="."
+-#	    else
+-#	      xdir="$xdir"
+-#	    fi
+-#	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
+-#	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
+-#	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
+-#	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
+-#	  fi
+-#	done
+ 
+-        eval cmds=\"$old_archive_cmds\"
++	# Add any objects from preloaded convenience libraries
++	if test -n "$dlprefiles"; then
++	  gentop="$output_objdir/${outputname}x"
++	  func_append generated " $gentop"
+ 
+-        if len=`expr "X$cmds" : ".*"` &&
+-             test $len -le $max_cmd_len; then
+-          :
+-        else
+-          # the command line is too long to link in one step, link in parts
+-          $echo "using piecewise archive linking..."
++	  func_extract_archives $gentop $dlprefiles
++	  func_append oldobjs " $func_extract_archives_result"
++	fi
 +
-+		    void gprof_cleanup() {}
- 		    int main(int argc,char *argv[],char *envp[]) {
- 	            #include "h/unrandomize.h"
- 		    return 0;}
-@@ -5999,8 +6185,9 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
--	            void gprof_cleanup() {};
++	# POSIX demands no paths to be encoded in archives.  We have
++	# to avoid creating archives with duplicate basenames if we
++	# might have to extract them afterwards, e.g., when creating a
++	# static archive out of a convenience library, or when linking
++	# the entirety of a libtool archive into another (currently
++	# not supported by libtool).
++	if (for obj in $oldobjs
++	    do
++	      func_basename "$obj"
++	      $ECHO "$func_basename_result"
++	    done | sort | sort -uc >/dev/null 2>&1); then
++	  :
++	else
++	  echo "copying selected object files to avoid basename conflicts..."
++	  gentop="$output_objdir/${outputname}x"
++	  func_append generated " $gentop"
++	  func_mkdir_p "$gentop"
++	  save_oldobjs=$oldobjs
++	  oldobjs=
++	  counter=1
++	  for obj in $save_oldobjs
++	  do
++	    func_basename "$obj"
++	    objbase="$func_basename_result"
++	    case " $oldobjs " in
++	    " ") oldobjs=$obj ;;
++	    *[\ /]"$objbase "*)
++	      while :; do
++		# Make sure we don't pick an alternate name that also
++		# overlaps.
++		newobj=lt$counter-$objbase
++		func_arith $counter + 1
++		counter=$func_arith_result
++		case " $oldobjs " in
++		*[\ /]"$newobj "*) ;;
++		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
++		esac
++	      done
++	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
++	      func_append oldobjs " $gentop/$newobj"
++	      ;;
++	    *) func_append oldobjs " $obj" ;;
++	    esac
++	  done
++	fi
++	eval cmds=\"$old_archive_cmds\"
 +
-+		    #include <stdio.h>
-+	            void gprof_cleanup() {}
- 		    int main(int argc,char * argv[],char * envp[]) {
- 			FILE *f;
- 			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -6020,17 +6207,16 @@
- fi
++	func_len " $cmds"
++	len=$func_len_result
++	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++	  cmds=$old_archive_cmds
++	elif test -n "$archiver_list_spec"; then
++	  func_verbose "using command file archive linking..."
++	  for obj in $oldobjs
++	  do
++	    func_to_tool_file "$obj"
++	    $ECHO "$func_to_tool_file_result"
++	  done > $output_objdir/$libname.libcmd
++	  func_to_tool_file "$output_objdir/$libname.libcmd"
++	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
++	  cmds=$old_archive_cmds
++	else
++	  # the command line is too long to link in one step, link in parts
++	  func_verbose "using piecewise archive linking..."
+ 	  save_RANLIB=$RANLIB
+ 	  RANLIB=:
+-          objlist=
+-          concat_cmds=
+-          save_oldobjs=$oldobjs
+-          for obj in $save_oldobjs
+-          do
+-            oldobjs="$objlist $obj"
+-            objlist="$objlist $obj"
+-            eval test_cmds=\"$old_archive_cmds\"
+-            if len=`expr "X$test_cmds" : ".*"` &&
+-               test $len -le $max_cmd_len; then
+-              :
+-            else
+-              # the above command should be used before it gets too long
+-              oldobjs=$objlist
++	  objlist=
++	  concat_cmds=
++	  save_oldobjs=$oldobjs
++	  oldobjs=
++	  # Is there a better way of finding the last object in the list?
++	  for obj in $save_oldobjs
++	  do
++	    last_oldobj=$obj
++	  done
++	  eval test_cmds=\"$old_archive_cmds\"
++	  func_len " $test_cmds"
++	  len0=$func_len_result
++	  len=$len0
++	  for obj in $save_oldobjs
++	  do
++	    func_len " $obj"
++	    func_arith $len + $func_len_result
++	    len=$func_arith_result
++	    func_append objlist " $obj"
++	    if test "$len" -lt "$max_cmd_len"; then
++	      :
++	    else
++	      # the above command should be used before it gets too long
++	      oldobjs=$objlist
++	      if test "$obj" = "$last_oldobj" ; then
++		RANLIB=$save_RANLIB
++	      fi
+ 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+-              eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+-              objlist=
+-            fi
+-          done
++	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
++	      objlist=
++	      len=$len0
++	    fi
++	  done
+ 	  RANLIB=$save_RANLIB
+-          oldobjs=$objlist
+-          eval cmds=\"\$concat_cmds~$old_archive_cmds\"
+-        fi
++	  oldobjs=$objlist
++	  if test "X$oldobjs" = "X" ; then
++	    eval cmds=\"\$concat_cmds\"
++	  else
++	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
++	  fi
++	fi
+       fi
+-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-      for cmd in $cmds; do
+-	IFS="$save_ifs"
+-	$show "$cmd"
+-	$run eval "$cmd" || exit $?
+-      done
+-      IFS="$save_ifs"
++      func_execute_cmds "$cmds" 'exit $?'
+     done
  
- 	if test "$SBRK" = "0" ; then
--		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot trap sbrk" >&5
--$as_echo "cannot trap sbrk" >&6; }
--		exit 1
-+		as_fn_error 1 "cannot trap sbrk" "$LINENO" 5
- 	fi
- 	if test "$cross_compiling" = yes; then :
-   SBRK1=0
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
--                    void gprof_cleanup() {};
-+
-+		    #include <stdio.h>
-+                    void gprof_cleanup() {}
- 		    int main(int argc,char * argv[],char * envp[]) {
- 			FILE *f;
- 			#ifdef CAN_UNRANDOMIZE_SBRK
-@@ -6050,9 +6236,7 @@
- fi
+-    if test -n "$generated"; then
+-      $show "${rm}r$generated"
+-      $run ${rm}r$generated
+-    fi
++    test -n "$generated" && \
++      func_show_eval "${RM}r$generated"
  
- 	if test "$SBRK1" = "0" ; then
--		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot trap sbrk" >&5
--$as_echo "cannot trap sbrk" >&6; }
--		exit 1
-+		as_fn_error 1 "cannot trap sbrk" "$LINENO" 5
+     # Now create the libtool archive.
+     case $output in
+     *.la)
+       old_library=
+       test "$build_old_libs" = yes && old_library="$libname.$libext"
+-      $show "creating $output"
++      func_verbose "creating $output"
+ 
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+ 	if eval test -z \"\${$var+set}\"; then
+-	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
++	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ 	elif eval var_value=\$$var; test -z "$var_value"; then
+ 	  relink_command="$var=; export $var; $relink_command"
+ 	else
+-	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+-	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
++	  func_quote_for_eval "$var_value"
++	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
  	fi
- 	if test "$SBRK" = "$SBRK1" ; then
- 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-@@ -6076,14 +6260,23 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <stdio.h>
-+
-+	    #include <stdio.h>
-             #include <unistd.h>
--int main() {size_t i=getpagesize(),j;
-+
-+int
-+main ()
-+{
-+
-+	    size_t i=getpagesize(),j;
- 	    FILE *fp=fopen("conftest1","w");
- 	    for (j=0;i>>=1;j++);
- 	    if (j<12) {printf("pagewidth %u is too small\n",j);return -1;}
- 	    fprintf(fp,"%u",j);
--	    return 0;}
-+	    return 0;
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   PAGEWIDTH=`cat conftest1`
-@@ -6105,17 +6298,18 @@
+       done
+       # Quote the link command for shipping.
+-      tagopts=
+-      for tag in $taglist; do
+-        tagopts="$tagopts --tag $tag"
+-      done
+-      relink_command="(cd `pwd`; $SHELL $0$tagopts --mode=relink $libtool_args)"
+-      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
++      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
++      if test "$hardcode_automatic" = yes ; then
++	relink_command=
++      fi
  
- old_LDFLAGS="$LDFLAGS"
- LDFLAGS="$TLDFLAGS"
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"finding DBEGIN\"" >&5
--$as_echo_n "checking \"finding DBEGIN\"... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking finding DBEGIN" >&5
-+$as_echo_n "checking finding DBEGIN... " >&6; }
- if test "$cross_compiling" = yes; then :
-   dbegin=0
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
+       # Only create the output if not a dry run.
+-      if test -z "$run"; then
++      $opt_dry_run || {
+ 	for installed in no yes; do
+ 	  if test "$installed" = yes; then
+ 	    if test -z "$install_libdir"; then
+@@ -4328,50 +9259,108 @@
+ 	    for deplib in $dependency_libs; do
+ 	      case $deplib in
+ 	      *.la)
+-		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+-		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+-		if test -z "$libdir"; then
+-		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+-		  exit 1
+-		fi
+-		newdependency_libs="$newdependency_libs $libdir/$name"
++		func_basename "$deplib"
++		name="$func_basename_result"
++		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++		test -z "$libdir" && \
++		  func_fatal_error "\`$deplib' is not a valid libtool archive"
++		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ 		;;
+-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
++	      -L*)
++		func_stripname -L '' "$deplib"
++		func_replace_sysroot "$func_stripname_result"
++		func_append newdependency_libs " -L$func_replace_sysroot_result"
++		;;
++	      -R*)
++		func_stripname -R '' "$deplib"
++		func_replace_sysroot "$func_stripname_result"
++		func_append newdependency_libs " -R$func_replace_sysroot_result"
++		;;
++	      *) func_append newdependency_libs " $deplib" ;;
+ 	      esac
+ 	    done
+ 	    dependency_libs="$newdependency_libs"
+ 	    newdlfiles=
 +
- #include <stdio.h>
--            #include <stdlib.h>
-+#include <stdlib.h>
- 
--void gprof_cleanup() {};
-+void gprof_cleanup() {}
- int
- main(int argc,char * argv[],char *envp[])
- {
-@@ -6160,21 +6354,28 @@
- LDFLAGS="$old_LDFLAGS"
- 
+ 	    for lib in $dlfiles; do
+-	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+-	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+-	      if test -z "$libdir"; then
+-		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+-		exit 1
+-	      fi
+-	      newdlfiles="$newdlfiles $libdir/$name"
++	      case $lib in
++	      *.la)
++	        func_basename "$lib"
++		name="$func_basename_result"
++		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
++		test -z "$libdir" && \
++		  func_fatal_error "\`$lib' is not a valid libtool archive"
++		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
++		;;
++	      *) func_append newdlfiles " $lib" ;;
++	      esac
+ 	    done
+ 	    dlfiles="$newdlfiles"
+ 	    newdlprefiles=
+ 	    for lib in $dlprefiles; do
+-	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+-	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+-	      if test -z "$libdir"; then
+-		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+-		exit 1
+-	      fi
+-	      newdlprefiles="$newdlprefiles $libdir/$name"
++	      case $lib in
++	      *.la)
++		# Only pass preopened files to the pseudo-archive (for
++		# eventual linking with the app. that links it) if we
++		# didn't already link the preopened objects directly into
++		# the library:
++		func_basename "$lib"
++		name="$func_basename_result"
++		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
++		test -z "$libdir" && \
++		  func_fatal_error "\`$lib' is not a valid libtool archive"
++		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
++		;;
++	      esac
++	    done
++	    dlprefiles="$newdlprefiles"
++	  else
++	    newdlfiles=
++	    for lib in $dlfiles; do
++	      case $lib in
++		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
++		*) abs=`pwd`"/$lib" ;;
++	      esac
++	      func_append newdlfiles " $abs"
++	    done
++	    dlfiles="$newdlfiles"
++	    newdlprefiles=
++	    for lib in $dlprefiles; do
++	      case $lib in
++		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
++		*) abs=`pwd`"/$lib" ;;
++	      esac
++	      func_append newdlprefiles " $abs"
+ 	    done
+ 	    dlprefiles="$newdlprefiles"
+ 	  fi
+-	  $rm $output
++	  $RM $output
+ 	  # place dlname in correct position for cygwin
++	  # In fact, it would be nice if we could use this code for all target
++	  # systems that can't hard-code library paths into their executables
++	  # and that have no shared library path variable independent of PATH,
++	  # but it turns out we can't easily determine that from inspecting
++	  # libtool variables, so we have to hard-code the OSs to which it
++	  # applies here; at the moment, that means platforms that use the PE
++	  # object format with DLL files.  See the long comment at the top of
++	  # tests/bindir.at for full details.
+ 	  tdlname=$dlname
+ 	  case $host,$output,$installed,$module,$dlname in
+-	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
++	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
++	      # If a -bindir argument was supplied, place the dll there.
++	      if test "x$bindir" != x ;
++	      then
++		func_relative_path "$install_libdir" "$bindir"
++		tdlname=$func_relative_path_result$dlname
++	      else
++		# Otherwise fall back on heuristic.
++		tdlname=../bin/$dlname
++	      fi
++	      ;;
+ 	  esac
+-	  $echo > $output "\
++	  $ECHO > $output "\
+ # $outputname - a libtool library file
+-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+ #
+ # Please DO NOT delete this file!
+ # It is necessary for linking the library.
+@@ -4385,9 +9374,15 @@
+ # The name of the static archive.
+ old_library='$old_library'
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"finding CSTACK_ADDRESS\"" >&5
--$as_echo_n "checking \"finding CSTACK_ADDRESS\"... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking finding CSTACK_ADDRESS" >&5
-+$as_echo_n "checking finding CSTACK_ADDRESS... " >&6; }
- if test "$cross_compiling" = yes; then :
-   cstack_address=0
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-+
- #include <stdio.h>
--main()
++# Linker flags that can not go in dependency_libs.
++inherited_linker_flags='$new_inherited_linker_flags'
 +
-+int
-+main ()
- {
+ # Libraries that this one depends upon.
+ dependency_libs='$dependency_libs'
+ 
++# Names of additional weak libraries provided by this library
++weak_library_names='$weak_libs'
 +
-   char *b ;
-   FILE *fp = fopen("conftest1","w");
-   fprintf(fp,"%ld",((long) &b));
-   fclose(fp);
-   return 0;
+ # Version information for $libname.
+ current=$current
+ age=$age
+@@ -4396,692 +9391,39 @@
+ # Is this an already installed library?
+ installed=$installed
+ 
++# Should we warn about portability when linking against -modules?
++shouldnotlink=$module
 +
-+  ;
-+  return 0;
- }
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-@@ -6196,8 +6397,8 @@
+ # Files to dlopen/dlpreopen
+ dlopen='$dlfiles'
+ dlpreopen='$dlprefiles'
  
+ # Directory that this library needs to be installed in:
+ libdir='$install_libdir'"
+-	  if test "$installed" = no && test $need_relink = yes; then
+-	    $echo >> $output "\
++	  if test "$installed" = no && test "$need_relink" = yes; then
++	    $ECHO >> $output "\
+ relink_command=\"$relink_command\""
+ 	  fi
+ 	done
+-      fi
++      }
  
+       # Do a symbolic link so that the libtool archive can be found in
+       # LD_LIBRARY_PATH before the program is installed.
+-      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+-      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+-      ;;
+-    esac
+-    exit 0
+-    ;;
+-
+-  # libtool install mode
+-  install)
+-    modename="$modename: install"
+-
+-    # There may be an optional sh(1) argument at the beginning of
+-    # install_prog (especially on Windows NT).
+-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+-       # Allow the use of GNU shtool's install command.
+-       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+-      # Aesthetically quote it.
+-      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+-      case $arg in
+-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+-	arg="\"$arg\""
+-	;;
+-      esac
+-      install_prog="$arg "
+-      arg="$1"
+-      shift
+-    else
+-      install_prog=
+-      arg="$nonopt"
+-    fi
+-
+-    # The real first argument should be the name of the installation program.
+-    # Aesthetically quote it.
+-    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+-    case $arg in
+-    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+-      arg="\"$arg\""
+-      ;;
+-    esac
+-    install_prog="$install_prog$arg"
+-
+-    # We need to accept at least all the BSD install flags.
+-    dest=
+-    files=
+-    opts=
+-    prev=
+-    install_type=
+-    isdir=no
+-    stripme=
+-    for arg
+-    do
+-      if test -n "$dest"; then
+-	files="$files $dest"
+-	dest="$arg"
+-	continue
+-      fi
+-
+-      case $arg in
+-      -d) isdir=yes ;;
+-      -f) prev="-f" ;;
+-      -g) prev="-g" ;;
+-      -m) prev="-m" ;;
+-      -o) prev="-o" ;;
+-      -s)
+-	stripme=" -s"
+-	continue
+-	;;
+-      -*) ;;
+-
+-      *)
+-	# If the previous option needed an argument, then skip it.
+-	if test -n "$prev"; then
+-	  prev=
+-	else
+-	  dest="$arg"
+-	  continue
+-	fi
+-	;;
+-      esac
+-
+-      # Aesthetically quote the argument.
+-      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+-      case $arg in
+-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+-	arg="\"$arg\""
+-	;;
+-      esac
+-      install_prog="$install_prog $arg"
+-    done
+-
+-    if test -z "$install_prog"; then
+-      $echo "$modename: you must specify an install program" 1>&2
+-      $echo "$help" 1>&2
+-      exit 1
+-    fi
+-
+-    if test -n "$prev"; then
+-      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+-      $echo "$help" 1>&2
+-      exit 1
+-    fi
+-
+-    if test -z "$files"; then
+-      if test -z "$dest"; then
+-	$echo "$modename: no file or destination specified" 1>&2
+-      else
+-	$echo "$modename: you must specify a destination" 1>&2
+-      fi
+-      $echo "$help" 1>&2
+-      exit 1
+-    fi
+-
+-    # Strip any trailing slash from the destination.
+-    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+-
+-    # Check to see that the destination is a directory.
+-    test -d "$dest" && isdir=yes
+-    if test "$isdir" = yes; then
+-      destdir="$dest"
+-      destname=
+-    else
+-      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+-      test "X$destdir" = "X$dest" && destdir=.
+-      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+-
+-      # Not a directory, so check to see that there is only one file specified.
+-      set dummy $files
+-      if test $# -gt 2; then
+-	$echo "$modename: \`$dest' is not a directory" 1>&2
+-	$echo "$help" 1>&2
+-	exit 1
+-      fi
+-    fi
+-    case $destdir in
+-    [\\/]* | [A-Za-z]:[\\/]*) ;;
+-    *)
+-      for file in $files; do
+-	case $file in
+-	*.lo) ;;
+-	*)
+-	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+-	  $echo "$help" 1>&2
+-	  exit 1
+-	  ;;
+-	esac
+-      done
++      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+       ;;
+     esac
++    exit $EXIT_SUCCESS
++}
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking \"sizeof long long int\"" >&5
--$as_echo_n "checking \"sizeof long long int\"... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking sizeof long long int" >&5
-+$as_echo_n "checking sizeof long long int... " >&6; }
- if test "$cross_compiling" = yes; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
-@@ -6205,13 +6406,19 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-+
- #include <stdio.h>
--main()
-+
-+int
-+main ()
- {
-+
-   if (sizeof(long long int) == 2*sizeof(long)) return 0;
-   return 1;
--}
+-    # This variable tells wrapper scripts just to set variables rather
+-    # than running their programs.
+-    libtool_install_magic="$magic"
+-
+-    staticlibs=
+-    future_libdirs=
+-    current_libdirs=
+-    for file in $files; do
+-
+-      # Do each installation.
+-      case $file in
+-      *.$libext)
+-	# Do the static libraries later.
+-	staticlibs="$staticlibs $file"
+-	;;
+-
+-      *.la)
+-	# Check to see that this really is a libtool archive.
+-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+-	else
+-	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+-	  $echo "$help" 1>&2
+-	  exit 1
+-	fi
+-
+-	library_names=
+-	old_library=
+-	relink_command=
+-	# If there is no directory component, then add one.
+-	case $file in
+-	*/* | *\\*) . $file ;;
+-	*) . ./$file ;;
+-	esac
+-
+-	# Add the libdir to current_libdirs if it is the destination.
+-	if test "X$destdir" = "X$libdir"; then
+-	  case "$current_libdirs " in
+-	  *" $libdir "*) ;;
+-	  *) current_libdirs="$current_libdirs $libdir" ;;
+-	  esac
+-	else
+-	  # Note the libdir as a future libdir.
+-	  case "$future_libdirs " in
+-	  *" $libdir "*) ;;
+-	  *) future_libdirs="$future_libdirs $libdir" ;;
+-	  esac
+-	fi
+-
+-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+-	test "X$dir" = "X$file/" && dir=
+-	dir="$dir$objdir"
+-
+-	if test -n "$relink_command"; then
+-	  $echo "$modename: warning: relinking \`$file'" 1>&2
+-	  $show "$relink_command"
+-	  if $run eval "$relink_command"; then :
+-	  else
+-	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+-	    exit 1
+-	  fi
+-	fi
+-
+-	# See the names of the shared library.
+-	set dummy $library_names
+-	if test -n "$2"; then
+-	  realname="$2"
+-	  shift
+-	  shift
+-
+-	  srcname="$realname"
+-	  test -n "$relink_command" && srcname="$realname"T
+-
+-	  # Install the shared library and build the symlinks.
+-	  $show "$install_prog $dir/$srcname $destdir/$realname"
+-	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+-	  if test -n "$stripme" && test -n "$striplib"; then
+-	    $show "$striplib $destdir/$realname"
+-	    $run eval "$striplib $destdir/$realname" || exit $?
+-	  fi
+-
+-	  if test $# -gt 0; then
+-	    # Delete the old symlinks, and create new ones.
+-	    for linkname
+-	    do
+-	      if test "$linkname" != "$realname"; then
+-		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+-		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+-	      fi
+-	    done
+-	  fi
+-
+-	  # Do each command in the postinstall commands.
+-	  lib="$destdir/$realname"
+-	  eval cmds=\"$postinstall_cmds\"
+-	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	  for cmd in $cmds; do
+-	    IFS="$save_ifs"
+-	    $show "$cmd"
+-	    $run eval "$cmd" || exit $?
+-	  done
+-	  IFS="$save_ifs"
+-	fi
+-
+-	# Install the pseudo-library for information purposes.
+-	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+-	instname="$dir/$name"i
+-	$show "$install_prog $instname $destdir/$name"
+-	$run eval "$install_prog $instname $destdir/$name" || exit $?
+-
+-	# Maybe install the static library, too.
+-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+-	;;
+-
+-      *.lo)
+-	# Install (i.e. copy) a libtool object.
+-
+-	# Figure out destination file name, if it wasn't already specified.
+-	if test -n "$destname"; then
+-	  destfile="$destdir/$destname"
+-	else
+-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+-	  destfile="$destdir/$destfile"
+-	fi
+-
+-	# Deduce the name of the destination old-style object file.
+-	case $destfile in
+-	*.lo)
+-	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+-	  ;;
+-	*.$objext)
+-	  staticdest="$destfile"
+-	  destfile=
+-	  ;;
+-	*)
+-	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+-	  $echo "$help" 1>&2
+-	  exit 1
+-	  ;;
+-	esac
+-
+-	# Install the libtool object if requested.
+-	if test -n "$destfile"; then
+-	  $show "$install_prog $file $destfile"
+-	  $run eval "$install_prog $file $destfile" || exit $?
+-	fi
+-
+-	# Install the old object if enabled.
+-	if test "$build_old_libs" = yes; then
+-	  # Deduce the name of the old-style object file.
+-	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+-
+-	  $show "$install_prog $staticobj $staticdest"
+-	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+-	fi
+-	exit 0
+-	;;
+-
+-      *)
+-	# Figure out destination file name, if it wasn't already specified.
+-	if test -n "$destname"; then
+-	  destfile="$destdir/$destname"
+-	else
+-	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+-	  destfile="$destdir/$destfile"
+-	fi
+-
+-	# Do a test to see if this is really a libtool program.
+-	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+-	  notinst_deplibs=
+-	  relink_command=
+-
+-	  # If there is no directory component, then add one.
+-	  case $file in
+-	  */* | *\\*) . $file ;;
+-	  *) . ./$file ;;
+-	  esac
+-
+-	  # Check the variables that should have been set.
+-	  if test -z "$notinst_deplibs"; then
+-	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
+-	    exit 1
+-	  fi
+-
+-	  finalize=yes
+-	  for lib in $notinst_deplibs; do
+-	    # Check to see that each library is installed.
+-	    libdir=
+-	    if test -f "$lib"; then
+-	      # If there is no directory component, then add one.
+-	      case $lib in
+-	      */* | *\\*) . $lib ;;
+-	      *) . ./$lib ;;
+-	      esac
+-	    fi
+-	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+-	    if test -n "$libdir" && test ! -f "$libfile"; then
+-	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+-	      finalize=no
+-	    fi
+-	  done
+-
+-	  relink_command=
+-	  # If there is no directory component, then add one.
+-	  case $file in
+-	  */* | *\\*) . $file ;;
+-	  *) . ./$file ;;
+-	  esac
+-
+-	  outputname=
+-	  if test "$fast_install" = no && test -n "$relink_command"; then
+-	    if test "$finalize" = yes && test -z "$run"; then
+-	      tmpdir="/tmp"
+-	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
+-	      tmpdir="$tmpdir/libtool-$$"
+-	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
+-	      else
+-		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+-		continue
+-	      fi
+-	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+-	      outputname="$tmpdir/$file"
+-	      # Replace the output file specification.
+-	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+-
+-	      $show "$relink_command"
+-	      if $run eval "$relink_command"; then :
+-	      else
+-		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+-		${rm}r "$tmpdir"
+-		continue
+-	      fi
+-	      file="$outputname"
+-	    else
+-	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
+-	    fi
+-	  else
+-	    # Install the binary that we compiled earlier.
+-	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+-	  fi
+-	fi
+-
+-
+-	# remove .exe since cygwin /usr/bin/install will append another
+-	# one anyways
+-	case $install_prog,$host in
+-	*/usr/bin/install*,*cygwin*)
+-	  case $file:$destfile in
+-	  *.exe:*.exe)
+-	    # this is ok
+-	    ;;
+-	  *.exe:*)
+-	    destfile=$destfile.exe
+-	    ;;
+-	  *:*.exe)
+-	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
+-	    ;;
+-	  esac
+-	  ;;
+-	esac
+-
+-	$show "$install_prog$stripme $file $destfile"
+-	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+-	test -n "$outputname" && ${rm}r "$tmpdir"
+-	;;
+-      esac
+-    done
+-
+-    for file in $staticlibs; do
+-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+-
+-      # Set up the ranlib parameters.
+-      oldlib="$destdir/$name"
+-
+-      $show "$install_prog $file $oldlib"
+-      $run eval "$install_prog \$file \$oldlib" || exit $?
+-
+-      if test -n "$stripme" && test -n "$striplib"; then
+-	$show "$old_striplib $oldlib"
+-	$run eval "$old_striplib $oldlib" || exit $?
+-      fi
+-
+-      # Do each command in the postinstall commands.
+-      eval cmds=\"$old_postinstall_cmds\"
+-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-      for cmd in $cmds; do
+-	IFS="$save_ifs"
+-	$show "$cmd"
+-	$run eval "$cmd" || exit $?
+-      done
+-      IFS="$save_ifs"
+-    done
+-
+-    if test -n "$future_libdirs"; then
+-      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+-    fi
+-
+-    if test -n "$current_libdirs"; then
+-      # Maybe just do a dry run.
+-      test -n "$run" && current_libdirs=" -n$current_libdirs"
+-      exec_cmd='$SHELL $0 --finish$current_libdirs'
+-    else
+-      exit 0
+-    fi
+-    ;;
+-
+-  # libtool finish mode
+-  finish)
+-    modename="$modename: finish"
+-    libdirs="$nonopt"
+-    admincmds=
+-
+-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+-      for dir
+-      do
+-	libdirs="$libdirs $dir"
+-      done
+-
+-      for libdir in $libdirs; do
+-	if test -n "$finish_cmds"; then
+-	  # Do each command in the finish commands.
+-	  eval cmds=\"$finish_cmds\"
+-	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	  for cmd in $cmds; do
+-	    IFS="$save_ifs"
+-	    $show "$cmd"
+-	    $run eval "$cmd" || admincmds="$admincmds
+-       $cmd"
+-	  done
+-	  IFS="$save_ifs"
+-	fi
+-	if test -n "$finish_eval"; then
+-	  # Do the single finish_eval.
+-	  eval cmds=\"$finish_eval\"
+-	  $run eval "$cmds" || admincmds="$admincmds
+-       $cmds"
+-	fi
+-      done
+-    fi
+-
+-    # Exit here if they wanted silent mode.
+-    test "$show" = ":" && exit 0
+-
+-    echo "----------------------------------------------------------------------"
+-    echo "Libraries have been installed in:"
+-    for libdir in $libdirs; do
+-      echo "   $libdir"
+-    done
+-    echo
+-    echo "If you ever happen to want to link against installed libraries"
+-    echo "in a given directory, LIBDIR, you must either use libtool, and"
+-    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+-    echo "flag during linking and do at least one of the following:"
+-    if test -n "$shlibpath_var"; then
+-      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+-      echo "     during execution"
+-    fi
+-    if test -n "$runpath_var"; then
+-      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+-      echo "     during linking"
+-    fi
+-    if test -n "$hardcode_libdir_flag_spec"; then
+-      libdir=LIBDIR
+-      eval flag=\"$hardcode_libdir_flag_spec\"
+-
+-      echo "   - use the \`$flag' linker flag"
+-    fi
+-    if test -n "$admincmds"; then
+-      echo "   - have your system administrator run these commands:$admincmds"
+-    fi
+-    if test -f /etc/ld.so.conf; then
+-      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+-    fi
+-    echo
+-    echo "See any operating system documentation about shared libraries for"
+-    echo "more information, such as the ld(1) and ld.so(8) manual pages."
+-    echo "----------------------------------------------------------------------"
+-    exit 0
+-    ;;
+-
+-  # libtool execute mode
+-  execute)
+-    modename="$modename: execute"
+-
+-    # The first argument is the command name.
+-    cmd="$nonopt"
+-    if test -z "$cmd"; then
+-      $echo "$modename: you must specify a COMMAND" 1>&2
+-      $echo "$help"
+-      exit 1
+-    fi
+-
+-    # Handle -dlopen flags immediately.
+-    for file in $execute_dlfiles; do
+-      if test ! -f "$file"; then
+-	$echo "$modename: \`$file' is not a file" 1>&2
+-	$echo "$help" 1>&2
+-	exit 1
+-      fi
+-
+-      dir=
+-      case $file in
+-      *.la)
+-	# Check to see that this really is a libtool archive.
+-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+-	else
+-	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+-	  $echo "$help" 1>&2
+-	  exit 1
+-	fi
+-
+-	# Read the libtool library.
+-	dlname=
+-	library_names=
+-
+-	# If there is no directory component, then add one.
+-	case $file in
+-	*/* | *\\*) . $file ;;
+-	*) . ./$file ;;
+-	esac
+-
+-	# Skip this library if it cannot be dlopened.
+-	if test -z "$dlname"; then
+-	  # Warn if it was a shared library.
+-	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+-	  continue
+-	fi
+-
+-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+-	test "X$dir" = "X$file" && dir=.
+-
+-	if test -f "$dir/$objdir/$dlname"; then
+-	  dir="$dir/$objdir"
+-	else
+-	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+-	  exit 1
+-	fi
+-	;;
+-
+-      *.lo)
+-	# Just add the directory containing the .lo file.
+-	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+-	test "X$dir" = "X$file" && dir=.
+-	;;
+-
+-      *)
+-	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+-	continue
+-	;;
+-      esac
+-
+-      # Get the absolute pathname.
+-      absdir=`cd "$dir" && pwd`
+-      test -n "$absdir" && dir="$absdir"
+-
+-      # Now add the directory to shlibpath_var.
+-      if eval "test -z \"\$$shlibpath_var\""; then
+-	eval "$shlibpath_var=\"\$dir\""
+-      else
+-	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+-      fi
+-    done
+-
+-    # This variable tells wrapper scripts just to set shlibpath_var
+-    # rather than running their programs.
+-    libtool_execute_magic="$magic"
+-
+-    # Check if any of the arguments is a wrapper script.
+-    args=
+-    for file
+-    do
+-      case $file in
+-      -*) ;;
+-      *)
+-	# Do a test to see if this is really a libtool program.
+-	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+-	  # If there is no directory component, then add one.
+-	  case $file in
+-	  */* | *\\*) . $file ;;
+-	  *) . ./$file ;;
+-	  esac
+-
+-	  # Transform arg to wrapped name.
+-	  file="$progdir/$program"
+-	fi
+-	;;
+-      esac
+-      # Quote arguments (to preserve shell metacharacters).
+-      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+-      args="$args \"$file\""
+-    done
+-
+-    if test -z "$run"; then
+-      if test -n "$shlibpath_var"; then
+-	# Export the shlibpath_var.
+-	eval "export $shlibpath_var"
+-      fi
+-
+-      # Restore saved enviroment variables
+-      if test "${save_LC_ALL+set}" = set; then
+-	LC_ALL="$save_LC_ALL"; export LC_ALL
+-      fi
+-      if test "${save_LANG+set}" = set; then
+-	LANG="$save_LANG"; export LANG
+-      fi
++{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
++    func_mode_link ${1+"$@"}
  
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
-   $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
-@@ -6752,8 +6959,6 @@
- #	   To get around this problem, check for both libraries together
- #	   if -lsocket doesn't work by itself.
- #--------------------------------------------------------------------
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockets" >&5
--$as_echo_n "checking for sockets... " >&6; }
- tcl_checkBoth=0
- ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
- if test "x$ac_cv_func_connect" = xyes; then :
-@@ -6965,8 +7170,8 @@
+-      # Now prepare to actually exec the command.
+-      exec_cmd='"$cmd"$args'
+-    else
+-      # Display what would be done.
+-      if test -n "$shlibpath_var"; then
+-	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+-	$echo "export $shlibpath_var"
+-      fi
+-      $echo "$cmd$args"
+-      exit 0
+-    fi
+-    ;;
  
+-  # libtool clean and uninstall mode
+-  clean | uninstall)
+-    modename="$modename: $mode"
+-    rm="$nonopt"
++# func_mode_uninstall arg...
++func_mode_uninstall ()
++{
++    $opt_debug
++    RM="$nonopt"
+     files=
+     rmforce=
+     exit_status=0
+@@ -5093,49 +9435,47 @@
+     for arg
+     do
+       case $arg in
+-      -f) rm="$rm $arg"; rmforce=yes ;;
+-      -*) rm="$rm $arg" ;;
+-      *) files="$files $arg" ;;
++      -f) func_append RM " $arg"; rmforce=yes ;;
++      -*) func_append RM " $arg" ;;
++      *) func_append files " $arg" ;;
+       esac
+     done
  
+-    if test -z "$rm"; then
+-      $echo "$modename: you must specify an RM program" 1>&2
+-      $echo "$help" 1>&2
+-      exit 1
+-    fi
++    test -z "$RM" && \
++      func_fatal_help "you must specify an RM program"
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking For network code for nsocket.c" >&5
--$as_echo_n "checking For network code for nsocket.c... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for network code for nsocket.c" >&5
-+$as_echo_n "checking for network code for nsocket.c... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
+     rmdirs=
  
-@@ -6990,7 +7195,7 @@
- int
- main ()
- {
-- connect(0,(struct sockaddr *)0,0);
-+connect(0,(struct sockaddr *)0,0);
-     gethostbyname("jil");
-     socket(AF_INET, SOCK_STREAM, 0);
+     for file in $files; do
+-      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+-      if test "X$dir" = "X$file"; then
+-	dir=.
+-	objdir="$objdir"
++      func_dirname "$file" "" "."
++      dir="$func_dirname_result"
++      if test "X$dir" = X.; then
++	odir="$objdir"
+       else
+-	objdir="$dir/$objdir"
++	odir="$dir/$objdir"
+       fi
+-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+-      test $mode = uninstall && objdir="$dir"
++      func_basename "$file"
++      name="$func_basename_result"
++      test "$opt_mode" = uninstall && odir="$dir"
  
-@@ -7011,10 +7216,11 @@
-     conftest$ac_exeext conftest.$ac_ext
+-      # Remember objdir for removal later, being careful to avoid duplicates
+-      if test $mode = clean; then
++      # Remember odir for removal later, being careful to avoid duplicates
++      if test "$opt_mode" = clean; then
+ 	case " $rmdirs " in
+-	  *" $objdir "*) ;;
+-	  *) rmdirs="$rmdirs $objdir" ;;
++	  *" $odir "*) ;;
++	  *) func_append rmdirs " $odir" ;;
+ 	esac
+       fi
  
+       # Don't error if the file doesn't exist and rm -f was used.
+-      if (test -L "$file") >/dev/null 2>&1 \
+-        || (test -h "$file") >/dev/null 2>&1 \
+-	|| test -f "$file"; then
+-        :
++      if { test -L "$file"; } >/dev/null 2>&1 ||
++	 { test -h "$file"; } >/dev/null 2>&1 ||
++	 test -f "$file"; then
++	:
+       elif test -d "$file"; then
+-        exit_status=1
++	exit_status=1
+ 	continue
+       elif test "$rmforce" = yes; then
+-        continue
++	continue
+       fi
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for listen using fcntl" >&5
--$as_echo_n "checking check for listen using fcntl... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for listen using fcntl" >&5
-+$as_echo_n "checking for listen using fcntl... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-+
- #include <stdio.h>
- #include <fcntl.h>
+       rmfiles="$file"
+@@ -5143,312 +9483,130 @@
+       case $name in
+       *.la)
+ 	# Possibly a libtool archive, so verify it.
+-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+-	  . $dir/$name
++	if func_lalib_p "$file"; then
++	  func_source $dir/$name
  
-@@ -7090,7 +7296,7 @@
-   $EGREP "LITTLE_ENDIAN" >/dev/null 2>&1; then :
-   gcl_ok=yes
- else
--  gcl_ok=noo
-+  gcl_ok=no
- fi
- rm -f conftest*
+ 	  # Delete the libtool libraries and symlinks.
+ 	  for n in $library_names; do
+-	    rmfiles="$rmfiles $objdir/$n"
++	    func_append rmfiles " $odir/$n"
+ 	  done
+-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+-	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
++	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
  
-@@ -7134,17 +7340,17 @@
- esac
+-	  if test $mode = uninstall; then
++	  case "$opt_mode" in
++	  clean)
++	    case " $library_names " in
++	    *" $dlname "*) ;;
++	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
++	    esac
++	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
++	    ;;
++	  uninstall)
+ 	    if test -n "$library_names"; then
+ 	      # Do each command in the postuninstall commands.
+-	      eval cmds=\"$postuninstall_cmds\"
+-	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	      for cmd in $cmds; do
+-		IFS="$save_ifs"
+-		$show "$cmd"
+-		$run eval "$cmd"
+-		if test $? != 0 && test "$rmforce" != yes; then
+-		  exit_status=1
+-		fi
+-	      done
+-	      IFS="$save_ifs"
++	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ 	    fi
  
+ 	    if test -n "$old_library"; then
+ 	      # Do each command in the old_postuninstall commands.
+-	      eval cmds=\"$old_postuninstall_cmds\"
+-	      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+-	      for cmd in $cmds; do
+-		IFS="$save_ifs"
+-		$show "$cmd"
+-		$run eval "$cmd"
+-		if test $? != 0 && test "$rmforce" != yes; then
+-		  exit_status=1
+-		fi
+-	      done
+-	      IFS="$save_ifs"
++	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ 	    fi
+ 	    # FIXME: should reinstall the best remaining shared library.
+-	  fi
++	    ;;
++	  esac
+ 	fi
+ 	;;
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for SV_ONSTACK" >&5
--$as_echo_n "checking check for SV_ONSTACK... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SV_ONSTACK" >&5
-+$as_echo_n "checking for SV_ONSTACK... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-+
- #include <signal.h>
--int joe=SV_ONSTACK;
+       *.lo)
+ 	# Possibly a libtool object, so verify it.
+-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
++	if func_lalib_p "$file"; then
  
- int
- main ()
- {
--
-+return SV_ONSTACK;
-   ;
-   return 0;
- }
-@@ -7161,17 +7367,17 @@
- fi
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-          # Read the .lo file
+-          . $dir/$name
++	  # Read the .lo file
++	  func_source $dir/$name
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for SIGSYS" >&5
--$as_echo_n "checking check for SIGSYS... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGSYS" >&5
-+$as_echo_n "checking for SIGSYS... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-+
- #include <signal.h>
--int joe=SIGSYS;
+ 	  # Add PIC object to the list of files to remove.
+-          if test -n "$pic_object" \
+-             && test "$pic_object" != none; then
+-	    rmfiles="$rmfiles $dir/$pic_object"
+-          fi
++	  if test -n "$pic_object" &&
++	     test "$pic_object" != none; then
++	    func_append rmfiles " $dir/$pic_object"
++	  fi
  
- int
- main ()
- {
--
-+return SIGSYS;
-   ;
-   return 0;
- }
-@@ -7189,17 +7395,17 @@
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ 	  # Add non-PIC object to the list of files to remove.
+-          if test -n "$non_pic_object" \
+-             && test "$non_pic_object" != none; then
+-	    rmfiles="$rmfiles $dir/$non_pic_object"
+-          fi
++	  if test -n "$non_pic_object" &&
++	     test "$non_pic_object" != none; then
++	    func_append rmfiles " $dir/$non_pic_object"
++	  fi
+ 	fi
+ 	;;
+ 
+       *)
+-	# Do a test to see if this is a libtool program.
+-	if test $mode = clean &&
+-	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+-	  relink_command=
+-	  . $dir/$file
++	if test "$opt_mode" = clean ; then
++	  noexename=$name
++	  case $file in
++	  *.exe)
++	    func_stripname '' '.exe' "$file"
++	    file=$func_stripname_result
++	    func_stripname '' '.exe' "$name"
++	    noexename=$func_stripname_result
++	    # $file with .exe has already been added to rmfiles,
++	    # add $file without .exe
++	    func_append rmfiles " $file"
++	    ;;
++	  esac
++	  # Do a test to see if this is a libtool program.
++	  if func_ltwrapper_p "$file"; then
++	    if func_ltwrapper_executable_p "$file"; then
++	      func_ltwrapper_scriptname "$file"
++	      relink_command=
++	      func_source $func_ltwrapper_scriptname_result
++	      func_append rmfiles " $func_ltwrapper_scriptname_result"
++	    else
++	      relink_command=
++	      func_source $dir/$noexename
++	    fi
  
+-	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+-	  if test "$fast_install" = yes && test -n "$relink_command"; then
+-	    rmfiles="$rmfiles $objdir/lt-$name"
++	    # note $name still contains .exe if it was in $file originally
++	    # as does the version of $file that was added into $rmfiles
++	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
++	    if test "$fast_install" = yes && test -n "$relink_command"; then
++	      func_append rmfiles " $odir/lt-$name"
++	    fi
++	    if test "X$noexename" != "X$name" ; then
++	      func_append rmfiles " $odir/lt-${noexename}.c"
++	    fi
+ 	  fi
+ 	fi
+ 	;;
+       esac
+-      $show "$rm $rmfiles"
+-      $run $rm $rmfiles || exit_status=1
++      func_show_eval "$RM $rmfiles" 'exit_status=1'
+     done
  
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking check for SIGEMT" >&5
--$as_echo_n "checking check for SIGEMT... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGEMT" >&5
-+$as_echo_n "checking for SIGEMT... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-+
- #include <signal.h>
--int joe=SIGEMT;
+     # Try to remove the ${objdir}s in the directories where we deleted files
+     for dir in $rmdirs; do
+       if test -d "$dir"; then
+-	$show "rmdir $dir"
+-	$run rmdir $dir >/dev/null 2>&1
++	func_show_eval "rmdir $dir >/dev/null 2>&1"
+       fi
+     done
  
- int
- main ()
- {
--
-+return SIGEMT;
-   ;
-   return 0;
- }
-@@ -7244,11 +7450,12 @@
+     exit $exit_status
+-    ;;
++}
  
- done
+-  "")
+-    $echo "$modename: you must specify a MODE" 1>&2
+-    $echo "$generic_help" 1>&2
+-    exit 1
+-    ;;
+-  esac
++{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
++    func_mode_uninstall ${1+"$@"}
  
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext..." >&5
--$as_echo_n "checking for sigcontext...... " >&6; }
--        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext" >&5
-+$as_echo_n "checking for sigcontext... " >&6; }
-+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <signal.h>
+-  if test -z "$exec_cmd"; then
+-    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+-    $echo "$generic_help" 1>&2
+-    exit 1
+-  fi
+-fi # test -z "$show_help"
++test -z "$opt_mode" && {
++  help="$generic_help"
++  func_fatal_help "you must specify a MODE"
++}
 +
-+	#include <signal.h>
++test -z "$exec_cmd" && \
++  func_fatal_help "invalid operation mode \`$opt_mode'"
  
- int
- main ()
-@@ -7276,11 +7483,12 @@
+ if test -n "$exec_cmd"; then
+-  eval exec $exec_cmd
+-  exit 1
++  eval exec "$exec_cmd"
++  exit $EXIT_FAILURE
  fi
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-        if test "$sigcontext_works" = 0 ; then
--       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext..." >&5
--$as_echo_n "checking for sigcontext...... " >&6; }
-+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigcontext" >&5
-+$as_echo_n "checking for sigcontext... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <signal.h>
-+
-+             #include <signal.h>
-              #ifdef HAVE_ASM_SIGCONTEXT_H
-              #include <asm/sigcontext.h>
-              #endif
-@@ -7459,26 +7667,41 @@
  
- if test "$enable_tcltk" = "yes" ; then
- 
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcl/tk" >&5
--$as_echo_n "checking for tcl/tk... " >&6; }
+-# We need to display help for each of the modes.
+-case $mode in
+-"") $echo \
+-"Usage: $modename [OPTION]... [MODE-ARG]...
+-
+-Provide generalized library-building support services.
+-
+-    --config          show all configuration variables
+-    --debug           enable verbose shell tracing
+--n, --dry-run         display commands without modifying any files
+-    --features        display basic configuration information and exit
+-    --finish          same as \`--mode=finish'
+-    --help            display this help message and exit
+-    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+-    --quiet           same as \`--silent'
+-    --silent          don't print informational messages
+-    --tag=TAG         use configuration variables from tag TAG
+-    --version         print version information
+-
+-MODE must be one of the following:
+-
+-      clean           remove files from the build directory
+-      compile         compile a source file into a libtool object
+-      execute         automatically set library path, then run a program
+-      finish          complete the installation of libtool libraries
+-      install         install libraries or executables
+-      link            create a library or an executable
+-      uninstall       remove libraries from an installed directory
+-
+-MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+-a more detailed description of MODE."
+-  exit 0
+-  ;;
+-
+-clean)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+-
+-Remove files from the build directory.
+-
+-RM is the name of the program to use to delete files associated with each FILE
+-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+-to RM.
+-
+-If FILE is a libtool library, object or program, all the files associated
+-with it are deleted. Otherwise, only FILE itself is deleted using RM."
+-  ;;
+-
+-compile)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+-
+-Compile a source file into a libtool library object.
+-
+-This mode accepts the following additional options:
+-
+-  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+-  -prefer-pic       try to building PIC objects only
+-  -prefer-non-pic   try to building non-PIC objects only
+-  -static           always build a \`.o' file suitable for static linking
+-
+-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+-from the given SOURCEFILE.
+-
+-The output file name is determined by removing the directory component from
+-SOURCEFILE, then substituting the C source code suffix \`.c' with the
+-library object suffix, \`.lo'."
+-  ;;
+-
+-execute)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+-
+-Automatically set library path, then run a program.
+-
+-This mode accepts the following additional options:
+-
+-  -dlopen FILE      add the directory containing FILE to the library path
+-
+-This mode sets the library path environment variable according to \`-dlopen'
+-flags.
+-
+-If any of the ARGS are libtool executable wrappers, then they are translated
+-into their corresponding uninstalled binary, and any of their required library
+-directories are added to the library path.
+-
+-Then, COMMAND is executed, with ARGS as arguments."
+-  ;;
+-
+-finish)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+-
+-Complete the installation of libtool libraries.
+-
+-Each LIBDIR is a directory that contains libtool libraries.
+-
+-The commands that this mode executes may require superuser privileges.  Use
+-the \`--dry-run' option if you just want to see what would be executed."
+-  ;;
+-
+-install)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+-
+-Install executables or libraries.
+-
+-INSTALL-COMMAND is the installation command.  The first component should be
+-either the \`install' or \`cp' program.
+-
+-The rest of the components are interpreted as arguments to that command (only
+-BSD-compatible install options are recognized)."
+-  ;;
+-
+-link)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+-
+-Link object files or libraries together to form another library, or to
+-create an executable program.
+-
+-LINK-COMMAND is a command using the C compiler that you would use to create
+-a program from several object files.
+-
+-The following components of LINK-COMMAND are treated specially:
+-
+-  -all-static       do not do any dynamic linking at all
+-  -avoid-version    do not add a version suffix if possible
+-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+-  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+-  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+-  -export-symbols SYMFILE
+-		    try to export only the symbols listed in SYMFILE
+-  -export-symbols-regex REGEX
+-		    try to export only the symbols matching REGEX
+-  -LLIBDIR          search LIBDIR for required installed libraries
+-  -lNAME            OUTPUT-FILE requires the installed library libNAME
+-  -module           build a library that can dlopened
+-  -no-fast-install  disable the fast-install mode
+-  -no-install       link a not-installable executable
+-  -no-undefined     declare that a library does not refer to external symbols
+-  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+-  -objectlist FILE  Use a list of object files found in FILE to specify objects
+-  -release RELEASE  specify package release information
+-  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+-  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+-  -static           do not do any dynamic linking of libtool libraries
+-  -version-info CURRENT[:REVISION[:AGE]]
+-		    specify library version info [each variable defaults to 0]
 -
+-All other options (arguments beginning with \`-') are ignored.
 -
--if test -d "${TCL_CONFIG_PREFIX}"  ; then true ; else
--rm -f conftest.tcl
--cat >> conftest.tcl <<EOF
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5
-+$as_echo_n "checking for main in -lieee... " >&6; }
-+if ${ac_cv_lib_ieee_main+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lieee  $LIBS"
-+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
- 
--set dir [set tcl_library]
--if { [file exists [file join [set dir] tclConfig.sh]] } {
--      puts  [set dir]
--      exit
--  }
--set dir [file dirname [set tcl_library]]
--if { [file exists [file join [set dir] tclConfig.sh]] } {
--      puts  [set dir]
--  }
- 
--EOF
--#cp conftest.tcl foo.tcl
-+int
-+main ()
-+{
-+return main ();
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+  ac_cv_lib_ieee_main=yes
-+else
-+  ac_cv_lib_ieee_main=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+    conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5
-+$as_echo "$ac_cv_lib_ieee_main" >&6; }
-+if test "x$ac_cv_lib_ieee_main" = xyes; then :
-+  have_ieee=1
-+else
-+  have_ieee=0
-+fi
- 
- # Extract the first word of "tclsh", so it can be a program name with args.
- set dummy tclsh; ac_word=$2
-@@ -7518,7 +7741,26 @@
- fi
- 
- 
--#AC_CHECK_PROG(TCLSH,tclsh8.0,tclsh8.0,${TCLSH})
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcl/tk" >&5
-+$as_echo_n "checking for tcl/tk... " >&6; }
-+
-+
-+if test -d "${TCL_CONFIG_PREFIX}"  ; then true ; else
-+rm -f conftest.tcl
-+cat >> conftest.tcl <<EOF
-+
-+set dir [set tcl_library]
-+if { [file exists [file join [set dir] tclConfig.sh]] } {
-+      puts  [set dir]
-+      exit
-+  }
-+set dir [file dirname [set tcl_library]]
-+if { [file exists [file join [set dir] tclConfig.sh]] } {
-+      puts  [set dir]
-+  }
-+
-+EOF
-+#cp conftest.tcl foo.tcl
- 
- if test "${TCLSH}" = "" ; then true ; else
- TCL_CONFIG_PREFIX=`${TCLSH} < conftest.tcl`
-@@ -7593,42 +7835,6 @@
- 
- fi
- 
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -llieee" >&5
--$as_echo_n "checking for main in -llieee... " >&6; }
--if ${ac_cv_lib_lieee_main+:} false; then :
--  $as_echo_n "(cached) " >&6
--else
--  ac_check_lib_save_LIBS=$LIBS
--LIBS="-llieee  $LIBS"
--cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
+-Every other argument is treated as a filename.  Files ending in \`.la' are
+-treated as uninstalled libtool libraries, other files are standard or library
+-object files.
 -
+-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+-only library objects (\`.lo' files) may be specified, and \`-rpath' is
+-required, except when creating a convenience library.
 -
--int
--main ()
--{
--return main ();
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_link "$LINENO"; then :
--  ac_cv_lib_lieee_main=yes
--else
--  ac_cv_lib_lieee_main=no
--fi
--rm -f core conftest.err conftest.$ac_objext \
--    conftest$ac_exeext conftest.$ac_ext
--LIBS=$ac_check_lib_save_LIBS
--fi
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lieee_main" >&5
--$as_echo "$ac_cv_lib_lieee_main" >&6; }
--if test "x$ac_cv_lib_lieee_main" = xyes; then :
--  have_ieee=1
--else
--  have_ieee=0
--fi
+-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+-using \`ar' and \`ranlib', or on Windows using \`lib'.
 -
- if test "$have_ieee" = "0" ; then
-  TCL_LIBS=`echo ${TCL_LIBS} | sed -e "s:-lieee::g" `
- fi
-@@ -7674,14 +7880,23 @@
- 
- # the time handling for unixtime, add timezone
- 
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alloca" >&5
--$as_echo_n "checking alloca... " >&6; }
-+# alloca
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-+$as_echo_n "checking for alloca... " >&6; }
- if test "$cross_compiling" = yes; then :
-   gcl_ok=no
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--int main() { exit(alloca(500) != NULL ? 0 : 1);}
-+
-+int
-+main ()
-+{
-+exit(alloca(500) != NULL ? 0 : 1);
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
- 
-@@ -7703,8 +7918,16 @@
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
--#include <alloca.h>
--  int main() { exit(alloca(500) != NULL ? 0 : 1);}
-+
-+  #include <alloca.h>
-+
-+int
-+main ()
-+{
-+exit(alloca(500) != NULL ? 0 : 1);
-+  ;
-+  return 0;
-+}
- _ACEOF
- if ac_fn_c_try_run "$LINENO"; then :
- 
-@@ -7736,8 +7959,6 @@
- 
+-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+-is created, otherwise an executable program is created."
+-  ;;
+-
+-uninstall)
+-  $echo \
+-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+-
+-Remove libraries from an installation directory.
+-
+-RM is the name of the program to use to delete files associated with each FILE
+-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+-to RM.
+-
+-If FILE is a libtool library, all the files associated with it are deleted.
+-Otherwise, only FILE itself is deleted using RM."
+-  ;;
+-
+-*)
+-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+-  $echo "$help" 1>&2
+-  exit 1
+-  ;;
+-esac
+-
+-echo
+-$echo "Try \`$modename --help' for more information about other modes."
++exit $exit_status
  
+-exit 0
  
--# alloca
--
- # dlopen etc
- # idea make it so you do something dlopen(libX.so,RTLD_GLOBAL)
- # then dlload("foo.o") a lisp file can refer to things in libX.so
-@@ -7761,8 +7982,8 @@
+ # The TAGs below are defined such that we never get into a situation
+ # in which we disable both kinds of libraries.  Given conflicting
+@@ -5461,16 +9619,18 @@
+ # If a disable-shared tag is given, we'll fallback to a static-only
+ # configuration.  But we'll never go from static-only to shared-only.
  
- # redhat/cygnus released for some reason a buggy version of gcc,
- # which no one else released.   Catch that here.
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking for buggy gcc version from redhat" >&5
--$as_echo_n "checking Checking for buggy gcc version from redhat... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy gcc version from redhat" >&5
-+$as_echo_n "checking for buggy gcc version from redhat... " >&6; }
- if  2>&1 $CC -v | fgrep "gcc version 2.96" > /dev/null
-    then
-         BROKEN_O4_OPT=1
-@@ -7802,7 +8023,7 @@
+-### BEGIN LIBTOOL TAG CONFIG: disable-shared
++# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+ build_libtool_libs=no
+ build_old_libs=yes
+-### END LIBTOOL TAG CONFIG: disable-shared
++# ### END LIBTOOL TAG CONFIG: disable-shared
  
-   ac_config_files="$ac_config_files makedefc windows/gcl.iss windows/sysdir.bat windows/install.lsp"
+-### BEGIN LIBTOOL TAG CONFIG: disable-static
++# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+-### END LIBTOOL TAG CONFIG: disable-static
++# ### END LIBTOOL TAG CONFIG: disable-static
  
--cat >confcache <<\_ACEOF
-+  cat >confcache <<\_ACEOF
- # This file is a shell script that caches the results of configure
- # tests run on this system so they can be shared between configure
- # scripts and configure runs, see configure's option --config-cache.
+ # Local Variables:
+ # mode:shell-script
+ # sh-indentation:2
+ # End:
++# vi:sw=2
++
diff --git a/gcl-2.6.8-unrandomize.patch b/gcl-2.6.8-unrandomize.patch
index 46b4638..84efa59 100644
--- a/gcl-2.6.8-unrandomize.patch
+++ b/gcl-2.6.8-unrandomize.patch
@@ -1,109 +1,6 @@
---- ./o/main.c.orig	2010-11-02 15:56:45.000000000 -0600
-+++ ./o/main.c	2012-01-09 20:51:43.097828330 -0700
-@@ -51,6 +51,7 @@
- #include <signal.h>
- #endif
- #include "page.h"
-+#include "unrandomize.h"
- 
- bool saving_system ;
- 
-@@ -146,11 +147,7 @@
- #endif	
- 	*argv=kcl_self;
- 
--#ifdef CAN_UNRANDOMIZE_SBRK
--#include <stdio.h>
--#include <stdlib.h>
--#include "unrandomize.h"
--#endif
-+	UNRANDOMIZE_SBRK;
- 
- #ifdef LD_BIND_NOW
- #include <stdio.h>
---- ./h/unrandomize.h.orig	2010-01-12 07:19:15.000000000 -0700
-+++ ./h/unrandomize.h	2012-01-09 20:51:43.101828245 -0700
-@@ -1,39 +1,45 @@
-+#include <stdio.h>
-+#include <stdlib.h>
- #include <sys/personality.h>
- #include <syscall.h>
- #include <unistd.h>
- #include <alloca.h>
- #include <errno.h>
- 
--
--{
--  errno=0;
--
--  {
--
--    long pers = personality(0xffffffffUL);
--    if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);}
--    if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) {
--      errno=0;
--      if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) {
--	int i;
--	char **n;
--	for (i=0;envp[i];i++);
--	n=alloca((i+2)*sizeof(*n));
--	n[i+1]=0;
--	n[i--]="GCL_UNRANDOMIZE=t";
--	for (;i>=0;i--)
--	  n[i]=envp[i];
--#ifdef GCL_GPROF
--	gprof_cleanup();
-+#ifdef CAN_UNRANDOMIZE_SBRK
-+# ifdef GCL_GPROF
-+#  define GPROF_CLEANUP gprof_cleanup()
-+# else
-+#  define GPROF_CLEANUP
-+# endif
-+# define UNRANDOMIZE_SBRK do {						\
-+    errno=0;								\
-+    {									\
-+      long pers = personality(0xffffffffUL);				\
-+      if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);} \
-+      if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) {	\
-+	errno=0;							\
-+	if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) { \
-+	  int i;							\
-+	  char **n;							\
-+	  for (i=0;envp[i];i++);					\
-+	  n=alloca((i+2)*sizeof(*n));					\
-+	  n[i+1]=0;							\
-+	  n[i--]="GCL_UNRANDOMIZE=t";					\
-+	  for (;i>=0;i--)						\
-+	    n[i]=envp[i];						\
-+	  GPROF_CLEANUP;						\
-+	  errno=0;							\
-+	  execve(*argv,argv,n);						\
-+	  printf("execve failure %d\n",errno);				\
-+	  exit(-1);							\
-+	} else {							\
-+	  printf("personality change failure %d\n",errno);		\
-+	  exit(-1);							\
-+	}								\
-+      }									\
-+    }									\
-+  } while (0)
-+#else
-+# define UNRANDOMIZE_SBRK
- #endif
--	errno=0;
--	execve(*argv,argv,n);
--	printf("execve failure %d\n",errno);
--	exit(-1);
--      } else {
--	printf("personality change failure %d\n",errno);
--	exit(-1);
--      }
--    }
--  }
--}
---- ./configure.in.orig	2012-01-09 20:49:21.949801255 -0700
-+++ ./configure.in	2012-01-09 20:51:43.102828225 -0700
-@@ -1167,9 +1167,11 @@
+--- ./configure.in.orig	2012-03-28 09:56:09.658231276 -0600
++++ ./configure.in	2012-03-28 09:57:37.877068843 -0600
+@@ -1184,9 +1184,11 @@
  
  	AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
  	AC_RUN_IFELSE([AC_LANG_SOURCE([[
@@ -116,7 +13,7 @@
  		    return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
  
  	if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
-@@ -1182,12 +1184,11 @@
+@@ -1199,12 +1201,11 @@
  	AC_MSG_CHECKING([that sbrk is (now) non-random])
  	AC_RUN_IFELSE([AC_LANG_SOURCE([[
  		    #include <stdio.h>
@@ -131,7 +28,7 @@
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
  			return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
-@@ -1196,12 +1197,11 @@
+@@ -1213,12 +1214,11 @@
  	fi
  	AC_RUN_IFELSE([AC_LANG_SOURCE([[
  		    #include <stdio.h>
@@ -146,7 +43,7 @@
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
  			return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
-@@ -1243,6 +1243,7 @@
+@@ -1260,6 +1260,7 @@
  AC_RUN_IFELSE([AC_LANG_SOURCE([[
  #include <stdio.h>
  #include <stdlib.h>
@@ -154,7 +51,7 @@
  
  void gprof_cleanup() {}
  int
-@@ -1251,9 +1252,7 @@
+@@ -1268,9 +1269,7 @@
    char *b,*b1;
    FILE *fp;
  
@@ -165,9 +62,9 @@
    b = (void *) malloc(1000);
    fp = fopen("conftest1","w");
  
---- ./configure.orig	2012-01-09 20:49:33.805551545 -0700
-+++ ./configure	2012-01-09 20:51:54.679584389 -0700
-@@ -6946,9 +6946,11 @@
+--- ./configure.orig	2012-03-28 09:56:09.667230545 -0600
++++ ./configure	2012-03-28 09:57:37.885068193 -0600
+@@ -7062,9 +7062,11 @@
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
@@ -180,7 +77,7 @@
  		    return 0;}
  _ACEOF
  if ac_fn_c_try_run "$LINENO"; then :
-@@ -6980,12 +6982,11 @@
+@@ -7096,12 +7098,11 @@
  /* end confdefs.h.  */
  
  		    #include <stdio.h>
@@ -195,7 +92,7 @@
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
  			return 0;}
-@@ -7009,12 +7010,11 @@
+@@ -7125,12 +7126,11 @@
  /* end confdefs.h.  */
  
  		    #include <stdio.h>
@@ -210,7 +107,7 @@
  			if (!(f=fopen("conftest1","w"))) return -1;
  			fprintf(f,"%u",sbrk(0));
  			return 0;}
-@@ -7101,6 +7101,7 @@
+@@ -7217,6 +7217,7 @@
  
  #include <stdio.h>
  #include <stdlib.h>
@@ -218,7 +115,7 @@
  
  void gprof_cleanup() {}
  int
-@@ -7109,9 +7110,7 @@
+@@ -7225,9 +7226,7 @@
    char *b,*b1;
    FILE *fp;
  
@@ -229,3 +126,106 @@
    b = (void *) malloc(1000);
    fp = fopen("conftest1","w");
  
+--- ./o/main.c.orig	2010-11-02 15:56:45.000000000 -0600
++++ ./o/main.c	2012-01-09 20:51:43.000000000 -0700
+@@ -51,6 +51,7 @@
+ #include <signal.h>
+ #endif
+ #include "page.h"
++#include "unrandomize.h"
+ 
+ bool saving_system ;
+ 
+@@ -146,11 +147,7 @@
+ #endif	
+ 	*argv=kcl_self;
+ 
+-#ifdef CAN_UNRANDOMIZE_SBRK
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include "unrandomize.h"
+-#endif
++	UNRANDOMIZE_SBRK;
+ 
+ #ifdef LD_BIND_NOW
+ #include <stdio.h>
+--- ./h/unrandomize.h.orig	2010-01-12 07:19:15.000000000 -0700
++++ ./h/unrandomize.h	2012-01-09 20:51:43.000000000 -0700
+@@ -1,39 +1,45 @@
++#include <stdio.h>
++#include <stdlib.h>
+ #include <sys/personality.h>
+ #include <syscall.h>
+ #include <unistd.h>
+ #include <alloca.h>
+ #include <errno.h>
+ 
+-
+-{
+-  errno=0;
+-
+-  {
+-
+-    long pers = personality(0xffffffffUL);
+-    if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);}
+-    if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) {
+-      errno=0;
+-      if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) {
+-	int i;
+-	char **n;
+-	for (i=0;envp[i];i++);
+-	n=alloca((i+2)*sizeof(*n));
+-	n[i+1]=0;
+-	n[i--]="GCL_UNRANDOMIZE=t";
+-	for (;i>=0;i--)
+-	  n[i]=envp[i];
+-#ifdef GCL_GPROF
+-	gprof_cleanup();
++#ifdef CAN_UNRANDOMIZE_SBRK
++# ifdef GCL_GPROF
++#  define GPROF_CLEANUP gprof_cleanup()
++# else
++#  define GPROF_CLEANUP
++# endif
++# define UNRANDOMIZE_SBRK do {						\
++    errno=0;								\
++    {									\
++      long pers = personality(0xffffffffUL);				\
++      if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);} \
++      if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) {	\
++	errno=0;							\
++	if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) { \
++	  int i;							\
++	  char **n;							\
++	  for (i=0;envp[i];i++);					\
++	  n=alloca((i+2)*sizeof(*n));					\
++	  n[i+1]=0;							\
++	  n[i--]="GCL_UNRANDOMIZE=t";					\
++	  for (;i>=0;i--)						\
++	    n[i]=envp[i];						\
++	  GPROF_CLEANUP;						\
++	  errno=0;							\
++	  execve(*argv,argv,n);						\
++	  printf("execve failure %d\n",errno);				\
++	  exit(-1);							\
++	} else {							\
++	  printf("personality change failure %d\n",errno);		\
++	  exit(-1);							\
++	}								\
++      }									\
++    }									\
++  } while (0)
++#else
++# define UNRANDOMIZE_SBRK
+ #endif
+-	errno=0;
+-	execve(*argv,argv,n);
+-	printf("execve failure %d\n",errno);
+-	exit(-1);
+-      } else {
+-	printf("personality change failure %d\n",errno);
+-	exit(-1);
+-      }
+-    }
+-  }
+-}
diff --git a/gcl.spec b/gcl.spec
index d9da709..267557c 100644
--- a/gcl.spec
+++ b/gcl.spec
@@ -3,7 +3,7 @@
 %global __global_cflags %(printf %%s '%__global_cflags' | sed 's/-fstack-protector --param=ssp-buffer-size=4//')
 
 # Prerelease of 2.6.8
-%global alphatag 20120109cvs
+%global alphatag 20120323cvs
 
 Name:           gcl
 Version:        2.6.8
@@ -16,9 +16,8 @@ URL:            http://www.gnu.org/software/gcl/
 # The source for this package was pulled from upstream's CVS repository.  Use
 # the following commands to generate the tarball:
 #   cvs -d:pserver:anonymous at cvs.savannah.gnu.org:/sources/gcl export \
-#     -r Version_2_6_8pre -D 2012-01-10 -d gcl-2.6.8 gcl
-#   tar cvf gcl-2.6.8.tar gcl-2.6.8
-#   xz gcl-2.6.8.tar
+#     -r Version_2_6_8pre -D 2012-03-24 -d gcl-2.6.8 gcl
+#   tar cvJf gcl-2.6.8.tar gcl-2.6.8
 Source0:        gcl-%{version}.tar.xz
 Source1:        gcl.el
 # This is some info files that are needed for the DESCRIBE function to do
@@ -333,6 +332,9 @@ fi
 
 
 %changelog
+* Wed Mar 28 2012 Jerry James <loganjerry at gmail.com> - 2.6.8-0.10.20120323cvs
+- Update to 20120323 snapshot
+
 * Mon Jan  9 2012 Jerry James <loganjerry at gmail.com> - 2.6.8-0.10.20120109cvs
 - Update to 20120109 snapshot
 
diff --git a/sources b/sources
index 328a24c..037c66f 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-bdff1c588d92a1e9f8db797fd53a9ddd  gcl-2.6.8.tar.xz
+b796703820bc3f7f539a37b35a2097d0  gcl-2.6.8.tar.xz
 b965d4ea561a9c3e019c65be69fcfb1e  gcl-2.6.8-info.tar.xz


More information about the scm-commits mailing list