#! /bin/sh

# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.12 
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.

# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
  --with-gnu-ld           arrange to work with GNU ld."
ac_help="$ac_help
  --with-gnu-as           arrange to work with GNU as."
ac_help="$ac_help
  --with-stabs            arrange to use stabs instead of host debug format."
ac_help="$ac_help
  --with-elf              arrange to use ELF instead of host debug format."
ac_help="$ac_help
  --with-local-prefix=DIR specifies directory to put local include."
ac_help="$ac_help
  --with-gxx-include-dir=DIR
                          specifies directory to put g++ header files."
ac_help="$ac_help
  --enable-c-cpplib       Use cpplib for C."
ac_help="$ac_help
  --enable-threads        enable thread usage for target GCC.
  --enable-threads=LIB    use LIB thread package for target GCC."

# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'

# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12

ac_prev=
for ac_option
do

  # If the previous option needs an argument, assign it.
  if test -n "$ac_prev"; then
    eval "$ac_prev=\$ac_option"
    ac_prev=
    continue
  fi

  case "$ac_option" in
  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) ac_optarg= ;;
  esac

  # Accept the important Cygnus configure options, so we can diagnose typos.

  case "$ac_option" in

  -bindir | --bindir | --bindi | --bind | --bin | --bi)
    ac_prev=bindir ;;
  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
    bindir="$ac_optarg" ;;

  -build | --build | --buil | --bui | --bu)
    ac_prev=build ;;
  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
    build="$ac_optarg" ;;

  -cache-file | --cache-file | --cache-fil | --cache-fi \
  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
    ac_prev=cache_file ;;
  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
    cache_file="$ac_optarg" ;;

  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
    ac_prev=datadir ;;
  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
  | --da=*)
    datadir="$ac_optarg" ;;

  -disable-* | --disable-*)
    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
    # Reject names that are not valid shell variable names.
    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
    fi
    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
    eval "enable_${ac_feature}=no" ;;

  -enable-* | --enable-*)
    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
    # Reject names that are not valid shell variable names.
    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
    fi
    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
    case "$ac_option" in
      *=*) ;;
      *) ac_optarg=yes ;;
    esac
    eval "enable_${ac_feature}='$ac_optarg'" ;;

  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  | --exec | --exe | --ex)
    ac_prev=exec_prefix ;;
  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  | --exec=* | --exe=* | --ex=*)
    exec_prefix="$ac_optarg" ;;

  -gas | --gas | --ga | --g)
    # Obsolete; use --with-gas.
    with_gas=yes ;;

  -help | --help | --hel | --he)
    # Omit some internal or obsolete options to make the list less imposing.
    # This message is too long to be a string in the A/UX 3.1 sh.
    cat << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
  --cache-file=FILE       cache test results in FILE
  --help                  print this message
  --no-create             do not create output files
  --quiet, --silent       do not print \`checking...' messages
  --version               print the version of autoconf that created configure
Directory and file names:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [$ac_default_prefix]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [same as prefix]
  --bindir=DIR            user executables in DIR [EPREFIX/bin]
  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
  --datadir=DIR           read-only architecture-independent data in DIR
                          [PREFIX/share]
  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
                          [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
  --includedir=DIR        C header files in DIR [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
  --infodir=DIR           info documentation in DIR [PREFIX/info]
  --mandir=DIR            man documentation in DIR [PREFIX/man]
  --srcdir=DIR            find the sources in DIR [configure dir or ..]
  --program-prefix=PREFIX prepend PREFIX to installed program names
  --program-suffix=SUFFIX append SUFFIX to installed program names
  --program-transform-name=PROGRAM
                          run sed PROGRAM on installed program names
EOF
    cat << EOF
Host type:
  --build=BUILD           configure for building on BUILD [BUILD=HOST]
  --host=HOST             configure for HOST [guessed]
  --target=TARGET         configure for TARGET [TARGET=HOST]
Features and packages:
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --x-includes=DIR        X include files are in DIR
  --x-libraries=DIR       X library files are in DIR
EOF
    if test -n "$ac_help"; then
      echo "--enable and --with options recognized:$ac_help"
    fi
    exit 0 ;;

  -host | --host | --hos | --ho)
    ac_prev=host ;;
  -host=* | --host=* | --hos=* | --ho=*)
    host="$ac_optarg" ;;

  -includedir | --includedir | --includedi | --included | --include \
  | --includ | --inclu | --incl | --inc)
    ac_prev=includedir ;;
  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
  | --includ=* | --inclu=* | --incl=* | --inc=*)
    includedir="$ac_optarg" ;;

  -infodir | --infodir | --infodi | --infod | --info | --inf)
    ac_prev=infodir ;;
  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
    infodir="$ac_optarg" ;;

  -libdir | --libdir | --libdi | --libd)
    ac_prev=libdir ;;
  -libdir=* | --libdir=* | --libdi=* | --libd=*)
    libdir="$ac_optarg" ;;

  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
  | --libexe | --libex | --libe)
    ac_prev=libexecdir ;;
  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
  | --libexe=* | --libex=* | --libe=*)
    libexecdir="$ac_optarg" ;;

  -localstatedir | --localstatedir | --localstatedi | --localstated \
  | --localstate | --localstat | --localsta | --localst \
  | --locals | --local | --loca | --loc | --lo)
    ac_prev=localstatedir ;;
  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
    localstatedir="$ac_optarg" ;;

  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
    ac_prev=mandir ;;
  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
    mandir="$ac_optarg" ;;

  -nfp | --nfp | --nf)
    # Obsolete; use --without-fp.
    with_fp=no ;;

  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  | --no-cr | --no-c)
    no_create=yes ;;

  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
    no_recursion=yes ;;

  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
  | --oldin | --oldi | --old | --ol | --o)
    ac_prev=oldincludedir ;;
  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
    oldincludedir="$ac_optarg" ;;

  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
    ac_prev=prefix ;;
  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
    prefix="$ac_optarg" ;;

  -program-prefix | --program-prefix | --program-prefi | --program-pref \
  | --program-pre | --program-pr | --program-p)
    ac_prev=program_prefix ;;
  -program-prefix=* | --program-prefix=* | --program-prefi=* \
  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
    program_prefix="$ac_optarg" ;;

  -program-suffix | --program-suffix | --program-suffi | --program-suff \
  | --program-suf | --program-su | --program-s)
    ac_prev=program_suffix ;;
  -program-suffix=* | --program-suffix=* | --program-suffi=* \
  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
    program_suffix="$ac_optarg" ;;

  -program-transform-name | --program-transform-name \
  | --program-transform-nam | --program-transform-na \
  | --program-transform-n | --program-transform- \
  | --program-transform | --program-transfor \
  | --program-transfo | --program-transf \
  | --program-trans | --program-tran \
  | --progr-tra | --program-tr | --program-t)
    ac_prev=program_transform_name ;;
  -program-transform-name=* | --program-transform-name=* \
  | --program-transform-nam=* | --program-transform-na=* \
  | --program-transform-n=* | --program-transform-=* \
  | --program-transform=* | --program-transfor=* \
  | --program-transfo=* | --program-transf=* \
  | --program-trans=* | --program-tran=* \
  | --progr-tra=* | --program-tr=* | --program-t=*)
    program_transform_name="$ac_optarg" ;;

  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil)
    silent=yes ;;

  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
    ac_prev=sbindir ;;
  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
  | --sbi=* | --sb=*)
    sbindir="$ac_optarg" ;;

  -sharedstatedir | --sharedstatedir | --sharedstatedi \
  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  | --sharedst | --shareds | --shared | --share | --shar \
  | --sha | --sh)
    ac_prev=sharedstatedir ;;
  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
  | --sha=* | --sh=*)
    sharedstatedir="$ac_optarg" ;;

  -site | --site | --sit)
    ac_prev=site ;;
  -site=* | --site=* | --sit=*)
    site="$ac_optarg" ;;

  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
    ac_prev=srcdir ;;
  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
    srcdir="$ac_optarg" ;;

  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
  | --syscon | --sysco | --sysc | --sys | --sy)
    ac_prev=sysconfdir ;;
  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
    sysconfdir="$ac_optarg" ;;

  -target | --target | --targe | --targ | --tar | --ta | --t)
    ac_prev=target ;;
  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
    target="$ac_optarg" ;;

  -v | -verbose | --verbose | --verbos | --verbo | --verb)
    verbose=yes ;;

  -version | --version | --versio | --versi | --vers)
    echo "configure generated by autoconf version 2.12"
    exit 0 ;;

  -with-* | --with-*)
    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
    # Reject names that are not valid shell variable names.
    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
    fi
    ac_package=`echo $ac_package| sed 's/-/_/g'`
    case "$ac_option" in
      *=*) ;;
      *) ac_optarg=yes ;;
    esac
    eval "with_${ac_package}='$ac_optarg'" ;;

  -without-* | --without-*)
    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
    # Reject names that are not valid shell variable names.
    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
    fi
    ac_package=`echo $ac_package| sed 's/-/_/g'`
    eval "with_${ac_package}=no" ;;

  --x)
    # Obsolete; use --with-x.
    with_x=yes ;;

  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
  | --x-incl | --x-inc | --x-in | --x-i)
    ac_prev=x_includes ;;
  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
    x_includes="$ac_optarg" ;;

  -x-libraries | --x-libraries | --x-librarie | --x-librari \
  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
    ac_prev=x_libraries ;;
  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
    x_libraries="$ac_optarg" ;;

  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
    ;;

  *)
    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
      echo "configure: warning: $ac_option: invalid host type" 1>&2
    fi
    if test "x$nonopt" != xNONE; then
      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
    fi
    nonopt="$ac_option"
    ;;

  esac
done

if test -n "$ac_prev"; then
  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi

trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15

# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
  exec 6>/dev/null
else
  exec 6>&1
fi
exec 5>./config.log

echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5

# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
  case "$ac_arg" in
  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  | --no-cr | --no-c) ;;
  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
  esac
done

# NLS nuisances.
# Only set these to C if already set.  These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi

# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h

# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=tree.c

# Find the source files, if location was not specified.
if test -z "$srcdir"; then
  ac_srcdir_defaulted=yes
  # Try the directory containing this script, then its parent.
  ac_prog=$0
  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
  srcdir=$ac_confdir
  if test ! -r $srcdir/$ac_unique_file; then
    srcdir=..
  fi
else
  ac_srcdir_defaulted=no
fi
if test ! -r $srcdir/$ac_unique_file; then
  if test "$ac_srcdir_defaulted" = yes; then
    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
  else
    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
  fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`

# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
  if test "x$prefix" != xNONE; then
    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
  else
    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
  fi
fi
for ac_site_file in $CONFIG_SITE; do
  if test -r "$ac_site_file"; then
    echo "loading site script $ac_site_file"
    . "$ac_site_file"
  fi
done

if test -r "$cache_file"; then
  echo "loading cache $cache_file"
  . $cache_file
else
  echo "creating cache $cache_file"
  > $cache_file
fi

ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross

if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
    ac_n= ac_c='
' ac_t='	'
  else
    ac_n=-n ac_c= ac_t=
  fi
else
  ac_n= ac_c='\c' ac_t=
fi




native_prefix=/usr
remove=rm
hard_link=ln
symbolic_link='ln -s'
copy=cp

# Check for additional parameters

# With GNU ld
# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
  withval="$with_gnu_ld"
  gnu_ld=yes
else
  gnu_ld=no
fi


# With GNU as
# Check whether --with-gnu-as or --without-gnu-as was given.
if test "${with_gnu_as+set}" = set; then
  withval="$with_gnu_as"
  gas=yes
else
  gas=no
fi


# With stabs
# Check whether --with-stabs or --without-stabs was given.
if test "${with_stabs+set}" = set; then
  withval="$with_stabs"
  stabs=yes
else
  stabs=no
fi


# With ELF
# Check whether --with-elf or --without-elf was given.
if test "${with_elf+set}" = set; then
  withval="$with_elf"
  elf=yes
else
  elf=no
fi


# Specify the local prefix
# Check whether --with-local-prefix or --without-local-prefix was given.
if test "${with_local_prefix+set}" = set; then
  withval="$with_local_prefix"
  local_prefix=$with_local_prefix
else
  local_prefix=/usr/local
fi


# Default local prefix if it is empty
if [ x$local_prefix = x ]; then
	local_prefix=/usr/local
fi

# Specify the g++ header file directory
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
if test "${with_gxx_include_dir+set}" = set; then
  withval="$with_gxx_include_dir"
  gxx_include_dir=$with_gxx_include_dir
else
  gxx_include_dir='${prefix}/include/g++'
fi


# Default g++ header file directory if it is empty
if [ x$gxx_include_dir = x ]; then
	gxx_include_dir='${prefix}/include/g++'
fi

# Enable use of cpplib for C.
# Check whether --enable-c-cpplib or --disable-c-cpplib was given.
if test "${enable_c_cpplib+set}" = set; then
  enableval="$enable_c_cpplib"
  if [ x$enable_c_cpplib != xno ]; then
  extra_c_objs="${extra_c_objs} cpplib.o cppexp.o cpphash.o cpperror.o"
  extra_c_flags=-DUSE_CPPLIB=1
fi
fi


# Enable threads
# Pass with no value to take the default
# Pass with a value to specify a thread package
# Check whether --enable-threads or --disable-threads was given.
if test "${enable_threads+set}" = set; then
  enableval="$enable_threads"
  if [ x$enable_threads = xno ]; then
	enable_threads=''
fi
else
  enable_threads=''
fi


# Check if a valid thread package
case x${enable_threads} in
	x | xno)
		# No threads
		thread_file='single'
		;;
	xyes)
		# default
		thread_file=''
		;;
	xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
	xsolaris | xwin32)
		thread_file=$enable_threads
		;;
	*)
		echo "$enable_threads is an unknown thread package" 1>&2
		exit 1
		;;
esac

# Determine the host, build, and target systems
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
  if test -f $ac_dir/install-sh; then
    ac_aux_dir=$ac_dir
    ac_install_sh="$ac_aux_dir/install-sh -c"
    break
  elif test -f $ac_dir/install.sh; then
    ac_aux_dir=$ac_dir
    ac_install_sh="$ac_aux_dir/install.sh -c"
    break
  fi
done
if test -z "$ac_aux_dir"; then
  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
fi
ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.


# Do some error checking and defaulting for the host and target type.
# The inputs are:
#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
#
# The rules are:
# 1. You are not allowed to specify --host, --target, and nonopt at the
#    same time.
# 2. Host defaults to nonopt.
# 3. If nonopt is not specified, then host defaults to the current host,
#    as determined by config.guess.
# 4. Target and build default to nonopt.
# 5. If nonopt is not specified, then target and build default to host.

# The aliases save the names the user supplied, while $host etc.
# will get canonicalized.
case $host---$target---$nonopt in
NONE---*---* | *---NONE---* | *---*---NONE) ;;
*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
esac


# Make sure we can run config.sub.
if $ac_config_sub sun4 >/dev/null 2>&1; then :
else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi

echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:713: checking host system type" >&5

host_alias=$host
case "$host_alias" in
NONE)
  case $nonopt in
  NONE)
    if host_alias=`$ac_config_guess`; then :
    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
    fi ;;
  *) host_alias=$nonopt ;;
  esac ;;
esac

host=`$ac_config_sub $host_alias`
host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6

echo $ac_n "checking target system type""... $ac_c" 1>&6
echo "configure:734: checking target system type" >&5

target_alias=$target
case "$target_alias" in
NONE)
  case $nonopt in
  NONE) target_alias=$host_alias ;;
  *) target_alias=$nonopt ;;
  esac ;;
esac

target=`$ac_config_sub $target_alias`
target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6

echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:752: checking build system type" >&5

