diff options
Diffstat (limited to 'aux-build')
| -rwxr-xr-x | aux-build/compile | 140 | ||||
| -rwxr-xr-x | aux-build/config.guess | 1526 | ||||
| -rwxr-xr-x | aux-build/config.sub | 1658 | ||||
| -rwxr-xr-x | aux-build/depcomp | 522 | ||||
| -rwxr-xr-x | aux-build/install-sh | 316 | ||||
| -rwxr-xr-x | aux-build/ltmain.sh | 8745 | ||||
| -rwxr-xr-x | aux-build/missing | 360 | ||||
| -rwxr-xr-x | aux-build/mkinstalldirs | 150 | ||||
| -rw-r--r-- | aux-build/texinfo.tex | 7086 | ||||
| -rwxr-xr-x | aux-build/ylwrap | 222 | 
10 files changed, 20725 insertions, 0 deletions
diff --git a/aux-build/compile b/aux-build/compile new file mode 100755 index 0000000..80b645b --- /dev/null +++ b/aux-build/compile @@ -0,0 +1,140 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2004-09-10.20 + +# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. +# Written by Tom Tromey <tromey@cygnus.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +case $1 in +  '') +     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2 +     exit 1; +     ;; +  -h | --h*) +    cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to <bug-automake@gnu.org>. +EOF +    exit 0 +    ;; +  -v | --v*) +    echo "compile $scriptversion" +    exit 0 +    ;; +esac + +ofile= +cfile= +eat= + +for arg +do +  if test -n "$eat"; then +    eat= +  else +    case $1 in +      -o) +	# configure might choose to run compile as `compile cc -o foo foo.c'. +	# So we strip `-o arg' only if arg is an object. +	eat=1 +	case $2 in +	  *.o | *.obj) +	    ofile=$2 +	    ;; +	  *) +	    set x "$@" -o "$2" +	    shift +	    ;; +	esac +	;; +      *.c) +	cfile=$1 +	set x "$@" "$1" +	shift +	;; +      *) +	set x "$@" "$1" +	shift +	;; +    esac +  fi +  shift +done + +if test -z "$ofile" || test -z "$cfile"; then +  # If no `-o' option was seen then we might have been invoked from a +  # pattern rule where we don't need one.  That is ok -- this is a +  # normal compilation that the losing compiler can handle.  If no +  # `.c' file was seen then we are probably linking.  That is also +  # ok. +  exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file.  Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do +  if mkdir "$lockdir" >/dev/null 2>&1; then +    break +  fi +  sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then +  mv "$cofile" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/aux-build/config.guess b/aux-build/config.guess new file mode 100755 index 0000000..f32079a --- /dev/null +++ b/aux-build/config.guess @@ -0,0 +1,1526 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +#   Free Software Foundation, Inc. + +timestamp='2008-01-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner <per@bothner.com>. +# Please send patches to <config-patches@gnu.org>.  Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub.  If it succeeds, it prints the system name on stdout, and +# exits with 0.  Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: +  -h, --help         print this help, then exit +  -t, --time-stamp   print date of last modification, then exit +  -v, --version      print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do +  case $1 in +    --time-stamp | --time* | -t ) +       echo "$timestamp" ; exit ;; +    --version | -v ) +       echo "$version" ; exit ;; +    --help | --h* | -h ) +       echo "$usage"; exit ;; +    -- )     # Stop option processing +       shift; break ;; +    - )	# Use stdin as input. +       break ;; +    -* ) +       echo "$me: invalid option $1$help" >&2 +       exit 1 ;; +    * ) +       break ;; +  esac +done + +if test $# != 0; then +  echo "$me: too many arguments$help" >&2 +  exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,)    echo "int x;" > $dummy.c ; +	for c in cc gcc c89 c99 ; do +	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then +	     CC_FOR_BUILD="$c"; break ; +	  fi ; +	done ; +	if test x"$CC_FOR_BUILD" = x ; then +	  CC_FOR_BUILD=no_compiler_found ; +	fi +	;; + ,,*)   CC_FOR_BUILD=$CC ;; + ,*,*)  CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +	PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +    *:NetBSD:*:*) +	# NetBSD (nbsd) targets should (where applicable) match one or +	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, +	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently +	# switched to ELF, *-*-netbsd* would select the old +	# object file format.  This provides both forward +	# compatibility and a consistent mechanism for selecting the +	# object file format. +	# +	# Note: NetBSD doesn't particularly care about the vendor +	# portion of the name.  We always set it to "unknown". +	sysctl="sysctl -n hw.machine_arch" +	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ +	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)` +	case "${UNAME_MACHINE_ARCH}" in +	    armeb) machine=armeb-unknown ;; +	    arm*) machine=arm-unknown ;; +	    sh3el) machine=shl-unknown ;; +	    sh3eb) machine=sh-unknown ;; +	    sh5el) machine=sh5le-unknown ;; +	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;; +	esac +	# The Operating System including object format, if it has switched +	# to ELF recently, or will in the future. +	case "${UNAME_MACHINE_ARCH}" in +	    arm*|i386|m68k|ns32k|sh3*|sparc|vax) +		eval $set_cc_for_build +		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ +			| grep __ELF__ >/dev/null +		then +		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). +		    # Return netbsd for either.  FIX? +		    os=netbsd +		else +		    os=netbsdelf +		fi +		;; +	    *) +	        os=netbsd +		;; +	esac +	# The OS release +	# Debian GNU/NetBSD machines have a different userland, and +	# thus, need a distinct triplet. However, they do not need +	# kernel version information, so it can be replaced with a +	# suitable tag, in the style of linux-gnu. +	case "${UNAME_VERSION}" in +	    Debian*) +		release='-gnu' +		;; +	    *) +		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` +		;; +	esac +	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: +	# contains redundant information, the shorter form: +	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. +	echo "${machine}-${os}${release}" +	exit ;; +    *:OpenBSD:*:*) +	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` +	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} +	exit ;; +    *:ekkoBSD:*:*) +	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} +	exit ;; +    *:SolidBSD:*:*) +	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} +	exit ;; +    macppc:MirBSD:*:*) +	echo powerpc-unknown-mirbsd${UNAME_RELEASE} +	exit ;; +    *:MirBSD:*:*) +	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} +	exit ;; +    alpha:OSF1:*:*) +	case $UNAME_RELEASE in +	*4.0) +		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` +		;; +	*5.*) +	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` +		;; +	esac +	# According to Compaq, /usr/sbin/psrinfo has been available on +	# OSF/1 and Tru64 systems produced since 1995.  I hope that +	# covers most systems running today.  This code pipes the CPU +	# types through head -n 1, so we only detect the type of CPU 0. +	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1` +	case "$ALPHA_CPU_TYPE" in +	    "EV4 (21064)") +		UNAME_MACHINE="alpha" ;; +	    "EV4.5 (21064)") +		UNAME_MACHINE="alpha" ;; +	    "LCA4 (21066/21068)") +		UNAME_MACHINE="alpha" ;; +	    "EV5 (21164)") +		UNAME_MACHINE="alphaev5" ;; +	    "EV5.6 (21164A)") +		UNAME_MACHINE="alphaev56" ;; +	    "EV5.6 (21164PC)") +		UNAME_MACHINE="alphapca56" ;; +	    "EV5.7 (21164PC)") +		UNAME_MACHINE="alphapca57" ;; +	    "EV6 (21264)") +		UNAME_MACHINE="alphaev6" ;; +	    "EV6.7 (21264A)") +		UNAME_MACHINE="alphaev67" ;; +	    "EV6.8CB (21264C)") +		UNAME_MACHINE="alphaev68" ;; +	    "EV6.8AL (21264B)") +		UNAME_MACHINE="alphaev68" ;; +	    "EV6.8CX (21264D)") +		UNAME_MACHINE="alphaev68" ;; +	    "EV6.9A (21264/EV69A)") +		UNAME_MACHINE="alphaev69" ;; +	    "EV7 (21364)") +		UNAME_MACHINE="alphaev7" ;; +	    "EV7.9 (21364A)") +		UNAME_MACHINE="alphaev79" ;; +	esac +	# A Pn.n version is a patched version. +	# A Vn.n version is a released version. +	# A Tn.n version is a released field test version. +	# A Xn.n version is an unreleased experimental baselevel. +	# 1.2 uses "1.2" for uname -r. +	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +	exit ;; +    Alpha\ *:Windows_NT*:*) +	# How do we know it's Interix rather than the generic POSIX subsystem? +	# Should we change UNAME_MACHINE based on the output of uname instead +	# of the specific Alpha model? +	echo alpha-pc-interix +	exit ;; +    21064:Windows_NT:50:3) +	echo alpha-dec-winnt3.5 +	exit ;; +    Amiga*:UNIX_System_V:4.0:*) +	echo m68k-unknown-sysv4 +	exit ;; +    *:[Aa]miga[Oo][Ss]:*:*) +	echo ${UNAME_MACHINE}-unknown-amigaos +	exit ;; +    *:[Mm]orph[Oo][Ss]:*:*) +	echo ${UNAME_MACHINE}-unknown-morphos +	exit ;; +    *:OS/390:*:*) +	echo i370-ibm-openedition +	exit ;; +    *:z/VM:*:*) +	echo s390-ibm-zvmoe +	exit ;; +    *:OS400:*:*) +        echo powerpc-ibm-os400 +	exit ;; +    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) +	echo arm-acorn-riscix${UNAME_RELEASE} +	exit ;; +    arm:riscos:*:*|arm:RISCOS:*:*) +	echo arm-unknown-riscos +	exit ;; +    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) +	echo hppa1.1-hitachi-hiuxmpp +	exit ;; +    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) +	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. +	if test "`(/bin/universe) 2>/dev/null`" = att ; then +		echo pyramid-pyramid-sysv3 +	else +		echo pyramid-pyramid-bsd +	fi +	exit ;; +    NILE*:*:*:dcosx) +	echo pyramid-pyramid-svr4 +	exit ;; +    DRS?6000:unix:4.0:6*) +	echo sparc-icl-nx6 +	exit ;; +    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) +	case `/usr/bin/uname -p` in +	    sparc) echo sparc-icl-nx7; exit ;; +	esac ;; +    sun4H:SunOS:5.*:*) +	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	exit ;; +    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) +	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	exit ;; +    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) +	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	exit ;; +    sun4*:SunOS:6*:*) +	# According to config.sub, this is the proper way to canonicalize +	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but +	# it's likely to be more like Solaris than SunOS4. +	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	exit ;; +    sun4*:SunOS:*:*) +	case "`/usr/bin/arch -k`" in +	    Series*|S4*) +		UNAME_RELEASE=`uname -v` +		;; +	esac +	# Japanese Language versions have a version number like `4.1.3-JL'. +	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` +	exit ;; +    sun3*:SunOS:*:*) +	echo m68k-sun-sunos${UNAME_RELEASE} +	exit ;; +    sun*:*:4.2BSD:*) +	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` +	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 +	case "`/bin/arch`" in +	    sun3) +		echo m68k-sun-sunos${UNAME_RELEASE} +		;; +	    sun4) +		echo sparc-sun-sunos${UNAME_RELEASE} +		;; +	esac +	exit ;; +    aushp:SunOS:*:*) +	echo sparc-auspex-sunos${UNAME_RELEASE} +	exit ;; +    # The situation for MiNT is a little confusing.  The machine name +    # can be virtually everything (everything which is not +    # "atarist" or "atariste" at least should have a processor +    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT" +    # to the lowercase version "mint" (or "freemint").  Finally +    # the system name "TOS" denotes a system which is actually not +    # MiNT.  But MiNT is downward compatible to TOS, so this should +    # be no problem. +    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) +        echo m68k-atari-mint${UNAME_RELEASE} +	exit ;; +    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) +	echo m68k-atari-mint${UNAME_RELEASE} +        exit ;; +    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) +        echo m68k-atari-mint${UNAME_RELEASE} +	exit ;; +    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) +        echo m68k-milan-mint${UNAME_RELEASE} +        exit ;; +    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) +        echo m68k-hades-mint${UNAME_RELEASE} +        exit ;; +    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) +        echo m68k-unknown-mint${UNAME_RELEASE} +        exit ;; +    m68k:machten:*:*) +	echo m68k-apple-machten${UNAME_RELEASE} +	exit ;; +    powerpc:machten:*:*) +	echo powerpc-apple-machten${UNAME_RELEASE} +	exit ;; +    RISC*:Mach:*:*) +	echo mips-dec-mach_bsd4.3 +	exit ;; +    RISC*:ULTRIX:*:*) +	echo mips-dec-ultrix${UNAME_RELEASE} +	exit ;; +    VAX*:ULTRIX*:*:*) +	echo vax-dec-ultrix${UNAME_RELEASE} +	exit ;; +    2020:CLIX:*:* | 2430:CLIX:*:*) +	echo clipper-intergraph-clix${UNAME_RELEASE} +	exit ;; +    mips:*:*:UMIPS | mips:*:*:RISCos) +	eval $set_cc_for_build +	sed 's/^	//' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h>  /* for printf() prototype */ +	int main (int argc, char *argv[]) { +#else +	int main (argc, argv) int argc; char *argv[]; { +#endif +	#if defined (host_mips) && defined (MIPSEB) +	#if defined (SYSTYPE_SYSV) +	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); +	#endif +	#if defined (SYSTYPE_SVR4) +	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); +	#endif +	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) +	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); +	#endif +	#endif +	  exit (-1); +	} +EOF +	$CC_FOR_BUILD -o $dummy $dummy.c && +	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && +	  SYSTEM_NAME=`$dummy $dummyarg` && +	    { echo "$SYSTEM_NAME"; exit; } +	echo mips-mips-riscos${UNAME_RELEASE} +	exit ;; +    Motorola:PowerMAX_OS:*:*) +	echo powerpc-motorola-powermax +	exit ;; +    Motorola:*:4.3:PL8-*) +	echo powerpc-harris-powermax +	exit ;; +    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) +	echo powerpc-harris-powermax +	exit ;; +    Night_Hawk:Power_UNIX:*:*) +	echo powerpc-harris-powerunix +	exit ;; +    m88k:CX/UX:7*:*) +	echo m88k-harris-cxux7 +	exit ;; +    m88k:*:4*:R4*) +	echo m88k-motorola-sysv4 +	exit ;; +    m88k:*:3*:R3*) +	echo m88k-motorola-sysv3 +	exit ;; +    AViiON:dgux:*:*) +        # DG/UX returns AViiON for all architectures +        UNAME_PROCESSOR=`/usr/bin/uname -p` +	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] +	then +	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ +	       [ ${TARGET_BINARY_INTERFACE}x = x ] +	    then +		echo m88k-dg-dgux${UNAME_RELEASE} +	    else +		echo m88k-dg-dguxbcs${UNAME_RELEASE} +	    fi +	else +	    echo i586-dg-dgux${UNAME_RELEASE} +	fi + 	exit ;; +    M88*:DolphinOS:*:*)	# DolphinOS (SVR3) +	echo m88k-dolphin-sysv3 +	exit ;; +    M88*:*:R3*:*) +	# Delta 88k system running SVR3 +	echo m88k-motorola-sysv3 +	exit ;; +    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) +	echo m88k-tektronix-sysv3 +	exit ;; +    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) +	echo m68k-tektronix-bsd +	exit ;; +    *:IRIX*:*:*) +	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` +	exit ;; +    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. +	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id +	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX ' +    i*86:AIX:*:*) +	echo i386-ibm-aix +	exit ;; +    ia64:AIX:*:*) +	if [ -x /usr/bin/oslevel ] ; then +		IBM_REV=`/usr/bin/oslevel` +	else +		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} +	fi +	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} +	exit ;; +    *:AIX:2:3) +	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then +		eval $set_cc_for_build +		sed 's/^		//' << EOF >$dummy.c +		#include <sys/systemcfg.h> + +		main() +			{ +			if (!__power_pc()) +				exit(1); +			puts("powerpc-ibm-aix3.2.5"); +			exit(0); +			} +EOF +		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` +		then +			echo "$SYSTEM_NAME" +		else +			echo rs6000-ibm-aix3.2.5 +		fi +	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then +		echo rs6000-ibm-aix3.2.4 +	else +		echo rs6000-ibm-aix3.2 +	fi +	exit ;; +    *:AIX:*:[456]) +	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` +	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then +		IBM_ARCH=rs6000 +	else +		IBM_ARCH=powerpc +	fi +	if [ -x /usr/bin/oslevel ] ; then +		IBM_REV=`/usr/bin/oslevel` +	else +		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} +	fi +	echo ${IBM_ARCH}-ibm-aix${IBM_REV} +	exit ;; +    *:AIX:*:*) +	echo rs6000-ibm-aix +	exit ;; +    ibmrt:4.4BSD:*|romp-ibm:BSD:*) +	echo romp-ibm-bsd4.4 +	exit ;; +    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and +	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to +	exit ;;                             # report: romp-ibm BSD 4.3 +    *:BOSX:*:*) +	echo rs6000-bull-bosx +	exit ;; +    DPX/2?00:B.O.S.:*:*) +	echo m68k-bull-sysv3 +	exit ;; +    9000/[34]??:4.3bsd:1.*:*) +	echo m68k-hp-bsd +	exit ;; +    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) +	echo m68k-hp-bsd4.4 +	exit ;; +    9000/[34678]??:HP-UX:*:*) +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` +	case "${UNAME_MACHINE}" in +	    9000/31? )            HP_ARCH=m68000 ;; +	    9000/[34]?? )         HP_ARCH=m68k ;; +	    9000/[678][0-9][0-9]) +		if [ -x /usr/bin/getconf ]; then +		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` +                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` +                    case "${sc_cpu_version}" in +                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 +                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 +                      532)                      # CPU_PA_RISC2_0 +                        case "${sc_kernel_bits}" in +                          32) HP_ARCH="hppa2.0n" ;; +                          64) HP_ARCH="hppa2.0w" ;; +			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20 +                        esac ;; +                    esac +		fi +		if [ "${HP_ARCH}" = "" ]; then +		    eval $set_cc_for_build +		    sed 's/^              //' << EOF >$dummy.c + +              #define _HPUX_SOURCE +              #include <stdlib.h> +              #include <unistd.h> + +              int main () +              { +              #if defined(_SC_KERNEL_BITS) +                  long bits = sysconf(_SC_KERNEL_BITS); +              #endif +                  long cpu  = sysconf (_SC_CPU_VERSION); + +                  switch (cpu) +              	{ +              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break; +              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break; +              	case CPU_PA_RISC2_0: +              #if defined(_SC_KERNEL_BITS) +              	    switch (bits) +              		{ +              		case 64: puts ("hppa2.0w"); break; +              		case 32: puts ("hppa2.0n"); break; +              		default: puts ("hppa2.0"); break; +              		} break; +              #else  /* !defined(_SC_KERNEL_BITS) */ +              	    puts ("hppa2.0"); break; +              #endif +              	default: puts ("hppa1.0"); break; +              	} +                  exit (0); +              } +EOF +		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` +		    test -z "$HP_ARCH" && HP_ARCH=hppa +		fi ;; +	esac +	if [ ${HP_ARCH} = "hppa2.0w" ] +	then +	    eval $set_cc_for_build + +	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating +	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler +	    # generating 64-bit code.  GNU and HP use different nomenclature: +	    # +	    # $ CC_FOR_BUILD=cc ./config.guess +	    # => hppa2.0w-hp-hpux11.23 +	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess +	    # => hppa64-hp-hpux11.23 + +	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | +		grep __LP64__ >/dev/null +	    then +		HP_ARCH="hppa2.0w" +	    else +		HP_ARCH="hppa64" +	    fi +	fi +	echo ${HP_ARCH}-hp-hpux${HPUX_REV} +	exit ;; +    ia64:HP-UX:*:*) +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` +	echo ia64-hp-hpux${HPUX_REV} +	exit ;; +    3050*:HI-UX:*:*) +	eval $set_cc_for_build +	sed 's/^	//' << EOF >$dummy.c +	#include <unistd.h> +	int +	main () +	{ +	  long cpu = sysconf (_SC_CPU_VERSION); +	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns +	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct +	     results, however.  */ +	  if (CPU_IS_PA_RISC (cpu)) +	    { +	      switch (cpu) +		{ +		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; +		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; +		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; +		  default: puts ("hppa-hitachi-hiuxwe2"); break; +		} +	    } +	  else if (CPU_IS_HP_MC68K (cpu)) +	    puts ("m68k-hitachi-hiuxwe2"); +	  else puts ("unknown-hitachi-hiuxwe2"); +	  exit (0); +	} +EOF +	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && +		{ echo "$SYSTEM_NAME"; exit; } +	echo unknown-hitachi-hiuxwe2 +	exit ;; +    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) +	echo hppa1.1-hp-bsd +	exit ;; +    9000/8??:4.3bsd:*:*) +	echo hppa1.0-hp-bsd +	exit ;; +    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) +	echo hppa1.0-hp-mpeix +	exit ;; +    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) +	echo hppa1.1-hp-osf +	exit ;; +    hp8??:OSF1:*:*) +	echo hppa1.0-hp-osf +	exit ;; +    i*86:OSF1:*:*) +	if [ -x /usr/sbin/sysversion ] ; then +	    echo ${UNAME_MACHINE}-unknown-osf1mk +	else +	    echo ${UNAME_MACHINE}-unknown-osf1 +	fi +	exit ;; +    parisc*:Lites*:*:*) +	echo hppa1.1-hp-lites +	exit ;; +    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) +	echo c1-convex-bsd +        exit ;; +    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) +	if getsysinfo -f scalar_acc +	then echo c32-convex-bsd +	else echo c2-convex-bsd +	fi +        exit ;; +    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) +	echo c34-convex-bsd +        exit ;; +    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) +	echo c38-convex-bsd +        exit ;; +    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) +	echo c4-convex-bsd +        exit ;; +    CRAY*Y-MP:*:*:*) +	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +	exit ;; +    CRAY*[A-Z]90:*:*:*) +	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ +	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ +	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ +	      -e 's/\.[^.]*$/.X/' +	exit ;; +    CRAY*TS:*:*:*) +	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +	exit ;; +    CRAY*T3E:*:*:*) +	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +	exit ;; +    CRAY*SV1:*:*:*) +	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +	exit ;; +    *:UNICOS/mp:*:*) +	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' +	exit ;; +    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) +	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` +        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` +        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +        exit ;; +    5000:UNIX_System_V:4.*:*) +        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` +        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` +        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" +	exit ;; +    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) +	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} +	exit ;; +    sparc*:BSD/OS:*:*) +	echo sparc-unknown-bsdi${UNAME_RELEASE} +	exit ;; +    *:BSD/OS:*:*) +	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} +	exit ;; +    *:FreeBSD:*:*) +	case ${UNAME_MACHINE} in +	    pc98) +		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; +	    amd64) +		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; +	    *) +		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; +	esac +	exit ;; +    i*:CYGWIN*:*) +	echo ${UNAME_MACHINE}-pc-cygwin +	exit ;; +    *:MINGW*:*) +	echo ${UNAME_MACHINE}-pc-mingw32 +	exit ;; +    i*:windows32*:*) +    	# uname -m includes "-pc" on this system. +    	echo ${UNAME_MACHINE}-mingw32 +	exit ;; +    i*:PW*:*) +	echo ${UNAME_MACHINE}-pc-pw32 +	exit ;; +    *:Interix*:[3456]*) +    	case ${UNAME_MACHINE} in +	    x86) +		echo i586-pc-interix${UNAME_RELEASE} +		exit ;; +	    EM64T | authenticamd) +		echo x86_64-unknown-interix${UNAME_RELEASE} +		exit ;; +	    IA64) +		echo ia64-unknown-interix${UNAME_RELEASE} +		exit ;; +	esac ;; +    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) +	echo i${UNAME_MACHINE}-pc-mks +	exit ;; +    i*:Windows_NT*:* | Pentium*:Windows_NT*:*) +	# How do we know it's Interix rather than the generic POSIX subsystem? +	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we +	# UNAME_MACHINE based on the output of uname instead of i386? +	echo i586-pc-interix +	exit ;; +    i*:UWIN*:*) +	echo ${UNAME_MACHINE}-pc-uwin +	exit ;; +    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) +	echo x86_64-unknown-cygwin +	exit ;; +    p*:CYGWIN*:*) +	echo powerpcle-unknown-cygwin +	exit ;; +    prep*:SunOS:5.*:*) +	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` +	exit ;; +    *:GNU:*:*) +	# the GNU system +	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` +	exit ;; +    *:GNU/*:*:*) +	# other systems with GNU libc and userland +	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu +	exit ;; +    i*86:Minix:*:*) +	echo ${UNAME_MACHINE}-pc-minix +	exit ;; +    arm*:Linux:*:*) +	eval $set_cc_for_build +	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ +	    | grep -q __ARM_EABI__ +	then +	    echo ${UNAME_MACHINE}-unknown-linux-gnu +	else +	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi +	fi +	exit ;; +    avr32*:Linux:*:*) +	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    cris:Linux:*:*) +	echo cris-axis-linux-gnu +	exit ;; +    crisv32:Linux:*:*) +	echo crisv32-axis-linux-gnu +	exit ;; +    frv:Linux:*:*) +    	echo frv-unknown-linux-gnu +	exit ;; +    ia64:Linux:*:*) +	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    m32r*:Linux:*:*) +	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    m68*:Linux:*:*) +	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    mips:Linux:*:*) +	eval $set_cc_for_build +	sed 's/^	//' << EOF >$dummy.c +	#undef CPU +	#undef mips +	#undef mipsel +	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +	CPU=mipsel +	#else +	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +	CPU=mips +	#else +	CPU= +	#endif +	#endif +EOF +	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' +	    /^CPU/{ +		s: ::g +		p +	    }'`" +	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } +	;; +    mips64:Linux:*:*) +	eval $set_cc_for_build +	sed 's/^	//' << EOF >$dummy.c +	#undef CPU +	#undef mips64 +	#undef mips64el +	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) +	CPU=mips64el +	#else +	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) +	CPU=mips64 +	#else +	CPU= +	#endif +	#endif +EOF +	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' +	    /^CPU/{ +		s: ::g +		p +	    }'`" +	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } +	;; +    or32:Linux:*:*) +	echo or32-unknown-linux-gnu +	exit ;; +    ppc:Linux:*:*) +	echo powerpc-unknown-linux-gnu +	exit ;; +    ppc64:Linux:*:*) +	echo powerpc64-unknown-linux-gnu +	exit ;; +    alpha:Linux:*:*) +	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in +	  EV5)   UNAME_MACHINE=alphaev5 ;; +	  EV56)  UNAME_MACHINE=alphaev56 ;; +	  PCA56) UNAME_MACHINE=alphapca56 ;; +	  PCA57) UNAME_MACHINE=alphapca56 ;; +	  EV6)   UNAME_MACHINE=alphaev6 ;; +	  EV67)  UNAME_MACHINE=alphaev67 ;; +	  EV68*) UNAME_MACHINE=alphaev68 ;; +        esac +	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null +	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi +	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} +	exit ;; +    parisc:Linux:*:* | hppa:Linux:*:*) +	# Look for CPU level +	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in +	  PA7*) echo hppa1.1-unknown-linux-gnu ;; +	  PA8*) echo hppa2.0-unknown-linux-gnu ;; +	  *)    echo hppa-unknown-linux-gnu ;; +	esac +	exit ;; +    parisc64:Linux:*:* | hppa64:Linux:*:*) +	echo hppa64-unknown-linux-gnu +	exit ;; +    s390:Linux:*:* | s390x:Linux:*:*) +	echo ${UNAME_MACHINE}-ibm-linux +	exit ;; +    sh64*:Linux:*:*) +    	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    sh*:Linux:*:*) +	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    sparc:Linux:*:* | sparc64:Linux:*:*) +	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    vax:Linux:*:*) +	echo ${UNAME_MACHINE}-dec-linux-gnu +	exit ;; +    x86_64:Linux:*:*) +	echo x86_64-unknown-linux-gnu +	exit ;; +    xtensa*:Linux:*:*) +    	echo ${UNAME_MACHINE}-unknown-linux-gnu +	exit ;; +    i*86:Linux:*:*) +	# The BFD linker knows what the default object file format is, so +	# first see if it will tell us. cd to the root directory to prevent +	# problems with other programs or directories called `ld' in the path. +	# Set LC_ALL=C to ensure ld outputs messages in English. +	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ +			 | sed -ne '/supported targets:/!d +				    s/[ 	][ 	]*/ /g +				    s/.*supported targets: *// +				    s/ .*// +				    p'` +        case "$ld_supported_targets" in +	  elf32-i386) +		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" +		;; +	  a.out-i386-linux) +		echo "${UNAME_MACHINE}-pc-linux-gnuaout" +		exit ;; +	  coff-i386) +		echo "${UNAME_MACHINE}-pc-linux-gnucoff" +		exit ;; +	  "") +		# Either a pre-BFD a.out linker (linux-gnuoldld) or +		# one that does not give us useful --help. +		echo "${UNAME_MACHINE}-pc-linux-gnuoldld" +		exit ;; +	esac +	# Determine whether the default compiler is a.out or elf +	eval $set_cc_for_build +	sed 's/^	//' << EOF >$dummy.c +	#include <features.h> +	#ifdef __ELF__ +	# ifdef __GLIBC__ +	#  if __GLIBC__ >= 2 +	LIBC=gnu +	#  else +	LIBC=gnulibc1 +	#  endif +	# else +	LIBC=gnulibc1 +	# endif +	#else +	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +	LIBC=gnu +	#else +	LIBC=gnuaout +	#endif +	#endif +	#ifdef __dietlibc__ +	LIBC=dietlibc +	#endif +EOF +	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' +	    /^LIBC/{ +		s: ::g +		p +	    }'`" +	test x"${LIBC}" != x && { +		echo "${UNAME_MACHINE}-pc-linux-${LIBC}" +		exit +	} +	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } +	;; +    i*86:DYNIX/ptx:4*:*) +	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. +	# earlier versions are messed up and put the nodename in both +	# sysname and nodename. +	echo i386-sequent-sysv4 +	exit ;; +    i*86:UNIX_SV:4.2MP:2.*) +        # Unixware is an offshoot of SVR4, but it has its own version +        # number series starting with 2... +        # I am not positive that other SVR4 systems won't match this, +	# I just have to hope.  -- rms. +        # Use sysv4.2uw... so that sysv4* matches it. +	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} +	exit ;; +    i*86:OS/2:*:*) +	# If we were able to find `uname', then EMX Unix compatibility +	# is probably installed. +	echo ${UNAME_MACHINE}-pc-os2-emx +	exit ;; +    i*86:XTS-300:*:STOP) +	echo ${UNAME_MACHINE}-unknown-stop +	exit ;; +    i*86:atheos:*:*) +	echo ${UNAME_MACHINE}-unknown-atheos +	exit ;; +    i*86:syllable:*:*) +	echo ${UNAME_MACHINE}-pc-syllable +	exit ;; +    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) +	echo i386-unknown-lynxos${UNAME_RELEASE} +	exit ;; +    i*86:*DOS:*:*) +	echo ${UNAME_MACHINE}-pc-msdosdjgpp +	exit ;; +    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) +	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` +	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then +		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} +	else +		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} +	fi +	exit ;; +    i*86:*:5:[678]*) +    	# UnixWare 7.x, OpenUNIX and OpenServer 6. +	case `/bin/uname -X | grep "^Machine"` in +	    *486*)	     UNAME_MACHINE=i486 ;; +	    *Pentium)	     UNAME_MACHINE=i586 ;; +	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;; +	esac +	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} +	exit ;; +    i*86:*:3.2:*) +	if test -f /usr/options/cb.name; then +		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` +		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL +	elif /bin/uname -X 2>/dev/null >/dev/null ; then +		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` +		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 +		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ +			&& UNAME_MACHINE=i586 +		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ +			&& UNAME_MACHINE=i686 +		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ +			&& UNAME_MACHINE=i686 +		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL +	else +		echo ${UNAME_MACHINE}-pc-sysv32 +	fi +	exit ;; +    pc:*:*:*) +	# Left here for compatibility: +        # uname -m prints for DJGPP always 'pc', but it prints nothing about +        # the processor, so we play safe by assuming i386. +	echo i386-pc-msdosdjgpp +        exit ;; +    Intel:Mach:3*:*) +	echo i386-pc-mach3 +	exit ;; +    paragon:*:*:*) +	echo i860-intel-osf1 +	exit ;; +    i860:*:4.*:*) # i860-SVR4 +	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then +	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 +	else # Add other i860-SVR4 vendors below as they are discovered. +	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4 +	fi +	exit ;; +    mini*:CTIX:SYS*5:*) +	# "miniframe" +	echo m68010-convergent-sysv +	exit ;; +    mc68k:UNIX:SYSTEM5:3.51m) +	echo m68k-convergent-sysv +	exit ;; +    M680?0:D-NIX:5.3:*) +	echo m68k-diab-dnix +	exit ;; +    M68*:*:R3V[5678]*:*) +	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; +    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) +	OS_REL='' +	test -r /etc/.relid \ +	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` +	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; } +	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ +	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; +    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) +        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ +          && { echo i486-ncr-sysv4; exit; } ;; +    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) +	echo m68k-unknown-lynxos${UNAME_RELEASE} +	exit ;; +    mc68030:UNIX_System_V:4.*:*) +	echo m68k-atari-sysv4 +	exit ;; +    TSUNAMI:LynxOS:2.*:*) +	echo sparc-unknown-lynxos${UNAME_RELEASE} +	exit ;; +    rs6000:LynxOS:2.*:*) +	echo rs6000-unknown-lynxos${UNAME_RELEASE} +	exit ;; +    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) +	echo powerpc-unknown-lynxos${UNAME_RELEASE} +	exit ;; +    SM[BE]S:UNIX_SV:*:*) +	echo mips-dde-sysv${UNAME_RELEASE} +	exit ;; +    RM*:ReliantUNIX-*:*:*) +	echo mips-sni-sysv4 +	exit ;; +    RM*:SINIX-*:*:*) +	echo mips-sni-sysv4 +	exit ;; +    *:SINIX-*:*:*) +	if uname -p 2>/dev/null >/dev/null ; then +		UNAME_MACHINE=`(uname -p) 2>/dev/null` +		echo ${UNAME_MACHINE}-sni-sysv4 +	else +		echo ns32k-sni-sysv +	fi +	exit ;; +    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort +                      # says <Richard.M.Bartel@ccMail.Census.GOV> +        echo i586-unisys-sysv4 +        exit ;; +    *:UNIX_System_V:4*:FTX*) +	# From Gerald Hewes <hewes@openmarket.com>. +	# How about differentiating between stratus architectures? -djm +	echo hppa1.1-stratus-sysv4 +	exit ;; +    *:*:*:FTX*) +	# From seanf@swdc.stratus.com. +	echo i860-stratus-sysv4 +	exit ;; +    i*86:VOS:*:*) +	# From Paul.Green@stratus.com. +	echo ${UNAME_MACHINE}-stratus-vos +	exit ;; +    *:VOS:*:*) +	# From Paul.Green@stratus.com. +	echo hppa1.1-stratus-vos +	exit ;; +    mc68*:A/UX:*:*) +	echo m68k-apple-aux${UNAME_RELEASE} +	exit ;; +    news*:NEWS-OS:6*:*) +	echo mips-sony-newsos6 +	exit ;; +    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) +	if [ -d /usr/nec ]; then +	        echo mips-nec-sysv${UNAME_RELEASE} +	else +	        echo mips-unknown-sysv${UNAME_RELEASE} +	fi +        exit ;; +    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only. +	echo powerpc-be-beos +	exit ;; +    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only. +	echo powerpc-apple-beos +	exit ;; +    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible. +	echo i586-pc-beos +	exit ;; +    SX-4:SUPER-UX:*:*) +	echo sx4-nec-superux${UNAME_RELEASE} +	exit ;; +    SX-5:SUPER-UX:*:*) +	echo sx5-nec-superux${UNAME_RELEASE} +	exit ;; +    SX-6:SUPER-UX:*:*) +	echo sx6-nec-superux${UNAME_RELEASE} +	exit ;; +    SX-7:SUPER-UX:*:*) +	echo sx7-nec-superux${UNAME_RELEASE} +	exit ;; +    SX-8:SUPER-UX:*:*) +	echo sx8-nec-superux${UNAME_RELEASE} +	exit ;; +    SX-8R:SUPER-UX:*:*) +	echo sx8r-nec-superux${UNAME_RELEASE} +	exit ;; +    Power*:Rhapsody:*:*) +	echo powerpc-apple-rhapsody${UNAME_RELEASE} +	exit ;; +    *:Rhapsody:*:*) +	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} +	exit ;; +    *:Darwin:*:*) +	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown +	case $UNAME_PROCESSOR in +	    unknown) UNAME_PROCESSOR=powerpc ;; +	esac +	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} +	exit ;; +    *:procnto*:*:* | *:QNX:[0123456789]*:*) +	UNAME_PROCESSOR=`uname -p` +	if test "$UNAME_PROCESSOR" = "x86"; then +		UNAME_PROCESSOR=i386 +		UNAME_MACHINE=pc +	fi +	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} +	exit ;; +    *:QNX:*:4*) +	echo i386-pc-qnx +	exit ;; +    NSE-?:NONSTOP_KERNEL:*:*) +	echo nse-tandem-nsk${UNAME_RELEASE} +	exit ;; +    NSR-?:NONSTOP_KERNEL:*:*) +	echo nsr-tandem-nsk${UNAME_RELEASE} +	exit ;; +    *:NonStop-UX:*:*) +	echo mips-compaq-nonstopux +	exit ;; +    BS2000:POSIX*:*:*) +	echo bs2000-siemens-sysv +	exit ;; +    DS/*:UNIX_System_V:*:*) +	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} +	exit ;; +    *:Plan9:*:*) +	# "uname -m" is not consistent, so use $cputype instead. 386 +	# is converted to i386 for consistency with other x86 +	# operating systems. +	if test "$cputype" = "386"; then +	    UNAME_MACHINE=i386 +	else +	    UNAME_MACHINE="$cputype" +	fi +	echo ${UNAME_MACHINE}-unknown-plan9 +	exit ;; +    *:TOPS-10:*:*) +	echo pdp10-unknown-tops10 +	exit ;; +    *:TENEX:*:*) +	echo pdp10-unknown-tenex +	exit ;; +    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) +	echo pdp10-dec-tops20 +	exit ;; +    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) +	echo pdp10-xkl-tops20 +	exit ;; +    *:TOPS-20:*:*) +	echo pdp10-unknown-tops20 +	exit ;; +    *:ITS:*:*) +	echo pdp10-unknown-its +	exit ;; +    SEI:*:*:SEIUX) +        echo mips-sei-seiux${UNAME_RELEASE} +	exit ;; +    *:DragonFly:*:*) +	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` +	exit ;; +    *:*VMS:*:*) +    	UNAME_MACHINE=`(uname -p) 2>/dev/null` +	case "${UNAME_MACHINE}" in +	    A*) echo alpha-dec-vms ; exit ;; +	    I*) echo ia64-dec-vms ; exit ;; +	    V*) echo vax-dec-vms ; exit ;; +	esac ;; +    *:XENIX:*:SysV) +	echo i386-pc-xenix +	exit ;; +    i*86:skyos:*:*) +	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' +	exit ;; +    i*86:rdos:*:*) +	echo ${UNAME_MACHINE}-pc-rdos +	exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) +  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed, +     I don't know....  */ +  printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> +  printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 +          "4" +#else +	  "" +#endif +         ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) +  printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) +  printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif +  int version; +  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; +  if (version < 4) +    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); +  else +    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); +  exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) +  printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) +  printf ("ns32k-encore-mach\n"); exit (0); +#else +  printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) +  printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) +  printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) +  printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) +    struct utsname un; + +    uname(&un); + +    if (strncmp(un.version, "V2", 2) == 0) { +	printf ("i386-sequent-ptx2\n"); exit (0); +    } +    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ +	printf ("i386-sequent-ptx1\n"); exit (0); +    } +    printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +#  include <sys/param.h> +#  if defined (BSD) +#   if BSD == 43 +      printf ("vax-dec-bsd4.3\n"); exit (0); +#   else +#    if BSD == 199006 +      printf ("vax-dec-bsd4.3reno\n"); exit (0); +#    else +      printf ("vax-dec-bsd\n"); exit (0); +#    endif +#   endif +#  else +    printf ("vax-dec-bsd\n"); exit (0); +#  endif +# else +    printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) +  printf ("i860-alliant-bsd\n"); exit (0); +#endif + +  exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && +	{ echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then +    case `getsysinfo -f cpu_type` in +    c1*) +	echo c1-convex-bsd +	exit ;; +    c2*) +	if getsysinfo -f scalar_acc +	then echo c32-convex-bsd +	else echo c2-convex-bsd +	fi +	exit ;; +    c34*) +	echo c34-convex-bsd +	exit ;; +    c38*) +	echo c38-convex-bsd +	exit ;; +    c4*) +	echo c4-convex-bsd +	exit ;; +    esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + +  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +and +  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null` + +hostinfo               = `(hostinfo) 2>/dev/null` +/bin/universe          = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch              = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM  = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/aux-build/config.sub b/aux-build/config.sub new file mode 100755 index 0000000..6759825 --- /dev/null +++ b/aux-build/config.sub @@ -0,0 +1,1658 @@ +#! /bin/sh +# Configuration validation subroutine script. +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +#   Free Software Foundation, Inc. + +timestamp='2008-01-16' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine.  It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to <config-patches@gnu.org>.  Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support.  The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS +       $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: +  -h, --help         print this help, then exit +  -t, --time-stamp   print date of last modification, then exit +  -v, --version      print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do +  case $1 in +    --time-stamp | --time* | -t ) +       echo "$timestamp" ; exit ;; +    --version | -v ) +       echo "$version" ; exit ;; +    --help | --h* | -h ) +       echo "$usage"; exit ;; +    -- )     # Stop option processing +       shift; break ;; +    - )	# Use stdin as input. +       break ;; +    -* ) +       echo "$me: invalid option $1$help" +       exit 1 ;; + +    *local*) +       # First pass through any local machine types. +       echo $1 +       exit ;; + +    * ) +       break ;; +  esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 +    exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 +    exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in +  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ +  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ +  storm-chaos* | os2-emx* | rtmk-nova*) +    os=-$maybe_os +    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` +    ;; +  *) +    basic_machine=`echo $1 | sed 's/-[^-]*$//'` +    if [ $basic_machine != $1 ] +    then os=`echo $1 | sed 's/.*-/-/'` +    else os=; fi +    ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work.  We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in +	-sun*os*) +		# Prevent following clause from handling this invalid input. +		;; +	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ +	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ +	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ +	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ +	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ +	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ +	-apple | -axis | -knuth | -cray) +		os= +		basic_machine=$1 +		;; +	-sim | -cisco | -oki | -wec | -winbond) +		os= +		basic_machine=$1 +		;; +	-scout) +		;; +	-wrs) +		os=-vxworks +		basic_machine=$1 +		;; +	-chorusos*) +		os=-chorusos +		basic_machine=$1 +		;; + 	-chorusrdb) + 		os=-chorusrdb +		basic_machine=$1 + 		;; +	-hiux*) +		os=-hiuxwe2 +		;; +	-sco6) +		os=-sco5v6 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-sco5) +		os=-sco3.2v5 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-sco4) +		os=-sco3.2v4 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-sco3.2.[4-9]*) +		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-sco3.2v[4-9]*) +		# Don't forget version if it is 3.2v4 or newer. +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-sco5v6*) +		# Don't forget version if it is 3.2v4 or newer. +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-sco*) +		os=-sco3.2v2 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-udk*) +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-isc) +		os=-isc2.2 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-clix*) +		basic_machine=clipper-intergraph +		;; +	-isc*) +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` +		;; +	-lynx*) +		os=-lynxos +		;; +	-ptx*) +		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` +		;; +	-windowsnt*) +		os=`echo $os | sed -e 's/windowsnt/winnt/'` +		;; +	-psos*) +		os=-psos +		;; +	-mint | -mint[0-9]*) +		basic_machine=m68k-atari +		os=-mint +		;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in +	# Recognize the basic CPU types without company name. +	# Some are omitted here because they have special meanings below. +	1750a | 580 \ +	| a29k \ +	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ +	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ +	| am33_2.0 \ +	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ +	| bfin \ +	| c4x | clipper \ +	| d10v | d30v | dlx | dsp16xx \ +	| fido | fr30 | frv \ +	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ +	| i370 | i860 | i960 | ia64 \ +	| ip2k | iq2000 \ +	| m32c | m32r | m32rle | m68000 | m68k | m88k \ +	| maxq | mb | microblaze | mcore | mep \ +	| mips | mipsbe | mipseb | mipsel | mipsle \ +	| mips16 \ +	| mips64 | mips64el \ +	| mips64vr | mips64vrel \ +	| mips64orion | mips64orionel \ +	| mips64vr4100 | mips64vr4100el \ +	| mips64vr4300 | mips64vr4300el \ +	| mips64vr5000 | mips64vr5000el \ +	| mips64vr5900 | mips64vr5900el \ +	| mipsisa32 | mipsisa32el \ +	| mipsisa32r2 | mipsisa32r2el \ +	| mipsisa64 | mipsisa64el \ +	| mipsisa64r2 | mipsisa64r2el \ +	| mipsisa64sb1 | mipsisa64sb1el \ +	| mipsisa64sr71k | mipsisa64sr71kel \ +	| mipstx39 | mipstx39el \ +	| mn10200 | mn10300 \ +	| mt \ +	| msp430 \ +	| nios | nios2 \ +	| ns16k | ns32k \ +	| or32 \ +	| pdp10 | pdp11 | pj | pjl \ +	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ +	| pyramid \ +	| score \ +	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ +	| sh64 | sh64le \ +	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ +	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \ +	| spu | strongarm \ +	| tahoe | thumb | tic4x | tic80 | tron \ +	| v850 | v850e \ +	| we32k \ +	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ +	| z8k) +		basic_machine=$basic_machine-unknown +		;; +	m6811 | m68hc11 | m6812 | m68hc12) +		# Motorola 68HC11/12. +		basic_machine=$basic_machine-unknown +		os=-none +		;; +	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) +		;; +	ms1) +		basic_machine=mt-unknown +		;; + +	# We use `pc' rather than `unknown' +	# because (1) that's what they normally are, and +	# (2) the word "unknown" tends to confuse beginning users. +	i*86 | x86_64) +	  basic_machine=$basic_machine-pc +	  ;; +	# Object if more than one company name word. +	*-*-*) +		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 +		exit 1 +		;; +	# Recognize the basic CPU types with company name. +	580-* \ +	| a29k-* \ +	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ +	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ +	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ +	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \ +	| avr-* | avr32-* \ +	| bfin-* | bs2000-* \ +	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ +	| clipper-* | craynv-* | cydra-* \ +	| d10v-* | d30v-* | dlx-* \ +	| elxsi-* \ +	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ +	| h8300-* | h8500-* \ +	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ +	| i*86-* | i860-* | i960-* | ia64-* \ +	| ip2k-* | iq2000-* \ +	| m32c-* | m32r-* | m32rle-* \ +	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ +	| m88110-* | m88k-* | maxq-* | mcore-* \ +	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ +	| mips16-* \ +	| mips64-* | mips64el-* \ +	| mips64vr-* | mips64vrel-* \ +	| mips64orion-* | mips64orionel-* \ +	| mips64vr4100-* | mips64vr4100el-* \ +	| mips64vr4300-* | mips64vr4300el-* \ +	| mips64vr5000-* | mips64vr5000el-* \ +	| mips64vr5900-* | mips64vr5900el-* \ +	| mipsisa32-* | mipsisa32el-* \ +	| mipsisa32r2-* | mipsisa32r2el-* \ +	| mipsisa64-* | mipsisa64el-* \ +	| mipsisa64r2-* | mipsisa64r2el-* \ +	| mipsisa64sb1-* | mipsisa64sb1el-* \ +	| mipsisa64sr71k-* | mipsisa64sr71kel-* \ +	| mipstx39-* | mipstx39el-* \ +	| mmix-* \ +	| mt-* \ +	| msp430-* \ +	| nios-* | nios2-* \ +	| none-* | np1-* | ns16k-* | ns32k-* \ +	| orion-* \ +	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ +	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ +	| pyramid-* \ +	| romp-* | rs6000-* \ +	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ +	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ +	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ +	| sparclite-* \ +	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ +	| tahoe-* | thumb-* \ +	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ +	| tron-* \ +	| v850-* | v850e-* | vax-* \ +	| we32k-* \ +	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ +	| xstormy16-* | xtensa*-* \ +	| ymp-* \ +	| z8k-*) +		;; +	# Recognize the basic CPU types without company name, with glob match. +	xtensa*) +		basic_machine=$basic_machine-unknown +		;; +	# Recognize the various machine names and aliases which stand +	# for a CPU type and a company and sometimes even an OS. +	386bsd) +		basic_machine=i386-unknown +		os=-bsd +		;; +	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) +		basic_machine=m68000-att +		;; +	3b*) +		basic_machine=we32k-att +		;; +	a29khif) +		basic_machine=a29k-amd +		os=-udi +		;; +    	abacus) +		basic_machine=abacus-unknown +		;; +	adobe68k) +		basic_machine=m68010-adobe +		os=-scout +		;; +	alliant | fx80) +		basic_machine=fx80-alliant +		;; +	altos | altos3068) +		basic_machine=m68k-altos +		;; +	am29k) +		basic_machine=a29k-none +		os=-bsd +		;; +	amd64) +		basic_machine=x86_64-pc +		;; +	amd64-*) +		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	amdahl) +		basic_machine=580-amdahl +		os=-sysv +		;; +	amiga | amiga-*) +		basic_machine=m68k-unknown +		;; +	amigaos | amigados) +		basic_machine=m68k-unknown +		os=-amigaos +		;; +	amigaunix | amix) +		basic_machine=m68k-unknown +		os=-sysv4 +		;; +	apollo68) +		basic_machine=m68k-apollo +		os=-sysv +		;; +	apollo68bsd) +		basic_machine=m68k-apollo +		os=-bsd +		;; +	aux) +		basic_machine=m68k-apple +		os=-aux +		;; +	balance) +		basic_machine=ns32k-sequent +		os=-dynix +		;; +	blackfin) +		basic_machine=bfin-unknown +		os=-linux +		;; +	blackfin-*) +		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` +		os=-linux +		;; +	c90) +		basic_machine=c90-cray +		os=-unicos +		;; +	convex-c1) +		basic_machine=c1-convex +		os=-bsd +		;; +	convex-c2) +		basic_machine=c2-convex +		os=-bsd +		;; +	convex-c32) +		basic_machine=c32-convex +		os=-bsd +		;; +	convex-c34) +		basic_machine=c34-convex +		os=-bsd +		;; +	convex-c38) +		basic_machine=c38-convex +		os=-bsd +		;; +	cray | j90) +		basic_machine=j90-cray +		os=-unicos +		;; +	craynv) +		basic_machine=craynv-cray +		os=-unicosmp +		;; +	cr16) +		basic_machine=cr16-unknown +		os=-elf +		;; +	crds | unos) +		basic_machine=m68k-crds +		;; +	crisv32 | crisv32-* | etraxfs*) +		basic_machine=crisv32-axis +		;; +	cris | cris-* | etrax*) +		basic_machine=cris-axis +		;; +	crx) +		basic_machine=crx-unknown +		os=-elf +		;; +	da30 | da30-*) +		basic_machine=m68k-da30 +		;; +	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) +		basic_machine=mips-dec +		;; +	decsystem10* | dec10*) +		basic_machine=pdp10-dec +		os=-tops10 +		;; +	decsystem20* | dec20*) +		basic_machine=pdp10-dec +		os=-tops20 +		;; +	delta | 3300 | motorola-3300 | motorola-delta \ +	      | 3300-motorola | delta-motorola) +		basic_machine=m68k-motorola +		;; +	delta88) +		basic_machine=m88k-motorola +		os=-sysv3 +		;; +	djgpp) +		basic_machine=i586-pc +		os=-msdosdjgpp +		;; +	dpx20 | dpx20-*) +		basic_machine=rs6000-bull +		os=-bosx +		;; +	dpx2* | dpx2*-bull) +		basic_machine=m68k-bull +		os=-sysv3 +		;; +	ebmon29k) +		basic_machine=a29k-amd +		os=-ebmon +		;; +	elxsi) +		basic_machine=elxsi-elxsi +		os=-bsd +		;; +	encore | umax | mmax) +		basic_machine=ns32k-encore +		;; +	es1800 | OSE68k | ose68k | ose | OSE) +		basic_machine=m68k-ericsson +		os=-ose +		;; +	fx2800) +		basic_machine=i860-alliant +		;; +	genix) +		basic_machine=ns32k-ns +		;; +	gmicro) +		basic_machine=tron-gmicro +		os=-sysv +		;; +	go32) +		basic_machine=i386-pc +		os=-go32 +		;; +	h3050r* | hiux*) +		basic_machine=hppa1.1-hitachi +		os=-hiuxwe2 +		;; +	h8300hms) +		basic_machine=h8300-hitachi +		os=-hms +		;; +	h8300xray) +		basic_machine=h8300-hitachi +		os=-xray +		;; +	h8500hms) +		basic_machine=h8500-hitachi +		os=-hms +		;; +	harris) +		basic_machine=m88k-harris +		os=-sysv3 +		;; +	hp300-*) +		basic_machine=m68k-hp +		;; +	hp300bsd) +		basic_machine=m68k-hp +		os=-bsd +		;; +	hp300hpux) +		basic_machine=m68k-hp +		os=-hpux +		;; +	hp3k9[0-9][0-9] | hp9[0-9][0-9]) +		basic_machine=hppa1.0-hp +		;; +	hp9k2[0-9][0-9] | hp9k31[0-9]) +		basic_machine=m68000-hp +		;; +	hp9k3[2-9][0-9]) +		basic_machine=m68k-hp +		;; +	hp9k6[0-9][0-9] | hp6[0-9][0-9]) +		basic_machine=hppa1.0-hp +		;; +	hp9k7[0-79][0-9] | hp7[0-79][0-9]) +		basic_machine=hppa1.1-hp +		;; +	hp9k78[0-9] | hp78[0-9]) +		# FIXME: really hppa2.0-hp +		basic_machine=hppa1.1-hp +		;; +	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) +		# FIXME: really hppa2.0-hp +		basic_machine=hppa1.1-hp +		;; +	hp9k8[0-9][13679] | hp8[0-9][13679]) +		basic_machine=hppa1.1-hp +		;; +	hp9k8[0-9][0-9] | hp8[0-9][0-9]) +		basic_machine=hppa1.0-hp +		;; +	hppa-next) +		os=-nextstep3 +		;; +	hppaosf) +		basic_machine=hppa1.1-hp +		os=-osf +		;; +	hppro) +		basic_machine=hppa1.1-hp +		os=-proelf +		;; +	i370-ibm* | ibm*) +		basic_machine=i370-ibm +		;; +# I'm not sure what "Sysv32" means.  Should this be sysv3.2? +	i*86v32) +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` +		os=-sysv32 +		;; +	i*86v4*) +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` +		os=-sysv4 +		;; +	i*86v) +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` +		os=-sysv +		;; +	i*86sol2) +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` +		os=-solaris2 +		;; +	i386mach) +		basic_machine=i386-mach +		os=-mach +		;; +	i386-vsta | vsta) +		basic_machine=i386-unknown +		os=-vsta +		;; +	iris | iris4d) +		basic_machine=mips-sgi +		case $os in +		    -irix*) +			;; +		    *) +			os=-irix4 +			;; +		esac +		;; +	isi68 | isi) +		basic_machine=m68k-isi +		os=-sysv +		;; +	m68knommu) +		basic_machine=m68k-unknown +		os=-linux +		;; +	m68knommu-*) +		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` +		os=-linux +		;; +	m88k-omron*) +		basic_machine=m88k-omron +		;; +	magnum | m3230) +		basic_machine=mips-mips +		os=-sysv +		;; +	merlin) +		basic_machine=ns32k-utek +		os=-sysv +		;; +	mingw32) +		basic_machine=i386-pc +		os=-mingw32 +		;; +	mingw32ce) +		basic_machine=arm-unknown +		os=-mingw32ce +		;; +	miniframe) +		basic_machine=m68000-convergent +		;; +	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) +		basic_machine=m68k-atari +		os=-mint +		;; +	mips3*-*) +		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` +		;; +	mips3*) +		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown +		;; +	monitor) +		basic_machine=m68k-rom68k +		os=-coff +		;; +	morphos) +		basic_machine=powerpc-unknown +		os=-morphos +		;; +	msdos) +		basic_machine=i386-pc +		os=-msdos +		;; +	ms1-*) +		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` +		;; +	mvs) +		basic_machine=i370-ibm +		os=-mvs +		;; +	ncr3000) +		basic_machine=i486-ncr +		os=-sysv4 +		;; +	netbsd386) +		basic_machine=i386-unknown +		os=-netbsd +		;; +	netwinder) +		basic_machine=armv4l-rebel +		os=-linux +		;; +	news | news700 | news800 | news900) +		basic_machine=m68k-sony +		os=-newsos +		;; +	news1000) +		basic_machine=m68030-sony +		os=-newsos +		;; +	news-3600 | risc-news) +		basic_machine=mips-sony +		os=-newsos +		;; +	necv70) +		basic_machine=v70-nec +		os=-sysv +		;; +	next | m*-next ) +		basic_machine=m68k-next +		case $os in +		    -nextstep* ) +			;; +		    -ns2*) +		      os=-nextstep2 +			;; +		    *) +		      os=-nextstep3 +			;; +		esac +		;; +	nh3000) +		basic_machine=m68k-harris +		os=-cxux +		;; +	nh[45]000) +		basic_machine=m88k-harris +		os=-cxux +		;; +	nindy960) +		basic_machine=i960-intel +		os=-nindy +		;; +	mon960) +		basic_machine=i960-intel +		os=-mon960 +		;; +	nonstopux) +		basic_machine=mips-compaq +		os=-nonstopux +		;; +	np1) +		basic_machine=np1-gould +		;; +	nsr-tandem) +		basic_machine=nsr-tandem +		;; +	op50n-* | op60c-*) +		basic_machine=hppa1.1-oki +		os=-proelf +		;; +	openrisc | openrisc-*) +		basic_machine=or32-unknown +		;; +	os400) +		basic_machine=powerpc-ibm +		os=-os400 +		;; +	OSE68000 | ose68000) +		basic_machine=m68000-ericsson +		os=-ose +		;; +	os68k) +		basic_machine=m68k-none +		os=-os68k +		;; +	pa-hitachi) +		basic_machine=hppa1.1-hitachi +		os=-hiuxwe2 +		;; +	paragon) +		basic_machine=i860-intel +		os=-osf +		;; +	parisc) +		basic_machine=hppa-unknown +		os=-linux +		;; +	parisc-*) +		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` +		os=-linux +		;; +	pbd) +		basic_machine=sparc-tti +		;; +	pbb) +		basic_machine=m68k-tti +		;; +	pc532 | pc532-*) +		basic_machine=ns32k-pc532 +		;; +	pc98) +		basic_machine=i386-pc +		;; +	pc98-*) +		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	pentium | p5 | k5 | k6 | nexgen | viac3) +		basic_machine=i586-pc +		;; +	pentiumpro | p6 | 6x86 | athlon | athlon_*) +		basic_machine=i686-pc +		;; +	pentiumii | pentium2 | pentiumiii | pentium3) +		basic_machine=i686-pc +		;; +	pentium4) +		basic_machine=i786-pc +		;; +	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) +		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	pentiumpro-* | p6-* | 6x86-* | athlon-*) +		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) +		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	pentium4-*) +		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	pn) +		basic_machine=pn-gould +		;; +	power)	basic_machine=power-ibm +		;; +	ppc)	basic_machine=powerpc-unknown +		;; +	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	ppcle | powerpclittle | ppc-le | powerpc-little) +		basic_machine=powerpcle-unknown +		;; +	ppcle-* | powerpclittle-*) +		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	ppc64)	basic_machine=powerpc64-unknown +		;; +	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	ppc64le | powerpc64little | ppc64-le | powerpc64-little) +		basic_machine=powerpc64le-unknown +		;; +	ppc64le-* | powerpc64little-*) +		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` +		;; +	ps2) +		basic_machine=i386-ibm +		;; +	pw32) +		basic_machine=i586-unknown +		os=-pw32 +		;; +	rdos) +		basic_machine=i386-pc +		os=-rdos +		;; +	rom68k) +		basic_machine=m68k-rom68k +		os=-coff +		;; +	rm[46]00) +		basic_machine=mips-siemens +		;; +	rtpc | rtpc-*) +		basic_machine=romp-ibm +		;; +	s390 | s390-*) +		basic_machine=s390-ibm +		;; +	s390x | s390x-*) +		basic_machine=s390x-ibm +		;; +	sa29200) +		basic_machine=a29k-amd +		os=-udi +		;; +	sb1) +		basic_machine=mipsisa64sb1-unknown +		;; +	sb1el) +		basic_machine=mipsisa64sb1el-unknown +		;; +	sde) +		basic_machine=mipsisa32-sde +		os=-elf +		;; +	sei) +		basic_machine=mips-sei +		os=-seiux +		;; +	sequent) +		basic_machine=i386-sequent +		;; +	sh) +		basic_machine=sh-hitachi +		os=-hms +		;; +	sh5el) +		basic_machine=sh5le-unknown +		;; +	sh64) +		basic_machine=sh64-unknown +		;; +	sparclite-wrs | simso-wrs) +		basic_machine=sparclite-wrs +		os=-vxworks +		;; +	sps7) +		basic_machine=m68k-bull +		os=-sysv2 +		;; +	spur) +		basic_machine=spur-unknown +		;; +	st2000) +		basic_machine=m68k-tandem +		;; +	stratus) +		basic_machine=i860-stratus +		os=-sysv4 +		;; +	sun2) +		basic_machine=m68000-sun +		;; +	sun2os3) +		basic_machine=m68000-sun +		os=-sunos3 +		;; +	sun2os4) +		basic_machine=m68000-sun +		os=-sunos4 +		;; +	sun3os3) +		basic_machine=m68k-sun +		os=-sunos3 +		;; +	sun3os4) +		basic_machine=m68k-sun +		os=-sunos4 +		;; +	sun4os3) +		basic_machine=sparc-sun +		os=-sunos3 +		;; +	sun4os4) +		basic_machine=sparc-sun +		os=-sunos4 +		;; +	sun4sol2) +		basic_machine=sparc-sun +		os=-solaris2 +		;; +	sun3 | sun3-*) +		basic_machine=m68k-sun +		;; +	sun4) +		basic_machine=sparc-sun +		;; +	sun386 | sun386i | roadrunner) +		basic_machine=i386-sun +		;; +	sv1) +		basic_machine=sv1-cray +		os=-unicos +		;; +	symmetry) +		basic_machine=i386-sequent +		os=-dynix +		;; +	t3e) +		basic_machine=alphaev5-cray +		os=-unicos +		;; +	t90) +		basic_machine=t90-cray +		os=-unicos +		;; +	tic54x | c54x*) +		basic_machine=tic54x-unknown +		os=-coff +		;; +	tic55x | c55x*) +		basic_machine=tic55x-unknown +		os=-coff +		;; +	tic6x | c6x*) +		basic_machine=tic6x-unknown +		os=-coff +		;; +	tile*) +		basic_machine=tile-unknown +		os=-linux-gnu +		;; +	tx39) +		basic_machine=mipstx39-unknown +		;; +	tx39el) +		basic_machine=mipstx39el-unknown +		;; +	toad1) +		basic_machine=pdp10-xkl +		os=-tops20 +		;; +	tower | tower-32) +		basic_machine=m68k-ncr +		;; +	tpf) +		basic_machine=s390x-ibm +		os=-tpf +		;; +	udi29k) +		basic_machine=a29k-amd +		os=-udi +		;; +	ultra3) +		basic_machine=a29k-nyu +		os=-sym1 +		;; +	v810 | necv810) +		basic_machine=v810-nec +		os=-none +		;; +	vaxv) +		basic_machine=vax-dec +		os=-sysv +		;; +	vms) +		basic_machine=vax-dec +		os=-vms +		;; +	vpp*|vx|vx-*) +		basic_machine=f301-fujitsu +		;; +	vxworks960) +		basic_machine=i960-wrs +		os=-vxworks +		;; +	vxworks68) +		basic_machine=m68k-wrs +		os=-vxworks +		;; +	vxworks29k) +		basic_machine=a29k-wrs +		os=-vxworks +		;; +	w65*) +		basic_machine=w65-wdc +		os=-none +		;; +	w89k-*) +		basic_machine=hppa1.1-winbond +		os=-proelf +		;; +	xbox) +		basic_machine=i686-pc +		os=-mingw32 +		;; +	xps | xps100) +		basic_machine=xps100-honeywell +		;; +	ymp) +		basic_machine=ymp-cray +		os=-unicos +		;; +	z8k-*-coff) +		basic_machine=z8k-unknown +		os=-sim +		;; +	none) +		basic_machine=none-none +		os=-none +		;; + +# Here we handle the default manufacturer of certain CPU types.  It is in +# some cases the only manufacturer, in others, it is the most popular. +	w89k) +		basic_machine=hppa1.1-winbond +		;; +	op50n) +		basic_machine=hppa1.1-oki +		;; +	op60c) +		basic_machine=hppa1.1-oki +		;; +	romp) +		basic_machine=romp-ibm +		;; +	mmix) +		basic_machine=mmix-knuth +		;; +	rs6000) +		basic_machine=rs6000-ibm +		;; +	vax) +		basic_machine=vax-dec +		;; +	pdp10) +		# there are many clones, so DEC is not a safe bet +		basic_machine=pdp10-unknown +		;; +	pdp11) +		basic_machine=pdp11-dec +		;; +	we32k) +		basic_machine=we32k-att +		;; +	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) +		basic_machine=sh-unknown +		;; +	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) +		basic_machine=sparc-sun +		;; +	cydra) +		basic_machine=cydra-cydrome +		;; +	orion) +		basic_machine=orion-highlevel +		;; +	orion105) +		basic_machine=clipper-highlevel +		;; +	mac | mpw | mac-mpw) +		basic_machine=m68k-apple +		;; +	pmac | pmac-mpw) +		basic_machine=powerpc-apple +		;; +	*-unknown) +		# Make sure to match an already-canonicalized machine name. +		;; +	*) +		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 +		exit 1 +		;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in +	*-digital*) +		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +		;; +	*-commodore*) +		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` +		;; +	*) +		;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in +        # First match some system type aliases +        # that might get confused with valid system types. +	# -solaris* is a basic system type, with this one exception. +	-solaris1 | -solaris1.*) +		os=`echo $os | sed -e 's|solaris1|sunos4|'` +		;; +	-solaris) +		os=-solaris2 +		;; +	-svr4*) +		os=-sysv4 +		;; +	-unixware*) +		os=-sysv4.2uw +		;; +	-gnu/linux*) +		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` +		;; +	# First accept the basic system types. +	# The portable systems comes first. +	# Each alternative MUST END IN A *, to match a version number. +	# -sysv* is not here because it comes later, after sysvr4. +	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ +	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ +	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ +	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ +	      | -aos* \ +	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ +	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ +	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ +	      | -openbsd* | -solidbsd* \ +	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ +	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ +	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ +	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ +	      | -chorusos* | -chorusrdb* \ +	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ +	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ +	      | -uxpv* | -beos* | -mpeix* | -udk* \ +	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ +	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ +	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ +	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ +	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ +	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ +	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) +	# Remember, each alternative MUST END IN *, to match a version number. +		;; +	-qnx*) +		case $basic_machine in +		    x86-* | i*86-*) +			;; +		    *) +			os=-nto$os +			;; +		esac +		;; +	-nto-qnx*) +		;; +	-nto*) +		os=`echo $os | sed -e 's|nto|nto-qnx|'` +		;; +	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ +	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ +	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) +		;; +	-mac*) +		os=`echo $os | sed -e 's|mac|macos|'` +		;; +	-linux-dietlibc) +		os=-linux-dietlibc +		;; +	-linux*) +		os=`echo $os | sed -e 's|linux|linux-gnu|'` +		;; +	-sunos5*) +		os=`echo $os | sed -e 's|sunos5|solaris2|'` +		;; +	-sunos6*) +		os=`echo $os | sed -e 's|sunos6|solaris3|'` +		;; +	-opened*) +		os=-openedition +		;; +        -os400*) +		os=-os400 +		;; +	-wince*) +		os=-wince +		;; +	-osfrose*) +		os=-osfrose +		;; +	-osf*) +		os=-osf +		;; +	-utek*) +		os=-bsd +		;; +	-dynix*) +		os=-bsd +		;; +	-acis*) +		os=-aos +		;; +	-atheos*) +		os=-atheos +		;; +	-syllable*) +		os=-syllable +		;; +	-386bsd) +		os=-bsd +		;; +	-ctix* | -uts*) +		os=-sysv +		;; +	-nova*) +		os=-rtmk-nova +		;; +	-ns2 ) +		os=-nextstep2 +		;; +	-nsk*) +		os=-nsk +		;; +	# Preserve the version number of sinix5. +	-sinix5.*) +		os=`echo $os | sed -e 's|sinix|sysv|'` +		;; +	-sinix*) +		os=-sysv4 +		;; +        -tpf*) +		os=-tpf +		;; +	-triton*) +		os=-sysv3 +		;; +	-oss*) +		os=-sysv3 +		;; +	-svr4) +		os=-sysv4 +		;; +	-svr3) +		os=-sysv3 +		;; +	-sysvr4) +		os=-sysv4 +		;; +	# This must come after -sysvr4. +	-sysv*) +		;; +	-ose*) +		os=-ose +		;; +	-es1800*) +		os=-ose +		;; +	-xenix) +		os=-xenix +		;; +	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) +		os=-mint +		;; +	-aros*) +		os=-aros +		;; +	-kaos*) +		os=-kaos +		;; +	-zvmoe) +		os=-zvmoe +		;; +	-none) +		;; +	*) +		# Get rid of the `-' at the beginning of $os. +		os=`echo $os | sed 's/[^-]*-//'` +		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 +		exit 1 +		;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system.  Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in +        score-*) +		os=-elf +		;; +        spu-*) +		os=-elf +		;; +	*-acorn) +		os=-riscix1.2 +		;; +	arm*-rebel) +		os=-linux +		;; +	arm*-semi) +		os=-aout +		;; +        c4x-* | tic4x-*) +        	os=-coff +		;; +	# This must come before the *-dec entry. +	pdp10-*) +		os=-tops20 +		;; +	pdp11-*) +		os=-none +		;; +	*-dec | vax-*) +		os=-ultrix4.2 +		;; +	m68*-apollo) +		os=-domain +		;; +	i386-sun) +		os=-sunos4.0.2 +		;; +	m68000-sun) +		os=-sunos3 +		# This also exists in the configure program, but was not the +		# default. +		# os=-sunos4 +		;; +	m68*-cisco) +		os=-aout +		;; +        mep-*) +		os=-elf +		;; +	mips*-cisco) +		os=-elf +		;; +	mips*-*) +		os=-elf +		;; +	or32-*) +		os=-coff +		;; +	*-tti)	# must be before sparc entry or we get the wrong os. +		os=-sysv3 +		;; +	sparc-* | *-sun) +		os=-sunos4.1.1 +		;; +	*-be) +		os=-beos +		;; +	*-haiku) +		os=-haiku +		;; +	*-ibm) +		os=-aix +		;; +    	*-knuth) +		os=-mmixware +		;; +	*-wec) +		os=-proelf +		;; +	*-winbond) +		os=-proelf +		;; +	*-oki) +		os=-proelf +		;; +	*-hp) +		os=-hpux +		;; +	*-hitachi) +		os=-hiux +		;; +	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) +		os=-sysv +		;; +	*-cbm) +		os=-amigaos +		;; +	*-dg) +		os=-dgux +		;; +	*-dolphin) +		os=-sysv3 +		;; +	m68k-ccur) +		os=-rtu +		;; +	m88k-omron*) +		os=-luna +		;; +	*-next ) +		os=-nextstep +		;; +	*-sequent) +		os=-ptx +		;; +	*-crds) +		os=-unos +		;; +	*-ns) +		os=-genix +		;; +	i370-*) +		os=-mvs +		;; +	*-next) +		os=-nextstep3 +		;; +	*-gould) +		os=-sysv +		;; +	*-highlevel) +		os=-bsd +		;; +	*-encore) +		os=-bsd +		;; +	*-sgi) +		os=-irix +		;; +	*-siemens) +		os=-sysv4 +		;; +	*-masscomp) +		os=-rtu +		;; +	f30[01]-fujitsu | f700-fujitsu) +		os=-uxpv +		;; +	*-rom68k) +		os=-coff +		;; +	*-*bug) +		os=-coff +		;; +	*-apple) +		os=-macos +		;; +	*-atari*) +		os=-mint +		;; +	*) +		os=-none +		;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer.  We pick the logical manufacturer. +vendor=unknown +case $basic_machine in +	*-unknown) +		case $os in +			-riscix*) +				vendor=acorn +				;; +			-sunos*) +				vendor=sun +				;; +			-aix*) +				vendor=ibm +				;; +			-beos*) +				vendor=be +				;; +			-hpux*) +				vendor=hp +				;; +			-mpeix*) +				vendor=hp +				;; +			-hiux*) +				vendor=hitachi +				;; +			-unos*) +				vendor=crds +				;; +			-dgux*) +				vendor=dg +				;; +			-luna*) +				vendor=omron +				;; +			-genix*) +				vendor=ns +				;; +			-mvs* | -opened*) +				vendor=ibm +				;; +			-os400*) +				vendor=ibm +				;; +			-ptx*) +				vendor=sequent +				;; +			-tpf*) +				vendor=ibm +				;; +			-vxsim* | -vxworks* | -windiss*) +				vendor=wrs +				;; +			-aux*) +				vendor=apple +				;; +			-hms*) +				vendor=hitachi +				;; +			-mpw* | -macos*) +				vendor=apple +				;; +			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) +				vendor=atari +				;; +			-vos*) +				vendor=stratus +				;; +		esac +		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` +		;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/aux-build/depcomp b/aux-build/depcomp new file mode 100755 index 0000000..11e2d3b --- /dev/null +++ b/aux-build/depcomp @@ -0,0 +1,522 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2004-05-31.23 + +# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +case $1 in +  '') +     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2 +     exit 1; +     ;; +  -h | --h*) +    cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: +  depmode     Dependency tracking mode. +  source      Source file read by `PROGRAMS ARGS'. +  object      Object file output by `PROGRAMS ARGS'. +  DEPDIR      directory where to store dependencies. +  depfile     Dependency file to output. +  tmpdepfile  Temporary file to use when outputing dependencies. +  libtool     Whether libtool is used (yes/no). + +Report bugs to <bug-automake@gnu.org>. +EOF +    exit 0 +    ;; +  -v | --v*) +    echo "depcomp $scriptversion" +    exit 0 +    ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then +  echo "depcomp: Variables source, object and depmode must be set" 1>&2 +  exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | +  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags.  We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write.  Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then +  # HP compiler uses -M and no extra arg. +  gccflag=-M +  depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then +   # This is just like dashmstdout with a different argument. +   dashmflag=-xM +   depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff.  Hmm. +  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" +  stat=$? +  if test $stat -eq 0; then : +  else +    rm -f "$tmpdepfile" +    exit $stat +  fi +  mv "$tmpdepfile" "$depfile" +  ;; + +gcc) +## There are various ways to get dependency output from gcc.  Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +##   up in a subdir.  Having to rename by hand is ugly. +##   (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +##   -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +##   than renaming). +  if test -z "$gccflag"; then +    gccflag=-MD, +  fi +  "$@" -Wp,"$gccflag$tmpdepfile" +  stat=$? +  if test $stat -eq 0; then : +  else +    rm -f "$tmpdepfile" +    exit $stat +  fi +  rm -f "$depfile" +  echo "$object : \\" > "$depfile" +  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. +  sed -e 's/^[^:]*: / /' \ +      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header).  We avoid this by adding +## dummy dependencies for each header file.  Too bad gcc doesn't do +## this for us directly. +  tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'.  On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly.  Breaking it into two sed invocations is a workaround. +    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" +  rm -f "$tmpdepfile" +  ;; + +hp) +  # This case exists only to let depend.m4 do its work.  It works by +  # looking at the text of this script.  This case will never be run, +  # since it is checked for above. +  exit 1 +  ;; + +sgi) +  if test "$libtool" = yes; then +    "$@" "-Wp,-MDupdate,$tmpdepfile" +  else +    "$@" -MDupdate "$tmpdepfile" +  fi +  stat=$? +  if test $stat -eq 0; then : +  else +    rm -f "$tmpdepfile" +    exit $stat +  fi +  rm -f "$depfile" + +  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files +    echo "$object : \\" > "$depfile" + +    # Clip off the initial element (the dependent).  Don't try to be +    # clever and replace this with sed code, as IRIX sed won't handle +    # lines with more than a fixed number of characters (4096 in +    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines; +    # the IRIX cc adds comments like `#:fec' to the end of the +    # dependency line. +    tr ' ' ' +' < "$tmpdepfile" \ +    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ +    tr ' +' ' ' >> $depfile +    echo >> $depfile + +    # The second pass generates a dummy entry for each header file. +    tr ' ' ' +' < "$tmpdepfile" \ +   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ +   >> $depfile +  else +    # The sourcefile does not contain any dependencies, so just +    # store a dummy comment line, to avoid errors with the Makefile +    # "include basename.Plo" scheme. +    echo "#dummy" > "$depfile" +  fi +  rm -f "$tmpdepfile" +  ;; + +aix) +  # The C for AIX Compiler uses -M and outputs the dependencies +  # in a .u file.  In older versions, this file always lives in the +  # current directory.  Also, the AIX compiler puts `$object:' at the +  # start of each line; $object doesn't have directory information. +  # Version 6 uses the directory in both cases. +  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` +  tmpdepfile="$stripped.u" +  if test "$libtool" = yes; then +    "$@" -Wc,-M +  else +    "$@" -M +  fi +  stat=$? + +  if test -f "$tmpdepfile"; then : +  else +    stripped=`echo "$stripped" | sed 's,^.*/,,'` +    tmpdepfile="$stripped.u" +  fi + +  if test $stat -eq 0; then : +  else +    rm -f "$tmpdepfile" +    exit $stat +  fi + +  if test -f "$tmpdepfile"; then +    outname="$stripped.o" +    # Each line is of the form `foo.o: dependent.h'. +    # Do two passes, one to just change these to +    # `$object: dependent.h' and one to simply `dependent.h:'. +    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" +    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" +  else +    # The sourcefile does not contain any dependencies, so just +    # store a dummy comment line, to avoid errors with the Makefile +    # "include basename.Plo" scheme. +    echo "#dummy" > "$depfile" +  fi +  rm -f "$tmpdepfile" +  ;; + +icc) +  # Intel's C compiler understands `-MD -MF file'.  However on +  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c +  # ICC 7.0 will fill foo.d with something like +  #    foo.o: sub/foo.c +  #    foo.o: sub/foo.h +  # which is wrong.  We want: +  #    sub/foo.o: sub/foo.c +  #    sub/foo.o: sub/foo.h +  #    sub/foo.c: +  #    sub/foo.h: +  # ICC 7.1 will output +  #    foo.o: sub/foo.c sub/foo.h +  # and will wrap long lines using \ : +  #    foo.o: sub/foo.c ... \ +  #     sub/foo.h ... \ +  #     ... + +  "$@" -MD -MF "$tmpdepfile" +  stat=$? +  if test $stat -eq 0; then : +  else +    rm -f "$tmpdepfile" +    exit $stat +  fi +  rm -f "$depfile" +  # Each line is of the form `foo.o: dependent.h', +  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. +  # Do two passes, one to just change these to +  # `$object: dependent.h' and one to simply `dependent.h:'. +  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" +  # Some versions of the HPUX 10.20 sed can't process this invocation +  # correctly.  Breaking it into two sed invocations is a workaround. +  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | +    sed -e 's/$/ :/' >> "$depfile" +  rm -f "$tmpdepfile" +  ;; + +tru64) +   # The Tru64 compiler uses -MD to generate dependencies as a side +   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. +   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put +   # dependencies in `foo.d' instead, so we check for that too. +   # Subdirectories are respected. +   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` +   test "x$dir" = "x$object" && dir= +   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + +   if test "$libtool" = yes; then +      # Dependencies are output in .lo.d with libtool 1.4. +      # With libtool 1.5 they are output both in $dir.libs/$base.o.d +      # and in $dir.libs/$base.o.d and $dir$base.o.d.  We process the +      # latter, because the former will be cleaned when $dir.libs is +      # erased. +      tmpdepfile1="$dir.libs/$base.lo.d" +      tmpdepfile2="$dir$base.o.d" +      tmpdepfile3="$dir.libs/$base.d" +      "$@" -Wc,-MD +   else +      tmpdepfile1="$dir$base.o.d" +      tmpdepfile2="$dir$base.d" +      tmpdepfile3="$dir$base.d" +      "$@" -MD +   fi + +   stat=$? +   if test $stat -eq 0; then : +   else +      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" +      exit $stat +   fi + +   if test -f "$tmpdepfile1"; then +      tmpdepfile="$tmpdepfile1" +   elif test -f "$tmpdepfile2"; then +      tmpdepfile="$tmpdepfile2" +   else +      tmpdepfile="$tmpdepfile3" +   fi +   if test -f "$tmpdepfile"; then +      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" +      # That's a tab and a space in the []. +      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" +   else +      echo "#dummy" > "$depfile" +   fi +   rm -f "$tmpdepfile" +   ;; + +#nosideeffect) +  # This comment above is used by automake to tell side-effect +  # dependency tracking mechanisms from slower ones. + +dashmstdout) +  # Important note: in order to support this mode, a compiler *must* +  # always write the preprocessed file to stdout, regardless of -o. +  "$@" || exit $? + +  # Remove the call to Libtool. +  if test "$libtool" = yes; then +    while test $1 != '--mode=compile'; do +      shift +    done +    shift +  fi + +  # Remove `-o $object'. +  IFS=" " +  for arg +  do +    case $arg in +    -o) +      shift +      ;; +    $object) +      shift +      ;; +    *) +      set fnord "$@" "$arg" +      shift # fnord +      shift # $arg +      ;; +    esac +  done + +  test -z "$dashmflag" && dashmflag=-M +  # Require at least two characters before searching for `:' +  # in the target name.  This is to cope with DOS-style filenames: +  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. +  "$@" $dashmflag | +    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile" +  rm -f "$depfile" +  cat < "$tmpdepfile" > "$depfile" +  tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly.  Breaking it into two sed invocations is a workaround. +    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" +  rm -f "$tmpdepfile" +  ;; + +dashXmstdout) +  # This case only exists to satisfy depend.m4.  It is never actually +  # run, as this mode is specially recognized in the preamble. +  exit 1 +  ;; + +makedepend) +  "$@" || exit $? +  # Remove any Libtool call +  if test "$libtool" = yes; then +    while test $1 != '--mode=compile'; do +      shift +    done +    shift +  fi +  # X makedepend +  shift +  cleared=no +  for arg in "$@"; do +    case $cleared in +    no) +      set ""; shift +      cleared=yes ;; +    esac +    case "$arg" in +    -D*|-I*) +      set fnord "$@" "$arg"; shift ;; +    # Strip any option that makedepend may not understand.  Remove +    # the object too, otherwise makedepend will parse it as a source file. +    -*|$object) +      ;; +    *) +      set fnord "$@" "$arg"; shift ;; +    esac +  done +  obj_suffix="`echo $object | sed 's/^.*\././'`" +  touch "$tmpdepfile" +  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" +  rm -f "$depfile" +  cat < "$tmpdepfile" > "$depfile" +  sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly.  Breaking it into two sed invocations is a workaround. +    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" +  rm -f "$tmpdepfile" "$tmpdepfile".bak +  ;; + +cpp) +  # Important note: in order to support this mode, a compiler *must* +  # always write the preprocessed file to stdout. +  "$@" || exit $? + +  # Remove the call to Libtool. +  if test "$libtool" = yes; then +    while test $1 != '--mode=compile'; do +      shift +    done +    shift +  fi + +  # Remove `-o $object'. +  IFS=" " +  for arg +  do +    case $arg in +    -o) +      shift +      ;; +    $object) +      shift +      ;; +    *) +      set fnord "$@" "$arg" +      shift # fnord +      shift # $arg +      ;; +    esac +  done + +  "$@" -E | +    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | +    sed '$ s: \\$::' > "$tmpdepfile" +  rm -f "$depfile" +  echo "$object : \\" > "$depfile" +  cat < "$tmpdepfile" >> "$depfile" +  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" +  rm -f "$tmpdepfile" +  ;; + +msvisualcpp) +  # Important note: in order to support this mode, a compiler *must* +  # always write the preprocessed file to stdout, regardless of -o, +  # because we must use -o when running libtool. +  "$@" || exit $? +  IFS=" " +  for arg +  do +    case "$arg" in +    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") +	set fnord "$@" +	shift +	shift +	;; +    *) +	set fnord "$@" "$arg" +	shift +	shift +	;; +    esac +  done +  "$@" -E | +  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" +  rm -f "$depfile" +  echo "$object : \\" > "$depfile" +  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile" +  echo "	" >> "$depfile" +  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" +  rm -f "$tmpdepfile" +  ;; + +none) +  exec "$@" +  ;; + +*) +  echo "Unknown depmode $depmode" 1>&2 +  exit 1 +  ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/aux-build/install-sh b/aux-build/install-sh new file mode 100755 index 0000000..77bc381 --- /dev/null +++ b/aux-build/install-sh @@ -0,0 +1,316 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2004-02-15.20 + +# 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 (C) 1994 X Consortium +# +# 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 +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch.  It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename= +transform_arg= +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= + +usage="Usage: $0 [OPTION]... SRCFILE DSTFILE +   or: $0 [OPTION]... SRCFILES... DIRECTORY +   or: $0 -d DIRECTORIES... + +In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. +In the second, create the directory path DIR. + +Options: +-b=TRANSFORMBASENAME +-c         copy source (using $cpprog) instead of moving (using $mvprog). +-d         create directories instead of installing files. +-g GROUP   $chgrp installed files to GROUP. +-m MODE    $chmod installed files to MODE. +-o USER    $chown installed files to USER. +-s         strip installed files (using $stripprog). +-t=TRANSFORM +--help     display this help and exit. +--version  display version info and exit. + +Environment variables override the default commands: +  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do +  case $1 in +    -b=*) transformbasename=`echo $1 | sed 's/-b=//'` +        shift +        continue;; + +    -c) instcmd=$cpprog +        shift +        continue;; + +    -d) dir_arg=true +        shift +        continue;; + +    -g) chgrpcmd="$chgrpprog $2" +        shift +        shift +        continue;; + +    --help) echo "$usage"; exit 0;; + +    -m) chmodcmd="$chmodprog $2" +        shift +        shift +        continue;; + +    -o) chowncmd="$chownprog $2" +        shift +        shift +        continue;; + +    -s) stripcmd=$stripprog +        shift +        continue;; + +    -t=*) transformarg=`echo $1 | sed 's/-t=//'` +        shift +        continue;; + +    --version) echo "$0 $scriptversion"; exit 0;; + +    *)  # When -d is used, all remaining arguments are directories to create. +	test -n "$dir_arg" && break +        # Otherwise, the last argument is the destination.  Remove it from $@. +	for arg +	do +          if test -n "$dstarg"; then +	    # $@ is not empty: it contains at least $arg. +	    set fnord "$@" "$dstarg" +	    shift # fnord +	  fi +	  shift # arg +	  dstarg=$arg +	done +	break;; +  esac +done + +if test -z "$1"; 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 + +for src +do +  # Protect names starting with `-'. +  case $src in +    -*) src=./$src ;; +  esac + +  if test -n "$dir_arg"; then +    dst=$src +    src= + +    if test -d "$dst"; then +      instcmd=: +      chmodcmd= +    else +      instcmd=$mkdirprog +    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 ! -f "$src" && test ! -d "$src"; then +      echo "$0: $src does not exist." >&2 +      exit 1 +    fi + +    if test -z "$dstarg"; then +      echo "$0: no destination specified." >&2 +      exit 1 +    fi + +    dst=$dstarg +    # Protect names starting with `-'. +    case $dst in +      -*) dst=./$dst ;; +    esac + +    # If destination is a directory, append the input filename; won't work +    # if double slashes aren't ignored. +    if test -d "$dst"; then +      dst=$dst/`basename "$src"` +    fi +  fi + +  # This sed command emulates the dirname command. +  dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +  # Make sure that the destination directory exists. + +  # Skip lots of stat calls in the usual case. +  if test ! -d "$dstdir"; then +    defaultIFS=' +	 ' +    IFS="${IFS-$defaultIFS}" + +    oIFS=$IFS +    # Some sh's can't handle IFS=/ for some reason. +    IFS='%' +    set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +    IFS=$oIFS + +    pathcomp= + +    while test $# -ne 0 ; do +      pathcomp=$pathcomp$1 +      shift +      if test ! -d "$pathcomp"; then +        $mkdirprog "$pathcomp" || lasterr=$? +	# mkdir can fail with a `File exist' error in case several +	# install-sh are creating the directory concurrently.  This +	# is OK. +	test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; } +      fi +      pathcomp=$pathcomp/ +    done +  fi + +  if test -n "$dir_arg"; then +    $doit $instcmd "$dst" \ +      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ +      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ +      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ +      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + +  else +    # If we're going to rename the final executable, determine the name now. +    if test -z "$transformarg"; then +      dstfile=`basename "$dst"` +    else +      dstfile=`basename "$dst" $transformbasename \ +               | sed $transformarg`$transformbasename +    fi + +    # don't allow the sed command to completely eliminate the filename. +    test -z "$dstfile" && dstfile=`basename "$dst"` + +    # Make a couple of temp file names in the proper directory. +    dsttmp=$dstdir/_inst.$$_ +    rmtmp=$dstdir/_rm.$$_ + +    # Trap to clean up those temp files at exit. +    trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 +    trap '(exit $?); exit' 1 2 13 15 + +    # Move or copy the file name to the temp name +    $doit $instcmd "$src" "$dsttmp" && + +    # 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 $instcmd $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 "$dsttmp"; } && + +    # 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. +    { +      if test -f "$dstdir/$dstfile"; then +        $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ +        || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ +        || { +	  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 +	  (exit 1); exit +        } +      else +        : +      fi +    } && + +    # Now rename the file to the real destination. +    $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" +  fi || { (exit 1); exit; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ +  (exit 0); exit +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/aux-build/ltmain.sh b/aux-build/ltmain.sh new file mode 100755 index 0000000..04eaea4 --- /dev/null +++ b/aux-build/ltmain.sh @@ -0,0 +1,8745 @@ +# Generated from ltmain.m4sh. + +# libtool (GNU libtool) 2.2.10 +# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions.  There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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 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]... +# +# 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.2.10 +#         automake:	$automake_version +#         autoconf:	$autoconf_version +# +# Report bugs to <bug-libtool@gnu.org>. + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.2.10 +TIMESTAMP="" +package_revision=1.3175 + +# 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 + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ +  eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do +  eval "if test \"\${$lt_var+set}\" = set; then +          save_$lt_var=\$$lt_var +          $lt_var=C +	  export $lt_var +	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" +	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" +	fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="grep -E"} +: ${FGREP="grep -F"} +: ${GREP="grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# 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. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" 	$lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# 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"` +} + +# Generated shell functions inserted here. + +# 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. +      ;; +      ..) +        # 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 +} + +# 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 + +  # 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 +        ;; +      *) +        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 +  done + +  # 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 + +  # 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 +} + +# 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' + +# 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${mode+: }$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${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ +    $opt_warning && $ECHO "$progname${mode+: }$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_version +# Echo version message to standard output and exit. +func_version () +{ +    $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 () +{ +    $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 () +{ +    $SED -n '/^# Usage:/,/# Report bugs to/ { +        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 +     }' < "$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 () +{ +    func_error "missing argument for $1." +    exit_cmd=exit +} + +exit_cmd=: + + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +# $mode is unset +nonopt= +execute_dlfiles= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +opt_dry_run=false +opt_duplicate_deps=false +opt_silent=false +opt_debug=: + +# 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_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" + +    # Now print the configurations for the tags. +    for tagname in $taglist; do +      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" +    done + +    exit $? +} + +# 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" +    else +      echo "disable shared libraries" +    fi +    if test "$build_old_libs" = yes; then +      echo "enable static libraries" +    else +      echo "disable static libraries" +    fi + +    exit $? +} + +# 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" + +  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" +  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" +  sed_extractcf="/$re_begincf/,/$re_endcf/p" + +  # 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 +} + +# Parse options once, thoroughly.  This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + +  # 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 + +  # Parse non-mode specific arguments: +  while test "$#" -gt 0; do +    opt="$1" +    shift + +    case $opt in +      --config)		func_config					;; + +      --debug)		preserve_args="$preserve_args $opt" +			func_echo "enabling shell trace mode" +			opt_debug='set -x' +			$opt_debug +			;; + +      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break +			execute_dlfiles="$execute_dlfiles $1" +			shift +			;; + +      --dry-run | -n)	opt_dry_run=:					;; +      --features)       func_features					;; +      --finish)		mode="finish"					;; + +      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break +			case $1 in +			  # Valid mode arguments: +			  clean)	;; +			  compile)	;; +			  execute)	;; +			  finish)	;; +			  install)	;; +			  link)		;; +			  relink)	;; +			  uninstall)	;; + +			  # Catch anything else as an error +			  *) func_error "invalid argument for $opt" +			     exit_cmd=exit +			     break +			     ;; +		        esac + +			mode="$1" +			shift +			;; + +      --preserve-dup-deps) +			opt_duplicate_deps=:				;; + +      --quiet|--silent)	preserve_args="$preserve_args $opt" +			opt_silent=: +			opt_verbose=false +			;; + +      --no-quiet|--no-silent) +			preserve_args="$preserve_args $opt" +			opt_silent=false +			;; + +      --verbose| -v)	preserve_args="$preserve_args $opt" +			opt_silent=false +			opt_verbose=: +			;; + +      --no-verbose)	preserve_args="$preserve_args $opt" +			opt_verbose=false +			;; + +      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break +			preserve_args="$preserve_args $opt $1" +			func_enable_tag "$1"	# tagname is set here +			shift +			;; + +      # Separate optargs to long options: +      -dlopen=*|--mode=*|--tag=*) +			func_opt_split "$opt" +			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} +			shift +			;; + +      -\?|-h)		func_usage					;; +      --help)		opt_help=:					;; +      --help-all)	opt_help=': help-all'				;; +      --version)	func_version					;; + +      -*)		func_fatal_help "unrecognized option \`$opt'"	;; + +      *)		nonopt="$opt" +			break +			;; +    esac +  done + + +  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_duplicate_deps +      ;; +  esac + +  # Having warned about all mis-specified options, bail out if +  # anything was wrong. +  $exit_cmd $EXIT_FAILURE +} + +# 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 +} + + +## ----------- ## +##    Main.    ## +## ----------- ## + +$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 + +  test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + +  # Darwin sucks +  eval std_shrext=\"$shrext_cmds\" + + +  # Only execute mode is allowed to have -dlopen flags. +  if test -n "$execute_dlfiles" && test "$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=$mode' for more information." +} + + +# 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_ltwrapper_scriptname_result="" +    if func_ltwrapper_executable_p "$1"; then +	func_dirname_and_basename "$1" "" "." +	func_stripname '' '.exe' "$func_basename_result" +	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +    fi +} + +# 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_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_quote_for_eval "$arg" +	CC_quoted="$CC_quoted $func_quote_for_eval_result" +      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_quote_for_eval "$arg" +	      CC_quoted="$CC_quoted $func_quote_for_eval_result" +	    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 +} + + + +# 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 + +    if test "$build_old_libs" = yes; then +      write_oldobj=\'${3}\' +    else +      write_oldobj=none +    fi + +    $opt_dry_run || { +      cat >${write_libobj}T <<EOF +# $write_libobj - a libtool object file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object=$write_lobj + +# Name of the non-PIC object +non_pic_object=$write_oldobj + +EOF +      $MV "${write_libobj}T" "${write_libobj}" +    } +} + +# 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 +	;; + +      target ) +	libobj="$arg" +	arg_mode=normal +	continue +	;; + +      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 +	  ;; + +	-pie | -fpie | -fPIE) +          pie_flag="$pie_flag $arg" +	  continue +	  ;; + +	-shared | -static | -prefer-pic | -prefer-non-pic) +	  later="$later $arg" +	  continue +	  ;; + +	-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_quote_for_eval "$arg" +	    lastarg="$lastarg $func_quote_for_eval_result" +	  done +	  IFS="$save_ifs" +	  func_stripname ' ' '' "$lastarg" +	  lastarg=$func_stripname_result + +	  # Add the arguments to base_compile. +	  base_compile="$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    #  case $arg_mode + +      # Aesthetically quote the previous argument. +      func_quote_for_eval "$lastarg" +      base_compile="$base_compile $func_quote_for_eval_result" +    done # for arg + +    case $arg_mode in +    arg) +      func_fatal_error "you must specify an argument for -Xcompile" +      ;; +    target) +      func_fatal_error "you must specify a target with \`-o'" +      ;; +    *) +      # 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 +    case $libobj in +    *.[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 + +    case $libobj in +    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; +    *) +      func_fatal_error "cannot determine name of library object from \`$libobj'" +      ;; +    esac + +    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 +    done + +    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 + +    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 +      removelist="$obj $lobj $libobj ${libobj}T" +    else +      removelist="$lobj $libobj ${libobj}T" +    fi + +    # On Cygwin there's no "real" PIC flag so we must build both object types +    case $host_os in +    cygwin* | mingw* | pw32* | os2* | cegcc*) +      pic_mode=default +      ;; +    esac +    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 + +    # 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 "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} +      lockfile="$output_obj.lock" +    else +      output_obj= +      need_locks=no +      lockfile= +    fi + +    # 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 $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 "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together.  If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + +	$opt_dry_run || $RM $removelist +	exit $EXIT_FAILURE +      fi +      removelist="$removelist $output_obj" +      $ECHO "$srcfile" > "$lockfile" +    fi + +    $opt_dry_run || $RM $removelist +    removelist="$removelist $lockfile" +    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + +    if test -n "$fix_srcfile_path"; then +      eval srcfile=\"$fix_srcfile_path\" +    fi +    func_quote_for_eval "$srcfile" +    qsrcfile=$func_quote_for_eval_result + +    # Only build a PIC object if we are building libtool libraries. +    if test "$build_libtool_libs" = yes; then +      # Without this assignment, base_compile gets emptied. +      fbsd_hideous_sh_bug=$base_compile + +      if test "$pic_mode" != no; then +	command="$base_compile $qsrcfile $pic_flag" +      else +	# Don't build PIC code +	command="$base_compile $qsrcfile" +      fi + +      func_mkdir_p "$xdir$objdir" + +      if test -z "$output_obj"; then +	# Place PIC objects in $objdir +	command="$command -o $lobj" +      fi + +      func_show_eval_locale "$command"	\ +          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + +      if test "$need_locks" = warn && +	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then +	$ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together.  If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + +	$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 +	func_show_eval '$MV "$output_obj" "$lobj"' \ +	  'error=$?; $opt_dry_run || $RM $removelist; exit $error' +      fi + +      # Allow error messages only from the first compilation. +      if test "$suppress_opt" = yes; then +	suppress_output=' >/dev/null 2>&1' +      fi +    fi + +    # Only build a position-dependent object if we build old libraries. +    if test "$build_old_libs" = yes; then +      if test "$pic_mode" != yes; then +	# Don't build PIC code +	command="$base_compile $qsrcfile$pie_flag" +      else +	command="$base_compile $qsrcfile $pic_flag" +      fi +      if test "$compiler_c_o" = yes; then +	command="$command -o $obj" +      fi + +      # Suppress compiler output if we already did a PIC compilation. +      command="$command$suppress_output" +      func_show_eval_locale "$command" \ +        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + +      if test "$need_locks" = warn && +	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then +	$ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together.  If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + +	$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 +	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 "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ +    # We need to display help for each of the modes. +    case $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 \`$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 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 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 $execute_dlfiles; do +      test -f "$file" \ +	|| func_fatal_help "\`$file' is not a file" + +      dir= +      case $file in +      *.la) +	# 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 +	  dir="$dir/$objdir" +	else +	  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 + +    # 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 +      -* | *.la | *.lo ) ;; +      *) +	# Do a test to see if this is really a libtool program. +	if func_ltwrapper_script_p "$file"; then +	  func_source "$file" +	  # Transform arg to wrapped name. +	  file="$progdir/$program" +	elif func_ltwrapper_executable_p "$file"; then +	  func_ltwrapper_scriptname "$file" +	  func_source "$func_ltwrapper_scriptname_result" +	  # Transform arg to wrapped name. +	  file="$progdir/$program" +	fi +	;; +      esac +      # Quote arguments (to preserve shell metacharacters). +      func_quote_for_eval "$file" +      args="$args $func_quote_for_eval_result" +    done + +    if test "X$opt_dry_run" = Xfalse; then +      if test -n "$shlibpath_var"; then +	# Export the shlibpath_var. +	eval "export $shlibpath_var" +      fi + +      # Restore saved environment variables +      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +      do +	eval "if test \"\${save_$lt_var+set}\" = set; then +                $lt_var=\$save_$lt_var; export $lt_var +	      else +		$lt_unset $lt_var +	      fi" +      done + +      # Now prepare to actually exec the command. +      exec_cmd="\$cmd$args" +    else +      # Display what would be done. +      if test -n "$shlibpath_var"; then +	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" +	echo "export $shlibpath_var" +      fi +      $ECHO "$cmd$args" +      exit $EXIT_SUCCESS +    fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ +    $opt_debug +    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. +	  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" || admincmds="$admincmds +       $cmds" +	fi +      done +    fi + +    # Exit here if they wanted silent mode. +    $opt_silent && exit $EXIT_SUCCESS + +    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 "----------------------------------------------------------------------" +    exit $EXIT_SUCCESS +} + +test "$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" +    install_prog="$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 +	files="$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" +      install_prog="$install_prog $func_quote_for_eval_result" +      if test -n "$arg2"; then +	func_quote_for_eval "$arg2" +      fi +      install_shared_prog="$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" +	install_shared_prog="$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. +	staticlibs="$staticlibs $file" +	;; + +      *.la) +	# 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 "*) ;; +	  *) 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 + +	func_dirname "$file" "/" "" +	dir="$func_dirname_result" +	dir="$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" && 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 +	  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 "$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 + +/* 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_verbose "extracting global C symbols from \`$progfile'" +	    $opt_dry_run || eval "$NM $progfile | $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" +	  $opt_dry_run || { +	    eval '$ECHO ": $name " >> "$nlist"' +	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" +	  } +	done + +	$opt_dry_run || { +	  # Make sure we have at least an empty file. +	  test -f "$nlist" || : > "$nlist" + +	  if test -n "$exclude_expsyms"; then +	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T +	    $MV "$nlist"T "$nlist" +	  fi + +	  # Try sorting and uniquifying the output. +	  if $GREP -v "^: " < "$nlist" | +	      if sort -k 3 </dev/null >/dev/null 2>&1; then +		sort -k 3 +	      else +		sort +2 +	      fi | +	      uniq > "$nlist"S; then +	    : +	  else +	    $GREP -v "^: " < "$nlist" > "$nlist"S +	  fi + +	  if test -f "$nlist"S; then +	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' +	  else +	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms" +	  fi + +	  echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols.  */ +typedef struct { +  const char *name; +  void *address; +} lt_dlsymlist; +" +	  case $host in +	  *cygwin* | *mingw* | *cegcc* ) +	    echo >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because +   runtime relocations are performed -- see ld's documentation +   on pseudo-relocs.  */" +	    lt_dlsym_const= ;; +	  *osf5*) +	    echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" +	    lt_dlsym_const= ;; +	  *) +	    lt_dlsym_const=const ;; +	  esac + +	  echo >> "$output_objdir/$my_dlsyms" "\ +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) ;; +	  *) symtab_cflags="$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 +      win32_nmres=`eval $NM -f posix -A $1 | +	$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" +} + + + +# 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" + +	# 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 + +	# fixup the dll searchpath if we need to. +	if test -n "$dllsearchpath"; then +	  $ECHO "\ +    # Add the dll search path components to the executable PATH +    PATH=$dllsearchpath:\$PATH +" +	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_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +#    $build          $host +#    mingw (msys)    mingw  [e.g. native] +#    cygwin          mingw +#    *nix + wine     mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin.  Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ +  func_to_host_path_result="$1" +  if test -n "$1"; then +    case $host in +      *mingw* ) +        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' +        case $build in +          *mingw* ) # actually, msys +            # awkward: cmd appends spaces to result +            func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | +              $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +            ;; +          *cygwin* ) +            func_to_host_path_result=`cygpath -w "$1" | +	      $SED -e "$lt_sed_naive_backslashify"` +            ;; +          * ) +            # Unfortunately, winepath does not exit with a non-zero +            # error code, so we are forced to check the contents of +            # stdout. On the other hand, if the command is not +            # found, the shell will set an exit code of 127 and print +            # *an error message* to stdout. So we must check for both +            # error code of zero AND non-empty stdout, which explains +            # the odd construction: +            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` +            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then +              func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | +                $SED -e "$lt_sed_naive_backslashify"` +            else +              # Allow warning below. +              func_to_host_path_result= +            fi +            ;; +        esac +        if test -z "$func_to_host_path_result" ; then +          func_error "Could not determine host path corresponding to" +          func_error "  \`$1'" +          func_error "Continuing, but uninstalled executables may not work." +          # Fallback: +          func_to_host_path_result="$1" +        fi +        ;; +    esac +  fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +#    $build          $host +#    mingw (msys)    mingw  [e.g. native] +#    cygwin          mingw +#    *nix + wine     mingw +# +# 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. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ +  func_to_host_pathlist_result="$1" +  if test -n "$1"; then +    case $host in +      *mingw* ) +        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' +        # 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_pathlist_tmp1=$func_stripname_result +        case $build in +          *mingw* ) # Actually, msys. +            # Awkward: cmd appends spaces to result. +            func_to_host_pathlist_result=` +	      ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | +	      $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +            ;; +          *cygwin* ) +            func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | +              $SED -e "$lt_sed_naive_backslashify"` +            ;; +          * ) +            # unfortunately, winepath doesn't convert pathlists +            func_to_host_pathlist_result="" +            func_to_host_pathlist_oldIFS=$IFS +            IFS=: +            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do +              IFS=$func_to_host_pathlist_oldIFS +              if test -n "$func_to_host_pathlist_f" ; then +                func_to_host_path "$func_to_host_pathlist_f" +                if test -n "$func_to_host_path_result" ; then +                  if test -z "$func_to_host_pathlist_result" ; then +                    func_to_host_pathlist_result="$func_to_host_path_result" +                  else +                    func_append func_to_host_pathlist_result ";$func_to_host_path_result" +                  fi +                fi +              fi +            done +            IFS=$func_to_host_pathlist_oldIFS +            ;; +        esac +        if test -z "$func_to_host_pathlist_result"; then +          func_error "Could not determine the host path(s) corresponding to" +          func_error "  \`$1'" +          func_error "Continuing, but uninstalled executables may not work." +          # Fallback. This may break if $1 contains DOS-style drive +          # specifications. The fix is not to complicate the expression +          # below, but for the user to provide a working wine installation +          # with winepath so that path translation in the cross-to-mingw +          # case works properly. +          lt_replace_pathsep_nix_to_dos="s|:|;|g" +          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ +            $SED -e "$lt_replace_pathsep_nix_to_dos"` +        fi +        # Now, add the leading and trailing path separators back +        case "$1" in +          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" +            ;; +        esac +        case "$1" in +          *: ) func_append func_to_host_pathlist_result ";" +            ;; +        esac +        ;; +    esac +  fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ +	cat <<EOF + +/* $cwrappersource - temporary wrapper executable for $objdir/$outputname +   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION + +   The $output program cannot be directly executed until all the libtool +   libraries that it depends on are installed. + +   This wrapper executable should never be moved out of the build directory. +   If it is, it will not operate correctly. +*/ +EOF +	    cat <<"EOF" +#ifdef _MSC_VER +# define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#include <stdio.h> +#include <stdlib.h> +#ifdef _MSC_VER +# include <direct.h> +# include <process.h> +# include <io.h> +#else +# include <unistd.h> +# include <stdint.h> +# ifdef __CYGWIN__ +#  include <io.h> +# endif +#endif +#include <malloc.h> +#include <stdarg.h> +#include <assert.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/stat.h> + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat    _stat +# define chmod   _chmod +# define getcwd  _getcwd +# define putenv  _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +#  define _INTPTR_T_DEFINED +#  define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat    _stat +# define chmod   _chmod +# define getcwd  _getcwd +# define putenv  _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ +  defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +#  define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +#  define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ +	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ +  if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + +	    cat <<EOF +const char * MAGIC_EXE = "$magic_exe"; +const char * LIB_PATH_VARNAME = "$shlibpath_var"; +EOF + +	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then +              func_to_host_pathlist "$temp_rpath" +	      cat <<EOF +const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result"; +EOF +	    else +	      cat <<"EOF" +const char * LIB_PATH_VALUE   = ""; +EOF +	    fi + +	    if test -n "$dllsearchpath"; then +              func_to_host_pathlist "$dllsearchpath:" +	      cat <<EOF +const char * EXE_PATH_VARNAME = "PATH"; +const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result"; +EOF +	    else +	      cat <<"EOF" +const char * EXE_PATH_VARNAME = ""; +const char * EXE_PATH_VALUE   = ""; +EOF +	    fi + +	    if test "$fast_install" = yes; then +	      cat <<EOF +const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ +EOF +	    else +	      cat <<EOF +const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ +EOF +	    fi + + +	    cat <<"EOF" + +#define LTWRAPPER_OPTION_PREFIX         "--lt-" + +static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; +static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script"; +static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug"; + +int +main (int argc, char *argv[]) +{ +  char **newargz; +  int  newargc; +  char *tmp_pathspec; +  char *actual_cwrapper_path; +  char *actual_cwrapper_name; +  char *target_name; +  char *lt_argv_zero; +  intptr_t rval = 127; + +  int i; + +  program_name = (char *) xstrdup (base_name (argv[0])); +  newargz = XMALLOC (char *, argc + 1); + +  /* very simple arg parsing; don't want to rely on getopt +   * also, copy all non cwrapper options to newargz, except +   * argz[0], which is handled differently +   */ +  newargc=0; +  for (i = 1; i < argc; i++) +    { +      if (strcmp (argv[i], dumpscript_opt) == 0) +	{ +EOF +	    case "$host" in +	      *mingw* | *cygwin* ) +		# make stdout use "unix" line endings +		echo "          setmode(1,_O_BINARY);" +		;; +	      esac + +	    cat <<"EOF" +	  lt_dump_script (stdout); +	  return 0; +	} +      if (strcmp (argv[i], debug_opt) == 0) +	{ +          lt_debug = 1; +          continue; +	} +      if (strcmp (argv[i], ltwrapper_option_prefix) == 0) +        { +          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX +             namespace, but it is not one of the ones we know about and +             have already dealt with, above (inluding dump-script), then +             report an error. Otherwise, targets might begin to believe +             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX +             namespace. The first time any user complains about this, we'll +             need to make LTWRAPPER_OPTION_PREFIX a configure-time option +             or a configure.ac-settable value. +           */ +          lt_fatal (__FILE__, __LINE__, +		    "unrecognized %s option: '%s'", +                    ltwrapper_option_prefix, argv[i]); +        } +      /* otherwise ... */ +      newargz[++newargc] = xstrdup (argv[i]); +    } +  newargz[++newargc] = NULL; + +EOF +	    cat <<EOF +  /* The GNU banner must be the first non-error debug message */ +  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); +EOF +	    cat <<"EOF" +  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); +  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); + +  tmp_pathspec = find_executable (argv[0]); +  if (tmp_pathspec == NULL) +    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); +  lt_debugprintf (__FILE__, __LINE__, +                  "(main) found exe (before symlink chase) at: %s\n", +		  tmp_pathspec); + +  actual_cwrapper_path = chase_symlinks (tmp_pathspec); +  lt_debugprintf (__FILE__, __LINE__, +                  "(main) found exe (after symlink chase) at: %s\n", +		  actual_cwrapper_path); +  XFREE (tmp_pathspec); + +  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); +  strendzap (actual_cwrapper_path, actual_cwrapper_name); + +  /* wrapper name transforms */ +  strendzap (actual_cwrapper_name, ".exe"); +  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); +  XFREE (actual_cwrapper_name); +  actual_cwrapper_name = tmp_pathspec; +  tmp_pathspec = 0; + +  /* target_name transforms -- use actual target program name; might have lt- prefix */ +  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); +  strendzap (target_name, ".exe"); +  tmp_pathspec = lt_extend_str (target_name, ".exe", 1); +  XFREE (target_name); +  target_name = tmp_pathspec; +  tmp_pathspec = 0; + +  lt_debugprintf (__FILE__, __LINE__, +		  "(main) libtool target name: %s\n", +		  target_name); +EOF + +	    cat <<EOF +  newargz[0] = +    XMALLOC (char, (strlen (actual_cwrapper_path) + +		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); +  strcpy (newargz[0], actual_cwrapper_path); +  strcat (newargz[0], "$objdir"); +  strcat (newargz[0], "/"); +EOF + +	    cat <<"EOF" +  /* stop here, and copy so we don't have to do this twice */ +  tmp_pathspec = xstrdup (newargz[0]); + +  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ +  strcat (newargz[0], actual_cwrapper_name); + +  /* DO want the lt- prefix here if it exists, so use target_name */ +  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); +  XFREE (tmp_pathspec); +  tmp_pathspec = NULL; +EOF + +	    case $host_os in +	      mingw*) +	    cat <<"EOF" +  { +    char* p; +    while ((p = strchr (newargz[0], '\\')) != NULL) +      { +	*p = '/'; +      } +    while ((p = strchr (lt_argv_zero, '\\')) != NULL) +      { +	*p = '/'; +      } +  } +EOF +	    ;; +	    esac + +	    cat <<"EOF" +  XFREE (target_name); +  XFREE (actual_cwrapper_path); +  XFREE (actual_cwrapper_name); + +  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ +  lt_setenv ("DUALCASE", "1");  /* for MSK sh */ +  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); +  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); + +  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", +		  nonnull (lt_argv_zero)); +  for (i = 0; i < newargc; i++) +    { +      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", +		      i, nonnull (newargz[i])); +    } + +EOF + +	    case $host_os in +	      mingw*) +		cat <<"EOF" +  /* execv doesn't actually work on mingw as expected on unix */ +  newargz = prepare_spawn (newargz); +  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); +  if (rval == -1) +    { +      /* failed to start process */ +      lt_debugprintf (__FILE__, __LINE__, +		      "(main) failed to launch target \"%s\": %s\n", +		      lt_argv_zero, nonnull (strerror (errno))); +      return 127; +    } +  return rval; +EOF +		;; +	      *) +		cat <<"EOF" +  execv (lt_argv_zero, newargz); +  return rval; /* =127, but avoids unused variable warning */ +EOF +		;; +	    esac + +	    cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ +  void *p = (void *) malloc (num); +  if (!p) +    lt_fatal (__FILE__, __LINE__, "memory exhausted"); + +  return p; +} + +char * +xstrdup (const char *string) +{ +  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), +			  string) : NULL; +} + +const char * +base_name (const char *name) +{ +  const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +  /* Skip over the disk name in MSDOS pathnames. */ +  if (isalpha ((unsigned char) name[0]) && name[1] == ':') +    name += 2; +#endif + +  for (base = name; *name; name++) +    if (IS_DIR_SEPARATOR (*name)) +      base = name + 1; +  return base; +} + +int +check_executable (const char *path) +{ +  struct stat st; + +  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", +                  nonempty (path)); +  if ((!path) || (!*path)) +    return 0; + +  if ((stat (path, &st) >= 0) +      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) +    return 1; +  else +    return 0; +} + +int +make_executable (const char *path) +{ +  int rval = 0; +  struct stat st; + +  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", +                  nonempty (path)); +  if ((!path) || (!*path)) +    return 0; + +  if (stat (path, &st) >= 0) +    { +      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); +    } +  return rval; +} + +/* Searches for the full path of the wrapper.  Returns +   newly allocated full path name if found, NULL otherwise +   Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ +  int has_slash = 0; +  const char *p; +  const char *p_next; +  /* static buffer for getcwd */ +  char tmp[LT_PATHMAX + 1]; +  int tmp_len; +  char *concat_name; + +  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", +                  nonempty (wrapper)); + +  if ((wrapper == NULL) || (*wrapper == '\0')) +    return NULL; + +  /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') +    { +      concat_name = xstrdup (wrapper); +      if (check_executable (concat_name)) +	return concat_name; +      XFREE (concat_name); +    } +  else +    { +#endif +      if (IS_DIR_SEPARATOR (wrapper[0])) +	{ +	  concat_name = xstrdup (wrapper); +	  if (check_executable (concat_name)) +	    return concat_name; +	  XFREE (concat_name); +	} +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) +    } +#endif + +  for (p = wrapper; *p; p++) +    if (*p == '/') +      { +	has_slash = 1; +	break; +      } +  if (!has_slash) +    { +      /* no slashes; search PATH */ +      const char *path = getenv ("PATH"); +      if (path != NULL) +	{ +	  for (p = path; *p; p = p_next) +	    { +	      const char *q; +	      size_t p_len; +	      for (q = p; *q; q++) +		if (IS_PATH_SEPARATOR (*q)) +		  break; +	      p_len = q - p; +	      p_next = (*q == '\0' ? q : q + 1); +	      if (p_len == 0) +		{ +		  /* empty path: current directory */ +		  if (getcwd (tmp, LT_PATHMAX) == NULL) +		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", +                              nonnull (strerror (errno))); +		  tmp_len = strlen (tmp); +		  concat_name = +		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); +		  memcpy (concat_name, tmp, tmp_len); +		  concat_name[tmp_len] = '/'; +		  strcpy (concat_name + tmp_len + 1, wrapper); +		} +	      else +		{ +		  concat_name = +		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); +		  memcpy (concat_name, p, p_len); +		  concat_name[p_len] = '/'; +		  strcpy (concat_name + p_len + 1, wrapper); +		} +	      if (check_executable (concat_name)) +		return concat_name; +	      XFREE (concat_name); +	    } +	} +      /* not found in PATH; assume curdir */ +    } +  /* Relative path | not found in path: prepend cwd */ +  if (getcwd (tmp, LT_PATHMAX) == NULL) +    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", +              nonnull (strerror (errno))); +  tmp_len = strlen (tmp); +  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); +  memcpy (concat_name, tmp, tmp_len); +  concat_name[tmp_len] = '/'; +  strcpy (concat_name + tmp_len + 1, wrapper); + +  if (check_executable (concat_name)) +    return concat_name; +  XFREE (concat_name); +  return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK +  return xstrdup (pathspec); +#else +  char buf[LT_PATHMAX]; +  struct stat s; +  char *tmp_pathspec = xstrdup (pathspec); +  char *p; +  int has_symlinks = 0; +  while (strlen (tmp_pathspec) && !has_symlinks) +    { +      lt_debugprintf (__FILE__, __LINE__, +		      "checking path component for symlinks: %s\n", +		      tmp_pathspec); +      if (lstat (tmp_pathspec, &s) == 0) +	{ +	  if (S_ISLNK (s.st_mode) != 0) +	    { +	      has_symlinks = 1; +	      break; +	    } + +	  /* search backwards for last DIR_SEPARATOR */ +	  p = tmp_pathspec + strlen (tmp_pathspec) - 1; +	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) +	    p--; +	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) +	    { +	      /* no more DIR_SEPARATORS left */ +	      break; +	    } +	  *p = '\0'; +	} +      else +	{ +	  lt_fatal (__FILE__, __LINE__, +		    "error accessing file \"%s\": %s", +		    tmp_pathspec, nonnull (strerror (errno))); +	} +    } +  XFREE (tmp_pathspec); + +  if (!has_symlinks) +    { +      return xstrdup (pathspec); +    } + +  tmp_pathspec = realpath (pathspec, buf); +  if (tmp_pathspec == 0) +    { +      lt_fatal (__FILE__, __LINE__, +		"could not follow symlinks for %s", pathspec); +    } +  return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ +  size_t len, patlen; + +  assert (str != NULL); +  assert (pat != NULL); + +  len = strlen (str); +  patlen = strlen (pat); + +  if (patlen <= len) +    { +      str += len - patlen; +      if (strcmp (str, pat) == 0) +	*str = '\0'; +    } +  return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ +  va_list args; +  if (lt_debug) +    { +      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); +      va_start (args, fmt); +      (void) vfprintf (stderr, fmt, args); +      va_end (args); +    } +} + +static void +lt_error_core (int exit_status, const char *file, +	       int line, const char *mode, +	       const char *message, va_list ap) +{ +  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); +  vfprintf (stderr, message, ap); +  fprintf (stderr, ".\n"); + +  if (exit_status >= 0) +    exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ +  va_list ap; +  va_start (ap, message); +  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); +  va_end (ap); +} + +static const char * +nonnull (const char *s) +{ +  return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ +  return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ +  lt_debugprintf (__FILE__, __LINE__, +		  "(lt_setenv) setting '%s' to '%s'\n", +                  nonnull (name), nonnull (value)); +  { +#ifdef HAVE_SETENV +    /* always make a copy, for consistency with !HAVE_SETENV */ +    char *str = xstrdup (value); +    setenv (name, str, 1); +#else +    int len = strlen (name) + 1 + strlen (value) + 1; +    char *str = XMALLOC (char, len); +    sprintf (str, "%s=%s", name, value); +    if (putenv (str) != EXIT_SUCCESS) +      { +        XFREE (str); +      } +#endif +  } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ +  char *new_value; +  if (orig_value && *orig_value) +    { +      int orig_value_len = strlen (orig_value); +      int add_len = strlen (add); +      new_value = XMALLOC (char, add_len + orig_value_len + 1); +      if (to_end) +        { +          strcpy (new_value, orig_value); +          strcpy (new_value + orig_value_len, add); +        } +      else +        { +          strcpy (new_value, add); +          strcpy (new_value + add_len, orig_value); +        } +    } +  else +    { +      new_value = xstrdup (add); +    } +  return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ +  lt_debugprintf (__FILE__, __LINE__, +		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", +                  nonnull (name), nonnull (value)); + +  if (name && *name && value && *value) +    { +      char *new_value = lt_extend_str (getenv (name), value, 0); +      /* some systems can't cope with a ':'-terminated path #' */ +      int len = strlen (new_value); +      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) +        { +          new_value[len-1] = '\0'; +        } +      lt_setenv (name, new_value); +      XFREE (new_value); +    } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ +  lt_debugprintf (__FILE__, __LINE__, +		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", +                  nonnull (name), nonnull (value)); + +  if (name && *name && value && *value) +    { +      char *new_value = lt_extend_str (getenv (name), value, 0); +      lt_setenv (name, new_value); +      XFREE (new_value); +    } +} + +EOF +	    case $host_os in +	      mingw*) +		cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). +   Note that spawn() does not by itself call the command interpreter +     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : +      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); +         GetVersionEx(&v); +         v.dwPlatformId == VER_PLATFORM_WIN32_NT; +      }) ? "cmd.exe" : "command.com"). +   Instead it simply concatenates the arguments, separated by ' ', and calls +   CreateProcess().  We must quote the arguments since Win32 CreateProcess() +   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a +   special way: +   - Space and tab are interpreted as delimiters. They are not treated as +     delimiters if they are surrounded by double quotes: "...". +   - Unescaped double quotes are removed from the input. Their only effect is +     that within double quotes, space and tab are treated like normal +     characters. +   - Backslashes not followed by double quotes are not special. +   - But 2*n+1 backslashes followed by a double quote become +     n backslashes followed by a double quote (n >= 0): +       \" -> " +       \\\" -> \" +       \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ +  size_t argc; +  char **new_argv; +  size_t i; + +  /* Count number of arguments.  */ +  for (argc = 0; argv[argc] != NULL; argc++) +    ; + +  /* Allocate new argument vector.  */ +  new_argv = XMALLOC (char *, argc + 1); + +  /* Put quoted arguments into the new argument vector.  */ +  for (i = 0; i < argc; i++) +    { +      const char *string = argv[i]; + +      if (string[0] == '\0') +	new_argv[i] = xstrdup ("\"\""); +      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) +	{ +	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); +	  size_t length; +	  unsigned int backslashes; +	  const char *s; +	  char *quoted_string; +	  char *p; + +	  length = 0; +	  backslashes = 0; +	  if (quote_around) +	    length++; +	  for (s = string; *s != '\0'; s++) +	    { +	      char c = *s; +	      if (c == '"') +		length += backslashes + 1; +	      length++; +	      if (c == '\\') +		backslashes++; +	      else +		backslashes = 0; +	    } +	  if (quote_around) +	    length += backslashes + 1; + +	  quoted_string = XMALLOC (char, length + 1); + +	  p = quoted_string; +	  backslashes = 0; +	  if (quote_around) +	    *p++ = '"'; +	  for (s = string; *s != '\0'; s++) +	    { +	      char c = *s; +	      if (c == '"') +		{ +		  unsigned int j; +		  for (j = backslashes + 1; j > 0; j--) +		    *p++ = '\\'; +		} +	      *p++ = c; +	      if (c == '\\') +		backslashes++; +	      else +		backslashes = 0; +	    } +	  if (quote_around) +	    { +	      unsigned int j; +	      for (j = backslashes; j > 0; j--) +		*p++ = '\\'; +	      *p++ = '"'; +	    } +	  *p = '\0'; + +	  new_argv[i] = quoted_string; +	} +      else +	new_argv[i] = (char *) string; +    } +  new_argv[argc] = NULL; + +  return new_argv; +} +EOF +		;; +	    esac + +            cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF +	    func_emit_wrapper yes | +              $SED -e 's/\([\\"]\)/\\\1/g' \ +	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/' + +            cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ +    $opt_debug +    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in +    *import*) : ;; +    *) false ;; +    esac +} + +# func_mode_link arg... +func_mode_link () +{ +    $opt_debug +    case $host in +    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-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 invocation. +      # allow_undefined=no + +      # FIXME: Unfortunately, there are problems with the above when trying +      # to make a dll which has undefined symbols, in which case not +      # even a static library is built.  For now, we need to specify +      # -no-undefined on the libtool link line when we can be certain +      # that all symbols are satisfied, otherwise we get a static library. +      allow_undefined=yes +      ;; +    *) +      allow_undefined=yes +      ;; +    esac +    libtool_args=$nonopt +    base_compile="$nonopt $@" +    compile_command=$nonopt +    finalize_command=$nonopt + +    compile_rpath= +    finalize_rpath= +    compile_shlibpath= +    finalize_shlibpath= +    convenience= +    old_convenience= +    deplibs= +    old_deplibs= +    compiler_flags= +    linker_flags= +    dllsearchpath= +    lib_search_path=`pwd` +    inst_prefix_dir= +    new_inherited_linker_flags= + +    avoid_version=no +    bindir= +    dlfiles= +    dlprefiles= +    dlself=no +    export_dynamic=no +    export_symbols= +    export_symbols_regex= +    generated= +    libobjs= +    ltlibs= +    module=no +    no_install=no +    objs= +    non_pic_objects= +    precious_files_regex= +    prefer_static_libs=no +    preload=no +    prev= +    prevarg= +    release= +    rpath= +    xrpath= +    perm_rpath= +    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 +      -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 +	    func_warning "complete static linking is impossible in this configuration" +	  fi +	  if test -n "$link_static_flag"; then +	    dlopen_self=$dlopen_self_static +	  fi +	  prefer_static_libs=yes +	  ;; +	-static) +	  if test -z "$pic_flag" && test -n "$link_static_flag"; then +	    dlopen_self=$dlopen_self_static +	  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 +	break +	;; +      esac +    done + +    # See if our shared archives depend on static archives. +    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 +      arg="$1" +      shift +      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) +	  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. +	    func_append compile_command " @SYMFILE@" +	    func_append finalize_command " @SYMFILE@" +	    preload=yes +	  fi +	  case $arg in +	  *.la | *.lo) ;;  # We handle these cases below. +	  force) +	    if test "$dlself" = no; then +	      dlself=needless +	      export_dynamic=yes +	    fi +	    prev= +	    continue +	    ;; +	  self) +	    if test "$prev" = dlprefiles; then +	      dlself=yes +	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then +	      dlself=yes +	    else +	      dlself=needless +	      export_dynamic=yes +	    fi +	    prev= +	    continue +	    ;; +	  *) +	    if test "$prev" = dlfiles; then +	      dlfiles="$dlfiles $arg" +	    else +	      dlprefiles="$dlprefiles $arg" +	    fi +	    prev= +	    continue +	    ;; +	  esac +	  ;; +	expsyms) +	  export_symbols="$arg" +	  test -f "$arg" \ +	    || func_fatal_error "symbol file \`$arg' does not exist" +	  prev= +	  continue +	  ;; +	expsyms_regex) +	  export_symbols_regex="$arg" +	  prev= +	  continue +	  ;; +	framework) +	  case $host in +	    *-*-darwin*) +	      case "$deplibs " in +		*" $qarg.ltframework "*) ;; +		*) deplibs="$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 +	    moreargs= +	    for fil in `cat "$save_arg"` +	    do +#	      moreargs="$moreargs $fil" +	      arg=$fil +	      # A libtool-controlled object. + +	      # Check to see that this really is a libtool object. +	      if func_lalib_unsafe_p "$arg"; then +		pic_object= +		non_pic_object= + +		# 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 +		  func_fatal_error "cannot find name of object for \`$arg'" +		fi + +		# Extract subdirectory from the argument. +		func_dirname "$arg" "/" "" +		xdir="$func_dirname_result" + +		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 +		    else +		      # 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 +		    # Preload the old-style object. +		    dlprefiles="$dlprefiles $pic_object" +		    prev= +		  fi + +		  # A PIC object. +		  func_append libobjs " $pic_object" +		  arg="$pic_object" +		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 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" + +		  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 +	    func_fatal_error "link input file \`$arg' does not exist" +	  fi +	  arg=$save_arg +	  prev= +	  continue +	  ;; +	precious_regex) +	  precious_files_regex="$arg" +	  prev= +	  continue +	  ;; +	release) +	  release="-$arg" +	  prev= +	  continue +	  ;; +	rpath | xrpath) +	  # We need an absolute path. +	  case $arg in +	  [\\/]* | [A-Za-z]:[\\/]*) ;; +	  *) +	    func_fatal_error "only absolute run-paths are allowed" +	    ;; +	  esac +	  if test "$prev" = rpath; then +	    case "$rpath " in +	    *" $arg "*) ;; +	    *) rpath="$rpath $arg" ;; +	    esac +	  else +	    case "$xrpath " in +	    *" $arg "*) ;; +	    *) xrpath="$xrpath $arg" ;; +	    esac +	  fi +	  prev= +	  continue +	  ;; +	shrext) +	  shrext_cmds="$arg" +	  prev= +	  continue +	  ;; +	weak) +	  weak_libs="$weak_libs $arg" +	  prev= +	  continue +	  ;; +	xcclinker) +	  linker_flags="$linker_flags $qarg" +	  compiler_flags="$compiler_flags $qarg" +	  prev= +	  func_append compile_command " $qarg" +	  func_append finalize_command " $qarg" +	  continue +	  ;; +	xcompiler) +	  compiler_flags="$compiler_flags $qarg" +	  prev= +	  func_append compile_command " $qarg" +	  func_append finalize_command " $qarg" +	  continue +	  ;; +	xlinker) +	  linker_flags="$linker_flags $qarg" +	  compiler_flags="$compiler_flags $wl$qarg" +	  prev= +	  func_append compile_command " $wl$qarg" +	  func_append finalize_command " $wl$qarg" +	  continue +	  ;; +	*) +	  eval "$prev=\"\$arg\"" +	  prev= +	  continue +	  ;; +	esac +      fi # test -n "$prev" + +      prevarg="$arg" + +      case $arg in +      -all-static) +	if test -n "$link_static_flag"; then +	  # 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. +	func_fatal_error "\`-allow-undefined' must not be used because it is the default" +	;; + +      -avoid-version) +	avoid_version=yes +	continue +	;; + +      -bindir) +	prev=bindir +	continue +	;; + +      -dlopen) +	prev=dlfiles +	continue +	;; + +      -dlpreopen) +	prev=dlprefiles +	continue +	;; + +      -export-dynamic) +	export_dynamic=yes +	continue +	;; + +      -export-symbols | -export-symbols-regex) +	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then +	  func_fatal_error "more than one -exported-symbols argument is not allowed" +	fi +	if test "X$arg" = "X-export-symbols"; then +	  prev=expsyms +	else +	  prev=expsyms_regex +	fi +	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* | /*-*-irix*) +	  func_append compile_command " $arg" +	  func_append finalize_command " $arg" +	  ;; +	esac +	continue +	;; + +      -L*) +	func_stripname '-L' '' "$arg" +	dir=$func_stripname_result +	if test -z "$dir"; 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 +	# We need an absolute path. +	case $dir in +	[\\/]* | [A-Za-z]:[\\/]*) ;; +	*) +	  absdir=`cd "$dir" && pwd` +	  test -z "$absdir" && \ +	    func_fatal_error "cannot determine absolute directory name of \`$dir'" +	  dir="$absdir" +	  ;; +	esac +	case "$deplibs " in +	*" -L$dir "*) ;; +	*) +	  deplibs="$deplibs -L$dir" +	  lib_search_path="$lib_search_path $dir" +	  ;; +	esac +	case $host in +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) +	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` +	  case :$dllsearchpath: in +	  *":$dir:"*) ;; +	  ::) dllsearchpath=$dir;; +	  *) dllsearchpath="$dllsearchpath:$dir";; +	  esac +	  case :$dllsearchpath: in +	  *":$testbindir:"*) ;; +	  ::) dllsearchpath=$testbindir;; +	  *) dllsearchpath="$dllsearchpath:$testbindir";; +	  esac +	  ;; +	esac +	continue +	;; + +      -l*) +	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then +	  case $host in +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) +	    # These systems don't actually have a C or math library (as such) +	    continue +	    ;; +	  *-*-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 +	    deplibs="$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" +	continue +	;; + +      -module) +	module=yes +	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) +	compiler_flags="$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) +	compiler_flags="$compiler_flags $arg" +	func_append compile_command " $arg" +	func_append finalize_command " $arg" +	case "$new_inherited_linker_flags " in +	    *" $arg "*) ;; +	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; +	esac +	continue +	;; + +      -multi_module) +	single_module="${wl}-multi_module" +	continue +	;; + +      -no-fast-install) +	fast_install=no +	continue +	;; + +      -no-install) +	case $host in +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) +	  # The PATH hackery in wrapper scripts is required on Windows +	  # 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 ;; +	esac +	continue +	;; + +      -no-undefined) +	allow_undefined=no +	continue +	;; + +      -objectlist) +	prev=objectlist +	continue +	;; + +      -o) prev=output ;; + +      -precious-files-regex) +	prev=precious_regex +	continue +	;; + +      -release) +	prev=release +	continue +	;; + +      -rpath) +	prev=rpath +	continue +	;; + +      -R) +	prev=xrpath +	continue +	;; + +      -R*) +	func_stripname '-R' '' "$arg" +	dir=$func_stripname_result +	# We need an absolute path. +	case $dir in +	[\\/]* | [A-Za-z]:[\\/]*) ;; +	*) +	  func_fatal_error "only absolute run-paths are allowed" +	  ;; +	esac +	case "$xrpath " in +	*" $dir "*) ;; +	*) xrpath="$xrpath $dir" ;; +	esac +	continue +	;; + +      -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 +	# would be equivalent was wrong.  It would break on at least +	# Digital Unix and AIX. +	continue +	;; + +      -thread-safe) +	thread_safe=yes +	continue +	;; + +      -version-info) +	prev=vinfo +	continue +	;; + +      -version-number) +	prev=vinfo +	vinfo_number=yes +	continue +	;; + +      -weak) +        prev=weak +	continue +	;; + +      -Wc,*) +	func_stripname '-Wc,' '' "$arg" +	args=$func_stripname_result +	arg= +	save_ifs="$IFS"; IFS=',' +	for flag in $args; do +	  IFS="$save_ifs" +          func_quote_for_eval "$flag" +	  arg="$arg $func_quote_for_eval_result" +	  compiler_flags="$compiler_flags $func_quote_for_eval_result" +	done +	IFS="$save_ifs" +	func_stripname ' ' '' "$arg" +	arg=$func_stripname_result +	;; + +      -Wl,*) +	func_stripname '-Wl,' '' "$arg" +	args=$func_stripname_result +	arg= +	save_ifs="$IFS"; IFS=',' +	for flag in $args; do +	  IFS="$save_ifs" +          func_quote_for_eval "$flag" +	  arg="$arg $wl$func_quote_for_eval_result" +	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" +	  linker_flags="$linker_flags $func_quote_for_eval_result" +	done +	IFS="$save_ifs" +	func_stripname ' ' '' "$arg" +	arg=$func_stripname_result +	;; + +      -Xcompiler) +	prev=xcompiler +	continue +	;; + +      -Xlinker) +	prev=xlinker +	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 +      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ +      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) +        func_quote_for_eval "$arg" +	arg="$func_quote_for_eval_result" +        func_append compile_command " $arg" +        func_append finalize_command " $arg" +        compiler_flags="$compiler_flags $arg" +        continue +        ;; + +      # Some other compiler flag. +      -* | +*) +        func_quote_for_eval "$arg" +	arg="$func_quote_for_eval_result" +	;; + +      *.$objext) +	# A standard object. +	objs="$objs $arg" +	;; + +      *.lo) +	# A libtool-controlled object. + +	# Check to see that this really is a libtool object. +	if func_lalib_unsafe_p "$arg"; then +	  pic_object= +	  non_pic_object= + +	  # 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 +	    func_fatal_error "cannot find name of object for \`$arg'" +	  fi + +	  # Extract subdirectory from the argument. +	  func_dirname "$arg" "/" "" +	  xdir="$func_dirname_result" + +	  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 +	      else +		# 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 +	      # Preload the old-style object. +	      dlprefiles="$dlprefiles $pic_object" +	      prev= +	    fi + +	    # A PIC object. +	    func_append libobjs " $pic_object" +	    arg="$pic_object" +	  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 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" + +	    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" +	continue +	;; + +      *.la) +	# A libtool-controlled library. + +	if test "$prev" = dlfiles; then +	  # This library was specified with -dlopen. +	  dlfiles="$dlfiles $arg" +	  prev= +	elif test "$prev" = dlprefiles; then +	  # The library was specified with -dlpreopen. +	  dlprefiles="$dlprefiles $arg" +	  prev= +	else +	  deplibs="$deplibs $arg" +	fi +	continue +	;; + +      # Some other compiler argument. +      *) +	# Unknown arguments in both finalize_command and compile_command need +	# to be aesthetically quoted because they are evaled later. +	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 +	func_append compile_command " $arg" +	func_append finalize_command " $arg" +      fi +    done # argument parsing loop + +    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\" +      func_append compile_command " $arg" +      func_append finalize_command " $arg" +    fi + +    oldlibs= +    # calculate the name of the file, without its directory +    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 \"\${$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\" + +    func_dirname "$output" "/" "" +    output_objdir="$func_dirname_result$objdir" +    # Create the object directory. +    func_mkdir_p "$output_objdir" + +    # Determine the type of output +    case $output in +    "") +      func_fatal_help "you must specify an output file" +      ;; +    *.$libext) linkmode=oldlib ;; +    *.lo | *.$objext) linkmode=obj ;; +    *.la) linkmode=lib ;; +    *) linkmode=prog ;; # Anything else should be a program. +    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 +      if $opt_duplicate_deps ; then +	case "$libs " in +	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	esac +      fi +      libs="$libs $deplib" +    done + +    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= +      if $opt_duplicate_compiler_generated_deps; then +	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 +      fi +      pre_post_deps= +    fi + +    deplibs= +    newdependency_libs= +    newlib_search_path= +    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 dlpreopen link" +	for file in $dlfiles $dlprefiles; do +	  case $file in +	  *.la) ;; +	  *) +	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" +	    ;; +	  esac +	done +	;; +    prog) +	compile_deplibs= +	finalize_deplibs= +	alldeplibs=no +	newdlfiles= +	newdlprefiles= +	passes="conv scan dlopen dlpreopen link" +	;; +    *)  passes="conv" +	;; +    esac + +    for pass in $passes; do +      # 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" ;; +	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= +	  case $lib in +	  *.la)	func_source "$lib" ;; +	  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 "*) ;; +	    *) deplibs="$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 +	    compiler_flags="$compiler_flags $deplib" +	    if test "$linkmode" = lib ; then +		case "$new_inherited_linker_flags " in +		    *" $deplib "*) ;; +		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; +		esac +	    fi +	  fi +	  continue +	  ;; +	-l*) +	  if test "$linkmode" != lib && test "$linkmode" != prog; then +	    func_warning "\`-l' is ignored for archives/objects" +	    continue +	  fi +	  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 +	  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 +	    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 +	  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 "*) ;; +		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; +		esac +	    fi +	  fi +	  continue +	  ;; +	-L*) +	  case $linkmode in +	  lib) +	    deplibs="$deplib $deplibs" +	    test "$pass" = conv && continue +	    newdependency_libs="$deplib $newdependency_libs" +	    func_stripname '-L' '' "$deplib" +	    newlib_search_path="$newlib_search_path $func_stripname_result" +	    ;; +	  prog) +	    if test "$pass" = conv; then +	      deplibs="$deplib $deplibs" +	      continue +	    fi +	    if test "$pass" = scan; then +	      deplibs="$deplib $deplibs" +	    else +	      compile_deplibs="$deplib $compile_deplibs" +	      finalize_deplibs="$deplib $finalize_deplibs" +	    fi +	    func_stripname '-L' '' "$deplib" +	    newlib_search_path="$newlib_search_path $func_stripname_result" +	    ;; +	  *) +	    func_warning "\`-L' is ignored for archives/objects" +	    ;; +	  esac # linkmode +	  continue +	  ;; # -L +	-R*) +	  if test "$pass" = link; then +	    func_stripname '-R' '' "$deplib" +	    dir=$func_stripname_result +	    # Make sure the xrpath contains only unique directories. +	    case "$xrpath " in +	    *" $dir "*) ;; +	    *) xrpath="$xrpath $dir" ;; +	    esac +	  fi +	  deplibs="$deplib $deplibs" +	  continue +	  ;; +	*.la) lib="$deplib" ;; +	*.$libext) +	  if test "$pass" = conv; then +	    deplibs="$deplib $deplibs" +	    continue +	  fi +	  case $linkmode in +	  lib) +	    # 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 +	      deplibs="$deplib $deplibs" +	    else +	      compile_deplibs="$deplib $compile_deplibs" +	      finalize_deplibs="$deplib $finalize_deplibs" +	    fi +	    continue +	    ;; +	  esac # linkmode +	  ;; # *.$libext +	*.lo | *.$objext) +	  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. +	      newdlprefiles="$newdlprefiles $deplib" +	      compile_deplibs="$deplib $compile_deplibs" +	      finalize_deplibs="$deplib $finalize_deplibs" +	    else +	      newdlfiles="$newdlfiles $deplib" +	    fi +	  fi +	  continue +	  ;; +	%DEPLIBS%) +	  alldeplibs=yes +	  continue +	  ;; +	esac # case $deplib + +	if test "$found" = yes || test -f "$lib"; then : +	else +	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" +	fi + +	# Check to see that this really is a libtool archive. +	func_lalib_unsafe_p "$lib" \ +	  || func_fatal_error "\`$lib' is not a valid libtool archive" + +	func_dirname "$lib" "" "." +	ladir="$func_dirname_result" + +	dlname= +	dlopen= +	dlpreopen= +	libdir= +	library_names= +	old_library= +	inherited_linker_flags= +	# If the library was installed with an old release of libtool, +	# it will not redefine variables installed, or shouldnotlink +	installed=yes +	shouldnotlink=no +	avoidtemprpath= + + +	# Read the .la file +	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 "*) ;; +	      *) new_inherited_linker_flags="$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" != prog && test "$linkmode" != lib; }; then +	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen" +	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" +	fi + +	if test "$pass" = conv; then +	  # Only check for convenience libraries +	  deplibs="$lib $deplibs" +	  if test -z "$libdir"; then +	    if test -z "$old_library"; then +	      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" +	  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_duplicate_deps ; then +	      case "$tmp_libs " in +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	      esac +	    fi +	    tmp_libs="$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 -z "$linklib"; then +	  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 -z "$libdir"; then +	    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 there is no dlname, no dlopen support or we're linking +	    # 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. +	    dlprefiles="$dlprefiles $lib $dependency_libs" +	  else +	    newdlfiles="$newdlfiles $lib" +	  fi +	  continue +	fi # $pass = dlopen + +	# We need an absolute path. +	case $ladir in +	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; +	*) +	  abs_ladir=`cd "$ladir" && pwd` +	  if test -z "$abs_ladir"; then +	    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 +	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 +	    func_warning "library \`$lib' was moved." +	    dir="$ladir" +	    absdir="$abs_ladir" +	    libdir="$abs_ladir" +	  else +	    dir="$libdir" +	    absdir="$libdir" +	  fi +	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes +	else +	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then +	    dir="$ladir" +	    absdir="$abs_ladir" +	    # Remove this search path later +	    notinst_path="$notinst_path $abs_ladir" +	  else +	    dir="$ladir/$objdir" +	    absdir="$abs_ladir/$objdir" +	    # Remove this search path later +	    notinst_path="$notinst_path $abs_ladir" +	  fi +	fi # $installed = yes +	func_stripname 'lib' '.la' "$laname" +	name=$func_stripname_result + +	# This library was specified with -dlpreopen. +	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 +	  # 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" +	    # Keep a list of preopened convenience libraries to check +	    # that they are being used correctly in the link pass. +	    test -z "$libdir" && \ +		dlpreconveniencelibs="$dlpreconveniencelibs $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" +	  fi +	fi # $pass = dlpreopen + +	if test -z "$libdir"; then +	  # Link the convenience library +	  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" # used for prog,scan pass +	  fi +	  continue +	fi + + +	if test "$linkmode" = prog && test "$pass" != link; then +	  newlib_search_path="$newlib_search_path $ladir" +	  deplibs="$lib $deplibs" + +	  linkalldeplibs=no +	  if test "$link_all_deplibs" != no || test -z "$library_names" || +	     test "$build_libtool_libs" = no; then +	    linkalldeplibs=yes +	  fi + +	  tmp_libs= +	  for deplib in $dependency_libs; do +	    case $deplib in +	    -L*) func_stripname '-L' '' "$deplib" +	         newlib_search_path="$newlib_search_path $func_stripname_result" +		 ;; +	    esac +	    # Need to link against all dependency_libs? +	    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 +	    if $opt_duplicate_deps ; then +	      case "$tmp_libs " in +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	      esac +	    fi +	    tmp_libs="$tmp_libs $deplib" +	  done # for deplib +	  continue +	fi # $linkmode = prog... + +	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:"*) ;; +	      *) temp_rpath="$temp_rpath$absdir:" ;; +	      esac +	    fi + +	    # 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 "*) ;; +	      *) compile_rpath="$compile_rpath $absdir" +	      esac +	      ;; +	    esac +	    case " $sys_lib_dlsearch_path " in +	    *" $libdir "*) ;; +	    *) +	      case "$finalize_rpath " in +	      *" $libdir "*) ;; +	      *) finalize_rpath="$finalize_rpath $libdir" +	      esac +	      ;; +	    esac +	  fi # $linkmode,$pass = prog,link... + +	  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 +	fi + +	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 +	      notinst_deplibs="$notinst_deplibs $lib" +	      need_relink=no +	    ;; +	  *) +	    if test "$installed" = no; then +	      notinst_deplibs="$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 "*) ;; +	      *) compile_rpath="$compile_rpath $absdir" +	      esac +	      ;; +	    esac +	    case " $sys_lib_dlsearch_path " in +	    *" $libdir "*) ;; +	    *) +	      case "$finalize_rpath " in +	      *" $libdir "*) ;; +	      *) finalize_rpath="$finalize_rpath $libdir" +	      esac +	      ;; +	    esac +	  fi + +	  if test -n "$old_archive_from_expsyms_cmds"; then +	    # figure out the soname +	    set dummy $library_names +	    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* | mingw* | *cegcc*) +	        func_arith $current - $age +		major=$func_arith_result +		versuffix="-$major" +		;; +	      esac +	      eval soname=\"$soname_spec\" +	    else +	      soname="$realname" +	    fi + +	    # Make a new name for the extract_expsyms_cmds to use +	    soroot="$soname" +	    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 +	      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 +	      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" + +	  if test "$linkmode" = prog || test "$mode" != relink; then +	    add_shlibpath= +	    add_dir= +	    add= +	    lib_linked=yes +	    case $hardcode_action in +	    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" ;; +		esac +		add_dir="-L$dir" +		add="-l$name" +	      elif test "$hardcode_shlibpath_var" = no; then +		add_shlibpath="$dir" +		add="-l$name" +	      else +		lib_linked=no +	      fi +	      ;; +	    relink) +	      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 +		    [\\/]*) +		      add_dir="$add_dir -L$inst_prefix_dir$libdir" +		      ;; +		  esac +		fi +		add="-l$name" +	      elif test "$hardcode_shlibpath_var" = yes; then +		add_shlibpath="$dir" +		add="-l$name" +	      else +		lib_linked=no +	      fi +	      ;; +	    *) lib_linked=no ;; +	    esac + +	    if test "$lib_linked" != yes; then +	      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:" ;; +	      esac +	    fi +	    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 && +		 test "$hardcode_shlibpath_var" = yes; then +		case :$finalize_shlibpath: in +		*":$libdir:"*) ;; +		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; +		esac +	      fi +	    fi +	  fi + +	  if test "$linkmode" = prog || test "$mode" = relink; then +	    add_shlibpath= +	    add_dir= +	    add= +	    # Finalize command for both is simple: just hardcode it. +	    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" +	      add="-l$name" +	    elif test "$hardcode_shlibpath_var" = yes; then +	      case :$finalize_shlibpath: in +	      *":$libdir:"*) ;; +	      *) finalize_shlibpath="$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 +		  [\\/]*) +		    add_dir="$add_dir -L$inst_prefix_dir$libdir" +		    ;; +		esac +	      fi +	      add="-l$name" +	    fi + +	    if test "$linkmode" = prog; then +	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" +	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs" +	    else +	      test -n "$add_dir" && deplibs="$add_dir $deplibs" +	      test -n "$add" && deplibs="$add $deplibs" +	    fi +	  fi +	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. +	  if test "$hardcode_direct" != unsupported; then +	    test -n "$old_library" && linklib="$old_library" +	    compile_deplibs="$dir/$linklib $compile_deplibs" +	    finalize_deplibs="$dir/$linklib $finalize_deplibs" +	  else +	    compile_deplibs="-l$name -L$dir $compile_deplibs" +	    finalize_deplibs="-l$name -L$dir $finalize_deplibs" +	  fi +	elif test "$build_libtool_libs" = yes; then +	  # Not a shared library +	  if test "$deplibs_check_method" != pass_all; then +	    # We're trying link a shared library against a static one +	    # but the system doesn't support it. + +	    # 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 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 "*** 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." +	      fi +	      if test "$build_old_libs" = no; then +		build_libtool_libs=module +		build_old_libs=yes +	      else +		build_libtool_libs=no +	      fi +	    fi +	  else +	    deplibs="$dir/$old_library $deplibs" +	    link_static=yes +	  fi +	fi # link shared/static library? + +	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 +	    # Extract -R from dependency_libs +	    temp_deplibs= +	    for libdir in $dependency_libs; do +	      case $libdir in +	      -R*) func_stripname '-R' '' "$libdir" +	           temp_xrpath=$func_stripname_result +		   case " $xrpath " in +		   *" $temp_xrpath "*) ;; +		   *) xrpath="$xrpath $temp_xrpath";; +		   esac;; +	      *) temp_deplibs="$temp_deplibs $libdir";; +	      esac +	    done +	    dependency_libs="$temp_deplibs" +	  fi + +	  newlib_search_path="$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" +	    if $opt_duplicate_deps ; then +	      case "$tmp_libs " in +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; +	      esac +	    fi +	    tmp_libs="$tmp_libs $deplib" +	  done + +	  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) +	        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 +		    func_warning "cannot determine absolute directory name of \`$dir'" +		    absdir="$dir" +		  fi +		  ;; +		esac +		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 +		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" +		      linker_flags="$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` +		  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 +		;; +	      esac +	      case " $deplibs " in +	      *" $path "*) ;; +	      *) deplibs="$path $deplibs" ;; +	      esac +	    done +	  fi # link_all_deplibs != no +	fi # linkmode = lib +      done # for deplib in $libs +      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 +	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" ;; +	    esac +	  done +	  newlib_search_path= +	fi + +	if test "$linkmode,$pass" != "prog,link"; then +	  vars="deplibs" +	else +	  vars="compile_deplibs finalize_deplibs" +	fi +	for var in $vars dependency_libs; do +	  # Add libraries to $var in reverse order +	  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" ;; +	      *) +		case " $new_libs " in +		*" $deplib "*) ;; +		*) new_libs="$deplib $new_libs" ;; +		esac +		;; +	      esac +	      ;; +	    esac +	  done +	  tmp_libs= +	  for deplib in $new_libs; do +	    case $deplib in +	    -L*) +	      case " $tmp_libs " in +	      *" $deplib "*) ;; +	      *) tmp_libs="$tmp_libs $deplib" ;; +	      esac +	      ;; +	    *) tmp_libs="$tmp_libs $deplib" ;; +	    esac +	  done +	  eval $var=\"$tmp_libs\" +	done # for var +      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 +	  tmp_libs="$tmp_libs $i" +	fi +      done +      dependency_libs=$tmp_libs +    done # for pass +    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 +	func_warning "\`-dlopen' is ignored for archives" +      fi + +      case " $deplibs" in +      *\ -l* | *\ -L*) +	func_warning "\`-l' and \`-L' are ignored for archives" ;; +      esac + +      test -n "$rpath" && \ +	func_warning "\`-rpath' is ignored for archives" + +      test -n "$xrpath" && \ +	func_warning "\`-R' is ignored for archives" + +      test -n "$vinfo" && \ +	func_warning "\`-version-info/-version-number' is ignored for archives" + +      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" +      ;; + +    lib) +      # Make sure we only generate libraries of the form `libNAME.la'. +      case $outputname in +      lib*) +	func_stripname 'lib' '.la' "$outputname" +	name=$func_stripname_result +	eval shared_ext=\"$shrext_cmds\" +	eval libname=\"$libname_spec\" +	;; +      *) +	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 +	  func_stripname '' '.la' "$outputname" +	  name=$func_stripname_result +	  eval shared_ext=\"$shrext_cmds\" +	  eval libname=\"$libname_spec\" +	else +	  func_stripname '' '.la' "$outputname" +	  libname=$func_stripname_result +	fi +	;; +      esac + +      if test -n "$objs"; then +	if test "$deplibs_check_method" != pass_all; then +	  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" +	fi +      fi + +      test "$dlself" != no && \ +	func_warning "\`-dlopen self' is ignored for libtool libraries" + +      set dummy $rpath +      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. +	  oldlibs="$output_objdir/$libname.$libext $oldlibs" +	  build_libtool_libs=convenience +	  build_old_libs=yes +	fi + +	test -n "$vinfo" && \ +	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + +	test -n "$release" && \ +	  func_warning "\`-release' is ignored for convenience libraries" +      else + +	# Parse the version information argument. +	save_ifs="$IFS"; IFS=':' +	set dummy $vinfo 0 0 0 +	shift +	IFS="$save_ifs" + +	test -n "$7" && \ +	  func_fatal_help "too many parameters to \`-version-info'" + +	# 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]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; +	*) +	  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]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; +	*) +	  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]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; +	*) +	  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 +	  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. +	major= +	versuffix= +	verstring= +	case $version_type in +	none) ;; + +	darwin) +	  # Like Linux, but with the current version available in +	  # verstring for coding it into the library header +	  func_arith $current - $age +	  major=.$func_arith_result +	  versuffix="$major.$age.$revision" +	  # Darwin ld doesn't like 0 for these options... +	  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" +	  ;; + +	freebsd-aout) +	  major=".$current" +	  versuffix=".$current.$revision"; +	  ;; + +	freebsd-elf) +	  major=".$current" +	  versuffix=".$current" +	  ;; + +	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" -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 `.'. +	  major=.$major +	  versuffix="$major.$revision" +	  ;; + +	linux) +	  func_arith $current - $age +	  major=.$func_arith_result +	  versuffix="$major.$age.$revision" +	  ;; + +	osf) +	  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" -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" +	  ;; + +	qnx) +	  major=".$current" +	  versuffix=".$current" +	  ;; + +	sunos) +	  major=".$current" +	  versuffix=".$current.$revision" +	  ;; + +	windows) +	  # Use '-' rather than '.', since we only want one +	  # extension on DOS 8.3 filesystems. +	  func_arith $current - $age +	  major=$func_arith_result +	  versuffix="-$major" +	  ;; + +	*) +	  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= +	  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 +	    versuffix=".0.0" +	  fi +	fi + +	# Remove version info from name if versioning should be avoided +	if test "$avoid_version" = yes && test "$need_version" = no; then +	  major= +	  versuffix= +	  verstring="" +	fi + +	# Check to see if the archive will have undefined symbols. +	if test "$allow_undefined" = yes; then +	  if test "$allow_undefined_flag" = unsupported; then +	    func_warning "undefined symbols not allowed in $host shared libraries" +	    build_libtool_libs=no +	    build_old_libs=yes +	  fi +	else +	  # Don't allow undefined symbols. +	  allow_undefined_flag="$no_undefined_flag" +	fi + +      fi + +      func_generate_dlsyms "$libname" "$libname" "yes" +      libobjs="$libobjs $symfileobj" +      test "X$libobjs" = "X " && libobjs= + +      if test "$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/*"` +	for p in $tempremovelist; do +	  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 +	       removelist="$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" + +	# Transform .lo files to .o files. +	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 "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" +	  case "$finalize_rpath " in +	  *" $libdir "*) ;; +	  *) finalize_rpath="$finalize_rpath $libdir" ;; +	  esac +	done +	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then +	  dependency_libs="$temp_xrpath $dependency_libs" +	fi +      fi + +      # Make sure dlfiles contains only unique files that won't be dlpreopened +      old_dlfiles="$dlfiles" +      dlfiles= +      for lib in $old_dlfiles; do +	case " $dlprefiles $dlfiles " in +	*" $lib "*) ;; +	*) dlfiles="$dlfiles $lib" ;; +	esac +      done + +      # Make sure dlprefiles contains only unique files +      old_dlprefiles="$dlprefiles" +      dlprefiles= +      for lib in $old_dlprefiles; do +	case "$dlprefiles " in +	*" $lib "*) ;; +	*) dlprefiles="$dlprefiles $lib" ;; +	esac +      done + +      if test "$build_libtool_libs" = yes; then +	if test -n "$rpath"; then +	  case $host in +	  *-*-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 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" +	    fi +	    ;; +	  esac +	fi + +	# Transform deplibs into only deplibs that can be linked in shared. +	name_save=$name +	libname_save=$libname +	release_save=$release +	versuffix_save=$versuffix +	major_save=$major +	# I'm not sure if I'm treating the release correctly.  I think +	# release should show up in the -l (ie -lgmp5) so we don't want to +	# add it in twice.  Is that correct? +	release="" +	versuffix="" +	major="" +	newdeplibs= +	droppeddeps=no +	case $deplibs_check_method in +	pass_all) +	  # Don't check for shared/static.  Everything works. +	  # 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 behavior. +	  newdeplibs=$deplibs +	  ;; +	test_compile) +	  # This code stresses the "libraries are programs" paradigm to its +	  # 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. +	  $opt_dry_run || $RM conftest.c +	  cat > conftest.c <<EOF +	  int main() { return 0; } +EOF +	  $opt_dry_run || $RM conftest +	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then +	    ldd_output=`ldd conftest` +	    for i in $deplibs; do +	      case $i in +	      -l*) +		func_stripname -l '' "$i" +		name=$func_stripname_result +		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then +		  case " $predeps $postdeps " in +		  *" $i "*) +		    newdeplibs="$newdeplibs $i" +		    i="" +		    ;; +		  esac +		fi +		if test -n "$i" ; then +		  libname=`eval "\\$ECHO \"$libname_spec\""` +		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` +		  set dummy $deplib_matches; shift +		  deplib_match=$1 +		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then +		    newdeplibs="$newdeplibs $i" +		  else +		    droppeddeps=yes +		    echo +		    $ECHO "*** Warning: dynamic linker does not accept needed library $i." +		    echo "*** I have the capability to make that library automatically link in when" +		    echo "*** you link to this library.  But I can only do this if you have a" +		    echo "*** shared version of the library, which I believe you do not have" +		    echo "*** because a test_compile did reveal that the linker did not use it for" +		    echo "*** its dynamic dependency list that programs get resolved with at runtime." +		  fi +		fi +		;; +	      *) +		newdeplibs="$newdeplibs $i" +		;; +	      esac +	    done +	  else +	    # Error occurred in the first compile.  Let's try to salvage +	    # the situation: Compile a separate program for each library. +	    for i in $deplibs; do +	      case $i in +	      -l*) +		func_stripname -l '' "$i" +		name=$func_stripname_result +		$opt_dry_run || $RM conftest +		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then +		  ldd_output=`ldd conftest` +		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then +		    case " $predeps $postdeps " in +		    *" $i "*) +		      newdeplibs="$newdeplibs $i" +		      i="" +		      ;; +		    esac +		  fi +		  if test -n "$i" ; then +		    libname=`eval "\\$ECHO \"$libname_spec\""` +		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` +		    set dummy $deplib_matches; shift +		    deplib_match=$1 +		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then +		      newdeplibs="$newdeplibs $i" +		    else +		      droppeddeps=yes +		      echo +		      $ECHO "*** Warning: dynamic linker does not accept needed library $i." +		      echo "*** I have the capability to make that library automatically link in when" +		      echo "*** you link to this library.  But I can only do this if you have a" +		      echo "*** shared version of the library, which you do not appear to have" +		      echo "*** because a test_compile did reveal that the linker did not use this one" +		      echo "*** as a dynamic dependency that programs can get resolved with at runtime." +		    fi +		  fi +		else +		  droppeddeps=yes +		  echo +		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to" +		  echo "*** make it link in!  You will probably need to install it or some" +		  echo "*** library that it depends on before this library will be fully" +		  echo "*** functional.  Installing it before continuing would be even better." +		fi +		;; +	      *) +		newdeplibs="$newdeplibs $i" +		;; +	      esac +	    done +	  fi +	  ;; +	file_magic*) +	  set dummy $deplibs_check_method; shift +	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` +	  for a_deplib in $deplibs; 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 "*) +		  newdeplibs="$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 +		      # Follow soft links. +		      if ls -lLd "$potent_lib" 2>/dev/null | +			 $GREP " -> " >/dev/null; then +			continue +		      fi +		      # The statement above tries to avoid entering an +		      # endless loop below, in case of cyclic links. +		      # We might still enter an endless loop, since a link +		      # loop can be closed while we follow links, +		      # but so what? +		      potlib="$potent_lib" +		      while test -h "$potlib" 2>/dev/null; do +			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` +			case $potliblink in +			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; +			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; +			esac +		      done +		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | +			 $SED -e 10q | +			 $EGREP "$file_magic_regex" > /dev/null; then +			newdeplibs="$newdeplibs $a_deplib" +			a_deplib="" +			break 2 +		      fi +		  done +		done +	      fi +	      if test -n "$a_deplib" ; then +		droppeddeps=yes +		echo +		$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 "*** 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 +	      ;; +	    *) +	      # Add a -L argument. +	      newdeplibs="$newdeplibs $a_deplib" +	      ;; +	    esac +	  done # Gone through all deplibs. +	  ;; +	match_pattern*) +	  set dummy $deplibs_check_method; shift +	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` +	  for a_deplib in $deplibs; 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 "*) +		  newdeplibs="$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 +		      newdeplibs="$newdeplibs $a_deplib" +		      a_deplib="" +		      break 2 +		    fi +		  done +		done +	      fi +	      if test -n "$a_deplib" ; then +		droppeddeps=yes +		echo +		$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 "*** 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 +	      ;; +	    *) +	      # Add a -L argument. +	      newdeplibs="$newdeplibs $a_deplib" +	      ;; +	    esac +	  done # Gone through all deplibs. +	  ;; +	none | unknown | *) +	  newdeplibs="" +	  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." +	    else +	      echo "*** Warning: inter-library dependencies are not known to be supported." +	    fi +	    echo "*** All declared inter-library dependencies are being dropped." +	    droppeddeps=yes +	    ;; +	  esac +	  ;; +	esac +	versuffix=$versuffix_save +	major=$major_save +	release=$release_save +	libname=$libname_save +	name=$name_save + +	case $host in +	*-*-rhapsody* | *-*-darwin1.[012]) +	  # On Rhapsody replace the C library with the System framework +	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` +	  ;; +	esac + +	if test "$droppeddeps" = yes; then +	  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 "*** 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 +	      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 +	      oldlibs="$output_objdir/$libname.$libext" +	      build_libtool_libs=module +	      build_old_libs=yes +	    else +	      build_libtool_libs=no +	    fi +	  else +	    echo "*** The inter-library dependencies that have been dropped here will be" +	    echo "*** automatically added whenever a program is linked with this library" +	    echo "*** or is declared to -dlopen it." + +	    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" +	      echo "*** it was explicitly requested with -no-undefined," +	      echo "*** libtool will only create a static version of it." +	      if test "$build_old_libs" = no; then +		oldlibs="$output_objdir/$libname.$libext" +		build_libtool_libs=module +		build_old_libs=yes +	      else +		build_libtool_libs=no +	      fi +	    fi +	  fi +	fi +	# 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 "*) +	    new_libs="$new_libs -L$path/$objdir" ;; +	  esac +	  ;; +	esac +      done +      for deplib in $deplibs; do +	case $deplib in +	-L*) +	  case " $new_libs " in +	  *" $deplib "*) ;; +	  *) new_libs="$new_libs $deplib" ;; +	  esac +	  ;; +	*) new_libs="$new_libs $deplib" ;; +	esac +      done +      deplibs="$new_libs" + +      # All the library-specific variables (install_libdir is set above). +      library_names= +      old_library= +      dlname= + +      # 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 +	  # Hardcode the library paths +	  hardcode_libdirs= +	  dep_rpath= +	  rpath="$finalize_rpath" +	  test "$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 +		if test -z "$hardcode_libdirs"; then +		  hardcode_libdirs="$libdir" +		else +		  # Just accumulate the unique libdirs. +		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in +		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) +		    ;; +		  *) +		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" +		    ;; +		  esac +		fi +	      else +		eval flag=\"$hardcode_libdir_flag_spec\" +		dep_rpath="$dep_rpath $flag" +	      fi +	    elif test -n "$runpath_var"; then +	      case "$perm_rpath " in +	      *" $libdir "*) ;; +	      *) perm_rpath="$perm_rpath $libdir" ;; +	      esac +	    fi +	  done +	  # Substitute the hardcoded libdirs into the rpath. +	  if test -n "$hardcode_libdir_separator" && +	     test -n "$hardcode_libdirs"; then +	    libdir="$hardcode_libdirs" +	    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:" +	    done +	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" +	  fi +	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" +	fi + +	shlibpath="$finalize_shlibpath" +	test "$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 +	shift +	realname="$1" +	shift + +	if test -n "$soname_spec"; then +	  eval soname=\"$soname_spec\" +	else +	  soname="$realname" +	fi +	if test -z "$dlname"; then +	  dlname=$soname +	fi + +	lib="$output_objdir/$realname" +	linknames= +	for link +	do +	  linknames="$linknames $link" +	done + +	# Use standard objects if they are pic +	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" +	  delfiles="$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 +	    func_verbose "generating symbol list for \`$libname.la'" +	    export_symbols="$output_objdir/$libname.exp" +	    $opt_dry_run || $RM $export_symbols +	    cmds=$export_symbols_cmds +	    save_ifs="$IFS"; IFS='~' +	    for cmd in $cmds; do +	      IFS="$save_ifs" +	      eval cmd=\"$cmd\" +	      func_len " $cmd" +	      len=$func_len_result +	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then +		func_show_eval "$cmd" 'exit $?' +		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" && 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 +	  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 +	  delfiles="$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 "*) ;; +	  *) +	    tmp_deplibs="$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" +	    generated="$generated $gentop" + +	    func_extract_archives $gentop $convenience +	    libobjs="$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" +	fi + +	# Make a backup of the uninstalled library when relinking +	if test "$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 "$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 +	  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 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 +	  # want to use save_libobjs as it was before +	  # whole_archive_flag_spec was expanded, because we can't +	  # assume the linker understands whole_archive_flag_spec. +	  # This may have to be revisited, in case too many +	  # convenience libraries get linked in and end up exceeding +	  # the spec. +	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then +	    save_libobjs=$libobjs +	  fi +	  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= +	  last_robj= +	  k=1 + +	  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 +	      $ECHO "$obj" >> $output +	    done +	    echo ')' >> $output +	    delfiles="$delfiles $output" +	  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 +	      $ECHO "$obj" >> $output +	    done +	    delfiles="$delfiles $output" +	    output=$firstobj\"$file_list_spec$output\" +	  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 + +	      # 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 +	      delfiles="$delfiles $output" + +	    else +	      output= +	    fi + +	    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 "$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 +	      delfiles="$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 + +	  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 "$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 + +	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" +	  generated="$generated $gentop" + +	  func_extract_archives $gentop $dlprefiles +	  libobjs="$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 "$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 +	  $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 +	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' +	  fi +	done + +	# If -module or -export-dynamic was specified, set the dlname. +	if test "$module" = yes || test "$export_dynamic" = yes; then +	  # On all known operating systems, these are identical. +	  dlname="$soname" +	fi +      fi +      ;; + +    obj) +      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then +	func_warning "\`-dlopen' is ignored for objects" +      fi + +      case " $deplibs" in +      *\ -l* | *\ -L*) +	func_warning "\`-l' and \`-L' are ignored for objects" ;; +      esac + +      test -n "$rpath" && \ +	func_warning "\`-rpath' is ignored for objects" + +      test -n "$xrpath" && \ +	func_warning "\`-R' is ignored for objects" + +      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) +	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= +	obj="$output" +	;; +      esac + +      # Delete the old objects. +      $opt_dry_run || $RM $obj $libobj + +      # Objects from convenience libraries.  This assumes +      # single-version convenience libraries.  Whenever we create +      # different ones for PIC/non-PIC, this we'll have to duplicate +      # the extraction. +      reload_conv_objs= +      gentop= +      # reload_cmds runs $LD directly, so let us get rid of +      # -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 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" +	  generated="$generated $gentop" + +	  func_extract_archives $gentop $convenience +	  reload_conv_objs="$reload_objs $func_extract_archives_result" +	fi +      fi + +      # Create the old-style object. +      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" +      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 +	  func_show_eval '${RM}r "$gentop"' +	fi + +	exit $EXIT_SUCCESS +      fi + +      if test "$build_libtool_libs" != yes; then +	if test -n "$gentop"; then +	  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" +	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $? +	exit $EXIT_SUCCESS +      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" +	func_execute_cmds "$reload_cmds" 'exit $?' +      fi + +      if test -n "$gentop"; then +	func_show_eval '${RM}r "$gentop"' +      fi + +      exit $EXIT_SUCCESS +      ;; + +    prog) +      case $host in +	*cygwin*) func_stripname '' '.exe' "$output" +	          output=$func_stripname_result.exe;; +      esac +      test -n "$vinfo" && \ +	func_warning "\`-version-info' is ignored for programs" + +      test -n "$release" && \ +	func_warning "\`-release' is ignored for programs" + +      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." + +      case $host in +      *-*-rhapsody* | *-*-darwin1.[012]) +	# On Rhapsody replace the C library is the System framework +	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` +	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` +	;; +      esac + +      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]) +	      compile_command="$compile_command ${wl}-bind_at_load" +	      finalize_command="$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 "*) +	    new_libs="$new_libs -L$path/$objdir" ;; +	  esac +	  ;; +	esac +      done +      for deplib in $compile_deplibs; do +	case $deplib in +	-L*) +	  case " $new_libs " in +	  *" $deplib "*) ;; +	  *) new_libs="$new_libs $deplib" ;; +	  esac +	  ;; +	*) new_libs="$new_libs $deplib" ;; +	esac +      done +      compile_deplibs="$new_libs" + + +      compile_command="$compile_command $compile_deplibs" +      finalize_command="$finalize_command $finalize_deplibs" + +      if test -n "$rpath$xrpath"; then +	# If the user specified any rpath flags, then add them. +	for libdir in $rpath $xrpath; do +	  # This is the magic to use -rpath. +	  case "$finalize_rpath " in +	  *" $libdir "*) ;; +	  *) finalize_rpath="$finalize_rpath $libdir" ;; +	  esac +	done +      fi + +      # Now hardcode the library paths +      rpath= +      hardcode_libdirs= +      for libdir in $compile_rpath $finalize_rpath; do +	if test -n "$hardcode_libdir_flag_spec"; then +	  if test -n "$hardcode_libdir_separator"; then +	    if test -z "$hardcode_libdirs"; then +	      hardcode_libdirs="$libdir" +	    else +	      # Just accumulate the unique libdirs. +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in +	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) +		;; +	      *) +		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" +		;; +	      esac +	    fi +	  else +	    eval flag=\"$hardcode_libdir_flag_spec\" +	    rpath="$rpath $flag" +	  fi +	elif test -n "$runpath_var"; then +	  case "$perm_rpath " in +	  *" $libdir "*) ;; +	  *) perm_rpath="$perm_rpath $libdir" ;; +	  esac +	fi +	case $host in +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) +	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` +	  case :$dllsearchpath: in +	  *":$libdir:"*) ;; +	  ::) dllsearchpath=$libdir;; +	  *) dllsearchpath="$dllsearchpath:$libdir";; +	  esac +	  case :$dllsearchpath: in +	  *":$testbindir:"*) ;; +	  ::) dllsearchpath=$testbindir;; +	  *) dllsearchpath="$dllsearchpath:$testbindir";; +	  esac +	  ;; +	esac +      done +      # Substitute the hardcoded libdirs into the rpath. +      if test -n "$hardcode_libdir_separator" && +	 test -n "$hardcode_libdirs"; then +	libdir="$hardcode_libdirs" +	eval rpath=\" $hardcode_libdir_flag_spec\" +      fi +      compile_rpath="$rpath" + +      rpath= +      hardcode_libdirs= +      for libdir in $finalize_rpath; do +	if test -n "$hardcode_libdir_flag_spec"; then +	  if test -n "$hardcode_libdir_separator"; then +	    if test -z "$hardcode_libdirs"; then +	      hardcode_libdirs="$libdir" +	    else +	      # Just accumulate the unique libdirs. +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in +	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) +		;; +	      *) +		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" +		;; +	      esac +	    fi +	  else +	    eval flag=\"$hardcode_libdir_flag_spec\" +	    rpath="$rpath $flag" +	  fi +	elif test -n "$runpath_var"; then +	  case "$finalize_perm_rpath " in +	  *" $libdir "*) ;; +	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; +	  esac +	fi +      done +      # Substitute the hardcoded libdirs into the rpath. +      if test -n "$hardcode_libdir_separator" && +	 test -n "$hardcode_libdirs"; then +	libdir="$hardcode_libdirs" +	eval rpath=\" $hardcode_libdir_flag_spec\" +      fi +      finalize_rpath="$rpath" + +      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 + +      func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + +      # template prelinking step +      if test -n "$prelink_cmds"; then +	func_execute_cmds "$prelink_cmds" 'exit $?' +      fi + +      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 "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` +	link_command="$compile_command$compile_rpath" + +	# We have no uninstalled library dependencies, so finalize right now. +	exit_status=0 +	func_show_eval "$link_command" 'exit_status=$?' + +	# Delete the generated files. +	if test -f "$output_objdir/${outputname}S.${objext}"; then +	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' +	fi + +	exit $exit_status +      fi + +      if test -n "$compile_shlibpath$finalize_shlibpath"; then +	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" +      fi +      if test -n "$finalize_shlibpath"; then +	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" +      fi + +      compile_var= +      finalize_var= +      if test -n "$runpath_var"; then +	if test -n "$perm_rpath"; then +	  # We should set the runpath_var. +	  rpath= +	  for dir in $perm_rpath; do +	    rpath="$rpath$dir:" +	  done +	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" " +	fi +	if test -n "$finalize_perm_rpath"; then +	  # We should set the runpath_var. +	  rpath= +	  for dir in $finalize_perm_rpath; do +	    rpath="$rpath$dir:" +	  done +	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " +	fi +      fi + +      if test "$no_install" = yes; then +	# 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 "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` +	# Delete the old output file. +	$opt_dry_run || $RM $output +	# Link the executable and exit +	func_show_eval "$link_command" 'exit $?' +	exit $EXIT_SUCCESS +      fi + +      if test "$hardcode_action" = relink; then +	# Fast installation is not supported +	link_command="$compile_var$compile_command$compile_rpath" +	relink_command="$finalize_var$finalize_command$finalize_rpath" + +	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 "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` +	  else +	    # fast_install is set to needless +	    relink_command= +	  fi +	else +	  link_command="$compile_var$compile_command$compile_rpath" +	  relink_command="$finalize_var$finalize_command$finalize_rpath" +	fi +      fi + +      # Replace the output file specification. +      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + +      # Delete the old output files. +      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + +      func_show_eval "$link_command" 'exit $?' + +      # Now create the wrapper script. +      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}\" || $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 +	    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 "$relink_command" | $SED "$sed_quote_subst"` +      fi + +      # 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) 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 +	    func_stripname '' '.exe' "$outputname" +	    outputname=$func_stripname_result ;; +	  *) exeext= ;; +	esac +	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 + +	    func_emit_cwrapperexe_src > $cwrappersource + +	    # 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 +	    } + +	    # 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 + +	    func_emit_wrapper no > $output +	    chmod +x $output +	  ;; +	esac +      } +      exit $EXIT_SUCCESS +      ;; +    esac + +    # See if we need to build an old-fashioned archive. +    for oldlib in $oldlibs; do + +      if test "$build_libtool_libs" = convenience; then +	oldobjs="$libobjs_save $symfileobj" +	addlibs="$convenience" +	build_libtool_libs=no +      else +	if test "$build_libtool_libs" = module; then +	  oldobjs="$libobjs_save" +	  build_libtool_libs=no +	else +	  oldobjs="$old_deplibs $non_pic_objects" +	  if test "$preload" = yes && test -f "$symfileobj"; then +	    oldobjs="$oldobjs $symfileobj" +	  fi +	fi +	addlibs="$old_convenience" +      fi + +      if test -n "$addlibs"; then +	gentop="$output_objdir/${outputname}x" +	generated="$generated $gentop" + +	func_extract_archives $gentop $addlibs +	oldobjs="$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 +	cmds=$old_archive_from_new_cmds +      else + +	# Add any objects from preloaded convenience libraries +	if test -n "$dlprefiles"; then +	  gentop="$output_objdir/${outputname}x" +	  generated="$generated $gentop" + +	  func_extract_archives $gentop $dlprefiles +	  oldobjs="$oldobjs $func_extract_archives_result" +	fi + +	# 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" +	  generated="$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" +	      oldobjs="$oldobjs $gentop/$newobj" +	      ;; +	    *) oldobjs="$oldobjs $obj" ;; +	    esac +	  done +	fi +	eval cmds=\"$old_archive_cmds\" + +	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 +	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 +	  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= +	      len=$len0 +	    fi +	  done +	  RANLIB=$save_RANLIB +	  oldobjs=$objlist +	  if test "X$oldobjs" = "X" ; then +	    eval cmds=\"\$concat_cmds\" +	  else +	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\" +	  fi +	fi +      fi +      func_execute_cmds "$cmds" 'exit $?' +    done + +    test -n "$generated" && \ +      func_show_eval "${RM}r$generated" + +    # Now create the libtool archive. +    case $output in +    *.la) +      old_library= +      test "$build_old_libs" = yes && old_library="$libname.$libext" +      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}\" || $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 +	  func_quote_for_eval "$var_value" +	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" +	fi +      done +      # Quote the link command for shipping. +      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 + +      # Only create the output if not a dry run. +      $opt_dry_run || { +	for installed in no yes; do +	  if test "$installed" = yes; then +	    if test -z "$install_libdir"; then +	      break +	    fi +	    output="$output_objdir/$outputname"i +	    # Replace all uninstalled libtool libraries with the installed ones +	    newdependency_libs= +	    for deplib in $dependency_libs; do +	      case $deplib in +	      *.la) +		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" +		newdependency_libs="$newdependency_libs $libdir/$name" +		;; +	      *) newdependency_libs="$newdependency_libs $deplib" ;; +	      esac +	    done +	    dependency_libs="$newdependency_libs" +	    newdlfiles= + +	    for lib in $dlfiles; do +	      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" +		newdlfiles="$newdlfiles $libdir/$name" +		;; +	      *) newdlfiles="$newdlfiles $lib" ;; +	      esac +	    done +	    dlfiles="$newdlfiles" +	    newdlprefiles= +	    for lib in $dlprefiles; do +	      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" +		newdlprefiles="$newdlprefiles $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 +	      newdlfiles="$newdlfiles $abs" +	    done +	    dlfiles="$newdlfiles" +	    newdlprefiles= +	    for lib in $dlprefiles; do +	      case $lib in +		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; +		*) abs=`pwd`"/$lib" ;; +	      esac +	      newdlprefiles="$newdlprefiles $abs" +	    done +	    dlprefiles="$newdlprefiles" +	  fi +	  $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 | *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 "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# 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 "\ +relink_command=\"$relink_command\"" +	  fi +	done +      } + +      # Do a symbolic link so that the libtool archive can be found in +      # LD_LIBRARY_PATH before the program is installed. +      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' +      ;; +    esac +    exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && +    func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ +    $opt_debug +    RM="$nonopt" +    files= +    rmforce= +    exit_status=0 + +    # This variable tells wrapper scripts just to set variables rather +    # than running their programs. +    libtool_install_magic="$magic" + +    for arg +    do +      case $arg in +      -f) RM="$RM $arg"; rmforce=yes ;; +      -*) RM="$RM $arg" ;; +      *) files="$files $arg" ;; +      esac +    done + +    test -z "$RM" && \ +      func_fatal_help "you must specify an RM program" + +    rmdirs= + +    origobjdir="$objdir" +    for file in $files; do +      func_dirname "$file" "" "." +      dir="$func_dirname_result" +      if test "X$dir" = X.; then +	objdir="$origobjdir" +      else +	objdir="$dir/$origobjdir" +      fi +      func_basename "$file" +      name="$func_basename_result" +      test "$mode" = uninstall && objdir="$dir" + +      # Remember objdir for removal later, being careful to avoid duplicates +      if test "$mode" = clean; then +	case " $rmdirs " in +	  *" $objdir "*) ;; +	  *) rmdirs="$rmdirs $objdir" ;; +	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 +	: +      elif test -d "$file"; then +	exit_status=1 +	continue +      elif test "$rmforce" = yes; then +	continue +      fi + +      rmfiles="$file" + +      case $name in +      *.la) +	# Possibly a libtool archive, so verify it. +	if func_lalib_p "$file"; then +	  func_source $dir/$name + +	  # Delete the libtool libraries and symlinks. +	  for n in $library_names; do +	    rmfiles="$rmfiles $objdir/$n" +	  done +	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + +	  case "$mode" in +	  clean) +	    case "  $library_names " in +	    # "  " in the beginning catches empty $dlname +	    *" $dlname "*) ;; +	    *) rmfiles="$rmfiles $objdir/$dlname" ;; +	    esac +	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" +	    ;; +	  uninstall) +	    if test -n "$library_names"; then +	      # Do each command in the postuninstall commands. +	      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. +	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' +	    fi +	    # FIXME: should reinstall the best remaining shared library. +	    ;; +	  esac +	fi +	;; + +      *.lo) +	# Possibly a libtool object, so verify it. +	if func_lalib_p "$file"; then + +	  # Read the .lo file +	  func_source $dir/$name + +	  # 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 + +	  # 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 +	fi +	;; + +      *) +	if test "$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 +	    rmfiles="$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 +	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result" +	    else +	      relink_command= +	      func_source $dir/$noexename +	    fi + +	    # note $name still contains .exe if it was in $file originally +	    # as does the version of $file that was added into $rmfiles +	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" +	    if test "$fast_install" = yes && test -n "$relink_command"; then +	      rmfiles="$rmfiles $objdir/lt-$name" +	    fi +	    if test "X$noexename" != "X$name" ; then +	      rmfiles="$rmfiles $objdir/lt-${noexename}.c" +	    fi +	  fi +	fi +	;; +      esac +      func_show_eval "$RM $rmfiles" 'exit_status=1' +    done +    objdir="$origobjdir" + +    # Try to remove the ${objdir}s in the directories where we deleted files +    for dir in $rmdirs; do +      if test -d "$dir"; then +	func_show_eval "rmdir $dir >/dev/null 2>&1" +      fi +    done + +    exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && +    func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { +  help="$generic_help" +  func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ +  func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then +  eval exec "$exec_cmd" +  exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries.  Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them.  This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# 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. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### 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 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/aux-build/missing b/aux-build/missing new file mode 100755 index 0000000..e7ef83a --- /dev/null +++ b/aux-build/missing @@ -0,0 +1,360 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2003-09-02.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003  +#   Free Software Foundation, Inc. +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then +  echo 1>&2 "Try \`$0 --help' for more information" +  exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then +  configure_ac=configure.ac +else +  configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) +  # Try to run requested program, and just exit if it succeeds. +  run= +  shift +  "$@" && exit 0 +  # Exit code 63 means version mismatch.  This often happens +  # when the user try to use an ancient version of a tool on +  # a file that requires a minimum version.  In this case we +  # we should proceed has if the program had been absent, or +  # if --run hadn't been passed. +  if test $? = 63; then +    run=: +    msg="probably too old" +  fi +  ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + +  -h|--h|--he|--hel|--help) +    echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: +  -h, --help      display this help and exit +  -v, --version   output version information and exit +  --run           try to run the given command, and emulate it if it fails + +Supported PROGRAM values: +  aclocal      touch file \`aclocal.m4' +  autoconf     touch file \`configure' +  autoheader   touch file \`config.h.in' +  automake     touch all \`Makefile.in' files +  bison        create \`y.tab.[ch]', if possible, from existing .[ch] +  flex         create \`lex.yy.c', if possible, from existing .c +  help2man     touch the output file +  lex          create \`lex.yy.c', if possible, from existing .c +  makeinfo     touch the output file +  tar          try tar, gnutar, gtar, then tar without non-portable flags +  yacc         create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to <bug-automake@gnu.org>." +    ;; + +  -v|--v|--ve|--ver|--vers|--versi|--versio|--version) +    echo "missing $scriptversion (GNU Automake)" +    ;; + +  -*) +    echo 1>&2 "$0: Unknown \`$1' option" +    echo 1>&2 "Try \`$0 --help' for more information" +    exit 1 +    ;; + +  aclocal*) +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then +       # We have it, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want +         to install the \`Automake' and \`Perl' packages.  Grab them from +         any GNU archive site." +    touch aclocal.m4 +    ;; + +  autoconf) +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then +       # We have it, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +         you modified \`${configure_ac}'.  You might want to install the +         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU +         archive site." +    touch configure +    ;; + +  autoheader) +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then +       # We have it, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +         you modified \`acconfig.h' or \`${configure_ac}'.  You might want +         to install the \`Autoconf' and \`GNU m4' packages.  Grab them +         from any GNU archive site." +    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` +    test -z "$files" && files="config.h" +    touch_files= +    for f in $files; do +      case "$f" in +      *:*) touch_files="$touch_files "`echo "$f" | +				       sed -e 's/^[^:]*://' -e 's/:.*//'`;; +      *) touch_files="$touch_files $f.in";; +      esac +    done +    touch $touch_files +    ;; + +  automake*) +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then +       # We have it, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. +         You might want to install the \`Automake' and \`Perl' packages. +         Grab them from any GNU archive site." +    find . -type f -name Makefile.am -print | +	   sed 's/\.am$/.in/' | +	   while read f; do touch "$f"; done +    ;; + +  autom4te) +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then +       # We have it, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. +         You might have modified some files without having the +         proper tools for further handling them. +         You can get \`$1' as part of \`Autoconf' from any GNU +         archive site." + +    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` +    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` +    if test -f "$file"; then +	touch $file +    else +	test -z "$file" || exec >$file +	echo "#! /bin/sh" +	echo "# Created by GNU Automake missing as a replacement of" +	echo "#  $ $@" +	echo "exit 0" +	chmod +x $file +	exit 1 +    fi +    ;; + +  bison|yacc) +    echo 1>&2 "\ +WARNING: \`$1' $msg.  You should only need it if +         you modified a \`.y' file.  You may need the \`Bison' package +         in order for those modifications to take effect.  You can get +         \`Bison' from any GNU archive site." +    rm -f y.tab.c y.tab.h +    if [ $# -ne 1 ]; then +        eval LASTARG="\${$#}" +	case "$LASTARG" in +	*.y) +	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` +	    if [ -f "$SRCFILE" ]; then +	         cp "$SRCFILE" y.tab.c +	    fi +	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` +	    if [ -f "$SRCFILE" ]; then +	         cp "$SRCFILE" y.tab.h +	    fi +	  ;; +	esac +    fi +    if [ ! -f y.tab.h ]; then +	echo >y.tab.h +    fi +    if [ ! -f y.tab.c ]; then +	echo 'main() { return 0; }' >y.tab.c +    fi +    ;; + +  lex|flex) +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +         you modified a \`.l' file.  You may need the \`Flex' package +         in order for those modifications to take effect.  You can get +         \`Flex' from any GNU archive site." +    rm -f lex.yy.c +    if [ $# -ne 1 ]; then +        eval LASTARG="\${$#}" +	case "$LASTARG" in +	*.l) +	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` +	    if [ -f "$SRCFILE" ]; then +	         cp "$SRCFILE" lex.yy.c +	    fi +	  ;; +	esac +    fi +    if [ ! -f lex.yy.c ]; then +	echo 'main() { return 0; }' >lex.yy.c +    fi +    ;; + +  help2man) +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then +       # We have it, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +	 you modified a dependency of a manual page.  You may need the +	 \`Help2man' package in order for those modifications to take +	 effect.  You can get \`Help2man' from any GNU archive site." + +    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` +    if test -z "$file"; then +	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` +    fi +    if [ -f "$file" ]; then +	touch $file +    else +	test -z "$file" || exec >$file +	echo ".ab help2man is required to generate this page" +	exit 1 +    fi +    ;; + +  makeinfo) +    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then +       # We have makeinfo, but it failed. +       exit 1 +    fi + +    echo 1>&2 "\ +WARNING: \`$1' is $msg.  You should only need it if +         you modified a \`.texi' or \`.texinfo' file, or any other file +         indirectly affecting the aspect of the manual.  The spurious +         call might also be the consequence of using a buggy \`make' (AIX, +         DU, IRIX).  You might want to install the \`Texinfo' package or +         the \`GNU make' package.  Grab either from any GNU archive site." +    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` +    if test -z "$file"; then +      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` +      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` +    fi +    touch $file +    ;; + +  tar) +    shift +    if test -n "$run"; then +      echo 1>&2 "ERROR: \`tar' requires --run" +      exit 1 +    fi + +    # We have already tried tar in the generic part. +    # Look for gnutar/gtar before invocation to avoid ugly error +    # messages. +    if (gnutar --version > /dev/null 2>&1); then +       gnutar "$@" && exit 0 +    fi +    if (gtar --version > /dev/null 2>&1); then +       gtar "$@" && exit 0 +    fi +    firstarg="$1" +    if shift; then +	case "$firstarg" in +	*o*) +	    firstarg=`echo "$firstarg" | sed s/o//` +	    tar "$firstarg" "$@" && exit 0 +	    ;; +	esac +	case "$firstarg" in +	*h*) +	    firstarg=`echo "$firstarg" | sed s/h//` +	    tar "$firstarg" "$@" && exit 0 +	    ;; +	esac +    fi + +    echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. +         You may want to install GNU tar or Free paxutils, or check the +         command line arguments." +    exit 1 +    ;; + +  *) +    echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. +         You might have modified some files without having the +         proper tools for further handling them.  Check the \`README' file, +         it often tells you about the needed prerequisites for installing +         this package.  You may also peek at any GNU archive site, in case +         some other package would contain this missing \`$1' program." +    exit 1 +    ;; +esac + +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-end: "$" +# End: diff --git a/aux-build/mkinstalldirs b/aux-build/mkinstalldirs new file mode 100755 index 0000000..5d26a48 --- /dev/null +++ b/aux-build/mkinstalldirs @@ -0,0 +1,150 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2005-02-02.21 + +# Original author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to <bug-automake@gnu.org>." + +# process command line arguments +while test $# -gt 0 ; do +  case $1 in +    -h | --help | --h*)         # -h for help +      echo "$usage" +      exit $? +      ;; +    -m)                         # -m PERM arg +      shift +      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } +      dirmode=$1 +      shift +      ;; +    --version) +      echo "$0 $scriptversion" +      exit $? +      ;; +    --)                         # stop option processing +      shift +      break +      ;; +    -*)                         # unknown option +      echo "$usage" 1>&2 +      exit 1 +      ;; +    *)                          # first non-opt arg +      break +      ;; +  esac +done + +for file +do +  if test -d "$file"; then +    shift +  else +    break +  fi +done + +case $# in +  0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error.  This is a problem when calling mkinstalldirs +# from a parallel make.  We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in +  '') +    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then +      echo "mkdir -p -- $*" +      exec mkdir -p -- "$@" +    else +      # On NextStep and OpenStep, the `mkdir' command does not +      # recognize any option.  It will interpret all options as +      # directories to create, and then abort because `.' already +      # exists. +      test -d ./-p && rmdir ./-p +      test -d ./--version && rmdir ./--version +    fi +    ;; +  *) +    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && +       test ! -d ./--version; then +      echo "mkdir -m $dirmode -p -- $*" +      exec mkdir -m "$dirmode" -p -- "$@" +    else +      # Clean up after NextStep and OpenStep mkdir. +      for d in ./-m ./-p ./--version "./$dirmode"; +      do +        test -d $d && rmdir $d +      done +    fi +    ;; +esac + +for file +do +  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` +  shift + +  pathcomp= +  for d +  do +    pathcomp="$pathcomp$d" +    case $pathcomp in +      -*) pathcomp=./$pathcomp ;; +    esac + +    if test ! -d "$pathcomp"; then +      echo "mkdir $pathcomp" + +      mkdir "$pathcomp" || lasterr=$? + +      if test ! -d "$pathcomp"; then +	errstatus=$lasterr +      else +	if test ! -z "$dirmode"; then +	  echo "chmod $dirmode $pathcomp" +	  lasterr="" +	  chmod "$dirmode" "$pathcomp" || lasterr=$? + +	  if test ! -z "$lasterr"; then +	    errstatus=$lasterr +	  fi +	fi +      fi +    fi + +    pathcomp="$pathcomp/" +  done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/aux-build/texinfo.tex b/aux-build/texinfo.tex new file mode 100644 index 0000000..c93912a --- /dev/null +++ b/aux-build/texinfo.tex @@ -0,0 +1,7086 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2004-11-25.16} +% +% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software +% Foundation, Inc. +% +% 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. +% +% This texinfo.tex file 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 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. +% +% 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: +%   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. +% +% Send bug reports to bug-texinfo@gnu.org.  Please include including a +% complete document in each bug report with which we can reproduce the +% problem.  Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution.  For a simple +% manual foo.texi, however, you can get away with this: +%   tex foo.texi +%   texindex foo.?? +%   tex foo.texi +%   tex foo.texi +%   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, 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]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% +  \catcode`+=\active \catcode`\_=\active} + +\message{Basics,} +\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 +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\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 + +% 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 +\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined        \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined        \gdef\putwordof{of}\fi +\ifx\putwordon\undefined        \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi + +% In some macros, we cannot use the `\? notation---the left quote is +% in some cases the escape char. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dotChar   = `\. +\chardef\exclamChar= `\! +\chardef\questChar = `\? +\chardef\semiChar  = `\; +\chardef\underChar = `\_ + +\chardef\spaceChar = `\ % +\chardef\spacecat = 10 +\def\spaceisspace{\catcode\spaceChar=\spacecat} + +% Ignore a token. +% +\def\gobble#1{} + +% 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\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.  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}% +\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 +}% + +% 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. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong  \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument.  Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% +  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi +  % +  \ifodd\pageno  \advance\hoffset by \bindingoffset +  \else \advance\hoffset by -\bindingoffset\fi +  % +  % Do this outside of the \shipout so @code etc. will be expanded in +  % the headline as they should be, not taken literally (outputting ''code). +  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% +  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% +  % +  {% +    % Have to do this stuff outside the \shipout because we want it to +    % 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. +    \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 +        \vtop to0pt{% +          \line{\ewtop\hfil\ewtop}% +          \nointerlineskip +          \line{% +            \vbox{\moveleft\cornerthick\nstop}% +            \hfill +            \vbox{\moveright\cornerthick\nstop}% +          }% +          \vss}% +        \vskip\topandbottommargin +        \line\bgroup +          \hfil % center the page within the outer (page) hsize. +          \ifodd\pageno\hskip\bindingoffset\fi +          \vbox\bgroup +      \fi +      % +      \unvbox\headlinebox +      \pagebody{#1}% +      \ifdim\ht\footlinebox > 0pt +        % Only leave this space if the footline is nonempty. +        % (We lessened \vsize for it in \oddfootingxxx.) +        % The \baselineskip=24pt in plain's \makefootline has no effect. +        \vskip 2\baselineskip +        \unvbox\footlinebox +      \fi +      % +      \ifcropmarks +          \egroup % end of \vbox\bgroup +        \hfil\egroup % end of (centering) \line\bgroup +        \vskip\topandbottommargin plus1fill minus1fill +        \boxmaxdepth = \cornerthick +        \vbox to0pt{\vss +          \line{% +            \vbox{\moveleft\cornerthick\nsbot}% +            \hfill +            \vbox{\moveright\cornerthick\nsbot}% +          }% +          \nointerlineskip +          \line{\ewbot\hfil\ewbot}% +        }% +      \egroup % \vbox from first cropmarks clause +      \fi +    }% end of \shipout\vbox +  }% end of group with \normalturnoffactive +  \advancepageno +  \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% 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 +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks.  Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox +  {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox +  {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1.  The argument is the rest of +% the input line (except we remove a trailing comment).  #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% +  \def\next{#2}% +  \begingroup +    \obeylines +    \spaceisspace +    #1% +    \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % +  \gdef\parseargline#1^^M{% +    \endgroup % End of the group started in \parsearg. +    \argremovecomment #1\comment\ArgTerm% +  }% +} + +% 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} + +% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space. +% +% \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\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 +    % We cannot use \next here, as it holds the macro to run; +    % thus we reuse \temp. +    \let\temp\finishparsearg +  \else +    \let\temp\argcheckspaces +  \fi +  % Put the space token in: +  \temp#1 #3\ArgTerm +} + +% 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 \next. +% (Similarily, 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. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\next\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: +{ +  \obeyspaces +  \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} + +% 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 enviroments; they don't open a group.  (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At runtime, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... 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}} + +% Check whether we're in the right environment: +\def\checkenv#1{% +  \def\temp{#1}% +  \ifx\thisenv\temp +  \else +    \badenverr +  \fi +} + +% Evironment mismatch, #1 expected: +\def\badenverr{% +  \errhelp = \EMsimple +  \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 +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\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 +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup +  % Definitions to produce \{ and \} commands for indices, +  % and @{ and @} for the aux file. +  \catcode`\{ = \other \catcode`\} = \other +  \catcode`\[ = 1 \catcode`\] = 2 +  \catcode`\! = 0 \catcode`\\ = \other +  !gdef!lbracecmd[\{]% +  !gdef!rbracecmd[\}]% +  !gdef!lbraceatcmd[@{]% +  !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% 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}}} + +% 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 +  \else \errmessage{@dotless can be used only with i or j}% +  \fi\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 +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=3000 } + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=3000 } + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=3000 } + +% @w prevents a word break.  Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line.  According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0).  If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% 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 +  % +  \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 +    % the `@group' to put extra space in the output.  Since @group +    % should appear on a line by itself (according to the Texinfo +    % manual), we don't worry about eating any user text. +    \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 +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil  \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% +  % Ensure vertical mode, so we don't make a big box in the middle of a +  % paragraph. +  \par +  % +  % If the @need value is less than one line space, it's useless. +  \dimen0 = #1\mil +  \dimen2 = \ht\strutbox +  \advance\dimen2 by \dp\strutbox +  \ifdim\dimen0 > \dimen2 +    % +    % Do a \strut just to make the height of this box be normal, so the +    % normal leading is inserted relative to the preceding line. +    % And a page break here is fine. +    \vtop to #1\mil{\strut\vfil}% +    % +    % TeX does not even consider page breaks if a penalty added to the +    % main vertical list is 10000 or more.  But in order to see if the +    % empty box we just added fits on the page, we must make it consider +    % page breaks.  On the other hand, we don't want to actually break the +    % page after the empty box.  So we use a penalty of 9999. +    % +    % There is an extremely small chance that TeX will actually break the +    % page at this \penalty, if there are no other feasible breakpoints in +    % sight.  (If the user is using lots of big @group commands, which +    % almost-but-not-quite fill up a page, TeX will have a hard time doing +    % good page breaking, for example.)  However, I could not construct an +    % example where a page broke at this \penalty; if it happens in a real +    % document, then we can reconsider our strategy. +    \penalty9999 +    % +    % Back up by the size of the box, whether we did a page break or not. +    \kern -#1\mil +    % +    % Do not allow a page break right after this kern. +    \nobreak +  \fi +} + +% @br   forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount +  \leftline{\hskip\leftskip{\rm#1}}}} + +% @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 +} + +% @include file    insert text of that file as input. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% +  \pushthisfilestack +  \def\thisfile{#1}% +  {% +    \makevalueexpandable +    \def\temp{\input #1 }% +    \expandafter +  }\temp +  \popthisfilestack +} +\def\filenamecatcodes{% +  \catcode`\\=\other +  \catcode`~=\other +  \catcode`^=\other +  \catcode`_=\other +  \catcode`|=\other +  \catcode`<=\other +  \catcode`>=\other +  \catcode`+=\other +  \catcode`-=\other +} + +\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}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: +  the stack of filenames is empty.}} + +\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 + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore  is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% 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} +% +\parseargdef\paragraphindent{% +  \def\temp{#1}% +  \ifx\temp\asisword +  \else +    \ifx\temp\noneword +      \defaultparindent = 0pt +    \else +      \defaultparindent = #1em +    \fi +  \fi +  \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% 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. +\parseargdef\exampleindent{% +  \def\temp{#1}% +  \ifx\temp\asisword +  \else +    \ifx\temp\noneword +      \lispnarrowing = 0pt +    \else +      \lispnarrowing = #1em +    \fi +  \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 +  }% +} + +\gdef\restorefirstparagraphindent{% +  \global \let \indent = \ptexindent +  \global \let \noindent = \ptexnoindent +  \global \everypar = {}% +} + + +% @asis just yields its argument.  Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% 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\underChar = \active +  \gdef\mathunderscore{% +    \catcode\underChar=\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 @\. +% +% 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 +  $\finishmath +} +\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex. + +% 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 +  } +} + +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{$\ptexbullet$} +\def\minus{$-$} + +% @dots{} outputs 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 +    .\hfil.\hfil.% +    \hskip 0pt plus 0.5fil +  }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% +  \dots +  \spacefactor=3000 +} + +% @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 + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% 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 +     \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 +   \let\setfilename=\comment % Ignore extra @setfilename cmds. +   % +   % If texinfo.cnf is present on the system, read it. +   % Useful for site-wide @afourpaper, etc. +   \openin 1 texinfo.cnf +   \ifeof 1 \else \input texinfo.cnf \fi +   \closein 1 +   % +   \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% +  \newindex{cp}% +  \newcodeindex{fn}% +  \newcodeindex{vr}% +  \newcodeindex{tp}% +  \newcodeindex{ky}% +  \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\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 +\else +  \ifx\pdfoutput\relax +  \else +    \ifcase\pdfoutput +    \else +      \pdftrue +    \fi +  \fi +\fi +% +\ifpdf +  \input pdfcolor +  \pdfcatalog{/PageMode /UseOutlines}% +  \def\dopdfimage#1#2#3{% +    \def\imagewidth{#2}% +    \def\imageheight{#3}% +    % without \immediate, pdftex seg faults when the same image is +    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.) +    \ifnum\pdftexversion < 14 +      \immediate\pdfimage +    \else +      \immediate\pdfximage +    \fi +      \ifx\empty\imagewidth\else width \imagewidth \fi +      \ifx\empty\imageheight\else height \imageheight \fi +      \ifnum\pdftexversion<13 +         #1.pdf% +       \else +         {#1.pdf}% +       \fi +    \ifnum\pdftexversion < 14 \else +      \pdfrefximage \pdflastximage +    \fi} +  \def\pdfmkdest#1{{% +    % We have to set dummies so commands such as @code in a section title +    % aren't expanded. +    \atdummies +    \normalturnoffactive +    \pdfdest name{#1} xyz% +  }} +  \def\pdfmkpgn#1{#1} +  \let\linkcolor = \Blue  % was Cyan, but that seems light? +  \def\endlink{\Black\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 by 1 +    \expandafter\xdef\csname#1\endcsname{\the\tempnum}} +  % +  % #1 is the section text.  #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 worthwhile, since most documents are normally structured. +    \def\pdfoutlinedest{#3}% +    \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi +    % +    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% +  } +  % +  \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}% +      \input \jobname.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 +      \turnoffactive +      \input \jobname.toc +    \endgroup +  } +  % +  \def\makelinks #1,{% +    \def\params{#1}\def\E{END}% +    \ifx\params\E +      \let\nextmakelinks=\relax +    \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 +    \fi +    \nextmakelinks +  } +  \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\ppn#1{\pgn=#1\gobble} +  \def\ppnn{\pgn=\first} +  \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} +  \def\skipspaces#1{\def\PP{#1}\def\D{|}% +    \ifx\PP\D\let\nextsp\relax +    \else\let\nextsp\skipspaces +      \ifx\p\space\else\addtokens{\filename}{\PP}% +        \advance\filenamelength by 1 +      \fi +    \fi +    \nextsp} +  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} +  \ifnum\pdftexversion < 14 +    \let \startlink \pdfannotlink +  \else +    \let \startlink \pdfstartlink +  \fi +  \def\pdfurl#1{% +    \begingroup +      \normalturnoffactive\def\@{@}% +      \makevalueexpandable +      \leavevmode\Red +      \startlink attr{/Border [0 0 0]}% +        user{/Subtype /Link /A << /S /URI /URI (#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|\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 +      \ifnum0=\countA\else\makelink\fi +      \ifx\first.\let\next=\done\else +        \let\next=\maketoks +        \addtokens{\toksB}{\the\toksD} +        \ifx\first,\addtokens{\toksB}{\space}\fi +      \fi +    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +    \next} +  \def\makelink{\addtokens{\toksB}% +    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} +  \def\pdflink#1{% +    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} +    \linkcolor #1\endlink} +  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else +  \let\pdfmkdest = \gobble +  \let\pdfurl = \gobble +  \let\endlink = \relax +  \let\linkcolor = \relax +  \let\pdfmakeoutlines = \relax +\fi  % \ifx\pdfoutput + + +\message{fonts,} + +% 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 +} + +% Select #1 fonts with the current style. +% +\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}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% 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} +% +\def\setleading#1{% +  \normalbaselineskip = #1\relax +  \normallineskip = \lineskipfactor\normalbaselineskip +  \normalbaselines +  \setbox\strutbox =\hbox{% +    \vrule width0pt height\strutheightpercent\baselineskip +                    depth \strutdepthpercent \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} + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx}               %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} +\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} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1} +\setfont\deftt\ttshape{10}{\magstep1} +\setfont\defttsl\ttslshape{10}{\magstep1} +\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} +\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} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000} +\setfont\smallertt\ttshape{8}{1000} +\setfont\smallerbf\bfshape{10}{800} +\setfont\smallerit\itshape{8}{1000} +\setfont\smallersl\slshape{8}{1000} +\setfont\smallersf\sfshape{8}{1000} +\setfont\smallersc\scshape{10}{800} +\setfont\smallerttsl\ttslshape{10}{800} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\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} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\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} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\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} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\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} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000} +\setfont\reducedtt\ttshape{10}{1000} +\setfont\reducedbf\bfshape{10}{1000} +\setfont\reducedit\itshape{10}{1000} +\setfont\reducedsl\slshape{10}{1000} +\setfont\reducedsf\sfshape{10}{1000} +\setfont\reducedsc\scshape{10}{1000} +\setfont\reducedttsl\ttslshape{10}{1000} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 + +% 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 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 +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% 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 +  \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 +  \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 +  \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 +  \def\curfontsize{ssec}% +  \def\lsize{text}\def\lllsize{small}% +  \resetmathfonts \setleading{15pt}} +\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 +  \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. + + +% Set up the default fonts, so we can use them for creating boxes. +% +\textfonts \rm + +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000} +\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12 +\setfont\shortcontsl\slshape{12}{1000} +\setfont\shortconttt\ttshape{12}{1000} + +%% 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 +                    \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 + +% @b, explicit bold. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @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. +% +\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\frenchspacing{% +    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m +    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m +  } +\catcode`@=\other + +\def\t#1{% +  {\tt \rawbackslash \frenchspacing #1}% +  \null +} +\def\samp#1{`\tclose{#1}'\null} +\setfont\keyrm\rmshape{8}{1000} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% +  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% +    \vbox{\hrule\kern-0.4pt +     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% +    \kern-0.4pt\hrule}% +  \kern-.06em\raise0.4pt\hbox{\angleright}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% +  {% +    % Change normal interword space to be same as for the current font. +    \spaceskip = \fontdimen2\font +    % +    % Switch to typewriter. +    \tt +    % +    % But `\ ' produces the large typewriter interword space. +    \def\ {{\spaceskip = 0pt{} }}% +    % +    % Turn off hyphenation. +    \nohyphenation +    % +    \rawbackslash +    \frenchspacing +    #1% +  }% +  \null +} + +% 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. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +%  -- rms. +{ +  \catcode`\-=\active +  \catcode`\_=\active +  % +  \global\def\code{\begingroup +    \catcode`\-=\active \let-\codedash +    \catcode`\_=\active \let_\codeunder +    \codex +  } +} + +\def\realdash{-} +\def\codedash{-\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} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @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). +\parseargdef\kbdinputstyle{% +  \def\arg{#1}% +  \ifx\arg\worddistinct +    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% +  \else\ifx\arg\wordexample +    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% +  \else\ifx\arg\wordcode +    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% +  \else +    \errhelp = \EMsimple +    \errmessage{Unknown @kbdinputstyle option `\arg'}% +  \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct.' +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @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 +% itself.  First (mandatory) arg is the url.  Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup +  \unsepspaces +  \pdfurl{#1}% +  \setbox0 = \hbox{\ignorespaces #3}% +  \ifdim\wd0 > 0pt +    \unhbox0 % third arg given, show only that +  \else +    \setbox0 = \hbox{\ignorespaces #2}% +    \ifdim\wd0 > 0pt +      \ifpdf +        \unhbox0             % PDF: 2nd arg given, show only it +      \else +        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url +      \fi +    \else +      \code{#1}% only url given, so show it +    \fi +  \fi +  \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. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf +  \def\email#1{\doemail#1,,\finish} +  \def\doemail#1,#2,#3\finish{\begingroup +    \unsepspaces +    \pdfurl{mailto:#1}% +    \setbox0 = \hbox{\ignorespaces #2}% +    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi +    \endlink +  \endgroup} +\else +  \let\email=\uref +\fi + +% Check if we are currently using a typewriter font.  Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find.  We need it for +% Polish suppressed-l.  --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}}              % roman font +\def\sc#1{{\smallcaps#1}}       % smallcaps font +\def\ii#1{{\it #1}}             % italic font + +% @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 +} + +% @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{% +  {\frenchspacing #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\$}} + +% @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 symbold 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 +} + +% @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}}% +    }$% +} + +% 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 + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page.  Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% +        \endgroup\page\hbox{}\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 +      \fi +      \let\page = \oldpage +      \page +      \null +    }% +} + +\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 +  % +  % 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 +} + +\def\finishtitlepage{% +  \vskip4pt \hrule height 2pt width \hsize +  \vskip\titlepagebottomglue +  \finishedtitlepagetrue +} + +%%% 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. +% +\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 +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline    % headline on even pages +\newtoks\oddheadline     % headline on odd pages +\newtoks\evenfootline    % footline on even pages +\newtoks\oddfootline     % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline +                            \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline +                            \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what  @headings on  does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\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\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}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\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}}} + +\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 +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + + +% @headings double      turns headings on for double-sided printing. +% @headings single      turns headings on for single-sided printing. +% @headings off         turns them off. +% @headings on          same as @headings double, retained for compatibility. +% @headings after       turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% 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{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% 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 +  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr +  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug +  \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{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent  \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin  \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% 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). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % +  \advance\hsize by -\rightskip +  \advance\hsize by -\tableindent +  \setbox0=\hbox{\itemindicate{#1}}% +  \itemindex{#1}% +  \nobreak % This prevents a break before @itemx. +  % +  % If the item text does not fit in the space we have, put it on a line +  % by itself, and do not allow a page break either before or after that +  % line.  We do not start a paragraph here because then if the next +  % command is, e.g., @kindex, the whatsit would get put into the +  % horizontal list on a line by itself, resulting in extra blank space. +  \ifdim \wd0>\itemmax +    % +    % Make this a paragraph so we get the \parskip glue and wrapping, +    % but leave it ragged-right. +    \begingroup +      \advance\leftskip by-\tableindent +      \advance\hsize by\tableindent +      \advance\rightskip by0pt plus1fil +      \leavevmode\unhbox0\par +    \endgroup +    % +    % We're going to be starting a paragraph, but we don't want the +    % \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.  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 +    % The item text fits into the space.  Start a paragraph, so that the +    % following text (if any) will end up on the same line. +    \noindent +    % Do this with kerns and \unhbox so that if there is a footnote in +    % the item text, it can migrate to the main vertical list and +    % eventually be printed. +    \nobreak\kern-\tableindent +    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 +    \unhbox0 +    \nobreak\kern\dimen0 +    \endgroup +    \itemxneedsnegativevskiptrue +  \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\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 +} +\def\tabley#1{% +  {% +    \makevalueexpandable +    \edef\temp{\noexpand\tablez #1\space\space\space}% +    \expandafter +  }\temp \endtablez +} +\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 + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\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 +} + +% 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 +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list.  No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1  \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% +  % If we were given no argument, pretend we were given `1'. +  \def\thearg{#1}% +  \ifx\thearg\empty \def\thearg{1}\fi +  % +  % Detect if the argument is a single token.  If so, it might be a +  % letter.  Otherwise, the only valid thing it can be is a number. +  % (We will always have one token, because of the test we just made. +  % This is a good thing, since \splitoff doesn't work given nothing at +  % all -- the first parameter is undelimited.) +  \expandafter\splitoff\thearg\endmark +  \ifx\rest\empty +    % Only one token in the argument.  It could still be anything. +    % A ``lowercase letter'' is one whose \lccode is nonzero. +    % An ``uppercase letter'' is one whose \lccode is both nonzero, and +    %   not equal to itself. +    % Otherwise, we assume it's a number. +    % +    % We need the \relax at the end of the \ifnum lines to stop TeX from +    % continuing to look for a <number>. +    % +    \ifnum\lccode\expandafter`\thearg=0\relax +      \numericenumerate % a number (we hope) +    \else +      % It's a letter. +      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax +        \lowercaseenumerate % lowercase letter +      \else +        \uppercaseenumerate % uppercase letter +      \fi +    \fi +  \else +    % Multiple tokens in the argument.  We hope it's a number. +    \numericenumerate +  \fi +} + +% An @enumerate whose labels are integers.  The starting integer is +% given in \thearg. +% +\def\numericenumerate{% +  \itemno = \thearg +  \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% +  \itemno = \expandafter`\thearg +  \startenumeration{% +    % Be sure we're not beyond the end of the alphabet. +    \ifnum\itemno=0 +      \errmessage{No more lowercase letters in @enumerate; get a bigger +                  alphabet}% +    \fi +    \char\lccode\itemno +  }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% +  \itemno = \expandafter`\thearg +  \startenumeration{% +    % Be sure we're not beyond the end of the alphabet. +    \ifnum\itemno=0 +      \errmessage{No more uppercase letters in @enumerate; get a bigger +                  alphabet} +    \fi +    \char\uccode\itemno +  }% +} + +% 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. +% +\def\startenumeration#1{% +  \advance\itemno by -1 +  \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble.  Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +%   @multitable @columnfractions .25 .3 .45 +%   @item ... +% +%   Numbers following @columnfractions are the percent of the total +%   current hsize to be used for each column. You may use as many +%   columns as desired. + + +% Or use a template: +%   @multitable {Column 1 template} {Column 2 template} {Column 3 template} +%   @item ... +%   using the widest term desired in each column. + +% 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 do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +%   @multitable {Column 1 template} {Column 2 template} {Column 3 template} +%   @item first col stuff @tab second col stuff @tab third col +%   @item +%   first col stuff +%   @tab +%   second col stuff +%   @tab +%   third col +%   @item first col stuff @tab second col stuff +%   @tab Many paragraphs of text may be used in any column. +% +%         They will wrap at the width determined by the template. +%   @item@tab@tab This will be in third column. +%   @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +%                                                            to baseline. +%   0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #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{#1\hsize}% +  \setuptable +} + +\newcount\colcount +\def\setuptable#1{% +  \def\firstarg{#1}% +  \ifx\firstarg\xendsetuptable +    \let\go = \relax +  \else +    \ifx\firstarg\xcolumnfractions +      \global\setpercenttrue +    \else +      \ifsetpercent +         \let\go\pickupwholefraction +      \else +         \global\advance\colcount by 1 +         \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 +    \ifx\go\pickupwholefraction +      % Put the argument back for the \pickupwholefraction call, so +      % we'll always have a period there to be parsed. +      \def\go{\pickupwholefraction#1}% +    \else +      \let\go = \setuptable +    \fi% +  \fi +  \go +} + +% multitable-only commands. +% +% @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}% +% +% 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}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab  % insert after every tab. +% +\envdef\multitable{% +  \vskip\parskip +  \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 +  \parskip=\multitableparskip +  \parindent=\multitableparindent +  \overfullrule=0pt +  \global\colcount=0 +  % +  \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\domultitable#1{% +  % To parse everything between @multitable and @item: +  \setuptable#1 \endsetuptable +  % +  % 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 +    \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 +} + +\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 +\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. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller +                                      %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller +                                      %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @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\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} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\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\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% 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 +  % Scan in ``verbatim'' mode: +  \catcode`\@ = \other +  \catcode`\{ = \other +  \catcode`\} = \other +  % +  % Make sure that spaces turn into tokens that match what \doignoretext wants. +  \spaceisspace +  % +  % Count number of #1's that we've seen. +  \doignorecount = 0 +  % +  % Swallow text until we reach the matching `@end #1'. +  \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. +  \obeylines % +  % +  \gdef\dodoignore#1{% +    % #1 contains the command name as a string, e.g., `ifinfo'. +    % +    % Define a command to find the next `@end #1', which must be on a line +    % by itself. +    \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% +    % 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_}% +    % +    % And now expand that command. +    \obeylines % +    \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\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. +\def\enddoignore{\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. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% +  {% +    \makevalueexpandable +    \def\temp{#2}% +    \edef\next{\gdef\makecsname{SET#1}}% +    \ifx\temp\empty +      \next{}% +    \else +      \setzzz#2\endsetzzz +    \fi +  }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% +  {% +    \makevalueexpandable +    \global\expandafter\let\csname SET#1\endcsname=\relax +  }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ +  \catcode`\- = \active \catcode`\_ = \active +  % +  \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 +  } +} + +% We have this subroutine so that we can handle at least some @value's +% 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). +% +\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 +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% 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{% +  {% +    \makevalueexpandable +    \let\next=\empty +    \expandafter\ifx\csname SET#2\endcsname\relax +      #1% If not set, redefine \next. +    \fi +    \expandafter +  }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% 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. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @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 + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index.  The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% +  \iflinks +    \expandafter\newwrite \csname#1indfile\endcsname +    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file +  \fi +  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index +    \noexpand\doindex{#1}} +} + +% @defindex foo  ==  \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\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}}% +} + + +% @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. +% +% @syncodeindex foo bar   similar, but put all entries made for index foo +% inside @code. +% +\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}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +%  and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#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. +% +\def\indexdummies{% +  \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 +  % +  % \definedummyword defines \#1 as \realbackslash #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{% +    \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% +  }% +  \def\definedummyletter##1{% +    \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% +  }% +  \let\definedummyaccent\definedummyletter +  % +  % Do the redefinitions. +  \commondummies +} + +% For the aux file, @ is the escape character.  So we want to redefine +% everything using @ instead of \realbackslash.  When everything uses +% @, this will be simpler. +% +\def\atdummies{% +  \def\@{@@}% +  \def\ {@ }% +  \let\{ = \lbraceatcmd +  \let\} = \rbraceatcmd +  % +  % (See comments in \indexdummies.) +  \def\definedummyword##1{% +    \expandafter\def\csname ##1\endcsname{@##1\space}% +  }% +  \def\definedummyletter##1{% +    \expandafter\def\csname ##1\endcsname{@##1}% +  }% +  \let\definedummyaccent\definedummyletter +  % +  % Do the redefinitions. +  \commondummies +} + +% Called from \indexdummies and \atdummies.  \definedummyword and +% \definedummyletter must be defined first. +% +\def\commondummies{% +  % +  \normalturnoffactive +  % +  \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{expansion}% +  \definedummyword{minus}% +  \definedummyword{pounds}% +  \definedummyword{point}% +  \definedummyword{print}% +  \definedummyword{result}% +  % +  % Handle some cases of @value -- where it does not contain any +  % (non-fully-expandable) commands. +  \makevalueexpandable +  % +  % Normal spaces, not active ones. +  \unsepspaces +  % +  % No macro expansion. +  \turnoffmacros +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +% Better have this without active chars. +{ +  \catcode`\~=\other +  \gdef\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{samp}% +    \definedummyword{strong}% +    \definedummyword{tie}% +    \definedummyword{uref}% +    \definedummyword{url}% +    \definedummyword{var}% +    \definedummyword{verb}% +    \definedummyword{w}% +  } +} + +% \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{% +  % Accent commands should become @asis. +  \def\definedummyaccent##1{% +    \expandafter\let\csname ##1\endcsname\asis +  }% +  % We can just ignore other control letters. +  \def\definedummyletter##1{% +    \expandafter\def\csname ##1\endcsname{}% +  }% +  % 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\expansion{==>}% +  \def\minus{-}% +  \def\pounds{pounds}% +  \def\point{.}% +  \def\print{-|}% +  \def\result{=>}% +  % +  % Don't write macro names. +  \emptyusermacros +} + +\let\indexbackslash=0  %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #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 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}% +    % +    \ifvmode +      \dosubindsanitize +    \else +      \dosubindwrite +    \fi +  }% +  \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% +  % Put the index entry in the margin if desired. +  \ifx\SETmarginindex\relax\else +    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% +  \fi +  % +  % Remember, we are within a group. +  \indexdummies % Must do this here, since \bf, etc expand at this stage +  \escapechar=`\\ +  \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}}% +  }% +  \temp +} + +% Take care of unwanted page breaks: +% +% 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. +% +% 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} +% +% ..., ready, GO: +% +\def\dosubindsanitize{% +  % \lastskip and \lastpenalty cannot both be nonzero simultaneously. +  \skip0 = \lastskip +  \edef\lastskipmacro{\the\lastskip}% +  \count255 = \lastpenalty +  % +  % If \lastskip is nonzero, that means the last item was a +  % skip.  And since a skip is discardable, that means this +  % -\skip0 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-\skip0 +  \fi +  % +  \dosubindwrite +  % +  \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\count255>9999 \penalty\count255 \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\skip0 +  \fi +} + +% The index entry written in the file actually looks like +%  \entry {sortstring}{page}{topic} +% or +%  \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +%  \initial {c} +%     before the first topic whose initial is c +%  \entry {topic}{pagelist} +%     for a topic that is used without subtopics +%  \primary {topic} +%     for the beginning of a topic that is used with subtopics +%  \secondary {subtopic}{pagelist} +%     for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup +  \dobreak \chapheadingskip{10000}% +  % +  \smallfonts \rm +  \tolerance = 9500 +  \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 +  % \initial {@} +  % as its first line, TeX doesn't complain about mismatched braces +  % (because it thinks @} is a control sequence). +  \catcode`\@ = 11 +  \openin 1 \jobname.#1s +  \ifeof 1 +    % \enddoublecolumns gets confused if there is no text in the index, +    % and it loses the chapter title and the aux file entries for the +    % index.  The easiest way to prevent this problem is to make sure +    % there is some text. +    \putwordIndexNonexistent +  \else +    % +    % If the index file exists but is empty, then \openin leaves \ifeof +    % false.  We have to make TeX try to read something from the file, so +    % it can discover if there is anything in it. +    \read 1 to \temp +    \ifeof 1 +      \putwordIndexIsEmpty +    \else +      % 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{\backslashcurfont}% +      \catcode`\\ = 0 +      \escapechar = `\\ +      \begindoublecolumns +      \input \jobname.#1s +      \enddoublecolumns +    \fi +  \fi +  \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% +  % Some minor font changes for the special characters. +  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt +  % +  % Remove any glue we may have, we'll be inserting our own. +  \removelastskip +  % +  % We like breaks before the index initials, so insert a bonus. +  \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 +  % to column.  It still won't often be perfect, because of the stretch +  % we need before each entry, but it's better. +  % +  % No shrink because it confuses \balancecolumns. +  \vskip 1.67\baselineskip plus .5\baselineskip +  \leftline{\secbf #1}% +  % Do our best not to break after the initial. +  \nobreak +  \vskip .33\baselineskip plus .1\baselineskip +}} + +% \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. +% +% A straightforward implementation would start like this: +%	\def\entry#1#2{... +% But this frozes 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 +    % +    % 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 +    % +    % 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. +    \def\tempa{{\rm }}% +    \def\tempb{#1}% +    \edef\tempc{\tempa}% +    \edef\tempd{\tempb}% +    \ifx\tempc\tempd +      \ % +    \else +      % +      % 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 +    \par +  \endgroup +} + +% Like \dotfill except takes at least 1 em. +\def\indexdotfill{\cleaders +  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\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 +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns +  % Grab any single-column material above us. +  \output = {% +    % +    % Here is a possibility not foreseen in manmac: if we accumulate a +    % whole lot of material, we might end up calling this \output +    % routine twice in a row (see the doublecol-lose test, which is +    % essentially a couple of indexes with @setchapternewpage off).  In +    % that case we just ship out what is in \partialpage with the normal +    % output routine.  Generally, \partialpage will be empty when this +    % runs and this will be a no-op.  See the indexspread.tex test case. +    \ifvoid\partialpage \else +      \onepageout{\pagecontents\partialpage}% +    \fi +    % +    \global\setbox\partialpage = \vbox{% +      % Unvbox the main output page. +      \unvbox\PAGE +      \kern-\topskip \kern\baselineskip +    }% +  }% +  \eject % run that output routine to set \partialpage +  % +  % Use the double-column output routine for subsequent pages. +  \output = {\doublecolumnout}% +  % +  % Change the page size parameters.  We could do this once outside this +  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 +  % format, but then we repeat the same computation.  Repeating a couple +  % of assignments once per index is clearly meaningless for the +  % execution time, so we may as well do it in one place. +  % +  % First we halve the line length, less a little for the gutter between +  % the columns.  We compute the gutter based on the line length, so it +  % changes automatically with the paper format.  The magic constant +  % below is chosen so that the gutter has the same value (well, +-<1pt) +  % as it did when we hard-coded it. +  % +  % We put the result in a separate register, \doublecolumhsize, so we +  % can restore it in \pagesofar, after \hsize itself has (potentially) +  % been clobbered. +  % +  \doublecolumnhsize = \hsize +    \advance\doublecolumnhsize by -.04154\hsize +    \divide\doublecolumnhsize by 2 +  \hsize = \doublecolumnhsize +  % +  % Double the \vsize as well.  (We don't need a separate register here, +  % since nobody clobbers \vsize.) +  \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% +  \splittopskip=\topskip \splitmaxdepth=\maxdepth +  % Get the available space for the double columns -- the normal +  % (undoubled) page height minus any material left over from the +  % 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@ +  \onepageout\pagesofar +  \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{% +  \unvbox\partialpage +  % +  \hsize = \doublecolumnhsize +  \wd0=\hsize \wd2=\hsize +  \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% +  \output = {% +    % Split the last of the double-column material.  Leave it on the +    % current page, no automatic page break. +    \balancecolumns +    % +    % If we end up splitting too much material for the current page, +    % though, there will be another page break right after this \output +    % invocation ends.  Having called \balancecolumns once, we do not +    % want to call it again.  Therefore, reset \output to its normal +    % definition right away.  (We hope \balancecolumns will never be +    % called on to balance too much material, but if it is, this makes +    % the output somewhat more palatable.) +    \global\output = {\onepageout{\pagecontents\PAGE}}% +  }% +  \eject +  \endgroup % started in \begindoublecolumns +  % +  % \pagegoal was set to the doubled \vsize above, since we restarted +  % the current page.  We're now back to normal single-column +  % typesetting, so reset \pagegoal to the normal \vsize (after the +  % \endgroup where \vsize got restored). +  \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% +  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. +  \dimen@ = \ht0 +  \advance\dimen@ by \topskip +  \advance\dimen@ by-\baselineskip +  \divide\dimen@ by 2 % target to split to +  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% +  \splittopskip = \topskip +  % Loop until we get a decent breakpoint. +  {% +    \vbadness = 10000 +    \loop +      \global\setbox3 = \copy0 +      \global\setbox1 = \vsplit3 to \dimen@ +    \ifdim\ht3>\dimen@ +      \global\advance\dimen@ by 1pt +    \repeat +  }% +  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% +  \setbox0=\vbox to\dimen@{\unvbox1}% +  \setbox2=\vbox to\dimen@{\unvbox3}% +  % +  \pagesofar +} +\catcode`\@ = \other + + +\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 +\newcount\subsubsecno  \subsubsecno=0 + +% 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 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% +  \else\ifnum\appendixno=`C C% +  \else\ifnum\appendixno=`D D% +  \else\ifnum\appendixno=`E E% +  \else\ifnum\appendixno=`F F% +  \else\ifnum\appendixno=`G G% +  \else\ifnum\appendixno=`H H% +  \else\ifnum\appendixno=`I I% +  \else\ifnum\appendixno=`J J% +  \else\ifnum\appendixno=`K K% +  \else\ifnum\appendixno=`L L% +  \else\ifnum\appendixno=`M M% +  \else\ifnum\appendixno=`N N% +  \else\ifnum\appendixno=`O O% +  \else\ifnum\appendixno=`P P% +  \else\ifnum\appendixno=`Q Q% +  \else\ifnum\appendixno=`R R% +  \else\ifnum\appendixno=`S S% +  \else\ifnum\appendixno=`T T% +  \else\ifnum\appendixno=`U U% +  \else\ifnum\appendixno=`V V% +  \else\ifnum\appendixno=`W W% +  \else\ifnum\appendixno=`X X% +  \else\ifnum\appendixno=`Y Y% +  \else\ifnum\appendixno=`Z Z% +  % The \the is necessary, despite appearances, because \appendixletter is +  % expanded while writing the .toc file.  \char\appendixno is not +  % expandable, thus it is written literally, thus all appendixes come out +  % with the same letter (or @) in the toc without it. +  \else\char\the\appendixno +  \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. +% However, they are not reliable, because we don't use marks. +\def\thischapter{} +\def\thissection{} + +\newcount\absseclevel % used to calculate proper heading level +\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} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% 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 +    \ifnum \absseclevel > 3 +      \absseclevel = 3 +    \fi +  \fi +  % The heading type: +  \def\headtype{#1}% +  \if \headtype U% +    \ifnum \absseclevel < \unmlevel +      \chardef\unmlevel = \absseclevel +    \fi +  \else +    % 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 +  % Now print the heading: +  \if \headtype U% +    \ifcase\absseclevel +	\unnumberedzzz{#3}% +    \or \unnumberedseczzz{#3}% +    \or \unnumberedsubseczzz{#3}% +    \or \unnumberedsubsubseczzz{#3}% +    \fi +  \else +    \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 +  \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @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\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% +  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 +    \global\advance\appendixno by 1 +  \gdef\chaplevelprefix{\appendixletter.}% +  \resetallfloatnos +  % +  \def\appendixnum{\putwordAppendix\space \appendixletter}% +  \message{\appendixnum}% +  % +  \chapmacro{#1}{Yappendix}{\appendixletter}% +  % +  \global\let\section = \appendixsec +  \global\let\subsection = \appendixsubsec +  \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% +  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 +    \global\advance\unnumberedno by 1 +  % +  % Since an unnumbered has no number, no prefix for figures. +  \global\let\chaplevelprefix = \empty +  \resetallfloatnos +  % +  % This used to be simply \message{#1}, but TeX fully expands the +  % argument to \message.  Therefore, if #1 contained @-commands, TeX +  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX +  % expanded @cite (which turns out to cause errors because \cite is meant +  % to be executed, not expanded). +  % +  % Anyway, we don't want the fully-expanded definition of @cite to appear +  % as a result of the \message, we just want `@cite' itself.  We use +  % \the<toks register> to achieve this: TeX expands \the<toks> only once, +  % simply yielding the contents of <toks register>.  (We also do this for +  % the toc entries.) +  \toks0 = {#1}% +  \message{(\the\toks0)}% +  % +  \chapmacro{#1}{Ynothing}{\the\unnumberedno}% +  % +  \global\let\section = \unnumberedsec +  \global\let\subsection = \unnumberedsubsec +  \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\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. +\let\top\unnumbered + +% Sections. +\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}% +} + +\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\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\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\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\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\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\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}% +} + +\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}% +} + +% 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. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +%       1) We use \vbox rather than the earlier \line to permit +%          overlong headings to fold. +%       2) \hyphenpenalty is set to 10000 because hyphenation in a +%          heading is obnoxious; this forbids it. +%       3) Likewise, headings look best if no \parindent is used, and +%          if justification is not attempted.  Hence \raggedright. + + +\def\majorheading{% +  {\advance\chapheadingskip by 10pt \chapbreak }% +  \parsearg\chapheadingzzz +} + +\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 +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} +  \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} +  \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} +  \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% 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{% +  \pchapsepmacro +  {% +    \chapfonts \rm +    % +    % Have to define \thissection 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\thissection{#1}% +    \gdef\thischaptername{#1}% +    % +    % Only insert the separating space if we have a chapter/appendix +    % number, and don't print the unnumbered ``number''. +    \def\temptype{#2}% +    \ifx\temptype\Ynothingkeyword +      \setbox0 = \hbox{}% +      \def\toctype{unnchap}% +      \def\thischapter{#1}% +    \else\ifx\temptype\Yomitfromtockeyword +      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry +      \def\toctype{omit}% +      \xdef\thischapter{}% +    \else\ifx\temptype\Yappendixkeyword +      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% +      \def\toctype{app}% +      % We don't substitute the actual chapter name into \thischapter +      % because we don't want its macros evaluated now.  And we don't +      % use \thissection because that changes with each section. +      % +      \xdef\thischapter{\putwordAppendix{} \appendixletter: +                        \noexpand\thischaptername}% +    \else +      \setbox0 = \hbox{#3\enspace}% +      \def\toctype{numchap}% +      \xdef\thischapter{\putwordChapter{} \the\chapno: +                        \noexpand\thischaptername}% +    \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. +    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright +          \hangindent=\wd0 \centerparametersmaybe +          \unhbox0 #1\par}% +  }% +  \nobreak\bigskip % no page break after a chapter title +  \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% +  \advance\rightskip by 3\rightskip +  \leftskip = \rightskip +  \parfillskip = 0pt +} + + +% 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\centerchapmacro=\centerchfopen} + + +% 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}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #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\sectionheading#1#2#3#4{% +  {% +    % Switch to the right set of fonts. +    \csname #2fonts\endcsname \rm +    % +    % Insert space above the heading. +    \csname #2headingbreak\endcsname +    % +    % Only insert the space after the number if we have a section number. +    \def\sectionlevel{#2}% +    \def\temptype{#3}% +    % +    \ifx\temptype\Ynothingkeyword +      \setbox0 = \hbox{}% +      \def\toctype{unn}% +      \gdef\thissection{#1}% +    \else\ifx\temptype\Yomitfromtockeyword +      % for @headings -- no section number, don't include in toc, +      % and don't redefine \thissection. +      \setbox0 = \hbox{}% +      \def\toctype{omit}% +      \let\sectionlevel=\empty +    \else\ifx\temptype\Yappendixkeyword +      \setbox0 = \hbox{#4\enspace}% +      \def\toctype{app}% +      \gdef\thissection{#1}% +    \else +      \setbox0 = \hbox{#4\enspace}% +      \def\toctype{num}% +      \gdef\thissection{#1}% +    \fi\fi\fi +    % +    % Write the toc entry (before \donoderef).  See comments in \chfplain. +    \writetocentry{\toctype\sectionlevel}{#1}{#4}% +    % +    % Write the node reference (= pdf destination for pdftex). +    % Again, see comments in \chfplain. +    \donoderef{#3}% +    % +    % Output the actual section heading. +    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright +          \hangindent=\wd0  % zero if no section number +          \unhbox0 #1}% +  }% +  % 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 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% 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\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 +      \toks0 = {#2}% +      \toks2 = \expandafter{\lastnode}% +      \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% +                               {\the\toks2}{\noexpand\folio}}}% +      \temp +    \fi +  \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 +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% +  % If @setchapternewpage on, and @headings double, the contents should +  % start on an odd page, unlike chapters.  Thus, we maintain +  % \contentsalignmacro in parallel with \pagealignmacro. +  % From: Torbjorn Granlund <tege@matematik.su.se> +  \contentsalignmacro +  \immediate\closeout\tocfile +  % +  % Don't need to put `Contents' or `Short Contents' in the headline. +  % It is abundantly clear what they are. +  \def\thischapter{}% +  \chapmacro{#1}{Yomitfromtoc}{}% +  % +  \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 \global\pageno = \lastnegativepageno \fi +} + + +% Normal (long) toc. +\def\contents{% +  \startcontents{\putwordTOC}% +    \openin 1 \jobname.toc +    \ifeof 1 \else +      \input \jobname.toc +    \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\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 \jobname.toc +    \ifeof 1 \else +      \input \jobname.toc +    \fi +    \closein 1 +    \vfill \eject +    \contentsalignmacro % in case @setchapternewpage odd is in effect +  \endgroup +  \lastnegativepageno = \pageno +  \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% 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}% +} + +% 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, ... + +% 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}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% +  % We use M since it's probably the widest letter. +  \setbox0 = \hbox{\putwordAppendix{} M}% +  \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% 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\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\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\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. +% 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. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% +   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip +   \begingroup +     \chapentryfonts +     \tocentry{#1}{\dopageno\bgroup#2\egroup}% +   \endgroup +   \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup +  \secentryfonts \leftskip=\tocindent +  \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup +  \subsecentryfonts \leftskip=2\tocindent +  \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup +  \subsubsecentryfonts \leftskip=3\tocindent +  \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% 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. +% +\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\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% 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} +% +\setbox\errorbox=\hbox to \dimen0{\hfil +   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. +   \advance\hsize by -2\dimen2 % Rules. +   \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} +% +\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. + +\envdef\tex{% +  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 +  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 +  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie +  \catcode `\%=14 +  \catcode `\+=\other +  \catcode `\"=\other +  \catcode `\|=\other +  \catcode `\<=\other +  \catcode `\>=\other +  \escapechar=`\\ +  % +  \let\b=\ptexb +  \let\bullet=\ptexbullet +  \let\c=\ptexc +  \let\,=\ptexcomma +  \let\.=\ptexdot +  \let\dots=\ptexdots +  \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 +  % +  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% +  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% +  \def\@{@}% +} +% There is no need to define \Etex. + +% 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 + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments.  \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% 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. +% +\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 + +% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip +        \ctl\leaders\hrule height\circthick\hfil\ctr +        \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip +        \cbl\leaders\hrule height\circthick\hfil\cbr +        \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\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=\comment +  \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. +} +\def\Ecartouche{% +              \ifhmode\par\fi +	      \kern3pt +	  \egroup +	  \kern3pt\vrule +	  \hskip\rskip +      \egroup +      \cartbot +  \egroup +  \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% +  \aboveenvbreak +  \hfuzz = 12pt % Don't be fussy +  \sepspaces % Make spaces be word-separators rather than space tokens. +  \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 +  \fi +  \let\exdent=\nofillexdent +} + +% 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\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% +  \ifx\SETdispenvsize\smallword +    \smallexamplefonts \rm +  \fi +} +\def\setsmalldispenv{% +  \ifx\SETdispenvsize\nosmallword +  \else +    \smallexamplefonts \rm +  \fi +} + +% 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 +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ +  \makedispenv{#1}{#3} +  \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% +  \nonfillstart +  \tt +  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. +  \gobble       % eat return +} + +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% +  \nonfillstart +  \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% +  \let\nonarrowing = t% +  \nonfillstart +  \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% +  \let\nonarrowing = t% +  \nonfillstart +  \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% +  \let\nonarrowing = t% +  \nonfillstart +  \advance\leftskip by 0pt plus 1fill +  \gobble +} +\let\Eflushright = \afterenvbreak + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% 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. +% +\envdef\quotation{% +  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip +  \parindent=0pt +  % +  % @cartouche defines \nonarrowing to inhibit narrowing at next level down. +  \ifx\nonarrowing\relax +    \advance\leftskip by \lispnarrowing +    \advance\rightskip by \lispnarrowing +    \exdentamount = \lispnarrowing +    \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}% +} + +% 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 +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} +% If we want to allow any <char> as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command.  --janneke@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\"% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% +  \def\do##1{\catcode`##1=\other}\dospecials} +% +% [Knuth] pp. 380,381,391 +% Disable Spanish ligatures ?` and !` of \tt font +\begingroup +  \catcode`\`=\active\gdef`{\relax\lq} +\endgroup +% +% 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 +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} +\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 +    }% +  } +\endgroup +\def\setupverbatim{% +  \nonfillstart +  \advance\leftskip by -\defbodyindent +  % Easiest (and conventionally used) font for verbatim +  \tt +  \def\par{\leavevmode\egroup\box0\endgraf}% +  \catcode`\`=\active +  \tabexpand +  % Respect line breaks, +  % print special symbols as themselves, and +  % make each space count +  % must do in this order: +  \obeylines \uncatcodespecials \sepspaces +  \everypar{\starttabbox}% +} + +% 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\doverb'{'<char>#1<char>'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup +  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other +  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +%     \def\doverbatim#1@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 + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% +  {% +    \makevalueexpandable +    \setupverbatim +    \input #1 +    \afterenvbreak +  }% +} + +% @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 +} + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt + +% Start the processing of @deffn: +\def\startdefun{% +  \ifnum\lastpenalty<10000 +    \medbreak +  \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 \defargscommonending, 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. +    %  +    \ifnum\lastpenalty=10002 \penalty2000 \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 +} + +\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 \fi +  % +  % And now, it's time to reuse the body of the original defun: +  \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\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 10002  % 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 +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remainnig is to define \deffnheader. +% +\def\makedefun#1{% +  \expandafter\let\csname E#1\endcsname = \Edefun +  \edef\temp{\noexpand\domakedefun +    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% +  \temp +} + +% \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% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \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}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \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}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \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}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% +  \doind{tp}{\code{#2}}% +  \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% 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} + +% \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. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% +  % Get the values of \leftskip and \rightskip as they were outside the @def... +  \advance\leftskip by -\defbodyindent +  % +  % How we'll format the type name.  Putting it in brackets helps +  % distinguish it from the body text that may end up on the next line +  % just below it. +  \def\temp{#1}% +  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} +  % +  % Figure out line sizes for the paragraph shape. +  % The first line needs space for \box0; but if \rightskip is nonzero, +  % we need only space for the part of \box0 which exceeds it: +  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip +  % The continuations: +  \dimen2=\hsize  \advance\dimen2 by -\defargsindent +  % (plain.tex says that \dimen1 should be used only as global.) +  \parshape 2 0in \dimen0 \defargsindent \dimen2 +  % +  % Put the type name to the right margin. +  \noindent +  \hbox to 0pt{% +    \hfil\box0 \kern-\hsize +    % \hsize has to be shortened this way: +    \kern\leftskip +    % Intentionally do not respect \rightskip, since we need the space. +  }% +  % +  % Allow all lines to be underfull without complaint: +  \tolerance=10000 \hbadness=10000 +  \exdentamount=\defbodyindent +  {% +    % defun fonts. We use typewriter by default (used to be bold) because: +    % . we're printing identifiers, they should be in tt in principle. +    % . in languages with many accents, such as Czech or French, it's +    %   common to leave accents off identifiers.  The result looks ok in +    %   tt, but exceedingly strange in rm. +    % . we don't want -- and --- to be treated as ligatures. +    % . this still does not fix the ?` and !` ligatures, but so far no +    %   one has made identifiers using them :). +    \df \tt +    \def\temp{#2}% return value type +    \ifx\temp\empty\else \tclose{\temp} \fi +    #3% output function name +  }% +  {\rm\enskip}% hskip 0.5 em of \tenrm +  % +  \boldbrax +  % arguments will be output next, if any. +} + +% 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\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 +} + +% We want ()&[] to print specially on the defun line. +% +\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 = ) + +% 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} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\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 +} +\def\infirstlevel#1{% +  \ifampseen +    \ifnum\parencount=1 +      #1% +    \fi +  \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% +  \global\advance\parencount by 1 +  {\parenfont(}% +  \infirstlevel \bfafterword +} +\def\clnr{% +  {\parenfont)}% +  \infirstlevel \sl +  \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% +  \global\advance\brackcount by 1 +  {\bf[}% +} +\def\rbrb{% +  {\bf]}% +  \global\advance\brackcount by -1 +} + +\def\checkparencounts{% +  \ifnum\parencount=0 \else \badparencount \fi +  \ifnum\brackcount=0 \else \badbrackcount \fi +} +\def\badparencount{% +  \errmessage{Unbalanced parentheses in @def}% +  \global\parencount=0 +} +\def\badbrackcount{% +  \errmessage{Unbalanced square braces in @def}% +  \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% 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\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 +} + +\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... + +% Utility routines. +% 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\let +  \csname#1\expandafter\endcsname +  \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% 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 +} + +\def\scanargctxt{% +  \scanctxt +  \catcode`\\=\other +  \catcode`\^^M=\other +} + +\def\macrobodyctxt{% +  \scanctxt +  \catcode`\{=\other +  \catcode`\}=\other +  \catcode`\^^M=\other +  \usembodybackslash +} + +\def\macroargctxt{% +  \scanctxt +  \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% +  \getargs{#1}%           now \macname is the macname and \argl the arglist +  \ifx\argl\empty       % no arguments +     \paramno=0% +  \else +     \expandafter\parsemargdef \argl;% +  \fi +  \if1\csname ismacro.\the\macname\endcsname +     \message{Warning: redefining \the\macname}% +  \else +     \expandafter\ifx\csname \the\macname\endcsname \relax +     \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}% +  \fi +  \begingroup \macrobodyctxt +  \ifrecursive \expandafter\parsermacbody +  \else \expandafter\parsemacbody +  \fi} + +\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: +    \begingroup +      \expandafter\let\csname#1\endcsname \relax +      \let\do\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\do \noexpand #1% +  \fi +} + +% This makes use of the obscure feature that if the last token of a +% <parameter list> is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list.  Set up \paramno and \paramlist +% so \defmacro knows what to do.  Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX:  let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% +        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% +  \if#1;\let\next=\relax +  \else \let\next=\parsemargdefxxx +    \advance\paramno by 1% +    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname +        {\xeatspaces{\hash\the\paramno}}% +    \edef\paramlist{\paramlist\hash\the\paramno,}% +  \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% +  \let\hash=##% convert placeholders to macro parameter chars +  \ifrecursive +    \ifcase\paramno +    % 0 +      \expandafter\xdef\csname\the\macname\endcsname{% +        \noexpand\scanmacro{\temp}}% +    \or % 1 +      \expandafter\xdef\csname\the\macname\endcsname{% +         \bgroup\noexpand\macroargctxt +         \noexpand\braceorline +         \expandafter\noexpand\csname\the\macname xxx\endcsname}% +      \expandafter\xdef\csname\the\macname xxx\endcsname##1{% +         \egroup\noexpand\scanmacro{\temp}}% +    \else % many +      \expandafter\xdef\csname\the\macname\endcsname{% +         \bgroup\noexpand\macroargctxt +         \noexpand\csname\the\macname xx\endcsname}% +      \expandafter\xdef\csname\the\macname xx\endcsname##1{% +          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% +      \expandafter\expandafter +      \expandafter\xdef +      \expandafter\expandafter +        \csname\the\macname xxx\endcsname +          \paramlist{\egroup\noexpand\scanmacro{\temp}}% +    \fi +  \else +    \ifcase\paramno +    % 0 +      \expandafter\xdef\csname\the\macname\endcsname{% +        \noexpand\norecurse{\the\macname}% +        \noexpand\scanmacro{\temp}\egroup}% +    \or % 1 +      \expandafter\xdef\csname\the\macname\endcsname{% +         \bgroup\noexpand\macroargctxt +         \noexpand\braceorline +         \expandafter\noexpand\csname\the\macname xxx\endcsname}% +      \expandafter\xdef\csname\the\macname xxx\endcsname##1{% +        \egroup +        \noexpand\norecurse{\the\macname}% +        \noexpand\scanmacro{\temp}\egroup}% +    \else % many +      \expandafter\xdef\csname\the\macname\endcsname{% +         \bgroup\noexpand\macroargctxt +         \expandafter\noexpand\csname\the\macname xx\endcsname}% +      \expandafter\xdef\csname\the\macname xx\endcsname##1{% +          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% +      \expandafter\expandafter +      \expandafter\xdef +      \expandafter\expandafter +      \csname\the\macname xxx\endcsname +      \paramlist{% +          \egroup +          \noexpand\norecurse{\the\macname}% +          \noexpand\scanmacro{\temp}\egroup}% +    \fi +  \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {.  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\braceorlinexxx{% +  \ifx\nchar\bgroup\else +    \expandafter\parsearg +  \fi \next} + +% We want 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} + +% For \indexnofonts, 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. +%  +\def\emptyusermacros{\begingroup +  \def\do##1{\let\noexpand##1=\noexpand\asis}% +  \edef\next{\macrolist}\expandafter\endgroup\next} + + +% @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{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% +  {% +    \expandafter\let\obeyedspace=\empty +    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% +  }% +  \next +} + + +\message{cross references,} + +\newwrite\auxfile + +\newif\ifhavexrefs    % True if xref values are known. +\newif\ifwarnedxrefs  % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, +  node \samp{\ignorespaces#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=\empty + +% 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 +% +\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 (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \thissection, +%                 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. +% +% 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}% +  \iflinks +    {% +      \atdummies  % preserve commands, but don't expand them +      \turnoffactive +      \otherbackslash +      \edef\writexrdef##1##2{% +	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef +	  ##1}{##2}}% these are parameters of \writexrdef +      }% +      \toks0 = \expandafter{\thissection}% +      \immediate \writexrdef{title}{\the\toks0 }% +      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. +      \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 +% node name, #4 the name of the Info file, #5 the name of the printed +% manual.  All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup +  \unsepspaces +  \def\printedmanual{\ignorespaces #5}% +  \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\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\printedrefname{\ignorespaces #1}% +      \else +        \ifhavexrefs +          % We know the real title if we have the xref values. +          \def\printedrefname{\refx{#1-title}{}}% +        \else +          % Otherwise just copy the Info node name. +          \def\printedrefname{\ignorespaces #1}% +        \fi% +      \fi +    \fi +  \fi +  % +  % Make link in pdf output. +  \ifpdf +    \leavevmode +    \getfilename{#4}% +    {\turnoffactive \otherbackslash +     \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{\pdfmkpgn{#1}}% +     \fi +    }% +    \linkcolor +  \fi +  % +  % 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 +    \otherbackslash +    \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 +    % 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 \otherbackslash +       % 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 \otherbackslash \putwordpage\tie\refx{#1-pg}{}% +    \fi +  \fi +  \endlink +\endgroup} + +% 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]} + +% Things referred to by \setref. +% +\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{% +  {% +    \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 +      \ifhavexrefs +        \message{\linenumber Undefined cross reference `#1'.}% +      \else +        \ifwarnedxrefs\else +          \global\warnedxrefstrue +          \message{Cross reference values unknown; you must run TeX again.}% +        \fi +      \fi +    \fi +  \else +    % It's defined, so just use it. +    \thisrefX +  \fi +  #2% Output the suffix in any case. +} + +% 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#2{% +  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. +  % +  % Was that xref control sequence that we just defined for a float? +  \expandafter\iffloat\csname XR#1\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{#1}}% +  \fi +} + +% Read the last existing aux file, if any.  No error if none exists. +% +\def\tryauxfile{% +  \openin 1 \jobname.aux +  \ifeof 1 \else +    \readauxfile +    \global\havexrefstrue +  \fi +  \closein 1 +} + +\def\readauxfile{\begingroup +  \catcode`\^^@=\other +  \catcode`\^^A=\other +  \catcode`\^^B=\other +  \catcode`\^^C=\other +  \catcode`\^^D=\other +  \catcode`\^^E=\other +  \catcode`\^^F=\other +  \catcode`\^^G=\other +  \catcode`\^^H=\other +  \catcode`\^^K=\other +  \catcode`\^^L=\other +  \catcode`\^^N=\other +  \catcode`\^^P=\other +  \catcode`\^^Q=\other +  \catcode`\^^R=\other +  \catcode`\^^S=\other +  \catcode`\^^T=\other +  \catcode`\^^U=\other +  \catcode`\^^V=\other +  \catcode`\^^W=\other +  \catcode`\^^X=\other +  \catcode`\^^Z=\other +  \catcode`\^^[=\other +  \catcode`\^^\=\other +  \catcode`\^^]=\other +  \catcode`\^^^=\other +  \catcode`\^^_=\other +  % 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 ^ +  % character, we would end up writing a line like this: 'xrdef {'hat +  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first +  % argument, and \hat is not an expandable control sequence.  It could +  % all be worked out, but why?  Either we support ^^ or we don't. +  % +  % The other change necessary for this was to define \auxhat: +  % \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 +  \catcode`\"=\other +  \catcode`\_=\other +  \catcode`\|=\other +  \catcode`\<=\other +  \catcode`\>=\other +  \catcode`\$=\other +  \catcode`\#=\other +  \catcode`\&=\other +  \catcode`\%=\other +  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off +  % +  % 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 +    \def\loop{% +      \catcode\count 1=\other +      \advance\count 1 by 1 +      \ifnum \count 1<256 \loop \fi +    }% +  }% +  % +  % @ is our escape character in .aux files, and we need braces. +  \catcode`\{=1 +  \catcode`\}=2 +  \catcode`\@=0 +  % +  \input \jobname.aux +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\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}\ptexslash\fi +  % +  % Remove inadvertent blank space before typesetting the footnote number. +  \unskip +  \thisfootno\@sf +  \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) fails inside footnotes because the tokens are fixed when +% the footnote is read.  --karl, 16nov96. +% +\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 +  \floatingpenalty\@MM +  \leftskip\z@skip +  \rightskip\z@skip +  \spaceskip\z@skip +  \xspaceskip\z@skip +  \parindent\defaultparindent +  % +  \smallfonts \rm +  % +  % 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 +  % expands into a box, it must come within the paragraph, lest it +  % provide a place where TeX can split the footnote. +  \footstrut +  \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% 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. +% Similarily, 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\startsavinginserts{% +  \ifx \insert\ptexinsert +    \let\insert\saveinsert +  \else +    \let\checkinserts\relax +  \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\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 + + +% @image.  We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front.  If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else +  % Do not bother showing banner with epsf.tex v2.7k (available in +  % doc/epsf.tex and on ctan). +  \def\epsfannounce{\toks0 = }% +  \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to +  work.  It is also included in the Texinfo distribution, or you can get +  it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% +  \ifx\epsfbox\undefined +    \ifwarnednoepsf \else +      \errhelp = \noepsfhelp +      \errmessage{epsf.tex not found, images will be ignored}% +      \global\warnednoepsftrue +    \fi +  \else +    \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 (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\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 +    \line\bgroup\hss +  \fi +  % +  % Output the image. +  \ifpdf +    \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 +    \epsfbox{#1.eps}% +  \fi +  % +  \ifimagevmode \hss \egroup \bigbreak \fi  % space after the 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. +% +\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. +    % +    \ifx\floattype\empty +      \let\safefloattype=\empty +    \else +      {% +        % the floattype might have accents or other special characters, +        % but we need to use it in a control sequence name. +        \indexnofonts +        \turnoffactive +        \xdef\safefloattype{\floattype}% +      }% +    \fi +    % +    % If label is given but no type, we handle that as the empty type. +    \ifx\floatlabel\empty \else +      % We want each FLOATTYPE to be numbered separately (Figure 1, +      % Table 1, Figure 2, ...).  (And if no label, no number.) +      % +      \expandafter\getfloatno\csname\safefloattype floatno\endcsname +      \global\advance\floatno by 1 +      % +      {% +        % This magic value for \thissection 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\thissection{\floatmagic=\safefloattype}% +        \setref{\floatlabel}{Yfloat}% +      }% +    \fi +    % +    % start with \parskip glue, I guess. +    \vskip\parskip +    % +    % Don't suppress indentation if a float happens to start a section. +    \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption:    Foo 1.1 +% @float Foo & @caption{Cap}:     Foo: Cap +% @float Foo & no caption:        Foo +% @float ,lbl & Caption{Cap}:     1.1: Cap +% @float ,lbl & no caption:       1.1 +% @float & @caption{Cap}:         Cap +% @float & no caption: +% +\def\Efloat{% +    \let\floatident = \empty +    % +    % In all cases, if we have a float type, it comes first. +    \ifx\floattype\empty \else \def\floatident{\floattype}\fi +    % +    % If we have an xref label, the number comes next. +    \ifx\floatlabel\empty \else +      \ifx\floattype\empty \else % if also had float type, need tie first. +        \appendtomacro\floatident{\tie}% +      \fi +      % the number. +      \appendtomacro\floatident{\chaplevelprefix\the\floatno}% +    \fi +    % +    % Start the printed caption with what we've constructed in +    % \floatident, but keep it separate; we need \floatident again. +    \let\captionline = \floatident +    % +    \ifx\thiscaption\empty \else +      \ifx\floatident\empty \else +	\appendtomacro\captionline{: }% had ident, so need a colon between +      \fi +      % +      % caption text. +      \appendtomacro\captionline{\scanexp\thiscaption}% +    \fi +    % +    % If we have anything to print, print it, with space before. +    % Eventually this needs to become an \insert. +    \ifx\captionline\empty \else +      \vskip.5\parskip +      \captionline +      % +      % Space below caption. +      \vskip\parskip +    \fi +    % +    % If have an xref label, write the list of floats info.  Do this +    % after the caption, to avoid chance of it being a breakpoint. +    \ifx\floatlabel\empty \else +      % Write the text that goes in the lof to the aux file as +      % \floatlabel-lof.  Besides \floatident, we include the short +      % caption if specified, else the full caption if specified, else nothing. +      {% +        \atdummies \turnoffactive \otherbackslash +        % 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 float, 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% +} + +% \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 +% \thissection 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 +} + +% @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. +% +\parseargdef\documentlanguage{% +  \tex % read txi-??.tex file in plain TeX. +    % Read the file if it exists. +    \openin 1 txi-#1.tex +    \ifeof 1 +      \errhelp = \nolanghelp +      \errmessage{Cannot read language file txi-#1.tex}% +    \else +      \input txi-#1.tex +    \fi +    \closein 1 +  \endgroup +} +\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.} + + +% @documentencoding should change something in TeX eventually, most +% likely, but for now just recognize it. +\let\documentencoding = \comment + + +% Page size parameters. +% +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, just get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything.  We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize.  We call this whenever the paper size is set. +% +\def\setemergencystretch{% +  \ifx\emergencystretch\thisisundefined +    % Allow us to assign to \emergencystretch anyway. +    \def\emergencystretch{\dimen0}% +  \else +    \emergencystretch = .15\hsize +  \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; +% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) +% physical page width. +% +% 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 +  % +  \vsize = #1\relax +  \advance\vsize by \topskip +  \outervsize = \vsize +  \advance\outervsize by 2\topandbottommargin +  \pageheight = \vsize +  % +  \hsize = #2\relax +  \outerhsize = \hsize +  \advance\outerhsize by 0.5in +  \pagewidth = \hsize +  % +  \normaloffset = #4\relax +  \bindingoffset = #5\relax +  % +  \ifpdf +    \pdfpageheight #7\relax +    \pdfpagewidth #8\relax +  \fi +  % +  \setleading{\textleading} +  % +  \parindent = \defaultparindent +  \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 +  \parskip = 3pt plus 2pt minus 1pt +  \textleading = 13.2pt +  % +  % If page is nothing but text, make it come out even. +  \internalpagesizes{46\baselineskip}{6in}% +                    {\voffset}{.25in}% +                    {\bindingoffset}{36pt}% +                    {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.5 (or so) format. +\def\smallbook{{\globaldefs = 1 +  \parskip = 2pt plus 1pt +  \textleading = 12pt +  % +  \internalpagesizes{7.5in}{5in}% +                    {\voffset}{.25in}% +                    {\bindingoffset}{16pt}% +                    {9.25in}{7in}% +  % +  \lispnarrowing = 0.3in +  \tolerance = 700 +  \hfuzz = 1pt +  \contentsrightmargin = 0pt +  \defbodyindent = .5cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 +  \parskip = 3pt plus 2pt minus 1pt +  \textleading = 13.2pt +  % +  % 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{51\baselineskip}{160mm} +                    {\voffset}{\hoffset}% +                    {\bindingoffset}{44pt}% +                    {297mm}{210mm}% +  % +  \tolerance = 700 +  \hfuzz = 1pt +  \contentsrightmargin = 0pt +  \defbodyindent = 5mm +}} + +% 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}% +                    {\voffset}{4.6mm}% +                    {\bindingoffset}{7mm}% +                    {297mm}{210mm}% +  % +  % Must explicitly reset to 0 because we call \afourpaper. +  \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 +  \afourpaper +  \internalpagesizes{241mm}{165mm}% +                    {\voffset}{-2.95mm}% +                    {\bindingoffset}{7mm}% +                    {297mm}{210mm}% +  \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\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{\textleading}% +  % +  \dimen0 = #1 +  \advance\dimen0 by \voffset +  % +  \dimen2 = \hsize +  \advance\dimen2 by \normaloffset +  % +  \internalpagesizes{#1}{\hsize}% +                    {\voffset}{\normaloffset}% +                    {\bindingoffset}{44pt}% +                    {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% 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 +% otherwise.  Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font.  Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts.  But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% 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. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +{\catcode`\\=\active + @gdef@rawbackslash{@let\=@backslashcurfont} + @gdef@otherbackslash{@let\=@realbackslash} +} + +% \realbackslash is an actual character `\' with catcode other. +{\catcode`\\=\other @gdef@realbackslash{\}} + +% \normalbackslash outputs one backslash in fixed width font. +\def\normalbackslash{{\tt\backslashcurfont}} + +\catcode`\\=\active + +% 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 %$ font-lock fix +  @unsepspaces +} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'.  (Thus, \ is not expandable when this is in +% effect.) +% +@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% 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 +% that, assuming it is called before the first `\' could plausibly occur. +% Also back turn on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% +  @ifx\@eatinput @let\ = @normalbackslash @fi +  @catcode`+=@active +  @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@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 diff --git a/aux-build/ylwrap b/aux-build/ylwrap new file mode 100755 index 0000000..e66a95b --- /dev/null +++ b/aux-build/ylwrap @@ -0,0 +1,222 @@ +#! /bin/sh +# ylwrap - wrapper for lex/yacc invocations. + +scriptversion=2004-09-10.20 + +# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004 +#   Free Software Foundation, Inc. +# +# Written by Tom Tromey <tromey@cygnus.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +case "$1" in +  '') +    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2 +    exit 1 +    ;; +  --basedir) +    basedir=$2 +    shift 2 +    ;; +  -h|--h*) +    cat <<\EOF +Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... + +Wrapper for lex/yacc invocations, renaming files as desired. + +  INPUT is the input file +  OUTPUT is one file PROG generates +  DESIRED is the file we actually want instead of OUTPUT +  PROGRAM is program to run +  ARGS are passed to PROG + +Any number of OUTPUT,DESIRED pairs may be used. + +Report bugs to <bug-automake@gnu.org>. +EOF +    exit 0 +    ;; +  -v|--v*) +    echo "ylwrap $scriptversion" +    exit 0 +    ;; +esac + + +# The input. +input="$1" +shift +case "$input" in +  [\\/]* | ?:[\\/]*) +    # Absolute path; do nothing. +    ;; +  *) +    # Relative path.  Make it absolute. +    input="`pwd`/$input" +    ;; +esac + +pairlist= +while test "$#" -ne 0; do +  if test "$1" = "--"; then +    shift +    break +  fi +  pairlist="$pairlist $1" +  shift +done + +# The program to run. +prog="$1" +shift +# Make any relative path in $prog absolute. +case "$prog" in +  [\\/]* | ?:[\\/]*) ;; +  *[\\/]*) prog="`pwd`/$prog" ;; +esac + +# FIXME: add hostname here for parallel makes that run commands on +# other machines.  But that might take us over the 14-char limit. +dirname=ylwrap$$ +trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15 +mkdir $dirname || exit 1 + +cd $dirname + +case $# in +  0) $prog "$input" ;; +  *) $prog "$@" "$input" ;; +esac +ret=$? + +if test $ret -eq 0; then +  set X $pairlist +  shift +  first=yes +  # Since DOS filename conventions don't allow two dots, +  # the DOS version of Bison writes out y_tab.c instead of y.tab.c +  # and y_tab.h instead of y.tab.h. Test to see if this is the case. +  y_tab_nodot="no" +  if test -f y_tab.c || test -f y_tab.h; then +    y_tab_nodot="yes" +  fi + +  # The directory holding the input. +  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'` +  # Quote $INPUT_DIR so we can use it in a regexp. +  # FIXME: really we should care about more than `.' and `\'. +  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'` + +  while test "$#" -ne 0; do +    from="$1" +    # Handle y_tab.c and y_tab.h output by DOS +    if test $y_tab_nodot = "yes"; then +      if test $from = "y.tab.c"; then +    	from="y_tab.c" +      else +    	if test $from = "y.tab.h"; then +    	  from="y_tab.h" +    	fi +      fi +    fi +    if test -f "$from"; then +      # If $2 is an absolute path name, then just use that, +      # otherwise prepend `../'. +      case "$2" in +    	[\\/]* | ?:[\\/]*) target="$2";; +    	*) target="../$2";; +      esac + +      # We do not want to overwrite a header file if it hasn't +      # changed.  This avoid useless recompilations.  However the +      # parser itself (the first file) should always be updated, +      # because it is the destination of the .y.c rule in the +      # Makefile.  Divert the output of all other files to a temporary +      # file so we can compare them to existing versions. +      if test $first = no; then +	realtarget="$target" +	target="tmp-`echo $target | sed s/.*[\\/]//g`" +      fi +      # Edit out `#line' or `#' directives. +      # +      # We don't want the resulting debug information to point at +      # an absolute srcdir; it is better for it to just mention the +      # .y file with no path. +      # +      # We want to use the real output file name, not yy.lex.c for +      # instance. +      # +      # We want the include guards to be adjusted too. +      FROM=`echo "$from" | sed \ +            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ +            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` +      TARGET=`echo "$2" | sed \ +            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ +            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` + +      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \ +          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$? + +      # Check whether header files must be updated. +      if test $first = no; then +	if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then +	  echo "$2" is unchanged +	  rm -f "$target" +	else +          echo updating "$2" +          mv -f "$target" "$realtarget" +        fi +      fi +    else +      # A missing file is only an error for the first file.  This +      # is a blatant hack to let us support using "yacc -d".  If -d +      # is not specified, we don't want an error when the header +      # file is "missing". +      if test $first = yes; then +        ret=1 +      fi +    fi +    shift +    shift +    first=no +  done +else +  ret=$? +fi + +# Remove the directory. +cd .. +rm -rf $dirname + +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End:  | 
