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 - #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 - #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 and it should be used (not on Ultrix). -+ */ -+#undef HAVE_ALLOCA_H -+ - /* Define to 1 if you have the 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 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 + #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 and it should be used (not on Ultrix). ++ */ ++#undef HAVE_ALLOCA_H ++ + /* Define to 1 if you have the 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 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 + #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 -@@ -1649,6 +1649,7 @@ +@@ -1666,6 +1666,7 @@ #include #endif #ifdef HAVE_ASM_SIGNAL_H @@ -17,9 +17,9 @@ #include #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 #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 - #define ISNORMAL(a) isnormal(a) - #else -@@ -178,7 +180,6 @@ - - #ifdef NEED_ISFINITE - #ifdef HAVE_ISFINITE --#define _GNU_SOURCE - #include - #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 - #define ISNORMAL(a) isnormal(a) - #else -@@ -179,7 +181,6 @@ - - #ifdef NEED_ISFINITE - #ifdef HAVE_ISFINITE --#define _GNU_SOURCE - #include - #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 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 ]],[[ 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 ]],[[ 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 int -@@ -6934,7 +7671,6 @@ +@@ -7015,7 +7752,6 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -1525,3 +1436,92 @@ #include 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 + #define ISNORMAL(a) isnormal(a) + #else +@@ -179,7 +181,6 @@ + + #ifdef NEED_ISFINITE + #ifdef HAVE_ISFINITE +-#define _GNU_SOURCE + #include + #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 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 + #define ISNORMAL(a) isnormal(a) + #else +@@ -178,7 +180,6 @@ + + #ifdef NEED_ISFINITE + #ifdef HAVE_ISFINITE +-#define _GNU_SOURCE + #include + #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 , 1996 --# --# This program is free software; you can redistribute it and/or modify -+ -+# libtool (GNU libtool) 2.4 -+# Written by Gordon Matzigkeit , 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 . -+# GNU libtool home page: . -+# General help using GNU software: . - --# 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 < ++ AC_MSG_CHECKING([for _SC_CLK_TCK]) ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #include +- 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 +- int main() { ++ AC_MSG_CHECKING([for external gmp version]) ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include ++ ]],[[ + #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 < + #include +@@ -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 ++ AC_MSG_CHECKING([for size of gmp limbs]) ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #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 ++ AC_MSG_CHECKING([_SHORT_LIMB]) ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #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 ++ ]])],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 + #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 +- 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 +- 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_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 </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 </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 <> ${libobj}T </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 <> ${libobj}T < $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 . -+ $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 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 < -+#include -+#ifdef _MSC_VER -+# include -+# include -+# include -+#else -+# include -+# include -+# ifdef __CYGWIN__ -+# include -+# endif -+#endif -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* 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 <= 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 </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 ++ AC_MSG_CHECKING([for bfd_link_info.output_bfd]) ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #include +- 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 ++AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #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 ++AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #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 +- #include +- int main() { ++AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include ++ #include ++ ]],[[ + 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 +- #include +- int main(int argc,char *argv[],char *envp[]) { ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include ++ #include ++ ]],[[ + 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 +- void gprof_cleanup() {}; ++ AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++ #include ++ 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 +- void gprof_cleanup() {}; ++ AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++ #include ++ 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 ++AC_MSG_CHECKING([for pagewidth]) ++AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #include +-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 +- #include ++AC_MSG_CHECKING([finding DBEGIN]) ++AC_RUN_IFELSE([AC_LANG_SOURCE([[ ++#include ++#include + +-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 +-main() +-{ ++AC_MSG_CHECKING([finding CSTACK_ADDRESS]) ++AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++#include ++]],[[ + 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 +-main() +-{ ++AC_MSG_CHECKING([sizeof long long int]) ++AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++#include ++]],[[ + 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 + #include + #include +@@ -1522,24 +1536,25 @@ + #include /* struct in_addr, struct sockaddr_in */ + #include /* inet_ntoa() */ + #include /* 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 ++AC_MSG_CHECKING([for listen using fcntl]) ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#include + #include +-], +-[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 +-int joe=SV_ONSTACK; +-], +-[], ++AC_MSG_CHECKING([for SV_ONSTACK]) ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#include ++]], ++[[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 +-int joe=SIGSYS; +-], +-[], ++AC_MSG_CHECKING([for SIGSYS]) ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#include ++]], ++[[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 +-int joe=SIGEMT; +-], +-[], ++AC_MSG_CHECKING([for SIGEMT]) ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#include ++]], ++[[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 +- ], +- [ ++ AC_MSG_CHECKING([for sigcontext]) ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++ #include ++ ]], ++ [[ + 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 ++ AC_MSG_CHECKING([for sigcontext]) ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++ #include + #ifdef HAVE_ASM_SIGCONTEXT_H + #include + #endif + #ifdef HAVE_ASM_SIGNAL_H + #include + #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 +- int main() { exit(alloca(500) != NULL ? 0 : 1);}], ++ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ ++ #include ++ ]],[[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 ++ ++ #include + #include +- 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 +- int main() { ++ ++ #include ++ ++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 < + #include +@@ -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 ++ ++ #include + #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 ++ ++ #include + #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 ++ ++ #include + #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 +- 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 +- 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_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 ++ ++ #include + #include +- 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 ++ ++ #include + #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 ++ ++ #include + #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 +- #include +- int main() { ++ ++ #include ++ #include ++ ++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 +- #include +- int main(int argc,char *argv[],char *envp[]) { ++ ++ #include ++ #include ++ ++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 +- void gprof_cleanup() {}; ++ ++ #include ++ 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 +- void gprof_cleanup() {}; ++ ++ #include ++ 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 ++ ++ #include + #include +-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 +- #include ++#include -+# 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 +-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 +-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 + #include -- # 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 +-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 +-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 +-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 ++ ++ #include + + 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 ++ ++ #include + #ifdef HAVE_ASM_SIGCONTEXT_H + #include + #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 <&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 <&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 +- int main() { exit(alloca(500) != NULL ? 0 : 1);} ++ ++ #include ++ ++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 . + % +-% 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@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@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@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@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 `\^^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@lbracecmd[\{]% +- @gdef@rbracecmd[\}]% +-@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@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 . - % --% 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@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@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@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@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 `\^^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@lbracecmd[\{]% -- @gdef@rbracecmd[\}]% --@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@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@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@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@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@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@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@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: ++ % .@write3{\entry{xyz}{@folio }{@code {xyz@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@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@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 to achieve this: TeX expands \the only once, ++ % simply yielding the contents of . (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 to achieve this: TeX expands \the only once, +-% simply yielding the contents of . (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 +- \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@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 ++ \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@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@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...@end verbatim and @verb{...} ++% If we want to allow any as delimiter, ++% we need the curly braces so that makeinfo sees the @verb command, eg: ++% `@verbx...x' would look like the '@verbx' command. --janneke@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\}\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@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@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'{'#1'}'{#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@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@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@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@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@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@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\ }} - % \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: -+ % .@write3{\entry{xyz}{@folio }{@code {xyz@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 + % 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@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@tie \the\chapno ++ \else \ifnum\subsecno=0 ++ \putwordSection@tie \the\chapno.\the\secno ++ \else \ifnum\subsubsecno=0 ++ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno ++ \else ++ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno ++ \fi\fi\fi ++} ++\def\Yappendix{% ++ \ifnum\secno=0 ++ \putwordAppendix@tie @char\the\appendixno{}% ++ \else \ifnum\subsecno=0 ++ \putwordSection@tie @char\the\appendixno.\the\secno ++ \else \ifnum\subsubsecno=0 ++ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno ++ \else ++ \putwordSection@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@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@t + } +-\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t +- \else\let\next\f@t\fi \next} +-\def\f@@t{\bgroup\aftergroup\@foot\let\next} +-\def\f@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@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 to achieve this: TeX expands \the only once, -+ % simply yielding the contents of . (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 to achieve this: TeX expands \the only once, --% simply yielding the contents of . (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@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@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 +-@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@realbackslash{\} @gdef@doublebackslash{\\}} + +-% \catcode 17=0 % Define control-q ++% In texinfo, backslash is an active character; it prints the backslash ++% in fixed width font. + \catcode`\\=\active ++@def@normalbackslash{{@tt@backslashcurfont}} ++% On startup, @fixbackslash assigns: ++% @let \ = @normalbackslash + +-% Used sometimes to turn off (effectively) the active characters +-% even after parsing them. +-@def@turnoffactive{@let"=@normaldoublequote +-@let\=@realbackslash +-@let~=@normaltilde +-@let^=@normalcaret +-@let_=@normalunderscore +-@let|=@normalverticalbar +-@let<=@normalless +-@let>=@normalgreater +-@let+=@normalplus +-@let$=@normaldollar} ++% \rawbackslash defines an active \ to do \backslashcurfont. ++% \otherbackslash defines an active \ to be a literal `\' character with ++% catcode other. ++@gdef@rawbackslash{@let\=@backslashcurfont} ++@gdef@otherbackslash{@let\=@realbackslash} + +-@def@normalturnoffactive{@let"=@normaldoublequote +-@let\=@normalbackslash +-@let~=@normaltilde +-@let^=@normalcaret +-@let_=@normalunderscore +-@let|=@normalverticalbar +-@let<=@normalless +-@let>=@normalgreater +-@let+=@normalplus +-@let$=@normaldollar} ++% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of ++% the literal character `\'. ++% ++@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@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@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 + +-@c Set initial fonts. +-@textfonts +-@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: ++ ++@c vim:sw=2: ++ ++@ignore ++ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 ++@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 , 1996 +-# +-# This program is free software; you can redistribute it and/or modify ++ ++# libtool (GNU libtool) 2.4 ++# Written by Gordon Matzigkeit , 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 . ++# GNU libtool home page: . ++# General help using GNU software: . + +-# 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 <&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 -- \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@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 -+ \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 </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@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...@end verbatim and @verb{...} -+% If we want to allow any as delimiter, -+% we need the curly braces so that makeinfo sees the @verb command, eg: -+% `@verbx...x' would look like the '@verbx' command. --janneke@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\}\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'{'#1'}'{#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@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@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@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 </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 <> ${libobj}T </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 <> ${libobj}T < $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\ }} - --\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 . ++ $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 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 - % 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@tie \the\chapno -+ \else \ifnum\subsecno=0 -+ \putwordSection@tie \the\chapno.\the\secno -+ \else \ifnum\subsubsecno=0 -+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno -+ \else -+ \putwordSection@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@tie @char\the\appendixno{}% -+ \else \ifnum\subsecno=0 -+ \putwordSection@tie @char\the\appendixno.\the\secno -+ \else \ifnum\subsubsecno=0 -+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno -+ \else -+ \putwordSection@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@t - } --\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t -- \else\let\next\f@t\fi \next} --\def\f@@t{\bgroup\aftergroup\@foot\let\next} --\def\f@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 < ++#include ++#ifdef _MSC_VER ++# include ++# include ++# include ++#else ++# include ++# include ++# ifdef __CYGWIN__ ++# include ++# endif ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* 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 < 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 <= 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@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@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 --@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@realbackslash{\} @gdef@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 -+@def@normalbackslash{{@tt@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. --@def@turnoffactive{@let"=@normaldoublequote --@let\=@realbackslash --@let~=@normaltilde --@let^=@normalcaret --@let_=@normalunderscore --@let|=@normalverticalbar --@let<=@normalless --@let>=@normalgreater --@let+=@normalplus --@let$=@normaldollar} -+% \rawbackslash defines an active \ to do \backslashcurfont. -+% \otherbackslash defines an active \ to be a literal `\' character with -+% catcode other. -+@gdef@rawbackslash{@let\=@backslashcurfont} -+@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 --@def@normalturnoffactive{@let"=@normaldoublequote --@let\=@normalbackslash --@let~=@normaltilde --@let^=@normalcaret --@let_=@normalunderscore --@let|=@normalverticalbar --@let<=@normalless --@let>=@normalgreater --@let+=@normalplus --@let$=@normaldollar} -+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -+% the literal character `\'. -+% -+@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@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@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 </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 --@c Set initial fonts. --@textfonts --@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: -+ -+@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 + -+@ignore -+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -+@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 -+ AC_MSG_CHECKING([for _SC_CLK_TCK]) -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #include -- 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 -- int main() { -+ AC_MSG_CHECKING([for external gmp version]) -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include -+ ]],[[ - #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 < - #include -@@ -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 -+ AC_MSG_CHECKING([for size of gmp limbs]) -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #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 -+ AC_MSG_CHECKING([_SHORT_LIMB]) -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #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 -+ ]])],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 - #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 -- 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 -- 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_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 -+ AC_MSG_CHECKING([for bfd_link_info.output_bfd]) -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #include -- 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 -+AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #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 -+AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #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 -- #include -- int main() { -+AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include -+ #include -+ ]],[[ - 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 -- #include -- int main(int argc,char *argv[],char *envp[]) { -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include -+ #include -+ ]],[[ - 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 -- void gprof_cleanup() {}; -+ AC_RUN_IFELSE([AC_LANG_SOURCE([[ -+ #include -+ 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 -- void gprof_cleanup() {}; -+ AC_RUN_IFELSE([AC_LANG_SOURCE([[ -+ #include -+ 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 -+AC_MSG_CHECKING([for pagewidth]) -+AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #include --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 -- #include -+AC_MSG_CHECKING([finding DBEGIN]) -+AC_RUN_IFELSE([AC_LANG_SOURCE([[ -+#include -+#include + # 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 --main() --{ -+AC_MSG_CHECKING([finding CSTACK_ADDRESS]) -+AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+#include -+]],[[ - 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 --main() --{ -+AC_MSG_CHECKING([sizeof long long int]) -+AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+#include -+]],[[ - 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 - #include - #include -@@ -1505,24 +1519,25 @@ - #include /* struct in_addr, struct sockaddr_in */ - #include /* inet_ntoa() */ - #include /* 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 -+AC_MSG_CHECKING([for listen using fcntl]) -+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -+#include - #include --], --[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 --int joe=SV_ONSTACK; --], --[], -+AC_MSG_CHECKING([for SV_ONSTACK]) -+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -+#include -+]], -+[[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 --int joe=SIGSYS; --], --[], -+AC_MSG_CHECKING([for SIGSYS]) -+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -+#include -+]], -+[[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 --int joe=SIGEMT; --], --[], -+AC_MSG_CHECKING([for SIGEMT]) -+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -+#include -+]], -+[[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 -- ], -- [ -+ AC_MSG_CHECKING([for sigcontext]) -+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -+ #include -+ ]], -+ [[ - 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 -+ AC_MSG_CHECKING([for sigcontext]) -+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -+ #include - #ifdef HAVE_ASM_SIGCONTEXT_H - #include - #endif - #ifdef HAVE_ASM_SIGNAL_H - #include - #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 -- int main() { exit(alloca(500) != NULL ? 0 : 1);}], -+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -+ #include -+ ]],[[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 -+ -+ #include - #include -- 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 -- int main() { -+ -+ #include -+ -+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 < - #include -@@ -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 -+ -+ #include - #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 -+ -+ #include - #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 -+ -+ #include - #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 -- 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 -- 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_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 -+ -+ #include - #include -- 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 -+ -+ #include - #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 -+ -+ #include - #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 -- #include -- int main() { -+ -+ #include -+ #include -+ -+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 -- #include -- int main(int argc,char *argv[],char *envp[]) { -+ -+ #include -+ #include -+ -+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 -- 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 -+ 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 -- void gprof_cleanup() {}; -+ -+ #include -+ 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 -+ -+ #include - #include --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 -- #include -+#include - --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 --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 --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 - #include + 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 --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 --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 --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 +- 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 ++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 -+ -+ #include - #ifdef HAVE_ASM_SIGCONTEXT_H - #include - #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 <&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 <&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 -- int main() { exit(alloca(500) != NULL ? 0 : 1);} -+ -+ #include -+ -+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 - #endif - #include "page.h" -+#include "unrandomize.h" - - bool saving_system ; - -@@ -146,11 +147,7 @@ - #endif - *argv=kcl_self; - --#ifdef CAN_UNRANDOMIZE_SBRK --#include --#include --#include "unrandomize.h" --#endif -+ UNRANDOMIZE_SBRK; - - #ifdef LD_BIND_NOW - #include ---- ./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 -+#include - #include - #include - #include - #include - #include - -- --{ -- 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 @@ -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 @@ -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 #include @@ -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 @@ -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 @@ -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 #include @@ -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 + #endif + #include "page.h" ++#include "unrandomize.h" + + bool saving_system ; + +@@ -146,11 +147,7 @@ + #endif + *argv=kcl_self; + +-#ifdef CAN_UNRANDOMIZE_SBRK +-#include +-#include +-#include "unrandomize.h" +-#endif ++ UNRANDOMIZE_SBRK; + + #ifdef LD_BIND_NOW + #include +--- ./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 ++#include + #include + #include + #include + #include + #include + +- +-{ +- 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@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 - 2.6.8-0.10.20120323cvs +- Update to 20120323 snapshot + * Mon Jan 9 2012 Jerry James - 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