build_alias=$build
case "$build_alias" in
NONE)
  case $nonopt in
  NONE) build_alias=$host_alias ;;
  *) build_alias=$nonopt ;;
  esac ;;
esac

build=`$ac_config_sub $build_alias`
build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$build" 1>&6

test "$host_alias" != "$target_alias" &&
  test "$program_prefix$program_suffix$program_transform_name" = \
    NONENONEs,x,x, &&
  program_prefix=${target_alias}-


# Find the native compiler
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:779: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  if test -n "$CC"; then
  ac_cv_prog_CC="$CC" # Let the user override the test.
else
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  for ac_dir in $PATH; do
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$ac_word; then
      ac_cv_prog_CC="gcc"
      break
    fi
  done
  IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
  echo "$ac_t""$CC" 1>&6
else
  echo "$ac_t""no" 1>&6
fi

if test -z "$CC"; then
  # Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:808: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  if test -n "$CC"; then
  ac_cv_prog_CC="$CC" # Let the user override the test.
else
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  ac_prog_rejected=no
  for ac_dir in $PATH; do
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$ac_word; then
      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
	continue
      fi
      ac_cv_prog_CC="cc"
      break
    fi
  done
  IFS="$ac_save_ifs"
if test $ac_prog_rejected = yes; then
  # We found a bogon in the path, so make sure we never use it.
  set dummy $ac_cv_prog_CC
  shift
  if test $# -gt 0; then
    # We chose a different compiler from the bogus one.
    # However, it has the same basename, so the bogon will be chosen
    # first if we set CC to just the basename; use the full file name.
    shift
    set dummy "$ac_dir/$ac_word" "$@"
    shift
    ac_cv_prog_CC="$@"
  fi
fi
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
  echo "$ac_t""$CC" 1>&6
else
  echo "$ac_t""no" 1>&6
fi

  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi

echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:856: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5

ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross

cat > conftest.$ac_ext <<EOF
#line 866 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  ac_cv_prog_cc_works=yes
  # If we can't run a trivial program, we are probably using a cross compiler.
  if (./conftest; exit) 2>/dev/null; then
    ac_cv_prog_cc_cross=no
  else
    ac_cv_prog_cc_cross=yes
  fi
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  ac_cv_prog_cc_works=no
fi
rm -fr conftest*

echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:890: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross

echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:895: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.c <<EOF
#ifdef __GNUC__
  yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
  ac_cv_prog_gcc=yes
else
  ac_cv_prog_gcc=no
fi
fi

echo "$ac_t""$ac_cv_prog_gcc" 1>&6

if test $ac_cv_prog_gcc = yes; then
  GCC=yes
  ac_test_CFLAGS="${CFLAGS+set}"
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS=
  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:919: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
  ac_cv_prog_cc_g=yes
else
  ac_cv_prog_cc_g=no
fi
rm -f conftest*

fi

echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
  if test "$ac_test_CFLAGS" = set; then
    CFLAGS="$ac_save_CFLAGS"
  elif test $ac_cv_prog_cc_g = yes; then
    CFLAGS="-g -O2"
  else
    CFLAGS="-O2"
  fi
else
  GCC=
  test "${CFLAGS+set}" = set || CFLAGS="-g"
fi

echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:947: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftestmake <<\EOF
all:
	@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
  eval ac_cv_prog_make_${ac_make}_set=yes
else
  eval ac_cv_prog_make_${ac_make}_set=no
fi
rm -f conftestmake
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
  echo "$ac_t""yes" 1>&6
  SET_MAKE=
else
  echo "$ac_t""no" 1>&6
  SET_MAKE="MAKE=${MAKE-make}"
fi


# Find some useful tools
for ac_prog in mawk gawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:980: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  if test -n "$AWK"; then
  ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  for ac_dir in $PATH; do
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$ac_word; then
      ac_cv_prog_AWK="$ac_prog"
      break
    fi
  done
  IFS="$ac_save_ifs"
fi
fi
AWK="$ac_cv_prog_AWK"
if test -n "$AWK"; then
  echo "$ac_t""$AWK" 1>&6
else
  echo "$ac_t""no" 1>&6
fi

test -n "$AWK" && break
done

# Extract the first word of "flex", so it can be a program name with args.
set dummy flex; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1011: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  if test -n "$LEX"; then
  ac_cv_prog_LEX="$LEX" # Let the user override the test.
else
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  for ac_dir in $PATH; do
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$ac_word; then
      ac_cv_prog_LEX="flex"
      break
    fi
  done
  IFS="$ac_save_ifs"
  test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex"
fi
fi
LEX="$ac_cv_prog_LEX"
if test -n "$LEX"; then
  echo "$ac_t""$LEX" 1>&6
else
  echo "$ac_t""no" 1>&6
fi

if test -z "$LEXLIB"
then
  case "$LEX" in
  flex*) ac_lib=fl ;;
  *) ac_lib=l ;;
  esac
  echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
echo "configure:1044: checking for yywrap in -l$ac_lib" >&5
ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  ac_save_LIBS="$LIBS"
LIBS="-l$ac_lib  $LIBS"
cat > conftest.$ac_ext <<EOF
#line 1052 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char yywrap();

int main() {
yywrap()
; return 0; }
EOF
if { (eval echo configure:1063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_lib_$ac_lib_var=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"

fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
  echo "$ac_t""yes" 1>&6
  LEXLIB="-l$ac_lib"
else
  echo "$ac_t""no" 1>&6
fi

fi

# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1088: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  if test -n "$RANLIB"; then
  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  for ac_dir in $PATH; do
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$ac_word; then
      ac_cv_prog_RANLIB="ranlib"
      break
    fi
  done
  IFS="$ac_save_ifs"
  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
  echo "$ac_t""$RANLIB" 1>&6
else
  echo "$ac_t""no" 1>&6
fi

for ac_prog in 'bison -y' byacc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1119: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  if test -n "$YACC"; then
  ac_cv_prog_YACC="$YACC" # Let the user override the test.
else
  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  for ac_dir in $PATH; do
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$ac_word; then
      ac_cv_prog_YACC="$ac_prog"
      break
    fi
  done
  IFS="$ac_save_ifs"
fi
fi
YACC="$ac_cv_prog_YACC"
if test -n "$YACC"; then
  echo "$ac_t""$YACC" 1>&6
else
  echo "$ac_t""no" 1>&6
fi

test -n "$YACC" && break
done
test -n "$YACC" || YACC="yacc"

# Find a good install program.  We prefer a C program (faster),
# so one script is as good as another.  But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:1159: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="${IFS}:"
  for ac_dir in $PATH; do
    # Account for people who put trailing slashes in PATH elements.
    case "$ac_dir/" in
    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
    *)
      # OSF1 and SCO ODT 3.0 have their own names for install.
      for ac_prog in ginstall installbsd scoinst install; do
        if test -f $ac_dir/$ac_prog; then
	  if test $ac_prog = install &&
            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
	    # AIX install.  It has an incompatible calling convention.
	    # OSF/1 installbsd also uses dspmsg, but is usable.
	    :
	  else
	    ac_cv_path_install="$ac_dir/$ac_prog -c"
	    break 2
	  fi
	fi
      done
      ;;
    esac
  done
  IFS="$ac_save_IFS"

fi
  if test "${ac_cv_path_install+set}" = set; then
    INSTALL="$ac_cv_path_install"
  else
    # As a last resort, use the slow shell script.  We don't cache a
    # path for INSTALL within a source directory, because that will
    # break other packages using the cache if that directory is
    # removed, or if the path is relative.
    INSTALL="$ac_install_sh"
  fi
fi
echo "$ac_t""$INSTALL" 1>&6

# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'

test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'


echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1210: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
  CPP=
fi
if test -z "$CPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
    # This must be in double quotes, not single quotes, because CPP may get
  # substituted into the Makefile and "${CC-cc}" will confuse make.
  CPP="${CC-cc} -E"
  # On the NeXT, cc -E runs the code through the compiler's parser,
  # not just through cpp.
  cat > conftest.$ac_ext <<EOF
#line 1225 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1231: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
  :
else
  echo "$ac_err" >&5
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  CPP="${CC-cc} -E -traditional-cpp"
  cat > conftest.$ac_ext <<EOF
#line 1242 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1248: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
  :
else
  echo "$ac_err" >&5
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  CPP=/lib/cpp
fi
rm -f conftest*
fi
rm -f conftest*
  ac_cv_prog_CPP="$CPP"
fi
  CPP="$ac_cv_prog_CPP"
else
  ac_cv_prog_CPP="$CPP"
fi
echo "$ac_t""$CPP" 1>&6

echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:1271: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1276 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
  rm -rf conftest*
  ac_cv_header_stdc=yes
else
  echo "$ac_err" >&5
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  ac_cv_header_stdc=no
fi
rm -f conftest*

if test $ac_cv_header_stdc = yes; then
  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 1301 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  egrep "memchr" >/dev/null 2>&1; then
  :
else
  rm -rf conftest*
  ac_cv_header_stdc=no
fi
rm -f conftest*

fi

if test $ac_cv_header_stdc = yes; then
  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 1319 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  egrep "free" >/dev/null 2>&1; then
  :
else
  rm -rf conftest*
  ac_cv_header_stdc=no
fi
rm -f conftest*

fi

if test $ac_cv_header_stdc = yes; then
  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
if test "$cross_compiling" = yes; then
  :
else
  cat > conftest.$ac_ext <<EOF
#line 1340 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int main () { int i; for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }

EOF
if { (eval echo configure:1351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
  :
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -fr conftest*
  ac_cv_header_stdc=no
fi
rm -fr conftest*
fi

fi
fi

echo "$ac_t""$ac_cv_header_stdc" 1>&6
if test $ac_cv_header_stdc = yes; then
  cat >> confdefs.h <<\EOF
#define STDC_HEADERS 1
EOF

fi

echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
echo "configure:1375: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1380 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
int main() {
struct tm *tp;
; return 0; }
EOF
if { (eval echo configure:1389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  ac_cv_header_time=yes
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  ac_cv_header_time=no
fi
rm -f conftest*
fi

echo "$ac_t""$ac_cv_header_time" 1>&6
if test $ac_cv_header_time = yes; then
  cat >> confdefs.h <<\EOF
#define TIME_WITH_SYS_TIME 1
EOF

fi

for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h fcntl.h unistd.h sys/file.h sys/time.h sys/resource.h sys/param.h sys/times.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:1413: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1418 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1423: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
  rm -rf conftest*
  eval "ac_cv_header_$ac_safe=yes"
else
  echo "$ac_err" >&5
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
  cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done


# Use <inttypes.h> only if it exists,
# doesn't clash with <sys/types.h>, and declares intmax_t.
echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6
echo "configure:1453: checking for inttypes.h" >&5
if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1458 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <inttypes.h>
int main() {
intmax_t i = -1;
; return 0; }
EOF
if { (eval echo configure:1466: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_header_inttypes_h=yes
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_header_inttypes_h=no
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_header_inttypes_h" 1>&6
if test $gcc_cv_header_inttypes_h = yes; then
  cat >> confdefs.h <<\EOF
#define HAVE_INTTYPES_H 1
EOF

fi

for ac_func in strerror
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1489: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1494 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in putenv
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1544: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1549 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in popen
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1599: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1604 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in vprintf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1654: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1659 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in bcopy
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1709: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1714 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in bzero
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1764: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1769 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in bcmp
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1819: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1824 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in index
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1874: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1879 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in rindex
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1929: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1934 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in kill
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1984: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 1989 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:2012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in getrlimit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2039: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2044 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:2067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done

for ac_func in setrlimit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2094: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2099 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
    which can conflict with char $ac_func(); below.  */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error.  */
/* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
char $ac_func();

int main() {

/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS.  Some functions are actually named
    something starting with __ and the normal name is an alias.  */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif

; return 0; }
EOF
if { (eval echo configure:2122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=yes"
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi

if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
  echo "$ac_t""yes" 1>&6
    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
 
else
  echo "$ac_t""no" 1>&6
fi
done


echo $ac_n "checking whether malloc must be declared""... $ac_c" 1>&6
echo "configure:2148: checking whether malloc must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_malloc'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2153 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) malloc
; return 0; }
EOF
if { (eval echo configure:2180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_malloc=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_malloc=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_malloc" 1>&6
if test $gcc_cv_decl_needed_malloc = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo malloc | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi

echo $ac_n "checking whether realloc must be declared""... $ac_c" 1>&6
echo "configure:2202: checking whether realloc must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_realloc'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2207 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) realloc
; return 0; }
EOF
if { (eval echo configure:2234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_realloc=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_realloc=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_realloc" 1>&6
if test $gcc_cv_decl_needed_realloc = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo realloc | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi

echo $ac_n "checking whether calloc must be declared""... $ac_c" 1>&6
echo "configure:2256: checking whether calloc must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_calloc'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2261 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) calloc
; return 0; }
EOF
if { (eval echo configure:2288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_calloc=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_calloc=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_calloc" 1>&6
if test $gcc_cv_decl_needed_calloc = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo calloc | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi

echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6
echo "configure:2310: checking whether free must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_free'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2315 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) free
; return 0; }
EOF
if { (eval echo configure:2342: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_free=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_free=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_free" 1>&6
if test $gcc_cv_decl_needed_free = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo free | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi

echo $ac_n "checking whether index must be declared""... $ac_c" 1>&6
echo "configure:2364: checking whether index must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_index'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2369 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) index
; return 0; }
EOF
if { (eval echo configure:2396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_index=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_index=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_index" 1>&6
if test $gcc_cv_decl_needed_index = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo index | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi

echo $ac_n "checking whether rindex must be declared""... $ac_c" 1>&6
echo "configure:2418: checking whether rindex must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_rindex'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2423 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) rindex
; return 0; }
EOF
if { (eval echo configure:2450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_rindex=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_rindex=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_rindex" 1>&6
if test $gcc_cv_decl_needed_rindex = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo rindex | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi

echo $ac_n "checking whether getenv must be declared""... $ac_c" 1>&6
echo "configure:2472: checking whether getenv must be declared" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_needed_getenv'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2477 "configure"
#include "confdefs.h"

#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifndef HAVE_RINDEX
#define rindex strrchr
#endif
#ifndef HAVE_INDEX
#define index strchr
#endif
int main() {
char *(*pfn) = (char *(*)) getenv
; return 0; }
EOF
if { (eval echo configure:2504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  gcc_cv_decl_needed_getenv=no
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  gcc_cv_decl_needed_getenv=yes
fi
rm -f conftest*
fi

echo "$ac_t""$gcc_cv_decl_needed_getenv" 1>&6
if test $gcc_cv_decl_needed_getenv = yes; then
  gcc_tr_decl=NEED_DECLARATION_`echo getenv | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
  cat >> confdefs.h <<EOF
#define $gcc_tr_decl 1
EOF

fi


echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
echo "configure:2527: checking for sys_siglist declaration in signal.h or unistd.h" >&5
if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then
  echo $ac_n "(cached) $ac_c" 1>&6
else
  cat > conftest.$ac_ext <<EOF
#line 2532 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
/* NetBSD declares sys_siglist in unistd.h.  */
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
int main() {
char *msg = *(sys_siglist + 1);
; return 0; }
EOF
if { (eval echo configure:2544: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
  rm -rf conftest*
  ac_cv_decl_sys_siglist=yes
else
  echo "configure: failed program was:" >&5
  cat conftest.$ac_ext >&5
  rm -rf conftest*
  ac_cv_decl_sys_siglist=no
fi
rm -f conftest*
fi

echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6
if test $ac_cv_decl_sys_siglist = yes; then
  cat >> confdefs.h <<\EOF
#define SYS_SIGLIST_DECLARED 1
EOF

fi


# File extensions
manext='.1'
objext='.o'



build_xm_file=
build_broken_install=
build_install_headers_dir=install-headers-tar
build_exeext=
host_xm_file=
host_xmake_file=
host_truncate_target=

# Decode the host machine, then the target machine.
# For the host machine, we save the xm_file variable as host_xm_file;
# then we decode the target machine and forget everything else
# that came from the host machine.
for machine in $build $host $target; do

	out_file=
	xmake_file=
	tmake_file=
	extra_headers=
	extra_passes=
	extra_parts=
	extra_programs=
	extra_objs=
	extra_host_objs=
	extra_gcc_objs=
	float_format=
	# Set this to force installation and use of collect2.
	use_collect2=
	# Set this to override the default target model.
	target_cpu_default=
	# Set this to force use of install.sh.
	broken_install=
	# Set this to control which fixincludes program to use.
	fixincludes=fixincludes
	# Set this to control how the header file directory is installed.
	install_headers_dir=install-headers-tar
	# Set this to a non-empty list of args to pass to cpp if the target
	# wants its .md file passed through cpp.
	md_cppflags=
	# Set this if directory names should be truncated to 14 characters.
	truncate_target=
	# Set this if gdb needs a dir command with `dirname $out_file`
	gdb_needs_out_file_path=
	# Set this if the build machine requires executables to have a
	# file name suffix.
	exeext=

	# Set default cpu_type, tm_file and xm_file so it can be updated in
	# each machine entry.
	cpu_type=`echo $machine | sed 's/-.*$//'`
	case $machine in
	alpha*-*-*)
		cpu_type=alpha
		;;
	arm*-*-*)
		cpu_type=arm
		;;
	c*-convex-*)
		cpu_type=convex
		;;
	i[3456]86-*-*)
		cpu_type=i386
		;;
	hppa*-*-*)
		cpu_type=pa
		;;
	m68000-*-*)
		cpu_type=m68k
		;;
	mips*-*-*)
		cpu_type=mips
		;;
	powerpc*-*-*)
		cpu_type=rs6000
		;;
	pyramid-*-*)
		cpu_type=pyr
		;;
	sparc*-*-*)
		cpu_type=sparc
		;;
	esac

	tm_file=${cpu_type}/${cpu_type}.h
	xm_file=${cpu_type}/xm-${cpu_type}.h
	
	case $machine in
	# Support site-specific machine types.
	*local*)
		cpu_type=`echo $machine | sed -e 's/-.*//'`
		rest=`echo $machine | sed -e "s/$cpu_type-//"`
		xm_file=${cpu_type}/xm-$rest.h
		tm_file=${cpu_type}/$rest.h
		if [ -f $srcdir/config/${cpu_type}/x-$rest ] ; \
		then xmake_file=${cpu_type}/x-$rest; \
		else true; \
		fi
		if [ -f $srcdir/config/${cpu_type}/t-$rest ] ; \
		then tmake_file=${cpu_type}/t-$rest; \
		else true; \
		fi
		;;
	1750a-*-*)
		;;
	a29k-*-bsd* | a29k-*-sym1*)
		tm_file="${tm_file} a29k/unix.h"
		xm_file=a29k/xm-unix.h
		xmake_file=a29k/x-unix
		use_collect2=yes
		;;
	a29k-*-udi | a29k-*-coff)
		tm_file="${tm_file} dbxcoff.h a29k/udi.h"
		tmake_file=a29k/t-a29kbare
		;;
	a29k-*-vxworks*)
		tm_file="${tm_file} dbxcoff.h a29k/udi.h a29k/vx29k.h"
		tmake_file=a29k/t-vx29k
		extra_parts="crtbegin.o crtend.o"
		;;
	a29k-*-*)			# Default a29k environment.
		use_collect2=yes
		;;
	alpha*-*-linux-gnuecoff*)
		tm_file="${tm_file} alpha/linux.h"
		xm_file="${xm_file} alpha/xm-linux.h"
		target_cpu_default="MASK_GAS"
		gas=no
		xmake_file=none
		fixincludes=Makefile.in
		gas=yes gnu_ld=yes
		;;
	alpha*-*-linux-gnulibc1*)
		tm_file="${tm_file} alpha/linux.h alpha/elf.h"
		xm_file="${xm_file} alpha/xm-linux.h"
		target_cpu_default="MASK_GAS"
		tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux"
		xmake_file=none
		fixincludes=Makefile.in
		gas=yes gnu_ld=yes
 		if [ x$enable_threads = xyes ]; then
 			thread_file='posix'
 		fi
		;;
	alpha*-*-linux-gnu*)
		tm_file="${tm_file} alpha/linux.h alpha/elf.h"
		xm_file="${xm_file} alpha/xm-linux.h"
		target_cpu_default="MASK_GAS"
		tmake_file="t-linux alpha/t-linux"
		xmake_file=none
		fixincludes=Makefile.in
		gas=yes gnu_ld=yes
 		if [ x$enable_threads = xyes ]; then
 			thread_file='posix'
 		fi
		;;
	alpha*-dec-osf*)
		if [ x$stabs = xyes ]
		then
			tm_file="${tm_file} dbx.h"
		fi
		if [ x$gas != xyes ]
		then
			extra_passes="mips-tfile mips-tdump"
		fi
		broken_install=yes
		use_collect2=yes
		case $machine in
		  *-*-osf1.2)
		    tm_file="${tm_file} alpha/osf12.h alpha/osf2or3.h"
		    ;;
		  *-*-osf[23]*)
		    tm_file="${tm_file} alpha/osf2or3.h"
		    ;;
		  *-*-osf4*)
		    # Some versions of OSF4 (specifically X4.0-9 296.7) have
		    # a broken tar, so we use cpio instead.
		    install_headers_dir=install-headers-cpio
		    ;;
		esac
		case $machine in
		  *-*-osf4.0[b-z] | *-*-osf4.[1-9]*)
		    target_cpu_default=MASK_SUPPORT_ARCH
		    ;;
		esac
		;;
	alpha*-*-winnt3*)
		tm_file="${tm_file} alpha/win-nt.h"
		target_cpu_default=MASK_WINDOWS_NT
		xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h"
		tmake_file=t-libc-ok
		xmake_file=winnt/x-winnt
		extra_host_objs=oldnames.o
		extra_gcc_objs="spawnv.o oldnames.o"
		fixincludes=fixinc.winnt
		if [ x$gnu_ld != xyes ]
		then
			extra_programs=ld.exe
		fi
 		if [ x$enable_threads = xyes ]; then
			thread_file='win32'
		fi
		;;
	alpha*-dec-vms*)
		tm_file=alpha/vms.h
		xm_file="${xm_file} alpha/xm-vms.h"
		tmake_file=alpha/t-vms
		fixincludes=Makefile.in
		;;
	arc-*-elf*)
		extra_parts="crtinit.o crtfini.o"
		;;
	arm-*-coff* | armel-*-coff*)
		tm_file=arm/coff.h
		tmake_file=arm/t-bare
		;;
	arm-*-riscix1.[01]*)		# Acorn RISC machine (early versions)
		tm_file=arm/riscix1-1.h
		use_collect2=yes
		;;
	arm-*-riscix*)			# Acorn RISC machine
		if [ x$gas = xyes ]
		then
		    tm_file=arm/rix-gas.h
		else
		    tm_file=arm/riscix.h
		fi
		xmake_file=arm/x-riscix
		tmake_file=arm/t-riscix
		use_collect2=yes
		;;
	arm-semi-aout | armel-semi-aout)
		tm_file=arm/semi.h
		tmake_file=arm/t-semi
		fixincludes=Makefile.in # There is nothing to fix
		;;
	arm-semi-aof | armel-semi-aof)
		tm_file=arm/semiaof.h
		tmake_file=arm/t-semiaof
		fixincludes=Makefile.in # There is nothing to fix
		;;
	arm-*-netbsd*)
		tm_file=arm/netbsd.h
		xm_file=arm/xm-netbsd.h
		tmake_file="t-netbsd arm/t-netbsd"
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		;;
	arm-*-linux-gnuaout*)		# ARM GNU/Linux
		cpu_type=arm
		xm_file=arm/xm-linux.h
		xmake_file=x-linux
		tm_file=arm/linux-gas.h
		tmake_file=arm/t-linux
		fixincludes=Makefile.in
		broken_install=yes
		gnu_ld=yes
		;;
	arm-*-aout)
		tm_file=arm/aout.h
		tmake_file=arm/t-bare
		;;
	c1-convex-*)			# Convex C1
		target_cpu_default=1
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	c2-convex-*)			# Convex C2
		target_cpu_default=2
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	c32-convex-*)
		target_cpu_default=4
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	c34-convex-*)
		target_cpu_default=8
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	c38-convex-*)
		target_cpu_default=16		
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	clipper-intergraph-clix*)
		tm_file="${tm_file} svr3.h clipper/clix.h"
		xm_file=clipper/xm-clix.h
		xmake_file=clipper/x-clix
		extra_headers=va-clipper.h
		extra_parts="crtbegin.o crtend.o"
		install_headers_dir=install-headers-cpio
		broken_install=yes
		;;
	dsp16xx-*)
		;;
	elxsi-elxsi-*)
		use_collect2=yes
		;;
# This hasn't been upgraded to GCC 2.
#	fx80-alliant-*)			# Alliant FX/80
#		;;
	h8300-*-*)
		float_format=i32
		;;
	hppa1.1-*-pro*)
		tm_file="pa/pa-pro.h ${tm_file} pa/pa-pro-end.h libgloss.h"
		xm_file=pa/xm-papro.h
		tmake_file=pa/t-pro
		;;
	hppa1.1-*-osf*)
		target_cpu_default=1
		tm_file="${tm_file} pa/pa-osf.h"
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	hppa1.1-*-rtems*)
		tm_file="pa/pa-pro.h ${tm_file} pa/pa-pro-end.h libgloss.h pa/rtems.h"
		xm_file=pa/xm-papro.h
		tmake_file=pa/t-pro
		;;
	hppa1.0-*-osf*)
		tm_file="${tm_file} pa/pa-osf.h"
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	hppa1.1-*-bsd*)
		target_cpu_default=1
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	hppa1.0-*-bsd*)
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	hppa1.0-*-hpux7*)
		tm_file="pa/pa-oldas.h ${tm_file} pa/pa-hpux7.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.0-*-hpux8.0[0-2]*)
		tm_file="${tm_file} pa/pa-hpux.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		else
			tm_file="pa/pa-oldas.h ${tm_file}"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.1-*-hpux8.0[0-2]*)
		target_cpu_default=1
		tm_file="${tm_file} pa/pa-hpux.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		else
			tm_file="pa/pa-oldas.h ${tm_file}"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.1-*-hpux8*)
		target_cpu_default=1
		tm_file="${tm_file} pa/pa-hpux.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.0-*-hpux8*)
		tm_file="${tm_file} pa/pa-hpux.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.1-*-hpux10*)
		target_cpu_default=1
		tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux10.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.0-*-hpux10*)
		tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux10.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.1-*-hpux*)
		target_cpu_default=1
		tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux9.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.0-*-hpux*)
		tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux9.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.1-*-hiux*)
		target_cpu_default=1
		tm_file="${tm_file} pa/pa-hpux.h pa/pa-hiux.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa1.0-*-hiux*)
		tm_file="${tm_file} pa/pa-hpux.h pa/pa-hiux.h"
		xm_file=pa/xm-pahpux.h
		xmake_file=pa/x-pa-hpux
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} pa/pa-gas.h"
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		;;
	hppa*-*-lites*)
		target_cpu_default=1
		use_collect2=yes
		fixincludes=Makefile.in
		;;
	i370-*-mvs*)
		;;
	i[3456]86-ibm-aix*)		# IBM PS/2 running AIX
                if [ x$gas = xyes ]
		then
			tm_file=i386/aix386.h
			extra_parts="crtbegin.o crtend.o"
			tmake_file=i386/t-crtstuff
		else
			tm_file=i386/aix386ng.h
			use_collect2=yes
		fi
		xm_file=i386/xm-aix.h
		xmake_file=i386/x-aix
		broken_install=yes
		;;
	i486-ncr-sysv4*)		# NCR 3000 - i486 running system V.4
		xm_file=i386/xm-sysv4.h
		xmake_file=i386/x-ncr3000
		if [ x$stabs = xyes -a x$gas = xyes ]
		then
			tm_file=i386/sysv4gdb.h
		else
			tm_file=i386/sysv4.h
		fi
		extra_parts="crtbegin.o crtend.o"
		tmake_file=i386/t-crtpic
		;;
	i[3456]86-next-*)
		tm_file=i386/next.h
		xm_file=i386/xm-next.h
		tmake_file=i386/t-next
		xmake_file=i386/x-next
		extra_objs=nextstep.o
 		if [ x$enable_threads = xyes ]; then
			thread_file='mach'
		fi
		;;
	i[3456]86-sequent-bsd*) 		# 80386 from Sequent
		use_collect2=yes
		if [ x$gas = xyes ]
		then
			tm_file=i386/seq-gas.h
		else
			tm_file=i386/sequent.h
		fi
		;;
	i[3456]86-sequent-ptx1*)
		xm_file=i386/xm-sysv3.h
		xmake_file=i386/x-sysv3
		tm_file=i386/seq-sysv3.h
		tmake_file=i386/t-crtstuff
		fixincludes=fixinc.ptx
		extra_parts="crtbegin.o crtend.o"
		install_headers_dir=install-headers-cpio
		broken_install=yes
		;;
	i[3456]86-sequent-ptx2* | i[3456]86-sequent-sysv3*)
		xm_file=i386/xm-sysv3.h
		xmake_file=i386/x-sysv3
		tm_file=i386/seq2-sysv3.h
		tmake_file=i386/t-crtstuff
		extra_parts="crtbegin.o crtend.o"
		fixincludes=fixinc.ptx
		install_headers_dir=install-headers-cpio
		broken_install=yes
		;;
	i[3456]86-sequent-ptx4* | i[3456]86-sequent-sysv4*)
		xm_file=i386/xm-sysv4.h
		xmake_file=x-svr4
		tm_file=i386/ptx4-i.h
		tmake_file=t-svr4
		extra_parts="crtbegin.o crtend.o"
		fixincludes=fixinc.ptx
		install_headers_dir=install-headers-cpio
		broken_install=yes
		;;
	i386-sun-sunos*)		# Sun i386 roadrunner
		xm_file=i386/xm-sun.h
		tm_file=i386/sun.h
		use_collect2=yes
		;;
	i[3456]86-*-aout*)
		tm_file=i386/i386-aout.h
		tmake_file=i386/t-i386bare
		;;
	i[3456]86-*-bsdi* | i[345]86-*-bsd386*)
		tm_file=i386/bsd386.h
		xm_file=i386/xm-bsd386.h
#		tmake_file=t-libc-ok
		;;
	i[3456]86-*-bsd*)
		tm_file=i386/386bsd.h
		xm_file=i386/xm-bsd386.h
#		tmake_file=t-libc-ok
# Next line turned off because both 386BSD and BSD/386 use GNU ld.
#		use_collect2=yes
		;;
	i[3456]86-*-freebsdelf*)
		tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h"
		# On FreeBSD, the headers are already ok, except for math.h.
		fixincludes=fixinc.math
		tmake_file=i386/t-freebsd
		gas=yes
		gnu_ld=yes
		stabs=yes
		;;
	i[3456]86-*-freebsd*)
		tm_file=i386/freebsd.h
		# On FreeBSD, the headers are already ok, except for math.h.
		fixincludes=fixinc.math
		tmake_file=i386/t-freebsd
		;;
	i[3456]86-*-netbsd*)
		tm_file=i386/netbsd.h
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		tmake_file=t-netbsd
		;;
	i[3456]86-*-coff*)
		tm_file=i386/i386-coff.h
		tmake_file=i386/t-i386bare
		;;
	i[3456]86-*-isc*)		# 80386 running ISC system
		xm_file=i386/xm-isc.h
		case $machine in
		  i[345]86-*-isc[34]*)
		    xmake_file=i386/x-isc3
		    ;;
		  *)
		    xmake_file=i386/x-isc
		    ;;
		esac
                if [ x$gas = xyes -a x$stabs = xyes ]
		then
			tm_file=i386/iscdbx.h
			tmake_file=i386/t-svr3dbx
			extra_parts="svr3.ifile svr3z.ifile"
		else
			tm_file=i386/isccoff.h
			tmake_file=i386/t-crtstuff
			extra_parts="crtbegin.o crtend.o"
		fi
		install_headers_dir=install-headers-cpio
		broken_install=yes
		;;
	i[3456]86-*-linux-gnuoldld*)	# Intel 80386's running GNU/Linux
		xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers
		xmake_file=x-linux-aout
		tmake_file="t-linux-aout i386/t-crtstuff"
		tm_file=i386/linux-oldld.h
		fixincludes=Makefile.in
		broken_install=yes
		gnu_ld=yes
		;;
	i[3456]86-*-linux-gnuaout*)	# Intel 80386's running GNU/Linux
		xm_file=i386/xm-linux.h		# with a.out format
		xmake_file=x-linux-aout
		tmake_file="t-linux-aout i386/t-crtstuff"
		tm_file=i386/linux-aout.h
		fixincludes=Makefile.in #The headers are ok already.
		broken_install=yes
		gnu_ld=yes
		;;
	i[3456]86-*-linux-gnulibc1)
		xm_file=i386/xm-linux.h	# Intel 80386's running GNU/Linux
		xmake_file=x-linux	# with ELF format using the
		tm_file=i386/linux.h	# GNU/Linux C library 5
		tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff"
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		fixincludes=Makefile.in # The headers are ok already.
		broken_install=yes
		gnu_ld=yes
 		if [ x$enable_threads = xyes ]; then
 			thread_file='single'
 		fi
		;;
	i[3456]86-*-linux-gnu*)	# Intel 80386's running GNU/Linux
		xm_file=i386/xm-linux.h # with ELF format using glibc 2
		xmake_file=x-linux	# aka GNU/Linux C library 6
		tm_file=i386/linux.h
		tmake_file="t-linux i386/t-crtstuff"
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		fixincludes=Makefile.in # The headers are ok already.
		broken_install=yes
		gnu_ld=yes
 		if [ x$enable_threads = xyes ]; then
 			thread_file='posix'
 		fi
		;;
	i[3456]86-*-gnu*)
		;;
	i[3456]86-go32-msdos | i[3456]86-*-go32*)
		xm_file=i386/xm-go32.h
		tm_file=i386/go32.h
		tmake_file=i386/t-go32
		;;
	i[3456]86-moss-msdos* | i[3456]86-*-moss*)
		tm_file=i386/moss.h
		tmake_file=t-libc-ok
		fixincludes=Makefile.in
		gnu_ld=yes
		gas=yes
		;;
	i[3456]86-*-lynxos*)
		if [ x$gas = xyes ]
		then
			tm_file=i386/lynx.h
		else
			tm_file=i386/lynx-ng.h
		fi
		xm_file=i386/xm-lynx.h
		tmake_file=i386/t-i386bare
		xmake_file=x-lynx
		;;
	i[3456]86-*-mach*)
		tm_file=i386/mach.h
#		tmake_file=t-libc-ok
		use_collect2=yes
		;;
	i[3456]86-*-osfrose*)		# 386 using OSF/rose
                if [ x$elf = xyes ]
		then
			tm_file=i386/osfelf.h
			use_collect2=
		else
			tm_file=i386/osfrose.h
			use_collect2=yes
		fi
		xm_file=i386/xm-osf.h
		xmake_file=i386/x-osfrose
		tmake_file=i386/t-osf
		extra_objs=halfpic.o
		;;
	i[345]86-go32-rtems*)
		cpu_type=i386
		xm_file=i386/xm-go32.h
		tm_file=i386/go32-rtems.h
		tmake_file="i386/t-go32 t-rtems"
		;;
	i[345]86-*-rtems*)
		cpu_type=i386
		tm_file=i386/rtems.h
		tmake_file="i386/t-i386bare t-rtems"
		;;
	i[3456]86-*-sco3.2v5*)		# 80386 running SCO Open Server 5
		xm_file=i386/xm-sco5.h
		xmake_file=i386/x-sco5
		fixincludes=fixinc.sco
		broken_install=yes
		tm_file=i386/sco5.h
		tmake_file=i386/t-sco5
		extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
		;;
	i[3456]86-*-sco3.2v4*)	 	# 80386 running SCO 3.2v4 system
		xm_file=i386/xm-sco.h
		xmake_file=i386/x-sco4
		fixincludes=fixinc.sco
		broken_install=yes
		install_headers_dir=install-headers-cpio
                if [ x$stabs = xyes ]
		then
			tm_file=i386/sco4dbx.h
			tmake_file=i386/t-svr3dbx
			extra_parts="svr3.ifile svr3z.rfile"
		else
			tm_file=i386/sco4.h
			tmake_file=i386/t-crtstuff
			extra_parts="crtbegin.o crtend.o"
		fi
		truncate_target=yes
		;;
	i[3456]86-*-sco*)	 	# 80386 running SCO system
		xm_file=i386/xm-sco.h
		xmake_file=i386/x-sco
		broken_install=yes
		install_headers_dir=install-headers-cpio
                if [ x$stabs = xyes ]
		then
			tm_file=i386/scodbx.h
			tmake_file=i386/t-svr3dbx
			extra_parts="svr3.ifile svr3z.rfile"
		else
			tm_file=i386/sco.h
			extra_parts="crtbegin.o crtend.o"
			tmake_file=i386/t-crtstuff
		fi
		truncate_target=yes
		;;
	i[3456]86-*-solaris2*)
		xm_file=i386/xm-sysv4.h
		if [ x$stabs = xyes ]
		then
			tm_file=i386/sol2dbg.h
		else
			tm_file=i386/sol2.h
		fi
		tmake_file=i386/t-sol2
		extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o"
		xmake_file=x-svr4
		fixincludes=fixinc.math
		broken_install=yes
 		if [ x$enable_threads = xyes ]; then
			thread_file='solaris'
		fi
		;;
	i[3456]86-*-sysv4*)		# Intel 80386's running system V.4
		xm_file=i386/xm-sysv4.h
		tm_file=i386/sysv4.h
		if [ x$stabs = xyes ]
		then
			tm_file="${tm_file} dbx.h"
		fi
		tmake_file=i386/t-crtpic
		xmake_file=x-svr4
		extra_parts="crtbegin.o crtend.o"
		;;
	i[3456]86-*-sysv*)		# Intel 80386's running system V
		xm_file=i386/xm-sysv3.h
		xmake_file=i386/x-sysv3
		if [ x$gas = xyes ]
		then
			if [ x$stabs = xyes ]
			then
				tm_file=i386/svr3dbx.h
				tmake_file=i386/t-svr3dbx
				extra_parts="svr3.ifile svr3z.rfile"
			else
				tm_file=i386/svr3gas.h
				extra_parts="crtbegin.o crtend.o"
				tmake_file=i386/t-crtstuff
			fi
		else
			tm_file=i386/sysv3.h
			extra_parts="crtbegin.o crtend.o"
			tmake_file=i386/t-crtstuff
		fi
		;;
	i386-*-vsta)			# Intel 80386's running VSTa kernel
		xm_file=i386/xm-vsta.h
		tm_file=i386/vsta.h
		tmake_file=i386/t-vsta
		xmake_file=i386/x-vsta
		;;
	i[3456]86-*-pe | i[3456]86-*-cygwin32)
		xm_file="${xm_file} i386/xm-cygwin32.h"
		tmake_file=i386/t-cygwin32
		tm_file=i386/cygwin32.h
		xmake_file=i386/x-cygwin32
		extra_objs=winnt.o
		fixincludes=Makefile.in
 		if [ x$enable_threads = xyes ]; then
			thread_file='win32'
		fi
		exeext=.exe
		;;
	i[3456]86-*-mingw32)
		tm_file=i386/mingw32.h
		xm_file="${xm_file} i386/xm-mingw32.h"
		tmake_file=i386/t-cygwin32
		extra_objs=winnt.o
		xmake_file=i386/x-cygwin32
		fixincludes=Makefile.in
 		if [ x$enable_threads = xyes ]; then
			thread_file='win32'
		fi
		exeext=.exe
		;;
	i[3456]86-*-winnt3*)
		tm_file=i386/win-nt.h
		out_file=i386/i386.c
		xm_file=i386/xm-winnt.h
		xmake_file=winnt/x-winnt
		tmake_file=i386/t-winnt
		extra_host_objs="winnt.o oldnames.o"
		extra_gcc_objs="spawnv.o oldnames.o"
		fixincludes=fixinc.winnt
		if [ x$gnu_ld != xyes ]
		then
			extra_programs=ld.exe
		fi
 		if [ x$enable_threads = xyes ]; then
			thread_file='win32'
		fi
		;;
	i[3456]86-dg-dgux)
		xm_file=i386/xm-dgux.h
		out_file=i386/dgux.c
		tm_file=i386/dgux.h
		tmake_file=i386/t-dgux
		xmake_file=i386/x-dgux
		fixincludes=fixinc.dgux
		install_headers_dir=install-headers-cpio
              ;;
	i860-alliant-*)		# Alliant FX/2800
		tm_file="${tm_file} svr4.h i860/sysv4.h i860/fx2800.h"
		xm_file="${xm_file}"
		xmake_file=i860/x-fx2800
		tmake_file=i860/t-fx2800
		extra_parts="crtbegin.o crtend.o"
		;;
	i860-*-bsd*)
		tm_file="${tm_file} i860/bsd.h"
		if [ x$gas = xyes ]
		then
			tm_file="${tm_file} i860/bsd-gas.h"
		fi
		use_collect2=yes
		;;
	i860-*-mach*)
		tm_file="${tm_file} i860/mach.h"
		tmake_file=t-libc-ok
		;;
	i860-*-osf*)			# Intel Paragon XP/S, OSF/1AD
		tm_file="${tm_file} svr3.h i860/paragon.h"
		xm_file="${xm_file} xm-svr3.h"
		tmake_file=t-osf
		broken_install=yes
		;;
	i860-*-sysv3*)
		tm_file="${tm_file} svr3.h i860/sysv3.h"
		xm_file="${tm_file} xm-svr3.h"
		xmake_file=i860/x-sysv3
		extra_parts="crtbegin.o crtend.o"
		;;
	i860-*-sysv4*)
		tm_file="${tm_file} svr4.h i860/sysv4.h"
		xm_file="${xm_file} xm-svr3.h"
		xmake_file=i860/x-sysv4
		tmake_file=t-svr4
		extra_parts="crtbegin.o crtend.o"
		;;
	i960-wrs-vxworks5 | i960-wrs-vxworks5.0*)
		tm_file="${tm_file} i960/vx960.h"
		tmake_file=i960/t-vxworks960
		use_collect2=yes
		;;
	i960-wrs-vxworks5*)
		tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/vx960-coff.h"
		tmake_file=i960/t-vxworks960
		use_collect2=yes
		;;
	i960-wrs-vxworks*)
		tm_file="${tm_file} i960/vx960.h"
		tmake_file=i960/t-vxworks960
		use_collect2=yes
		;;
	i960-*-coff*)
		tm_file="${tm_file} dbxcoff.h i960/i960-coff.h libgloss.h"
		tmake_file=i960/t-960bare
		use_collect2=yes
		;;
	i960-*-rtems)
		tmake_file="i960/t-960bare t-rtems"
		tm_file="${tm_file} dbxcoff.h i960/rtems.h"
		use_collect2=yes
		;;
	i960-*-*)			# Default i960 environment.
		use_collect2=yes
		;;
	m32r-*-elf*)
		extra_parts="crtinit.o crtfini.o"
		;;
	m68000-convergent-sysv*)
		tm_file=m68k/ctix.h
		xm_file=m68k/xm-3b1.h
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68000-hp-bsd*)			# HP 9000/200 running BSD
		tm_file=m68k/hp2bsd.h
		xmake_file=m68k/x-hp2bsd
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68000-hp-hpux*)		# HP 9000 series 300
		xm_file=m68k/xm-hp320.h
		if [ x$gas = xyes ]
		then
			xmake_file=m68k/x-hp320g
			tm_file=m68k/hp310g.h
		else
			xmake_file=m68k/x-hp320
			tm_file=m68k/hp310.h
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68000-sun-sunos3*)
		tm_file=m68k/sun2.h
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68000-sun-sunos4*)
		tm_file=m68k/sun2o4.h
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68000-att-sysv*)
		xm_file=m68k/xm-3b1.h
		if [ x$gas = xyes ]
		then
			tm_file=m68k/3b1g.h
		else
			tm_file=m68k/3b1.h
		fi
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-apple-aux*)		# Apple Macintosh running A/UX
		xm_file=m68k/xm-aux.h
		tmake_file=m68k/t-aux
		broken_install=yes
		install_headers_dir=install-headers-cpio
		extra_headers=math-68881.h
		extra_parts="crt1.o mcrt1.o maccrt1.o crt2.o crtn.o"
		tm_file=
		if [ "$gnu_ld" = yes ]
		then
			tm_file="${tm_file} m68k/auxgld.h"
		else
			tm_file="${tm_file} m68k/auxld.h"
		fi
		if [ "$gas" = yes ]
		then
			tm_file="${tm_file} m68k/auxgas.h"
		else
			tm_file="${tm_file} m68k/auxas.h"
		fi
		tm_file="${tm_file} m68k/a-ux.h"
		;;
	m68k-apollo-*)
		tm_file=m68k/apollo68.h
		xmake_file=m68k/x-apollo68
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-altos-sysv*)		   # Altos 3068
		if [ x$gas = xyes ]
		then
		        tm_file=m68k/altos3068.h
		        xm_file=m68k/xm-altos3068.h
		else
			echo "The Altos is supported only with the GNU assembler" 1>&2
			exit 1
		fi
		extra_headers=math-68881.h
	        ;;
	m68k-bull-sysv*)		# Bull DPX/2
		if [ x$gas = xyes ]
		then
			if [ x$stabs = xyes ]
			then
				tm_file=m68k/dpx2cdbx.h
			else
				tm_file=m68k/dpx2g.h
			fi
		else
			tm_file=m68k/dpx2.h
		fi
		xm_file=m68k/xm-m68kv.h
		xmake_file=m68k/x-dpx2
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-atari-sysv4*)              # Atari variant of V.4.
		tm_file=m68k/atari.h
		xm_file=m68k/xm-atari.h
		tmake_file=t-svr4
		extra_parts="crtbegin.o crtend.o"
		extra_headers=math-68881.h
		;;
	m68k-motorola-sysv*)
		tm_file=m68k/mot3300.h
		xm_file=m68k/xm-mot3300.h
		if [ x$gas = xyes ]
		then
			xmake_file=m68k/x-mot3300-gas
			if [ x$gnu_ld = xyes ]
			then
				tmake_file=m68k/t-mot3300-gald
			else
				tmake_file=m68k/t-mot3300-gas
				use_collect2=yes
			fi
		else
			xmake_file=m68k/x-mot3300
			if [ x$gnu_ld = xyes ]
			then
				tmake_file=m68k/t-mot3300-gld
			else
				tmake_file=m68k/t-mot3300
				use_collect2=yes
			fi
		fi
		gdb_needs_out_file_path=yes
		extra_parts="crt0.o mcrt0.o"
		extra_headers=math-68881.h
		;;
	m68k-ncr-sysv*)			# NCR Tower 32 SVR3
		tm_file=m68k/tower-as.h
		xm_file="${xm_file} xm-svr3.h"
		xmake_file=m68k/x-tower
		extra_parts="crtbegin.o crtend.o"
		extra_headers=math-68881.h
		;;
        m68k-plexus-sysv*)
		tm_file=m68k/plexus.h
		xm_file=m68k/xm-plexus.h
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-tti-*)
		tm_file=m68k/pbb.h
		xm_file=m68k/xm-m68kv.h
		extra_headers=math-68881.h
		;;
	m68k-crds-unos*)
		xm_file=m68k/xm-crds.h
		xmake_file=m68k/x-crds
		tm_file=m68k/crds.h
		broken_install=yes
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-cbm-sysv4*)		# Commodore variant of V.4.
		tm_file=m68k/amix.h
		xm_file=m68k/xm-amix.h
		xmake_file=m68k/x-amix
		tmake_file=t-svr4
		extra_parts="crtbegin.o crtend.o"
		extra_headers=math-68881.h
		;;
	m68k-ccur-rtu)
		tm_file=m68k/ccur-GAS.h
		xmake_file=m68k/x-ccur
		extra_headers=math-68881.h
		use_collect2=yes
		broken_install=yes
		;;
	m68k-hp-bsd4.4*)		# HP 9000/3xx running 4.4bsd
		tm_file=m68k/hp3bsd44.h
		xmake_file=m68k/x-hp3bsd44
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-hp-bsd*)			# HP 9000/3xx running Berkeley Unix
		tm_file=m68k/hp3bsd.h
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-isi-bsd*)
		if [ x$with_fp = xno ]
		then
			tm_file=m68k/isi-nfp.h
		else
			tm_file=m68k/isi.h
		fi
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-hp-hpux7*)	# HP 9000 series 300 running HPUX version 7.
		xm_file=m68k/xm-hp320.h
		if [ x$gas = xyes ]
		then
			xmake_file=m68k/x-hp320g
			tm_file=m68k/hp320g.h
		else
			xmake_file=m68k/x-hp320
			tm_file=m68k/hpux7.h
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-hp-hpux*)	# HP 9000 series 300
		xm_file=m68k/xm-hp320.h
		if [ x$gas = xyes ]
		then
			xmake_file=m68k/x-hp320g
			tm_file=m68k/hp320g.h
		else
			xmake_file=m68k/x-hp320
			tm_file=m68k/hp320.h
		fi
		broken_install=yes
		install_headers_dir=install-headers-cpio
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-sun-mach*)
		tm_file=m68k/sun3mach.h
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-sony-newsos3*)
		if [ x$gas = xyes ]
		then
			tm_file=m68k/news3gas.h
		else
			tm_file=m68k/news3.h
		fi
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-sony-bsd* | m68k-sony-newsos*)
		if [ x$gas = xyes ]
		then
			tm_file=m68k/newsgas.h
		else
			tm_file=m68k/news.h
		fi
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-next-nextstep2*)
		tm_file=m68k/next21.h
		xm_file=m68k/xm-next.h
		tmake_file=m68k/t-next
		xmake_file=m68k/x-next
		extra_objs=nextstep.o
		extra_headers=math-68881.h
		use_collect2=yes
                ;;
	m68k-next-nextstep3*)
		tm_file=m68k/next.h
		xm_file=m68k/xm-next.h
		tmake_file=m68k/t-next
		xmake_file=m68k/x-next
		extra_objs=nextstep.o
		extra_headers=math-68881.h
 		if [ x$enable_threads = xyes ]; then
			thread_file='mach'
		fi
		;;
	m68k-sun-sunos3*)
		if [ x$with_fp = xno ]
		then
			tm_file=m68k/sun3n3.h
		else
			tm_file=m68k/sun3o3.h
		fi
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-sun-sunos*)			# For SunOS 4 (the default).
		if [ x$with_fp = xno ]
		then
			tm_file=m68k/sun3n.h
		else
			tm_file=m68k/sun3.h
		fi
		use_collect2=yes
		extra_headers=math-68881.h
		;;
	m68k-wrs-vxworks*)
		tm_file=m68k/vxm68k.h
		tmake_file=m68k/t-vxworks68
		extra_headers=math-68881.h
		;;
	m68k-*-aout*)
		tmake_file=m68k/t-m68kbare
		tm_file="m68k/m68k-aout.h libgloss.h"
		extra_headers=math-68881.h
		;;
	m68k-*-coff*)
		tmake_file=m68k/t-m68kbare
		tm_file="m68k/m68k-coff.h dbx.h libgloss.h"
		extra_headers=math-68881.h
		;;
	m68k-*-lynxos*)
		if [ x$gas = xyes ]
		then
			tm_file=m68k/lynx.h
		else
			tm_file=m68k/lynx-ng.h
		fi
		xm_file=m68k/xm-lynx.h
		xmake_file=x-lynx
		tmake_file=m68k/t-lynx
		extra_headers=math-68881.h
		;;
	m68k-*-netbsd*)
		tm_file=m68k/netbsd.h
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		tmake_file=t-netbsd
		;;
	m68k-*-sysv3*)			# Motorola m68k's running system V.3
		xm_file=m68k/xm-m68kv.h
		xmake_file=m68k/x-m68kv
		extra_parts="crtbegin.o crtend.o"
		extra_headers=math-68881.h
		;;
	m68k-*-sysv4*)			# Motorola m68k's running system V.4
		tm_file=m68k/m68kv4.h
		xm_file=m68k/xm-m68kv.h
		tmake_file=t-svr4
		extra_parts="crtbegin.o crtend.o"
		extra_headers=math-68881.h
		;;
	m68k-*-linux-gnuaout*)		# Motorola m68k's running GNU/Linux
		xm_file=m68k/xm-linux.h	# with a.out format
		xmake_file=x-linux
		tm_file=m68k/linux-aout.h
		tmake_file="t-linux-aout m68k/t-linux-aout"
		fixincludes=Makefile.in # The headers are ok already.
		extra_headers=math-68881.h
		gnu_ld=yes
		;;
	m68k-*-linux-gnulibc1)		# Motorola m68k's running GNU/Linux
		xm_file=m68k/xm-linux.h	# with ELF format using the
		xmake_file=x-linux	# GNU/Linux C library 5
		tm_file=m68k/linux.h
		tmake_file="t-linux t-linux-gnulibc1 m68k/t-linux"
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		fixincludes=Makefile.in # The headers are ok already.
		extra_headers=math-68881.h
		gnu_ld=yes
		;;
	m68k-*-linux-gnu*)		# Motorola m68k's running GNU/Linux
		xm_file=m68k/xm-linux.h	# with ELF format using glibc 2
		xmake_file=x-linux	# aka the GNU/Linux C library 6.
		tm_file=m68k/linux.h
		tmake_file="t-linux m68k/t-linux"
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		fixincludes=Makefile.in # The headers are ok already.
		extra_headers=math-68881.h
		gnu_ld=yes
		if [ x$enable_threads = xyes ]; then
			thread_file='posix'
		fi
		;;
	m68k-*-psos*)
		tmake_file=m68k/t-m68kbare
		tm_file=m68k/m68k-psos.h
		extra_headers=math-68881.h
		;;
	m68k-*-rtems*)
		tmake_file="m68k/t-m68kbare t-rtems"
		tm_file=m68k/rtems.h
		extra_headers=math-68881.h
		;;

	m88k-dg-dgux*)
		case $machine in
		  m88k-dg-dguxbcs*)
		    tm_file=m88k/dguxbcs.h
		    tmake_file=m88k/t-dguxbcs
		    ;;
		  *)
		    tm_file=m88k/dgux.h
		    tmake_file=m88k/t-dgux
		    ;;
		esac
		extra_parts="crtbegin.o bcscrtbegin.o crtend.o m88kdgux.ld"
		broken_install=yes
		xmake_file=m88k/x-dgux
		if [ x$gas = xyes ]
		then
			tmake_file=m88k/t-dgux-gas
		fi
		fixincludes=fixinc.dgux
		;;
	m88k-dolphin-sysv3*)
		tm_file=m88k/dolph.h
		extra_parts="crtbegin.o crtend.o"
		xm_file=m88k/xm-sysv3.h
		xmake_file=m88k/x-dolph
		if [ x$gas = xyes ]
		then
			tmake_file=m88k/t-m88k-gas
		fi
		;;
	m88k-tektronix-sysv3)
		tm_file=m88k/tekXD88.h
		extra_parts="crtbegin.o crtend.o"
		xm_file=m88k/xm-sysv3.h
		xmake_file=m88k/x-tekXD88
		if [ x$gas = xyes ]
		then
			tmake_file=m88k/t-m88k-gas
		fi
		;;
	m88k-*-aout*)
		tm_file=m88k/m88k-aout.h
		;;
	m88k-*-coff*)
		tm_file=m88k/m88k-coff.h
		tmake_file=m88k/t-bug
		;;
	m88k-*-luna*)
		tm_file=m88k/luna.h
		extra_parts="crtbegin.o crtend.o"
		if [ x$gas = xyes ]
		then
			tmake_file=m88k/t-luna-gas
		else
			tmake_file=m88k/t-luna
		fi
		;;
	m88k-*-sysv3*)
		tm_file=m88k/sysv3.h
		extra_parts="crtbegin.o crtend.o"
		xm_file=m88k/xm-sysv3.h
		xmake_file=m88k/x-sysv3
		if [ x$gas = xyes ]
		then
			tmake_file=m88k/t-m88k-gas
		fi
		;;
	m88k-*-sysv4*)
		tm_file=m88k/sysv4.h
		extra_parts="crtbegin.o crtend.o"
		xmake_file=m88k/x-sysv4
		tmake_file=m88k/t-sysv4
		;;
	mips-sgi-irix6*)		# SGI System V.4., IRIX 6
		tm_file=mips/iris6.h
		xm_file=mips/xm-iris6.h
		broken_install=yes
		fixincludes=fixinc.irix
		xmake_file=mips/x-iris6
		tmake_file=mips/t-iris6
 		if [ x$enable_threads = xyes ]; then
			thread_file='irix'
		fi
		;;
	mips-sgi-irix5cross64)		# Irix5 host, Irix 6 target, cross64
		tm_file=mips/cross64.h
		xm_file=mips/xm-iris5.h
		broken_install=yes
		fixincludes=Makefile.in
		xmake_file=mips/x-iris
		tmake_file=mips/t-cross64
		# See comment in mips/iris[56].h files.
		use_collect2=yes
 		if [ x$enable_threads = xyes ]; then
			thread_file='irix'
		fi
		;;
        mips-sni-sysv4)
		if [ x$gas = xyes ]
		then
			if [ x$stabs = xyes ]
			then
				tm_file=mips/iris5gdb.h
			else
				tm_file=mips/sni-gas.h
			fi
		else
			tm_file=mips/sni-svr4.h
		fi
                xm_file=mips/xm-sysv.h
                xmake_file=mips/x-sni-svr4
                tmake_file=mips/t-mips-gas
                if [ x$gnu_ld != xyes ]
                then
                        use_collect2=yes
                fi
                broken_install=yes
                ;;
	mips-sgi-irix5*)		# SGI System V.4., IRIX 5
		if [ x$gas = xyes ]
		then
			tm_file=mips/iris5gas.h
			if [ x$stabs = xyes ]
			then
				tm_file="${tm_file} dbx.h"
			fi
		else
			tm_file=mips/iris5.h
		fi
		xm_file=mips/xm-iris5.h
		broken_install=yes
		fixincludes=fixinc.irix
		xmake_file=mips/x-iris
		# mips-tfile doesn't work yet
		tmake_file=mips/t-mips-gas
		# See comment in mips/iris5.h file.
		use_collect2=yes
 		if [ x$enable_threads = xyes ]; then
			thread_file='irix'
		fi
		;;
	mips-sgi-irix4loser*)		# Mostly like a MIPS.
		tm_file=mips/iris4loser.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-iris4.h
		broken_install=yes
		xmake_file=mips/x-iris
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
 		if [ x$enable_threads = xyes ]; then
			thread_file='irix'
		fi
		;;
	mips-sgi-irix4*)		# Mostly like a MIPS.
		tm_file=mips/iris4.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-iris4.h
		broken_install=yes
		xmake_file=mips/x-iris
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
 		if [ x$enable_threads = xyes ]; then
			thread_file='irix'
		fi
		;;
	mips-sgi-*)			# Mostly like a MIPS.
		tm_file=mips/iris3.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-iris3.h
		broken_install=yes
		xmake_file=mips/x-iris3
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		;;
	mips-dec-osfrose*)		# Decstation running OSF/1 reference port with OSF/rose.
		tm_file=mips/osfrose.h
		xmake_file=mips/x-osfrose
		tmake_file=mips/t-osfrose
		extra_objs=halfpic.o
		use_collect2=yes
		;;
	mips-dec-osf*)			# Decstation running OSF/1 as shipped by DIGITAL
		tm_file=mips/dec-osf1.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xmake_file=mips/x-dec-osf1
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			tmake_file=mips/t-ultrix
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		;;
	mips-dec-bsd*)                  # Decstation running 4.4 BSD
              tm_file=mips/dec-bsd.h
              fixincludes=
	      if [ x$gas = xyes ]
	      then
		   	tmake_file=mips/t-mips-gas
	      else
			tmake_file=mips/t-ultrix
			extra_passes="mips-tfile mips-tdump"
	      fi
	      if [ x$gnu_ld != xyes ]
	      then
			use_collect2=yes
	      fi
	      ;;
	mips-dec-netbsd*)                  # Decstation running NetBSD
		tm_file=mips/netbsd.h
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		tmake_file=t-netbsd
		if [ x$prefix = xNONE ]; then
			prefix=$native_prefix
		fi
		prefix=$native_prefix
		;;
	mips-sony-bsd* | mips-sony-newsos*)	# Sony NEWS 3600 or risc/news.
		tm_file=mips/news4.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		xmake_file=mips/x-sony
		;;
	mips-sony-sysv*)		# Sony NEWS 3800 with NEWSOS5.0.
					# That is based on svr4.
		# t-svr4 is not right because this system doesn't use ELF.
		tm_file=mips/news5.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-news.h
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		;;
	mips-tandem-sysv4*)		# Tandem S2 running NonStop UX
		tm_file=mips/svr4-t.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-sysv4.h
		xmake_file=mips/x-sysv
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
			extra_parts="crtbegin.o crtend.o"
		else
			tmake_file=mips/t-mips
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
		;;
	mips-*-ultrix* | mips-dec-mach3)	# Decstation.
		tm_file=mips/ultrix.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xmake_file=mips/x-ultrix
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			tmake_file=mips/t-ultrix
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
	        ;;
	mips-*-riscos[56789]bsd*)
		tm_file=mips/bsd-5.h	# MIPS BSD 4.3, RISC-OS 5.0
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-bsd-gas
		else
			tmake_file=mips/t-bsd
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
	        ;;
	mips-*-bsd* | mips-*-riscosbsd* | mips-*-riscos[1234]bsd*)
		tm_file=mips/bsd-4.h	# MIPS BSD 4.3, RISC-OS 4.0
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-bsd-gas
		else
			tmake_file=mips/t-bsd
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
	        ;;
	mips-*-riscos[56789]sysv4*)
		tm_file=mips/svr4-5.h	# MIPS System V.4., RISC-OS 5.0
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-sysv4.h
		xmake_file=mips/x-sysv
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-svr4-gas
		else
			tmake_file=mips/t-svr4
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
		;;
	mips-*-sysv4* | mips-*-riscos[1234]sysv4* | mips-*-riscossysv4*)
		tm_file=mips/svr4-4.h	# MIPS System V.4. RISC-OS 4.0
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-sysv.h
		xmake_file=mips/x-sysv
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-svr4-gas
		else
			tmake_file=mips/t-svr4
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
		;;
	mips-*-riscos[56789]sysv*)
		tm_file=mips/svr3-5.h	# MIPS System V.3, RISC-OS 5.0
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-sysv.h
		xmake_file=mips/x-sysv
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-svr3-gas
		else
			tmake_file=mips/t-svr3
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
		;;
	mips-*-sysv* | mips-*-riscos*sysv*)
		tm_file=mips/svr3-4.h	# MIPS System V.3, RISC-OS 4.0
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		xm_file=mips/xm-sysv.h
		xmake_file=mips/x-sysv
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-svr3-gas
		else
			tmake_file=mips/t-svr3
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
		;;
	mips-*-riscos[56789]*)		# Default MIPS RISC-OS 5.0.
		tm_file=mips/mips-5.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		broken_install=yes
		;;
	mips-*-gnu*)
		;;
	mipsel-*-ecoff*)
		tm_file=mips/ecoffl.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		tmake_file=mips/t-ecoff
		;;
	mips-*-ecoff*)
		tm_file=mips/ecoff.h
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		tmake_file=mips/t-ecoff
		broken_install=yes
		;;
	mipsel-*-elf*)
		tm_file="mips/elfl.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips-*-elf*)
		tm_file="mips/elf.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips64el-*-elf*)
		tm_file="mips/elfl64.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips64orionel-*-elf*)
		tm_file="mips/elflorion.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips64-*-elf*)
		tm_file="mips/elf64.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips64orion-*-elf*)
		tm_file="mips/elforion.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips64orion-*-rtems*)
		tm_file=mips/rtems64.h
		tmake_file="mips/t-ecoff t-rtems"
		;;
	mipstx39el-*-elf*)
		tm_file="mips/r3900.h mips/elfl.h mips/abi64.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mipstx39-*-elf*)
		tm_file="mips/r3900.h mips/elf.h mips/abi64.h libgloss.h"
		tmake_file=mips/t-ecoff
		;;
	mips-*-*)				# Default MIPS RISC-OS 4.0.
		if [ x$stabs = xyes ]; then
			tm_file="${tm_file} dbx.h"
		fi
		if [ x$gas = xyes ]
		then
			tmake_file=mips/t-mips-gas
		else
			extra_passes="mips-tfile mips-tdump"
		fi
		if [ x$gnu_ld != xyes ]
		then
			use_collect2=yes
		fi
		;;
	mn10200-*-*)
		cpu_type=mn10200
		tm_file="mn10200/mn10200.h"
		if [ x$stabs = xyes ]
		then
			tm_file="${tm_file} dbx.h"
		fi
		use_collect2=no
		;;
	mn10300-*-*)
		cpu_type=mn10300
		tm_file="mn10300/mn10300.h"
		if [ x$stabs = xyes ]
		then
			tm_file="${tm_file} dbx.h"
		fi
		use_collect2=no
		;;
	ns32k-encore-bsd*)
		tm_file=ns32k/encore.h
		use_collect2=yes
		;;
	ns32k-sequent-bsd*)
		tm_file=ns32k/sequent.h
		use_collect2=yes
		;;
	ns32k-tek6100-bsd*)
		tm_file=ns32k/tek6100.h
		broken_install=yes
		use_collect2=yes
		;;
	ns32k-tek6200-bsd*)
		tm_file=ns32k/tek6200.h
		broken_install=yes
		use_collect2=yes
		;;
# This has not been updated to GCC 2.
#	ns32k-ns-genix*)
#		xm_file=ns32k/xm-genix.h
#		xmake_file=ns32k/x-genix
#		tm_file=ns32k/genix.h
#		broken_install=yes
#		use_collect2=yes
#		;;
	ns32k-merlin-*)
		tm_file=ns32k/merlin.h
		use_collect2=yes
		;;
	ns32k-pc532-mach*)
		tm_file=ns32k/pc532-mach.h
		use_collect2=yes
		;;
	ns32k-pc532-minix*)
		tm_file=ns32k/pc532-min.h
		xm_file=ns32k/xm-pc532-min.h
		use_collect2=yes
		;;
	ns32k-pc532-netbsd*)
		tm_file=ns32k/netbsd.h
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		tmake_file=t-netbsd
		;;
        pdp11-*-bsd)
		tm_file="${tm_file} pdp11/2bsd.h"
                ;;
        pdp11-*-*)
		;;
	pyramid-*-*)
		cpu_type=pyr
		xmake_file=pyr/x-pyr
		use_collect2=yes
		;;
	romp-*-aos*)
		use_collect2=yes
		;;
	romp-*-mach*)
		xmake_file=romp/x-mach
		use_collect2=yes
		;;
	powerpc-*-sysv* | powerpc-*-elf*)
		tm_file=rs6000/sysv4.h
		xm_file=rs6000/xm-sysv4.h
		extra_headers=ppc-asm.h
		if [ x$gas = xyes ]
		then
			tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
		else
			tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
		fi
		xmake_file=rs6000/x-sysv4
		;;
	powerpc-*-eabiaix*)
		tm_file=rs6000/eabiaix.h
		tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
		fixincludes=Makefile.in
		extra_headers=ppc-asm.h
		;;
	powerpc-*-eabisim*)
		tm_file=rs6000/eabisim.h
		tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
		fixincludes=Makefile.in
		extra_headers=ppc-asm.h
		;;
	powerpc-*-eabi*)
		tm_file=rs6000/eabi.h
		if [ x$gas = xyes ]
		then
			tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
		else
			tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
		fi
		fixincludes=Makefile.in
		extra_headers=ppc-asm.h
		;;
	powerpc-*-rtems*)
		tm_file=rs6000/rtems.h
		if [ x$gas = xyes ]
		then
		     tmake_file="rs6000/t-ppcgas t-rtems rs6000/t-ppccomm"
		else
		     tmake_file="rs6000/t-ppc t-rtems rs6000/t-ppccomm"
		fi
		fixincludes=Makefile.in
		extra_headers=ppc-asm.h
		;;
	powerpc-*-linux-gnu*)
		tm_file=rs6000/linux.h
		xm_file=rs6000/xm-sysv4.h
		out_file=rs6000/rs6000.c
		if [ x$gas = xyes ]
		then
			tmake_file="rs6000/t-ppcos t-linux rs6000/t-ppccomm"
		else
			tmake_file="rs6000/t-ppc t-linux rs6000/t-ppccomm"
		fi
		xmake_file=x-linux
		fixincludes=Makefile.in
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		extra_headers=ppc-asm.h
		if [ x$enable_threads = xyes ]; then
			thread_file='posix'
		fi
		;;
        powerpc-*-vxworks*)
                cpu_type=rs6000
                xm_file=rs6000/xm-sysv4.h
                tm_file=rs6000/vxppc.h
                tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
		extra_headers=ppc-asm.h
                ;;
	powerpcle-*-sysv* | powerpcle-*-elf*)
		tm_file=rs6000/sysv4le.h
		xm_file=rs6000/xm-sysv4.h
		if [ x$gas = xyes ]
		then
			tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
		else
			tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
		fi
		xmake_file=rs6000/x-sysv4
		extra_headers=ppc-asm.h
		;;
	powerpcle-*-eabisim*)
		tm_file=rs6000/eabilesim.h
		tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
		fixincludes=Makefile.in
		extra_headers=ppc-asm.h
		;;
	powerpcle-*-eabi*)
		tm_file=rs6000/eabile.h
		if [ x$gas = xyes ]
		then
			tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
		else
			tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
		fi
		fixincludes=Makefile.in
		extra_headers=ppc-asm.h
		;;
        powerpcle-*-winnt* )
                tm_file=rs6000/win-nt.h
                tmake_file=rs6000/t-winnt
#               extra_objs=pe.o
		fixincludes=Makefile.in
 		if [ x$enable_threads = xyes ]; then
			thread_file='win32'
		fi
		extra_headers=ppc-asm.h
		;;
	powerpcle-*-pe | powerpcle-*-cygwin32)
		tm_file=rs6000/cygwin32.h
		xm_file=rs6000/xm-cygwin32.h
		tmake_file=rs6000/t-winnt
		xmake_file=rs6000/x-cygwin32
#		extra_objs=pe.o
		fixincludes=Makefile.in
 		if [ x$enable_threads = xyes ]; then
			thread_file='win32'
		fi
		exeext=.exe
		extra_headers=ppc-asm.h
		;;
	powerpcle-*-solaris2*)
		tm_file=rs6000/sol2.h
		xm_file=rs6000/xm-sysv4.h
		if [ x$gas = xyes ]
		then
			tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
		else
			tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
		fi
		xmake_file=rs6000/x-sysv4
		fixincludes=fixinc.math
		extra_headers=ppc-asm.h
		;;
	rs6000-ibm-aix3.[01]*)
		tm_file=rs6000/aix31.h
		xmake_file=rs6000/x-aix31
		use_collect2=yes
		;;
	rs6000-ibm-aix3.2.[456789]* | powerpc-ibm-aix3.2.[456789]*)
		tm_file=rs6000/aix3newas.h
		if [ x$host != x$target ]
		then
			tmake_file=rs6000/t-xnewas
		else
			tmake_file=rs6000/t-newas
		fi
		use_collect2=yes
		;;
	rs6000-ibm-aix[456789].* | powerpc-ibm-aix[456789].*)
		tm_file=rs6000/aix41.h
		if [ x$host != x$target ]
		then
			tmake_file=rs6000/t-xnewas
		else
			tmake_file=rs6000/t-newas
		fi
		xmake_file=rs6000/x-aix31
		use_collect2=yes
		;;
	rs6000-ibm-aix*)
		use_collect2=yes
		;;
	rs6000-bull-bosx)
		use_collect2=yes
		;;
	rs6000-*-mach*)
		tm_file=rs6000/mach.h
		xm_file=rs6000/xm-mach.h
		xmake_file=rs6000/x-mach
		use_collect2=yes
		;;
	rs6000-*-lynxos*)
		tm_file=rs6000/lynx.h
		xm_file=rs6000/xm-lynx.h
		tmake_file=rs6000/t-rs6000
		xmake_file=rs6000/x-lynx
		use_collect2=yes
		;;
	sh-*-elf*)
		tm_file=sh/elf.h
		float_format=sh
		;;
	sh-*-rtems*)
		tmake_file="sh/t-sh t-rtems"
		tm_file=sh/rtems.h
		float_format=sh
		;;
	sh-*-*)
		float_format=sh
		;;
	sparc-tti-*)
		tm_file=sparc/pbd.h
		xm_file=sparc/xm-pbd.h
		;;
	sparc-wrs-vxworks* | sparclite-wrs-vxworks*)
		tm_file=sparc/vxsparc.h
		tmake_file=sparc/t-vxsparc
		use_collect2=yes
		;;
	sparc-*-aout*)
		tmake_file=sparc/t-sparcbare
		tm_file="sparc/aout.h libgloss.h"
		;;
	sparc-*-netbsd*)
		tm_file=sparc/netbsd.h
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		tmake_file=t-netbsd
		;;
	sparc-*-bsd*)
		tm_file=sparc/bsd.h
		;;
	sparc-*-elf*)
		tm_file=sparc/elf.h
		tmake_file=sparc/t-elf
		extra_parts="crti.o crtn.o crtbegin.o crtend.o"
		#float_format=i128
		float_format=i64
		;;
	sparc-*-linux-gnuaout*)		# Sparc's running GNU/Linux, a.out
		xm_file="sparc/xm-sparc.h sparc/xm-linux.h"
		tm_file=sparc/linux-aout.h
		xmake_file=x-linux
		fixincludes=Makefile.in # The headers are ok already.
		broken_install=yes
		gnu_ld=yes
		;;
	sparc-*-linux-gnulibc1*)	# Sparc's running GNU/Linux, libc5
		xm_file="sparc/xm-sparc.h sparc/xm-linux.h"
		xmake_file=x-linux
		tm_file=sparc/linux.h
		tmake_file="t-linux t-linux-gnulibc1 sparc/t-linux"
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		fixincludes=Makefile.in # The headers are ok already.
		broken_install=yes
		gnu_ld=yes
		;;
	sparc-*-linux-gnu*)		# Sparc's running GNU/Linux, libc6
		xm_file="sparc/xm-sparc.h sparc/xm-linux.h"
		xmake_file=x-linux
		tm_file=sparc/linux.h
		tmake_file="t-linux sparc/t-linux"
		extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
		fixincludes=Makefile.in # The headers are ok already.
		broken_install=yes
		gnu_ld=yes
 		if [ x$enable_threads = xyes ]; then
 			thread_file='posix'
 		fi
		;;
	sparc-*-lynxos*)
		if [ x$gas = xyes ]
		then
			tm_file=sparc/lynx.h
		else
			tm_file=sparc/lynx-ng.h
		fi
		xm_file=sparc/xm-lynx.h
		tmake_file=sparc/t-sunos41
		xmake_file=x-lynx
		;;
	sparc-*-rtems*)
		tmake_file="sparc/t-sparcbare t-rtems"
		tm_file=sparc/rtems.h
		;;
	sparc-*-solaris2*)
		tm_file=sparc/sol2.h
		xm_file=sparc/xm-sol2.h
		tmake_file=sparc/t-sol2
		xmake_file=sparc/x-sysv4
		extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
		fixincludes=fixinc.math
		float_format=i128
		broken_install=yes
 		if [ x$enable_threads = xyes ]; then
			thread_file='solaris'
		fi
		;;
	sparc-*-sunos4.0*)
		tm_file=sparc/sunos4.h
		tmake_file=sparc/t-sunos40
		use_collect2=yes
		;;
	sparc-*-sunos4*)
		tm_file=sparc/sunos4.h
		tmake_file=sparc/t-sunos41
		use_collect2=yes
		if [ x$gas = xyes ]; then
			tm_file="${tm_file} sparc/sun4gas.h"
		fi
		;;
	sparc-*-sunos3*)
		tm_file=sparc/sun4o3.h
		use_collect2=yes
		;;
	sparc-*-sysv4*)
		tm_file=sparc/sysv4.h
		xm_file=sparc/xm-sysv4.h
		tmake_file=t-svr4
		xmake_file=sparc/x-sysv4
		extra_parts="crtbegin.o crtend.o"
		;;
	sparc-*-vxsim*)
		xm_file=sparc/xm-sol2.h
		tm_file=sparc/vxsim.h
		tmake_file=sparc/t-vxsparc
		xmake_file=sparc/x-sysv4
		;;
	sparclet-*-aout*)
		tm_file="sparc/splet.h libgloss.h"
		tmake_file=sparc/t-splet
		;;
	sparclite-*-coff*)
		tm_file="sparc/litecoff.h libgloss.h"
		tmake_file=sparc/t-sparclite
		;;
	sparclite-*-aout*)
		tm_file="sparc/lite.h aoutos.h libgloss.h"
		tmake_file=sparc/t-sparclite
		;;
	sparc64-*-aout*)
		tmake_file=sparc/t-sp64
		tm_file=sparc/sp64-aout.h
		;;
	sparc64-*-elf*)
		tmake_file=sparc/t-sp64
		tm_file=sparc/sp64-elf.h
		extra_parts="crtbegin.o crtend.o"
		;;
	sparc64-*-linux*)		# 64-bit Sparc's running GNU/Linux
		tmake_file=sparc/t-sp64
		xm_file="sparc/xm-sp64.h sparc/xm-linux.h"
		tm_file=sparc/linux64.h
		xmake_file=x-linux
		fixincludes=Makefile.in	# The headers are ok already.
		gnu_ld=yes
		;;
# This hasn't been upgraded to GCC 2.
#	tahoe-harris-*)			# Harris tahoe, using COFF.
#		tm_file=tahoe/harris.h
#		;;
#	tahoe-*-bsd*)			# tahoe running BSD
#		;;
# This hasn't been upgraded to GCC 2.
#	tron-*-*)
#		cpu_type=gmicro
#		use_collect2=yes
#		;;
	v850-*-*)
		cpu_type=v850
		tm_file="v850/v850.h"
		xm_file="v850/xm-v850.h"
		if [ x$stabs = xyes ]
		then
			tm_file="${tm_file} dbx.h"
		fi
		use_collect2=no
		;;
	vax-*-bsd*)			# vaxen running BSD
		use_collect2=yes
		float_format=vax
		;;
	vax-*-sysv*)			# vaxen running system V
		tm_file="${tm_file} vax/vaxv.h"
		xm_file="${xm_file} vax/xm-vaxv.h"
		float_format=vax
		;;
	vax-*-netbsd*)
		tm_file="${tm_file} netbsd.h vax/netbsd.h"
		# On NetBSD, the headers are already okay, except for math.h.
		fixincludes=fixinc.math
		tmake_file=t-netbsd
		float_format=vax
		;;
	vax-*-ultrix*)			# vaxen running ultrix
		tm_file="${tm_file} vax/ultrix.h"
		use_collect2=yes
		float_format=vax
		;;
	vax-*-vms*)			# vaxen running VMS
		xm_file=vax/xm-vms.h
		tm_file=vax/vms.h
		float_format=vax
		;;
	vax-*-*)			# vax default entry
		float_format=vax
		;;
	we32k-att-sysv*)
		xm_file="${xm_file} xm-svr3"
		use_collect2=yes
		;;
	*)
		echo "Configuration $machine not supported" 1>&2
		exit 1
		;;
	esac

	case $machine in
	*-*-linux-gnu*)
	        ;; # Existing Linux/GNU systems do not use the GNU setup.
	*-*-gnu*)
		# On the GNU system, the setup is just about the same on
		# each different CPU.  The specific machines that GNU
		# supports are matched above and just set $cpu_type.
		xm_file=${cpu_type}/xm-gnu.h
		tm_file=${cpu_type}/gnu.h
		extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
		# GNU always uses ELF.
		elf=yes
		# GNU tools are the only tools.
		gnu_ld=yes
		gas=yes
		# On GNU, the headers are already okay.
		fixincludes=Makefile.in
		xmake_file=x-linux	# These details are the same as Linux.
		tmake_file=t-gnu	# These are not.
		;;
	*-*-sysv4*)
		fixincludes=fixinc.svr4
		xmake_try_sysv=x-sysv
		broken_install=yes
		install_headers_dir=install-headers-cpio
		;;
	*-*-sysv*)
		broken_install=yes
		install_headers_dir=install-headers-cpio
		;;
	esac

	# Distinguish i[3456]86
	# Also, do not run mips-tfile on MIPS if using gas.
	# Process --with-cpu= for PowerPC/rs6000
	target_cpu_default2=
	case $machine in
	i486-*-*)
		target_cpu_default2=1
		;;
	i586-*-*)
		target_cpu_default2=2
		;;
	i686-*-*)
		target_cpu_default2=3
		;;
	alpha*-*-*)
		case $machine in
			alphaev6*)
				target_cpu_default2="MASK_CPU_EV6|MASK_BXW|MASK_CIX|MASK_MAX"
				;;
			alphapca56*)
				target_cpu_default2="MASK_CPU_EV5|MASK_BWX|TASK_MAX"
				;;
			alphaev56*)
				target_cpu_default2="MASK_CPU_EV5|MASK_BWX"
				;;
			alphaev5*)
				target_cpu_default2="MASK_CPU_EV5"
				;;
		esac
				
		if [ x$gas = xyes ]
		then
			if [ x$target_cpu_default2 = x ]
			then
				target_cpu_default2="MASK_GAS"
			else
				target_cpu_default2="${target_cpu_default2}|MASK_GAS"
			fi
		fi
		;;
	arm*-*-*)
		case "x$with_cpu" in
			x)
				# The most generic
				target_cpu_default2="TARGET_CPU_generic"
				;;

			# Distinguish cores, and major variants
			# arm7m doesn't exist, but D & I don't affect code
			xarm23678 | xarm250 | xarm67010 \
			| xarm7m | xarm7dm | xarm7dmi | xarm7tdmi \
			| xarm7100 | xarm7500 | xarm7500fe | xarm810 \
			| xstrongarm | xstrongarm110)
				target_cpu_default2="TARGET_CPU_$with_cpu"
				;;

			xyes | xno)
				echo "--with-cpu must be passed a value" 1>&2
				exit 1
				;;

			*)
				if [ x$pass2done = xyes ]
				then
					echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
					exit 1
				fi
				;;
		esac
		;;

	mips*-*-ecoff* | mips*-*-elf*)
		if [ x$gas = xyes ]
		then
			if [ x$gnu_ld = xyes ]
			then
				target_cpu_default2=20
			else
				target_cpu_default2=16
			fi
		fi
		;;
	mips*-*-*)
		if [ x$gas = xyes ]
		then
			target_cpu_default2=16
		fi
		;;
	powerpc*-*-* | rs6000-*-*)
		case "x$with_cpu" in
			x)
				;;

			xcommon | xpower | xpower2 | xpowerpc | xrios \
			  | xrios1 | xrios2 | xrsc | xrsc1 \
			  | x601 | x602 | x603 | x603e | x604 | x604e | x620 \
			  | x403 | x505 | x801 | x821 | x823 | x860)
				target_cpu_default2="\"$with_cpu\""
				;;

			xyes | xno)
				echo "--with-cpu must be passed a value" 1>&2
				exit 1
				;;

			*)
				if [ x$pass2done = xyes ]
				then
					echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
					exit 1
				fi
				;;
		esac
		;;
	sparc*-*-*)
		case ".$with_cpu" in
			.)
				target_cpu_default2=TARGET_CPU_"`echo $machine | sed 's/-.*$//'`"
				;;
			.supersparc | .ultrasparc | .v7 | .v8 | .v9)
				target_cpu_default2="TARGET_CPU_$with_cpu"
				;;
			*)
				if [ x$pass2done = xyes ]
				then
					echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
					exit 1
				fi
				;;
		esac
		;;
	esac

	if [ x$target_cpu_default2 != x ]
	then
		if [ x$target_cpu_default != x ]
		then
			target_cpu_default="(${target_cpu_default}|${target_cpu_default2})"
		else
			target_cpu_default=$target_cpu_default2
		fi
	fi

	# No need for collect2 if we have the GNU linker.
	case x$gnu_ld in
	xyes)
		use_collect2=
		;;
	esac

# Save data on machine being used to compile GCC in build_xm_file.
# Save data on host machine in vars host_xm_file and host_xmake_file.
	if [ x$pass1done = x ]
	then
		if [ x"$xm_file" = x ]
		then build_xm_file=$cpu_type/xm-$cpu_type.h
		else build_xm_file=$xm_file
		fi
		build_broken_install=$broken_install
		build_install_headers_dir=$install_headers_dir
		build_exeext=$exeext
		pass1done=yes
	else
		if [ x$pass2done = x ]
		then
			if [ x"$xm_file" = x ]
			then host_xm_file=$cpu_type/xm-$cpu_type.h
			else host_xm_file=$xm_file
			fi
			if [ x"$xmake_file" = x ]
			then xmake_file=$cpu_type/x-$cpu_type
			fi
			host_xmake_file="$xmake_file"
			host_truncate_target=$truncate_target
			host_extra_gcc_objs=$extra_gcc_objs
			host_extra_objs=$extra_host_objs
			pass2done=yes
		fi
	fi
done

extra_objs="${host_extra_objs} ${extra_objs}"

# Default the target-machine variables that were not explicitly set.
if [ x"$tm_file" = x ]
then tm_file=$cpu_type/$cpu_type.h; fi

if [ x$extra_headers = x ]
then extra_headers=; fi

if [ x"$xm_file" = x ]
then xm_file=$cpu_type/xm-$cpu_type.h; fi

md_file=$cpu_type/$cpu_type.md

if [ x$out_file = x ]
then out_file=$cpu_type/$cpu_type.c; fi

if [ x"$tmake_file" = x ]
then tmake_file=$cpu_type/t-$cpu_type
fi

if [ x$float_format = x ]
then float_format=i64
fi

# Say what files are being used for the output code and MD file.
echo "Using \`$srcdir/config/$out_file' to output insns."
echo "Using \`$srcdir/config/$md_file' as machine description file."

count=a
for f in $tm_file; do
	count=${count}x
done
if [ $count = ax ]; then
	echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
else
	echo "Using the following target machine macro files:"
	for f in $tm_file; do
		echo "	$srcdir/config/$f"
	done
fi

count=a
for f in $host_xm_file; do
	count=${count}x
done
if [ $count = ax ]; then
	echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
else
	echo "Using the following host machine macro files:"
	for f in $host_xm_file; do
		echo "	$srcdir/config/$f"
	done
fi

if [ "$host_xm_file" != "$build_xm_file" ]; then
	count=a
	for f in $build_xm_file; do
		count=${count}x
	done
	if [ $count = ax ]; then
		echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
	else
		echo "Using the following build machine macro files:"
		for f in $build_xm_file; do
			echo "	$srcdir/config/$f"
		done
	fi
fi

if [ x$thread_file = x ]
then thread_file='single'
fi

# Set up the header files.
# $links is the list of header files to create.
# $vars is the list of shell variables with file names to include.
# auto-conf.h is the file containing items generated by autoconf and is
# the first file included by config.h.
host_xm_file="auto-config.h ${host_xm_file}"
vars="host_xm_file tm_file xm_file build_xm_file"
links="config.h tm.h tconfig.h hconfig.h"

rm -f config.bak
if [ -f config.status ]; then mv -f config.status config.bak; fi

# Make the links.
while [ -n "$vars" ]
do
	# set file to car of files, files to cdr of files
	set $vars; var=$1; shift; vars=$*
	set $links; link=$1; shift; links=$*

	rm -f $link

	# Define TARGET_CPU_DEFAULT if the system wants one.
	# This substitutes for lots of *.h files.
	if [ x$target_cpu_default != x -a $link = tm.h ]
	then
		echo "#define TARGET_CPU_DEFAULT $target_cpu_default" >>$link
	fi

	for file in `eval echo '$'$var`; do
		echo "#include \"$file\"" >>$link
	done
done

# Truncate the target if necessary
if [ x$host_truncate_target != x ]; then
	target=`echo $target | sed -e 's/\(..............\).*/\1/'`
fi

# Get the version number from the toplevel
version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < ${srcdir}/version.c`

# Are we using gcc as the native compiler?
case $host in
*linux* | *cygwin32* | *mingw32*)
	if [ x$prefix = xNONE ]; then
		prefix=$native_prefix
	fi
	;;
esac

# Get an absolute path to the GCC top-level source directory
holddir=`pwd`
cd $srcdir
topdir=`pwd`
cd $holddir

# Conditionalize the makefile for this host machine.
# Make-host contains the concatenation of all host makefile fragments
# [there can be more than one].  This file is built by configure.frag.
host_overrides=Make-host
dep_host_xmake_file=
for f in .. ${host_xmake_file}
do
	if [ -f ${srcdir}/config/$f ]
	then
		dep_host_xmake_file="${dep_host_xmake_file} ${srcdir}/config/$f"
	fi
done

# Conditionalize the makefile for this target machine.
# Make-target contains the concatenation of all host makefile fragments
# [there can be more than one].  This file is built by configure.frag.
target_overrides=Make-target
dep_tmake_file=
for f in .. ${tmake_file}
do
	if [ -f ${srcdir}/config/$f ]
	then
		dep_tmake_file="${dep_tmake_file} ${srcdir}/config/$f"
	fi
done

# If the host doesn't support symlinks, modify CC in
# FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
# Otherwise, we can use "CC=$(CC)".
rm -f symtest.tem
if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
then
	cc_set_by_configure="\$(CC)"
	stage_prefix_set_by_configure="\$(STAGE_PREFIX)"
else
	symbolic_link="cp -p"
	cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`"
	stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`"
fi
rm -f symtest.tem

out_object_file=`basename $out_file .c`.o

tm_file_list=
for f in $tm_file; do
	tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
done

host_xm_file_list=
for f in $host_xm_file; do
	host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
done

build_xm_file_list=
for f in $build_xm_file; do
	build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
done

# Define macro CROSS_COMPILE in compilation
# if this is a cross-compiler.
# Also use all.cross instead of all.internal
# and add cross-make to Makefile.
cross_overrides="/dev/null"
if [ x$host != x$target ]
then
	cross_defines="CROSS=-DCROSS_COMPILE"
	cross_overrides="${topdir}/cross-make"
fi

# When building gcc with a cross-compiler, we need to fix a few things.
# This must come after cross-make as we want all.build to override
# all.cross.
build_overrides="/dev/null"
if [ x$build != x$host ]
then
	build_overrides="${topdir}/build-make"
fi

# Expand extra_headers to include complete path.
# This substitutes for lots of t-* files.
extra_headers_list=
if [ "x$extra_headers" = x ]
then true
else
	# Prepend ${srcdir}/ginclude/ to every entry in extra_headers.
	for file in $extra_headers;
	do
		extra_headers_list="${extra_headers_list} \$(srcdir)/ginclude/${file}"
	done
fi

# Add a definition of USE_COLLECT2 if system wants one.
# Also tell toplev.c what to do.
# This substitutes for lots of t-* files.
if [ x$use_collect2 = x ]
then
	will_use_collect2=
	maybe_use_collect2=
else
	will_use_collect2="ld"
	maybe_use_collect2="-DUSE_COLLECT2"
fi

# NEED TO CONVERT
# Set MD_DEPS if the real md file is in md.pre-cpp.
# Set MD_CPP to the cpp to pass the md file through.  Md files use ';'
# for line oriented comments, so we must always use a GNU cpp.  If
# building gcc with a cross compiler, use the cross compiler just
# built.  Otherwise, we can use the cpp just built.
md_file_sub=
if [ "x$md_cppflags" = x ]
then
	md_file_sub=$srcdir/config/$md_file
else
	md_file=md
fi

# If we have gas in the build tree, make a link to it.
if [ -f ../gas/Makefile ]; then
	rm -f as; $symbolic_link ../gas/as.new as 2>/dev/null
fi

# If we have ld in the build tree, make a link to it.
if [ -f ../ld/Makefile ]; then
	if [ x$use_collect2 = x ]; then
		rm -f ld; $symbolic_link ../ld/ld.new ld 2>/dev/null
	else
		rm -f collect-ld; $symbolic_link ../ld/ld.new collect-ld 2>/dev/null
	fi
fi

# Figure out what language subdirectories are present.
subdirs=
for lang in ${srcdir}/*/config-lang.in ..
do
	case $lang in
	..) ;;
	# The odd quoting in the next line works around
	# an apparent bug in bash 1.12 on linux.
	${srcdir}/[*]/config-lang.in) ;;
	*) subdirs="$subdirs `echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`" ;;
	esac
done

# Make empty files to contain the specs and options for each language.
# Then add #include lines to for a compiler that has specs and/or options.

lang_specs_files=
lang_options_files=
rm -f specs.h options.h
touch specs.h options.h
for subdir in . $subdirs
do
	if [ -f $srcdir/$subdir/lang-specs.h ]; then
		echo "#include \"$subdir/lang-specs.h\"" >>specs.h
		lang_specs_files="$lang_specs_files $srcdir/$subdir/lang-specs.h"
	fi
	if [ -f $srcdir/$subdir/lang-options.h ]; then
		echo "#include \"$subdir/lang-options.h\"" >>options.h
		lang_options_files="$lang_options_files $srcdir/$subdir/lang-options.h"
	fi
done

# These (without "all_") are set in each config-lang.in.
# `language' must be a single word so is spelled singularly.
all_languages=
all_boot_languages=
all_compilers=
all_stagestuff=
all_diff_excludes=
all_outputs=Makefile
# List of language makefile fragments.
all_lang_makefiles=
all_headers=
all_lib2funcs=

# Add the language fragments.
# Languages are added via two mechanisms.  Some information must be
# recorded in makefile variables, these are defined in config-lang.in.
# We accumulate them and plug them into the main Makefile.
# The other mechanism is a set of hooks for each of the main targets
# like `clean', `install', etc.

language_fragments="Make-lang"
language_hooks="Make-hooks"
oldstyle_subdirs=

for s in .. $subdirs
do
	if [ $s != ".." ]
	then
		language=
		boot_language=
		compilers=
		stagestuff=
		diff_excludes=
		headers=
		outputs=
		lib2funcs=
		. ${srcdir}/$s/config-lang.in
		if [ "x$language" = x ]
		then
			echo "${srcdir}/$s/config-lang.in doesn't set \$language." 1>&2
			exit 1
		fi
		all_lang_makefiles="$all_lang_makefiles ${srcdir}/$s/Make-lang.in ${srcdir}/$s/Makefile.in"
		all_languages="$all_languages $language"
		if [ "x$boot_language" = xyes ]
		then
			all_boot_languages="$all_boot_languages $language"
		fi
		all_compilers="$all_compilers $compilers"
		all_stagestuff="$all_stagestuff $stagestuff"
		all_diff_excludes="$all_diff_excludes $diff_excludes"
		all_headers="$all_headers $headers"
		all_outputs="$all_outputs $outputs"
		if [ x$outputs = x ]
		then
			oldstyle_subdirs="$oldstyle_subdirs $s"
		fi
		all_lib2funcs="$all_lib2funcs $lib2funcs"
	fi
done

# Since we can't use `::' targets, we link each language in
# with a set of hooks, reached indirectly via lang.${target}.

rm -f Make-hooks
touch Make-hooks
target_list="all.build all.cross start.encap rest.encap \
	info dvi \
	install-normal install-common install-info install-man \
	uninstall distdir \
	mostlyclean clean distclean extraclean maintainer-clean \
	stage1 stage2 stage3 stage4"
for t in $target_list
do
	x=
	for l in .. $all_languages
	do
		if [ $l != ".." ]; then
			x="$x $l.$t"
		fi
	done
	echo "lang.$t: $x" >> Make-hooks
done

# If we're not building in srcdir, create .gdbinit.

if [ ! -f Makefile.in ]; then
	echo "dir ." > .gdbinit
	echo "dir ${srcdir}" >> .gdbinit
	if [ x$gdb_needs_out_file_path = xyes ]
	then
		echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
	fi
	if [ "x$subdirs" != x ]; then
		for s in $subdirs
		do
			echo "dir ${srcdir}/$s" >> .gdbinit
		done
	fi
	echo "source ${srcdir}/.gdbinit" >> .gdbinit
fi

# Process the language and host/target makefile fragments.
${CONFIG_SHELL-/bin/sh} $srcdir/configure.frag $srcdir "$subdirs" "$dep_host_xmake_file" "$dep_tmake_file"

# Substitute configuration variables

















































# Echo that links are built
if [ x$host = x$target ]
then
	str1="native "
else
	str1="cross-"
	str2=" from $host"
fi

if [ x$host != x$build ]
then
	str3=" on a $build system"
fi

if [ "x$str2" != x ] || [ "x$str3" != x ]
then
	str4=
fi

echo "Links are now set up to build a ${str1}compiler for ${target}$str4" 1>&2

if [ "x$str2" != x ] || [ "x$str3" != x ]
then
	echo " ${str2}${str3}." 1>&2
fi

# Configure the subdirectories
# AC_CONFIG_SUBDIRS($subdirs)

# Create the Makefile
# and configure language subdirectories
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs.  It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already.  You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
  case `(ac_space=' '; set | grep ac_space) 2>&1` in
  *ac_space=\ *)
    # `set' does not quote correctly, so add quotes (double-quote substitution
    # turns \\\\ into \\, and sed turns \\ into \).
    sed -n \
      -e "s/'/'\\\\''/g" \
      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
    ;;
  *)
    # `set' quotes correctly as required by POSIX, so do not add quotes.
    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
    ;;
  esac >> confcache
if cmp -s $cache_file confcache; then
  :
else
  if test -w $cache_file; then
    echo "updating cache $cache_file"
    cat confcache > $cache_file
  else
    echo "not updating unwritable cache $cache_file"
  fi
fi
rm -f confcache

trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15

test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
fi

trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15

DEFS=-DHAVE_CONFIG_H

# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}

echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.

ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
  case "\$ac_option" in
  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
    echo "$CONFIG_STATUS generated by autoconf version 2.12"
    exit 0 ;;
  -help | --help | --hel | --he | --h)
    echo "\$ac_cs_usage"; exit 0 ;;
  *) echo "\$ac_cs_usage"; exit 1 ;;
  esac
done

ac_given_srcdir=$srcdir
ac_given_INSTALL="$INSTALL"

trap 'rm -fr `echo "$all_outputs auto-config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF

# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
 s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@host@%$host%g
s%@host_alias@%$host_alias%g
s%@host_cpu@%$host_cpu%g
s%@host_vendor@%$host_vendor%g
s%@host_os@%$host_os%g
s%@target@%$target%g
s%@target_alias@%$target_alias%g
s%@target_cpu@%$target_cpu%g
s%@target_vendor@%$target_vendor%g
s%@target_os@%$target_os%g
s%@build@%$build%g
s%@build_alias@%$build_alias%g
s%@build_cpu@%$build_cpu%g
s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
s%@CC@%$CC%g
s%@SET_MAKE@%$SET_MAKE%g
s%@AWK@%$AWK%g
s%@LEX@%$LEX%g
s%@LEXLIB@%$LEXLIB%g
s%@RANLIB@%$RANLIB%g
s%@YACC@%$YACC%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@CPP@%$CPP%g
s%@manext@%$manext%g
s%@objext@%$objext%g
s%@subdirs@%$subdirs%g
s%@all_languages@%$all_languages%g
s%@all_boot_languages@%$all_boot_languages%g
s%@all_compilers@%$all_compilers%g
s%@all_lang_makefiles@%$all_lang_makefiles%g
s%@all_stagestuff@%$all_stagestuff%g
s%@all_diff_excludes@%$all_diff_excludes%g
s%@all_lib2funcs@%$all_lib2funcs%g
s%@all_headers@%$all_headers%g
s%@extra_passes@%$extra_passes%g
s%@extra_programs@%$extra_programs%g
s%@extra_parts@%$extra_parts%g
s%@extra_c_objs@%$extra_c_objs%g
s%@extra_c_flags@%$extra_c_flags%g
s%@extra_objs@%$extra_objs%g
s%@host_extra_gcc_objs@%$host_extra_gcc_objs%g
s%@extra_headers_list@%$extra_headers_list%g
s%@dep_host_xmake_file@%$dep_host_xmake_file%g
s%@dep_tmake_file@%$dep_tmake_file%g
s%@out_file@%$out_file%g
s%@out_object_file@%$out_object_file%g
s%@md_file@%$md_file%g
s%@tm_file_list@%$tm_file_list%g
s%@build_xm_file_list@%$build_xm_file_list%g
s%@host_xm_file_list@%$host_xm_file_list%g
s%@lang_specs_files@%$lang_specs_files%g
s%@lang_options_files@%$lang_options_files%g
s%@thread_file@%$thread_file%g
s%@version@%$version%g
s%@local_prefix@%$local_prefix%g
s%@gxx_include_dir@%$gxx_include_dir%g
s%@fixincludes@%$fixincludes%g
s%@build_install_headers_dir@%$build_install_headers_dir%g
s%@build_exeext@%$build_exeext%g
s%@float_format@%$float_format%g
s%@will_use_collect2@%$will_use_collect2%g
s%@maybe_use_collect2@%$maybe_use_collect2%g
s%@cc_set_by_configure@%$cc_set_by_configure%g
s%@stage_prefix_set_by_configure@%$stage_prefix_set_by_configure%g
s%@symbolic_link@%$symbolic_link%g
/@target_overrides@/r $target_overrides
s%@target_overrides@%%g
/@host_overrides@/r $host_overrides
s%@host_overrides@%%g
s%@cross_defines@%$cross_defines%g
/@cross_overrides@/r $cross_overrides
s%@cross_overrides@%%g
/@build_overrides@/r $build_overrides
s%@build_overrides@%%g
/@language_fragments@/r $language_fragments
s%@language_fragments@%%g
/@language_hooks@/r $language_hooks
s%@language_hooks@%%g

CEOF
EOF

cat >> $CONFIG_STATUS <<\EOF

# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
  if test $ac_beg -gt 1; then
    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
  else
    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
  fi
  if test ! -s conftest.s$ac_file; then
    ac_more_lines=false
    rm -f conftest.s$ac_file
  else
    if test -z "$ac_sed_cmds"; then
      ac_sed_cmds="sed -f conftest.s$ac_file"
    else
      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
    fi
    ac_file=`expr $ac_file + 1`
    ac_beg=$ac_end
    ac_end=`expr $ac_end + $ac_max_sed_cmds`
  fi
done
if test -z "$ac_sed_cmds"; then
  ac_sed_cmds=cat
fi
EOF

cat >> $CONFIG_STATUS <<EOF

CONFIG_FILES=\${CONFIG_FILES-"$all_outputs"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  case "$ac_file" in
  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  *) ac_file_in="${ac_file}.in" ;;
  esac

  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.

  # Remove last slash and all that follows it.  Not all systems have dirname.
  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
    # The file is in a subdirectory.
    test ! -d "$ac_dir" && mkdir "$ac_dir"
    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
    # A "../" for each directory in $ac_dir_suffix.
    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  else
    ac_dir_suffix= ac_dots=
  fi

  case "$ac_given_srcdir" in
  .)  srcdir=.
      if test -z "$ac_dots"; then top_srcdir=.
      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  *) # Relative path.
    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
    top_srcdir="$ac_dots$ac_given_srcdir" ;;
  esac

  case "$ac_given_INSTALL" in
  [/$]*) INSTALL="$ac_given_INSTALL" ;;
  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
  esac

  echo creating "$ac_file"
  rm -f "$ac_file"
  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
  case "$ac_file" in
  *Makefile*) ac_comsub="1i\\
# $configure_input" ;;
  *) ac_comsub= ;;
  esac

  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
s%@INSTALL@%$INSTALL%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*

# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
#
# ac_d sets the value in "#define NAME VALUE" lines.
ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
ac_dC='\3'
ac_dD='%g'
# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
ac_uB='\([ 	]\)%\1#\2define\3'
ac_uC=' '
ac_uD='\4%g'
# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
ac_eB='$%\1#\2define\3'
ac_eC=' '
ac_eD='%g'

if test "${CONFIG_HEADERS+set}" != set; then
EOF
cat >> $CONFIG_STATUS <<EOF
  CONFIG_HEADERS="auto-config.h:config.in"
EOF
cat >> $CONFIG_STATUS <<\EOF
fi
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
  case "$ac_file" in
  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
  *) ac_file_in="${ac_file}.in" ;;
  esac

  echo creating $ac_file

  rm -f conftest.frag conftest.in conftest.out
  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
  cat $ac_file_inputs > conftest.in

EOF

# Transform confdefs.h into a sed script conftest.vals that substitutes
# the proper values into config.h.in to produce config.h.  And first:
# Protect against being on the right side of a sed subst in config.status.
# Protect against being in an unquoted here document in config.status.
rm -f conftest.vals
cat > conftest.hdr <<\EOF
s/[\\&%]/\\&/g
s%[\\$`]%\\&%g
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
s%ac_d%ac_u%gp
s%ac_u%ac_e%gp
EOF
sed -n -f conftest.hdr confdefs.h > conftest.vals
rm -f conftest.hdr

# This sed command replaces #undef with comments.  This is necessary, for
# example, in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
cat >> conftest.vals <<\EOF
s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
EOF

# Break up conftest.vals because some shells have a limit on
# the size of here documents, and old seds have small limits too.

rm -f conftest.tail
while :
do
  ac_lines=`grep -c . conftest.vals`
  # grep -c gives empty output for an empty file on some AIX systems.
  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
  # Write a limited-size here document to conftest.frag.
  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
  echo 'CEOF
  sed -f conftest.frag conftest.in > conftest.out
  rm -f conftest.in
  mv conftest.out conftest.in
' >> $CONFIG_STATUS
  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
  rm -f conftest.vals
  mv conftest.tail conftest.vals
done
rm -f conftest.vals

cat >> $CONFIG_STATUS <<\EOF
  rm -f conftest.frag conftest.h
  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
  cat conftest.in >> conftest.h
  rm -f conftest.in
  if cmp -s $ac_file conftest.h 2>/dev/null; then
    echo "$ac_file is unchanged"
    rm -f conftest.h
  else
    # Remove last slash and all that follows it.  Not all systems have dirname.
      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
      # The file is in a subdirectory.
      test ! -d "$ac_dir" && mkdir "$ac_dir"
    fi
    rm -f $ac_file
    mv conftest.h $ac_file
  fi
fi; done

EOF
cat >> $CONFIG_STATUS <<EOF

host='${host}'
build='${build}'
target='${target}'
target_alias='${target_alias}'
srcdir='${srcdir}'
subdirs='${subdirs}'
oldstyle_subdirs='${oldstyle_subdirs}'
symbolic_link='${symbolic_link}'
program_transform_set='${program_transform_set}'
program_transform_name='${program_transform_name}'
dep_host_xmake_file='${dep_host_xmake_file}'
host_xmake_file='${host_xmake_file}'
dep_tmake_file='${dep_tmake_file}'
tmake_file='${tmake_file}'
thread_file='${thread_file}'
version='${version}'
local_prefix='${local_prefix}'
build_install_headers_dir='${build_install_headers_dir}'
build_exeext='${build_exeext}'
out_file='${out_file}'
gdb_needs_out_file_path='${gdb_needs_out_file_path}'
SET_MAKE='${SET_MAKE}'
build_broken_install='${build_broken_install}'
target_list='${target_list}'
target_overrides='${target_overrides}'
host_overrides='${host_overrides}'
cross_defines='${cross_defines}'
cross_overrides='${cross_overrides}'
build_overrides='${build_overrides}'

EOF
cat >> $CONFIG_STATUS <<\EOF

. $srcdir/configure.lang
case x$CONFIG_HEADERS in
xauto-config.h:config.in)
echo > cstamp-h ;;
esac
# If the host supports symlinks, point stage[1234] at ../stage[1234] so
# bootstrapping and the installation procedure can still use
# CC="stage1/xgcc -Bstage1/".  If the host doesn't support symlinks,
# FLAGS_TO_PASS has been modified to solve the problem there.
# This is virtually a duplicate of what happens in configure.lang; we do
# an extra check to make sure this only happens if ln -s can be used.
if [ "$symbolic_link" = "ln -s" ]; then
 for d in .. ${subdirs} ; do
   if [ $d != .. ]; then
	STARTDIR=`pwd`
	cd $d
	for t in stage1 stage2 stage3 stage4 include
	do
		rm -f $t
		$symbolic_link ../$t $t 2>/dev/null
	done
	cd $STARTDIR
   fi
 done
else true ; fi

exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1

