#! /bin/bash
##############################################################################

## This file is a shell script fragment that supplies the information
## necessary to tailor a template configure script into the configure
## script appropriate for this directory.  For more information, check
## any existing configure script.  

## Be warned, there are two types of configure.in files.  There are those
## used by Autoconf, which are macros which are expanded into a configure
## script by autoconf.  The other sort, of which this is one, is executed
## by Cygnus configure.  

## For more information on these two systems, check out the documentation
## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi).  

#   Copyright (C) 1992-99, 2000, 2001 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

##############################################################################

### To add a new directory to the tree, first choose whether it is a target
### or a host dependent tool.  Then put it into the appropriate list
### (library or tools, host or target), doing a dependency sort.  For
### example, gdb requires that byacc (or bison) be built first, so it is in
### the ${host_tools} list after byacc and bison.  


# these libraries are used by various programs built for the host environment
#
host_libs="intl mmalloc libiberty opcodes bfd readline gash db tcl tk tcl8.1 tk8.1 tclX itcl tix libgui"

if [ "${enable_gdbgui}" = "yes" ] ; then
	host_libs="${host_libs} libgui"
fi

# Set up configure/Makefile variables if libstdc++-v3 is to be built.
if [ "${enable_libstdcxx_v3}" = "yes" ] && test -d $srcdir/libstdc++-v3; then
        libstdcxx_version="target-libstdc++-v3"
	# Don't use libstdc++-v3's flags to configure/build itself.
	libstdcxx_flags='`case $$dir in libstdc++-v3) ;; *) cat $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/libstdc++.INC 2>/dev/null || : ;; esac` -L$$r/$(TARGET_SUBDIR)/libstd++-v3/src -L$$r/$(TARGET_SUBDIR)/libstd++-v3/src/.libs'
else
        libstdcxx_version="target-libio target-libstdc++"
        libstdcxx_flags='-isystem $$s/libstdc++ -isystem $$s/libstdc++/std -isystem $$s/libstdc++/stl -isystem $$s/libio/ -isystem $$s/libio/stdio -L$$r/$(TARGET_SUBDIR)/libstdc++'
fi

# these tools are built for the host environment
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
# know that we are building the simulator.
host_tools="texinfo byacc flex bison binutils ld gas gcc cgen sid sim gdb make patch prms send-pr gprof gdbtest tgas etc expect dejagnu ash bash bzip2 m4 autoconf automake libtool ispell grep diff rcs cvssrc fileutils shellutils time textutils wdiff find emacs emacs19 uudecode hello tar gzip indent recode release sed utils guile perl apache inet gawk findutils snavigator libtool gettext zip"

# these libraries are built for the target environment, and are built after
# the host libraries and the host tools (which may be a cross compiler)
#
target_libs="target-libiberty \
		target-libgloss \
		target-newlib \
		${libstdcxx_version} \
		target-libf2c \
		target-libchill \
		target-libffi \
		target-libjava \
		target-zlib \
		target-boehm-gc \
		target-qthreads \
		target-libobjc"

# these tools are built using the target libs, and are intended to run only
# in the target environment
#
# note: any program that *uses* libraries that are in the "target_libs"
# list belongs in this list.  those programs are also very likely
# candidates for the "native_only" list which follows
#
target_tools="target-examples target-groff target-gperf"

################################################################################

## These two lists are of directories that are to be removed from the
## ${configdirs} list for either cross-compilations or for native-
## compilations.  For example, it doesn't make that much sense to
## cross-compile Emacs, nor is it terribly useful to compile target-libiberty in
## a native environment.  

# directories to be built in the native environment only
#
# This must be a single line because of the way it is searched by grep in
# the code below.
native_only="autoconf automake libtool cvssrc emacs emacs19 fileutils find gawk gettext grep gzip hello indent ispell m4 rcs recode sed shellutils tar textutils gash uudecode wdiff gprof target-groff guile perl apache inet time ash bash bzip2 prms snavigator gnuserv target-gperf"

# directories to be built in a cross environment only
#
cross_only="target-libgloss target-newlib target-cygmon target-opcodes target-libstub"

## All tools belong in one of the four categories, and are assigned above
## We assign ${configdirs} this way to remove all embedded newlines.  This
## is important because configure will choke if they ever get through.
## ${configdirs} is directories we build using the host tools.
## ${target_configdirs} is directories we build using the target tools.
#
configdirs=`echo ${host_libs} ${host_tools}`
target_configdirs=`echo ${target_libs} ${target_tools}`

################################################################################

srctrigger=move-if-change
srcname="gnu development package"

# This gets set non-empty for some net releases of packages.
appdirs=""

# per-host:

# Work in distributions that contain no compiler tools, like Autoconf.
if [ -d ${srcdir}/config ]; then
case "${host}" in
  m68k-hp-hpux*)
    host_makefile_frag="${host_makefile_frag} config/mh-hp300"
    ;;
  m68k-apollo-sysv*)
    host_makefile_frag="${host_makefile_frag} config/mh-apollo68"
    ;;
  m68k-apollo-bsd*)
    host_makefile_frag="${host_makefile_frag} config/mh-a68bsd"
    ;;
  m88k-dg-dgux*)
    host_makefile_frag="${host_makefile_frag} config/mh-dgux"
    ;;
  m88k-harris-cxux*)
    host_makefile_frag="${host_makefile_frag} config/mh-cxux"
    ;;
  m88k-motorola-sysv*)
    host_makefile_frag="${host_makefile_frag} config/mh-delta88"
    ;;
  mips*-dec-ultrix*)
    host_makefile_frag="${host_makefile_frag} config/mh-decstation"
    ;;
  mips*-nec-sysv4*)
    host_makefile_frag="${host_makefile_frag} config/mh-necv4"
    ;;
  mips*-sgi-irix6*)
    host_makefile_frag="${host_makefile_frag} config/mh-irix6"
    ;;
  mips*-sgi-irix5*)
    host_makefile_frag="${host_makefile_frag} config/mh-irix5"
    ;;
  mips*-sgi-irix4*)
    host_makefile_frag="${host_makefile_frag} config/mh-irix4"
    ;;
  mips*-sgi-irix3*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv"
    ;;
  mips*-*-sysv4*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv4"
    ;;
  mips*-*-sysv*)
    host_makefile_frag="${host_makefile_frag} config/mh-riscos"
    ;;
  i370-ibm-opened*)
    host_makefile_frag="${host_makefile_frag} config/mh-openedition"
    ;;
  i[3456]86-*-sysv5*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv5"
    ;;
  i[3456]86-*-dgux*)
    host_makefile_frag="${host_makefile_frag} config/mh-dgux386"
    ;;
  i[3456]86-ncr-sysv4.3*)
    host_makefile_frag="${host_makefile_frag} config/mh-ncrsvr43"
    ;;
  i[3456]86-ncr-sysv4*)
    host_makefile_frag="${host_makefile_frag} config/mh-ncr3000"
    ;;
  i[3456]86-*-sco3.2v5*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv"
    ;;
  i[3456]86-*-sco*)
    host_makefile_frag="${host_makefile_frag} config/mh-sco"
    ;;
  i[3456]86-*-udk*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv5"
    ;;
  i[3456]86-*-isc*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv"
    ;;
  i[3456]86-*-solaris2*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv4"
    ;;
  i[3456]86-*-aix*)
    host_makefile_frag="${host_makefile_frag} config/mh-aix386"
    ;;
  i[3456]86-*-msdosdjgpp*)
    host_makefile_frag="${host_makefile_frag} config/mh-djgpp"
    ;;
  *-cygwin*)
    host_makefile_frag="${host_makefile_frag} config/mh-cygwin"
    ;;
  *-mingw32*)
    host_makefile_frag="${host_makefile_frag} config/mh-mingw32"
    ;;
  *-interix*)
    host_makefile_frag="${host_makefile_frag} config/mh-interix"
    ;;
  *-windows*)
    host_makefile_frag="${host_makefile_frag} config/mh-windows"
    ;;
  vax-*-ultrix2*)
    host_makefile_frag="${host_makefile_frag} config/mh-vaxult2"
    ;;
  *-*-solaris2*)
    host_makefile_frag="${host_makefile_frag} config/mh-solaris"
    ;;
  m68k-sun-sunos*)
    host_makefile_frag="${host_makefile_frag} config/mh-sun3"
    ;;
  *-hp-hpux[78]*)
    host_makefile_frag="${host_makefile_frag} config/mh-hpux8"
    ;;
  *-hp-hpux*)
    host_makefile_frag="${host_makefile_frag} config/mh-hpux"
    ;;
  *-*-hiux*)
    host_makefile_frag="${host_makefile_frag} config/mh-hpux"
    ;;
  rs6000-*-lynxos*)
    host_makefile_frag="${host_makefile_frag} config/mh-lynxrs6k"
    ;;
  *-*-lynxos*)
    host_makefile_frag="${host_makefile_frag} config/mh-lynxos"
    ;;
  *-*-sysv4*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv4"
    ;;
  *-*-sysv*)
    host_makefile_frag="${host_makefile_frag} config/mh-sysv"
    ;;
esac
fi

# If we aren't going to be using gcc, see if we can extract a definition
# of CC from the fragment.
if [ -z "${CC}" ] && [ "${build}" = "${host}" ]; then
  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}:"
  found=
  for dir in $PATH; do
    test -z "$dir" && dir=.
    if test -f $dir/gcc; then
      found=yes
      break
    fi
  done
  IFS="$save_ifs"
  if [ -z "${found}" ] && [ -n "${host_makefile_frag}" ] && [ -f "${srcdir}/${host_makefile_frag}" ]; then
    xx=`sed -n -e 's/^[ 	]*CC[ 	]*=[ 	]*\(.*\)$/\1/p' < ${srcdir}/${host_makefile_frag}`
    if [ -n "${xx}" ] ; then
      CC=$xx
    fi
  fi
fi

# We default to --with-shared on platforms where -fpic is meaningless.
# Well, we don't yet, but we will.
if false && [ "${host}" = "${target}" ] && [ x${enable_shared} = x ]; then
  case "${target}" in
    alpha*-dec-osf*)	enable_shared=yes ;;
    alpha*-*-linux*)	enable_shared=yes ;;
    mips-sgi-irix5*)	enable_shared=yes ;;
    *)			enable_shared=no ;;
  esac
fi

case "${enable_shared}" in
  yes) shared=yes ;;
  no) shared=no ;;
  "") shared=no ;;
  *) shared=yes ;;
esac

if [ x${shared} = xyes ]; then
  case "${host}" in
    alpha*-*-linux*)
      host_makefile_frag="${host_makefile_frag} config/mh-elfalphapic"
      ;;
    arm*-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-armpic"
      ;;
    hppa*-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-papic"
      ;;
    i[3456]86-*-cygwin*)
      # We don't want -fPIC on Cygwin.
      ;;
    i[3456]86-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-x86pic"
      ;;
    i370-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-i370pic"
      ;;
    ia64-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-ia64pic"
      ;;
    sparc64-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-sparcpic"
      ;;
    powerpc*-*-aix*)
      # We don't want -fPIC on AIX.
      ;;
    powerpc*-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-ppcpic"
      ;;
    s390-* | s390x-*)
      host_makefile_frag="${host_makefile_frag} config/mh-s390pic"
      ;;
    *-*-*)
      if test -f ${srcdir}/config/mh-${host_cpu}pic; then
        host_makefile_frag="${host_makefile_frag} config/mh-${host_cpu}pic"
      fi
      ;;
  esac
fi

rm -f mh-frag
if [ -n "${host_makefile_frag}" ] ; then
  for f in ${host_makefile_frag}
  do
    cat ${srcdir}/$f >> mh-frag
  done
  host_makefile_frag=mh-frag
fi

# per-target:

case "${target}" in
  v810*)
    target_makefile_frag="${target_makefile_frag} config/mt-v810"
    ;;
  i[3456]86-*-netware*)
    target_makefile_frag="${target_makefile_frag} config/mt-netware"
    ;;
  powerpc-*-netware*)
    target_makefile_frag="${target_makefile_frag} config/mt-netware"
    ;;
  *-*-linux-gnu*)
    target_makefile_frag="${target_makefile_frag} config/mt-linux"
    ;;
  *-*-aix4.[3456789]* | *-*-aix[56789].*)
    target_makefile_frag="${target_makefile_frag} config/mt-aix43"
    ;;
  mips*-*-pe | sh*-*-pe | *arm-wince-pe)
    target_makefile_frag="${target_makefile_frag} config/mt-wince"
    ;;
esac

# If --enable-target-optspace always use -Os instead of -O2 to build
# the target libraries, similarly if it is not specified, use -Os
# on selected platforms.
case "${enable_target_optspace}:${target}" in
  yes:*)
    target_makefile_frag="${target_makefile_frag} config/mt-ospace"
    ;;
  :d30v-*)
    target_makefile_frag="${target_makefile_frag} config/mt-d30v"
    ;;
  :m32r-* | :d10v-* | :fr30-*)
    target_makefile_frag="${target_makefile_frag} config/mt-ospace"
    ;;
  no:* | :*)
    ;;
  *)
    echo "*** bad value \"${enable_target_optspace}\" for --enable-target-optspace flag; ignored" 1>&2
    ;;
esac

skipdirs=
gasdir=gas
use_gnu_ld=
use_gnu_as=

# some tools are so dependent upon X11 that if we're not building with X, 
# it's not even worth trying to configure, much less build, that tool.

case ${with_x} in
  yes | "")  # the default value for this tree is that X11 is available
	;;
  no)
	skipdirs="${skipdirs} tk libgui gash"
	;;
  *)
    	echo "*** bad value \"${with_x}\" for -with-x flag; ignored" 1>&2
    	;;
esac

# Some tools are only suitable for building in a "native" situation.
# Those are added when we have a host==target configuration.  For cross
# toolchains, we add some directories that should only be useful in a
# cross-compiler.

is_cross_compiler=

if [ x"${host}" = x"${target}" ] ; then
	# when doing a native toolchain, don't build the targets
	# that are in the 'cross only' list
	skipdirs="${skipdirs} ${cross_only}"
	is_cross_compiler=no
else
	# similarly, don't build the targets in the 'native only' 
	# list when building a cross compiler
	skipdirs="${skipdirs} ${native_only}"
	is_cross_compiler=yes
fi	

# We always want to use the same name for this directory, so that dejagnu
# can reliably find it.
target_subdir=${target_alias}

if [ ! -d ${target_subdir} ] ; then
  if mkdir ${target_subdir} ; then true
  else
    echo "'*** could not make ${PWD=`pwd`}/${target_subdir}" 1>&2
    exit 1
  fi
fi

copy_dirs=

# Handle --with-headers=XXX.  The contents of the named directory are
# copied to $(tooldir)/sys-include.
if [ x"${with_headers}" != x ]; then
  if [ x${is_cross_compiler} = xno ]; then
    echo 1>&2 '***' --with-headers is only supported when cross compiling
    exit 1
  fi
  case "${exec_prefixoption}" in
  "") x=${prefix} ;;
  *) x=${exec_prefix} ;;
  esac
  copy_dirs="${copy_dirs} ${with_headers} $x/${target_alias}/sys-include"
fi

# Handle --with-libs=XXX.  Multiple directories are permitted.  The
# contents are copied to $(tooldir)/lib.
if [ x"${with_libs}" != x ]; then
  if [ x${is_cross_compiler} = xno ]; then
    echo 1>&2 '***' --with-libs is only supported when cross compiling
    exit 1
  fi
  # Copy the libraries in reverse order, so that files in the first named
  # library override files in subsequent libraries.
  case "${exec_prefixoption}" in
  "") x=${prefix} ;;
  *) x=${exec_prefix} ;;
  esac
  for l in ${with_libs}; do
    copy_dirs="$l $x/${target_alias}/lib ${copy_dirs}"
  done
fi

# If both --with-headers and --with-libs are specified, default to
# --without-newlib.
if [ x"${with_headers}" != x ] && [ x"${with_libs}" != x ]; then
  if [ x"${with_newlib}" = x ]; then
    with_newlib=no
  fi
fi

# Recognize --with-newlib/--without-newlib.
if [ x${with_newlib} = xno ]; then
  skipdirs="${skipdirs} target-newlib"
elif [ x${with_newlib} = xyes ]; then
  skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
fi

# Default to using --with-stabs for certain targets.
if [ x${with_stabs} = x ]; then
  case "${target}" in
  mips*-*-irix6*)
    ;;
  mips*-*-* | alpha*-*-osf*)
    with_stabs=yes;
    withoptions="${withoptions} --with-stabs"
    ;;
  esac
fi

# Handle ${copy_dirs}
set fnord ${copy_dirs}
shift
while [ $# != 0 ]; do
  if [ -f $2/COPIED ] && [ x"`cat $2/COPIED`" = x"$1" ]; then
    :
  else
    echo Copying $1 to $2

    # Use the install script to create the directory and all required
    # parent directories.
    if [ -d $2 ]; then
      :
    else
      echo >config.temp
      ${srcdir}/install-sh -c -m 644 config.temp $2/COPIED
    fi

    # Copy the directory, assuming we have tar.
    # FIXME: Should we use B in the second tar?  Not all systems support it.
    (cd $1; tar -cf - .) | (cd $2; tar -xpf -)

    # It is the responsibility of the user to correctly adjust all
    # symlinks.  If somebody can figure out how to handle them correctly
    # here, feel free to add the code.

    echo $1 > $2/COPIED
  fi
  shift; shift
done

# Configure extra directories which are host specific

case "${host}" in
	i[3456]86-*-go32*)
	  configdirs="$configdirs dosrel" ;;
	i[3456]86-*-mingw32*)
	  configdirs="$configdirs dosrel" ;;
	*-cygwin*)
	  configdirs="$configdirs libtermcap dosrel" ;;
esac

# Remove more programs from consideration, based on the host or 
# target this usually means that a port of the program doesn't
# exist yet.

noconfigdirs=""

case "${host}" in
  i[3456]86-*-vsta)
    noconfigdirs="tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl apache inet itcl tix db snavigator gnuserv gettext"
    ;;
  i[3456]86-*-go32* | i[3456]86-*-msdosdjgpp*)
    noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl apache inet itcl tix db snavigator gnuserv gettext libffi"
	;;
  i[3456]86-*-mingw32*)
    # noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl apache inet itcl tix db snavigator gnuserv"
     noconfigdirs="expect dejagnu cvs autoconf automake send-pr rcs guile perl texinfo apache inet libtool"
	;;
  i[3456]86-*-beos*)
     noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
     ;;
  *-*-cygwin*)
     noconfigdirs="autoconf automake send-pr rcs guile perl apache inet"
    ;;
  *-*-netbsd*)
    noconfigdirs="rcs"
    ;;
  ppc*-*-pe)
     noconfigdirs="patch diff make tk tcl expect dejagnu cvssrc autoconf automake texinfo bison send-pr gprof rcs guile perl apache inet itcl tix db snavigator gnuserv"
    ;;
  powerpc-*-beos*)
    noconfigdirs="$noconfigdirs tk itcl tix libgui gdb dejagnu readline"
    ;;
esac


# Save it here so that, even in case of --enable-libgcj, if the Java
# front-end isn't enabled, we still get libgcj disabled.
libgcj_saved=$libgcj
case $enable_libgcj in
yes)
  # If we reset it here, it won't get added to noconfigdirs in the
  # target-specific build rules, so it will be forcibly enabled
  # (unless the Java language itself isn't enabled).
  libgcj=
  ;;
no)
  # Make sure we get it printed in the list of not supported target libs.
  noconfigdirs="$noconfigdirs ${libgcj}"
  ;;
esac

case "${target}" in
  *-*-netware)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-newlib target-libiberty target-libgloss target-libffi"
    ;;
  *-*-rtems*)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  *-*-vxworks*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libffi"
    ;;
  alpha*-dec-osf*)
    # ld works, but does not support shared libraries.  emacs doesn't
    # work.  newlib is not 64 bit ready.  I'm not sure about fileutils.
    # gas doesn't generate exception information.
    noconfigdirs="$noconfigdirs gas ld emacs fileutils target-newlib target-libgloss"
    ;;
  alpha*-*-*vms*)
    noconfigdirs="$noconfigdirs gdb ld target-newlib target-libgloss target-libffi"
    ;;
  alpha*-*-*)
    # newlib is not 64 bit ready
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;;
  sh*-*-pe|mips*-*-pe|*arm-wince-pe)
    noconfigdirs="$noconfigdirs target-libjava target-libffi target-zlib"
    noconfigdirs="$noconfigdirs target-boehm-gc target-qthreads target-examples"
    noconfigdirs="$noconfigdirs target-libiberty texinfo send-pr"
    noconfigdirs="$noconfigdirs tcl tix tk itcl libgui sim"
    noconfigdirs="$noconfigdirs expect dejagnu"
    # the C++ libraries don't build on top of CE's C libraries
    noconfigdirs="$noconfigdirs ${libstdcxx_version}"
    skipdirs="$skipdirs target-newlib"
    case "${host}" in
      *-*-cygwin*) ;; # keep gdb and readline
      *) noconfigdirs="$noconfigdirs gdb readline ${libstdcxx_version}"
	 ;;
    esac
    ;;
  arc-*-*)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  arm-*-pe*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  arm-*-coff*)
    noconfigdirs="$noconfigdirs target-libgloss"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  arm-*-elf*)
    noconfigdirs="$noconfigdirs target-libgloss"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  arm-*-oabi*)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  thumb-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  thumb-*-elf)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  thumb-*-oabi)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  strongarm-*-elf)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  strongarm-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  xscale-*-elf)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  xscale-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  thumb-*-pe)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  arm-*-riscix*)
    noconfigdirs="$noconfigdirs ld target-libgloss target-libffi"
    ;;
  c4x-*-*)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi"
    ;;
  c54x*-*-* | tic54x-*-*)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi gcc gdb newlib"
    ;;
  d10v-*-*)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi"
    ;;
  d30v-*-*)
    ;;
  fr30-*-elf*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    ;;
  h8300*-*-* | \
  h8500-*-*)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi"
    ;;
  hppa*-*-*elf* | \
  hppa*-*-linux-gnu* | \
  hppa*-*-lites* | \
  hppa*64*-*-*)
    # Do configure ld/binutils/gas for this case.
    ;;
  hppa*-*-*)
    # HP's C compiler doesn't handle Emacs correctly (but on BSD and Mach
    # cc is gcc, and on any system a user should be able to link cc to
    # whatever they want.  FIXME, emacs emacs19).
    case "${CC}" in
	"" | cc*) noconfigdirs="$noconfigdirs emacs emacs19" ;;
        *) ;;
    esac
    # According to Alexandre Oliva <aoliva@redhat.com>, libjava won't
    # build on HP-UX 10.20.
    noconfigdirs="$noconfigdirs ld shellutils ${libgcj}"
    ;;
  ia64*-*-elf*)
    # No gdb support yet.
    noconfigdirs="$noconfigdirs tix readline mmalloc libgui itcl gdb"
    ;;
  i[3456]86-*-coff | i[3456]86-*-elf)
    if [ x${is_cross_compiler} != xno ] ; then
         target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  i[3456]86-*-go32* | i[3456]-*-msdosdjgpp*)
    # but don't build gdb
    noconfigdirs="$noconfigdirs gdb ${libstdcxx_version} target-libffi"
    ;;
  i[3456]86-*-mingw32*)
    target_configdirs="$target_configdirs target-mingw"
    noconfigdirs="$noconfigdirs expect target-libgloss ${libgcj}"

    # Can't build gdb for mingw32 if not native.
    case "${host}" in
      i[3456]86-*-mingw32) ;; # keep gdb tcl tk expect etc.
      *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl tix db snavigator gnuserv"
         ;;
    esac
    ;;    
  *-*-cygwin*)
    target_configdirs="$target_configdirs target-libtermcap target-winsup"
    noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}"
    # always build newlib.
    skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`

    # Can't build gdb for Cygwin if not native.
    case "${host}" in
      *-*-cygwin*) ;; # keep gdb tcl tk expect etc.
      *) noconfigdirs="$noconfigdirs gdb tcl tk expect itcl tix libgui db snavigator gnuserv"
         ;;
    esac
    ;;    
  i[3456]86-*-pe)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss target-libffi"
    ;;
  i[3456]86-*-sco3.2v5*)
    # The linker does not yet know about weak symbols in COFF,
    # and is not configured to handle mixed ELF and COFF.
    noconfigdirs="$noconfigdirs ld target-libgloss target-libffi"
    ;;
  i[3456]86-*-sco*)
    noconfigdirs="$noconfigdirs gprof target-libgloss target-libffi"
    ;;
  i[3456]86-*-solaris2*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  i[3456]86-*-sysv4*)
    # The SYSV4 C compiler doesn't handle Emacs correctly
    case "${CC}" in
	"" | cc*) noconfigdirs="$noconfigdirs emacs emacs19" ;;
        *) ;;
    esac
    # but that's okay since emacs doesn't work anyway
    noconfigdirs="$noconfigdirs emacs emacs19 target-libgloss target-libffi"
    ;;
  i[3456]86-*-beos*)
     noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
     ;;
 m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
    noconfigdirs="$noconfigdirs target-libiberty target-librx target-libg++ target-libstdc++ target-libio target-libf2c target-libchill target-zlib target-libobjc"
    ;;
 m68k-*-elf*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  m68k-*-coff*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  mn10200-*-*)
    noconfigdirs="$noconfigdirs target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  mn10300-*-*)
    noconfigdirs="$noconfigdirs target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    ;;
  powerpc-*-aix*)
    # copied from rs6000-*-* entry
    use_gnu_ld=yes
    ;;
  powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe)
    target_configdirs="$target_configdirs target-winsup"
    noconfigdirs="$noconfigdirs gdb tcl tk make expect target-libgloss itcl tix db snavigator gnuserv target-libffi"
    # always build newlib.
    skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`
    ;;
    # This is temporary until we can link against shared libraries
  powerpcle-*-solaris*)
    noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl tix db snavigator gnuserv target-libffi"
    ;;
  powerpc-*-beos*)
    noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
    ;;
  powerpc-*-eabi)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    ;;
  rs6000-*-lynxos*)
    # The CVS server code doesn't work on the RS/6000
    noconfigdirs="$noconfigdirs target-newlib gprof cvssrc target-libffi"
    ;;
  rs6000-*-aix*)
    noconfigdirs="$noconfigdirs gprof target-libffi"
    use_gnu_ld=yes
    ;;
  rs6000-*-*)
    noconfigdirs="$noconfigdirs gprof target-libffi"
    ;;
  m68k-apollo-*)
    noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss target-libffi"
    ;;
  mips*-*-irix5*)
    # The GNU linker does not support shared libraries.
    # emacs is emacs 18, which does not work on Irix 5 (emacs19 does work)
    noconfigdirs="$noconfigdirs ld gprof emacs target-libgloss"
    ;;
  mips*-*-irix6*)
    # The GNU assembler does not support IRIX 6.
    # emacs is emacs 18, which does not work on Irix 5 (emacs19 does work)
    # Linking libjava exceeds command-line length limits on at least
    # IRIX 6.2, but not on IRIX 6.5.
    # Also, boehm-gc won't build on IRIX 6.5, according to Jeffrey Oldham
    # <oldham@codesourcery.com>
    noconfigdirs="$noconfigdirs gas gprof emacs target-libgloss ${libgcj}"
    ;;
  mips*-dec-bsd*)
    noconfigdirs="$noconfigdirs gprof target-libgloss target-libffi"
    ;;
  mips*-*-bsd*)
    noconfigdirs="$noconfigdirs gprof target-libgloss target-libffi"
    ;;
  mipstx39-*-*)
    noconfigdirs="$noconfigdirs gprof target-libffi"   # same as generic mips
    target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
   ;;
  mips*-*-*)
    noconfigdirs="$noconfigdirs gprof target-libffi"
    ;;
  romp-*-*)
    noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss target-libffi"
    ;;
  sh-*-*)
    case "${host}" in
      i[3456]86-*-vsta) ;; # don't add gprof back in
      i[3456]86-*-go32*) ;; # don't add gprof back in
      i[3456]86-*-msdosdjgpp*) ;; # don't add gprof back in
      *) skipdirs=`echo " ${skipdirs} " | sed -e 's/ gprof / /'` ;;
    esac
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  sparc-*-elf*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  sparc64-*-elf*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    noconfigdirs="$noconfigdirs target-libffi"
    ;;
  sparclite-*-*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    noconfigdirs="$noconfigdirs target-libffi"
    ;;
  sparc-*-sunos4*)
    if [ x${is_cross_compiler} != xno ] ; then
           noconfigdirs="$noconfigdirs gdb gdbtest target-newlib target-libgloss"
    else
           use_gnu_ld=no
    fi
    ;;
  sparc-*-solaris*)
    case "${host}" in
    sparc-*-solaris2.8)
      # According to Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, libjava
      # won't build correctly on Solaris 8 if there's a
      # previously-installed version of GCC in the configured prefix.
      # This problem does not show up on earlier versions of Solaris.
      noconfigdirs="$noconfigdirs ${libgcj}"
      ;;
    esac
    ;;
  v810-*-*)
    noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss target-libffi"
    ;;
  v850-*-*)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  v850e-*-*)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  v850ea-*-*)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi"
    ;;
  vax-*-vms)
    noconfigdirs="$noconfigdirs bfd binutils gdb ld target-newlib opcodes target-libgloss target-libffi"
    ;;
  vax-*-*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libffi"
    ;;
  *-*-lynxos*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libffi"
    ;; 
  *-*-macos* | \
  *-*-mpw*)
    # Macs want a resource compiler.
    configdirs="$configdirs grez"
    noconfigdirs="$noconfigdirs target-libffi"
    ;;    
esac

# If we aren't building newlib, then don't build libgloss, since libgloss
# depends upon some newlib header files.
case "${noconfigdirs}" in
  *target-libgloss*) ;;
  *target-newlib*) noconfigdirs="$noconfigdirs target-libgloss" ;;
esac

# Make sure we don't let GNU ld be added if we didn't want it.
if [ x$with_gnu_ld = xno ]; then
  use_gnu_ld=no
  noconfigdirs="$noconfigdirs ld"
fi

# Make sure we don't let GNU as be added if we didn't want it.
if [ x$with_gnu_as = xno ]; then
  use_gnu_as=no
  noconfigdirs="$noconfigdirs gas"
fi

# Figure out what language subdirectories are present.
# Look if the user specified --enable-languages="..."; if not, use
# the environment variable $LANGUAGES if defined. $LANGUAGES might
# go away some day.
if test x"${enable_languages+set}" != xset; then
	if test x"${LANGUAGES+set}" = xset; then
		enable_languages="`echo ${LANGUAGES} | tr ' ' ','`"
	else
		enable_languages=all
	fi
else
	if test x"${enable_languages}" = x; then
		echo configure.in: --enable-languages needs at least one argument 1>&2
		exit 1
	fi
fi
subdirs=
for lang in ${srcdir}/gcc/*/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}/gcc/[*]/config-lang.in) ;;
	*)
	  lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ 	]*\).*$,\1,p' $lang`
	  this_lang_libs=`sed -n -e 's,^target_libs=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^target_libs=\([^ 	]*\).*$,\1,p' $lang`
	  build_by_default=`sed -n -e 's,^build_by_default=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^build_by_default=\([^ 	]*\).*$,\1,p' $lang`
	  if test "x$lang_alias" = x
	  then
		echo "$lang doesn't set \$language." 1>&2
		exit 1
	  fi
	  case ${build_by_default},${enable_languages}, in
	  *,$lang_alias,*) add_this_lang=yes ;;
	  no,*) add_this_lang=no ;;
	  *,all,*) add_this_lang=yes ;;
	  *) add_this_lang=no ;;
	  esac
	  if test x"${add_this_lang}" = xyes; then
	      eval target_libs='"$target_libs "'\"$this_lang_libs\"
	  else
	      eval noconfigdirs='"$noconfigdirs "'\"$this_lang_libs\"
	  fi
	  ;;
	esac
done


# Remove the entries in $skipdirs and $noconfigdirs from $configdirs and
# $target_configdirs.
# If we have the source for $noconfigdirs entries, add them to $notsupp.

notsupp=""
for dir in . $skipdirs $noconfigdirs ; do
  dirname=`echo $dir | sed -e s/target-//g`
  if [ $dir != . ]  && echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
    configdirs=`echo " ${configdirs} " | sed -e "s/ ${dir} / /"`
    if [ -r $srcdir/$dirname/configure ] \
	|| [ -r $srcdir/$dirname/configure.in ]; then
      if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
	true
      else
	notsupp="$notsupp $dir"
      fi
    fi
  fi
  if [ $dir != . ]  && echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
    target_configdirs=`echo " ${target_configdirs} " | sed -e "s/ ${dir} / /"`
    if [ -r $srcdir/$dirname/configure ] \
	|| [ -r $srcdir/$dirname/configure.in ]; then
      if echo " ${skipdirs} " | grep " ${dir} " >/dev/null 2>&1; then
	true
      else
	notsupp="$notsupp $dir"
      fi
    fi
  fi
done

# Sometimes the tools are distributed with libiberty but with no other
# libraries.  In that case, we don't want to build target-libiberty.
if [ -n "${target_configdirs}" ]; then
  others=
  for i in `echo ${target_configdirs} | sed -e s/target-//g` ; do
    if [ "$i" != "libiberty" ]; then
      if [ -r $srcdir/$i/configure ] || [ -r $srcdir/$i/configure.in ]; then
	others=yes;
	break;
      fi
    fi
  done
  if [ -z "${others}" ]; then
    target_configdirs=
  fi
fi

# Deconfigure all subdirectories, in case we are changing the
# configuration from one where a subdirectory is supported to one where it
# is not.
if [ -z "${norecursion}" ] && [ -n "${configdirs}" ]; then
  for i in `echo ${configdirs} | sed -e s/target-//g` ; do
    rm -f $i/Makefile
  done
fi
if [ -z "${norecursion}" ] && [ -n "${target_configdirs}" ]; then
  for i in `echo ${target_configdirs} | sed -e s/target-//g` ; do
    rm -f ${target_subdir}/$i/Makefile
  done
fi

# Produce a warning message for the subdirs we can't configure.
# This isn't especially interesting in the Cygnus tree, but in the individual
# FSF releases, it's important to let people know when their machine isn't
# supported by the one or two programs in a package.

if [ -n "${notsupp}" ] && [ -z "${norecursion}" ]; then
  # If $appdirs is non-empty, at least one of those directories must still
  # be configured, or we error out.  (E.g., if the gas release supports a
  # specified target in some subdirs but not the gas subdir, we shouldn't
  # pretend that all is well.)
  if [ -n "$appdirs" ]; then
    for dir in $appdirs ; do
      if [ -r $dir/Makefile.in ]; then
	if echo " ${configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
	  appdirs=""
	  break
	fi
	if echo " ${target_configdirs} " | grep " ${dir} " >/dev/null 2>&1; then
	  appdirs=""
	  break
	fi
      fi
    done
    if [ -n "$appdirs" ]; then
      echo "*** This configuration is not supported by this package." 1>&2
      exit 1
    fi
  fi
  # Okay, some application will build, or we don't care to check.  Still
  # notify of subdirs not getting built.
  echo "*** This configuration is not supported in the following subdirectories:" 1>&2
  echo "    ${notsupp}" 1>&2
  echo "    (Any other directories should still work fine.)" 1>&2
fi

# Set with_gnu_as and with_gnu_ld as appropriate.
#
# This is done by determining whether or not the appropriate directory
# is available, and by checking whether or not specific configurations
# have requested that this magic not happen.
# 
# The command line options always override the explicit settings in 
# configure.in, and the settings in configure.in override this magic.
#
# If the default for a toolchain is to use GNU as and ld, and you don't 
# want to do that, then you should use the --without-gnu-as and
# --without-gnu-ld options for the configure script.

if [ x${use_gnu_as} = x ] ; then
  if [ x${with_gnu_as} != xno ] && echo " ${configdirs} " | grep " ${gasdir} " > /dev/null 2>&1 && [ -d ${srcdir}/${gasdir} ] ; then
    with_gnu_as=yes
    withoptions="$withoptions --with-gnu-as"
  fi
fi

if [ x${use_gnu_ld} = x ] ; then
  if [ x${with_gnu_ld} != xno ] && echo " ${configdirs} " | grep " ld " > /dev/null 2>&1 && [ -d ${srcdir}/ld ] ; then
    with_gnu_ld=yes
    withoptions="$withoptions --with-gnu-ld"
  fi
fi

# If using newlib, add --with-newlib to the withoptions so that gcc/configure
# can detect this case.

if [ x${with_newlib} != xno ] && echo " ${target_configdirs} " | grep " target-newlib " > /dev/null 2>&1 && [ -d ${srcdir}/newlib ] ; then
  with_newlib=yes
  withoptions="$withoptions --with-newlib"
fi

if [ x${shared} = xyes ]; then
  case "${target}" in
    hppa*)
      target_makefile_frag="${target_makefile_frag} config/mt-papic"
      ;;
    i[3456]86-*)
      target_makefile_frag="${target_makefile_frag} config/mt-x86pic"
      ;;
    ia64-*)
      target_makefile_frag="${target_makefile_frag} config/mt-ia64pic"
      ;;
    powerpc*-*-aix*)
      # We don't want -fPIC on AIX.
      ;;
    powerpc*-*)
      target_makefile_frag="${target_makefile_frag} config/mt-ppcpic"
      ;;
    alpha*-*-linux*)
      target_makefile_frag="${target_makefile_frag} config/mt-elfalphapic"
      ;;
    *)
      if test -f ${srcdir}/config/mt-${target_cpu}pic; then
        target_makefile_frag="${target_makefile_frag} config/mt-${target_cpu}pic"
      fi
      ;;
  esac
fi

rm -f mt-frag
if [ -n "${target_makefile_frag}" ] ; then
  for f in ${target_makefile_frag}
  do
    cat ${srcdir}/$f >> mt-frag
  done
  target_makefile_frag=mt-frag
fi

# post-target:

# Make sure that the compiler is able to generate an executable.  If it
# can't, we are probably in trouble.  We don't care whether we can run the
# executable--we might be using a cross compiler--we only care whether it
# can be created.  At this point the main configure script has set CC.
echo "int main () { return 0; }" > conftest.c
${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c
if [ $? = 0 ] && [ -s conftest -o -s conftest.exe ]; then
  :
else
  echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
  echo 1>&2 "*** You must set the environment variable CC to a working compiler."
  rm -f conftest*
  exit 1
fi
rm -f conftest*

# The Solaris /usr/ucb/cc compiler does not appear to work.
case "${host}" in
  sparc-sun-solaris2*)
      CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`"
      if [ "`/usr/bin/which $CCBASE`" = "/usr/ucb/cc" ] ; then
          could_use=
          [ -d /opt/SUNWspro/bin ] && could_use="/opt/SUNWspro/bin"
          if [ -d /opt/cygnus/bin ] ; then
              if [ "$could_use" = "" ] ; then
                  could_use="/opt/cygnus/bin"
              else
                  could_use="$could_use or /opt/cygnus/bin"
              fi
          fi
        if [ "$could_use" = "" ] ; then
            echo "Warning: compilation may fail because you're using"
            echo "/usr/ucb/cc.  You should change your PATH or CC "
            echo "variable and rerun configure."
        else
            echo "Warning: compilation may fail because you're using"
            echo "/usr/ucb/cc, when you should use the C compiler from"
            echo "$could_use.  You should change your"
            echo "PATH or CC variable and rerun configure."
        fi
      fi
  ;;
esac

# If --enable-shared was set, we must set LD_LIBRARY_PATH so that the
# binutils tools will find libbfd.so.
if [ "${shared}" = "yes" ]; then
  sed -e 's/^SET_LIB_PATH[ 	]*=.*$/SET_LIB_PATH = $(REALLY_SET_LIB_PATH)/' \
      Makefile > Makefile.tem
  rm -f Makefile
  mv -f Makefile.tem Makefile

  case "${host}" in
  *-*-hpux*)
    sed -e 's/^RPATH_ENVVAR[ 	]*=.*$/RPATH_ENVVAR = SHLIB_PATH/' \
	Makefile > Makefile.tem
    rm -f Makefile
    mv -f Makefile.tem Makefile
    ;;
  esac
fi

# Record target_configdirs and the configure arguments in Makefile.
target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
targargs=`echo "${arguments}" | \
	sed -e 's/--no[^ 	]*//' \
	    -e 's/--cache[a-z-]*=[^ 	]*//' \
	    -e 's/--ho[a-z-]*=[^ 	]*//' \
	    -e 's/--bu[a-z-]*=[^ 	]*//' \
	    -e 's/--ta[a-z-]*=[^ 	]*//'`

# Passing a --with-cross-host argument lets the target libraries know
# whether they are being built with a cross-compiler or being built
# native.  However, it would be better to use other mechanisms to make the
# sorts of decisions they want to make on this basis.  Please consider
# this option to be deprecated.  FIXME.
if [ x${is_cross_compiler} = xyes ]; then
  targargs="--with-cross-host=${host_alias} ${targargs}"
fi

# Default to --enable-multilib.
if [ x${enable_multilib} = x ]; then
  targargs="--enable-multilib ${targargs}"
fi

# Pass --with-newlib if appropriate.  Note that target_configdirs has
# changed from the earlier setting of with_newlib.
if [ x${with_newlib} != xno ] && echo " ${target_configdirs} " | grep " newlib " > /dev/null 2>&1 && [ -d ${srcdir}/newlib ] ; then
  targargs="--with-newlib ${targargs}"
fi

# provide a proper gxx_include_dir.
# Note, if you change the default, make sure to fix both here and in
# the gcc, libio, and libstdc++ subdirectories.
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
gxx_include_dir=
if test -n "${with_gxx_include_dir}"; then
  case "${with_gxx_include_dir}" in
    yes )
      echo "configure.in: error: bad value ${withval} given for g++ include directory" 1>&2
      exit 1
      ;;
    no )
      ;;
    * )
      gxx_include_dir=${with_gxx_include_dir}
      ;;
  esac
fi
if test x${gxx_include_dir} = x; then
  if test x${enable_version_specific_runtime_libs} = xyes; then
    gxx_include_dir='${libsubdir}/include/g++'
  else
    . ${topsrcdir}/config.if
    gxx_include_dir='${prefix}/include/g++'-${libstdcxx_interface}
  fi
else
  gxx_include_dir=${gxx_include_dir}
fi

FLAGS_FOR_TARGET=
case " $skipdirs " in
*" target-newlib "*) ;;
*)
   case "$target" in
   *-cygwin*)
     FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/winsup -L$$r/$(TARGET_SUBDIR)/winsup/cygwin -L$$r/$(TARGET_SUBDIR)/winsup/w32api/lib -isystem $$s/winsup/include -isystem $$s/winsup/cygwin/include -isystem $$s/winsup/w32api/include -isystem $$s/newlib/libc/sys/cygwin -isystem $$s/newlib/libc/sys/cygwin32' ;;
   esac

   # If we're not building GCC, don't discard standard headers.
   if test -d ${topsrcdir}/gcc; then
     FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -nostdinc'

     if test "${build}" != "${host}"; then
       # On Canadian crosses, CC_FOR_TARGET will have already been set
       # by `configure', so we won't have an opportunity to add -Bgcc/
       # to it.  This is right: we don't want to search that directory
       # for binaries, but we want the header files in there, so add
       # them explicitly.
       FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -isystem $$r/gcc/include'

       # Someone might think of using the pre-installed headers on
       # Canadian crosses, in case the installed compiler is not fully
       # compatible with the compiler being built.  In this case, it
       # would be better to flag an error than risking having
       # incompatible object files being constructed.  We can't
       # guarantee that an error will be flagged, but let's hope the
       # compiler will do it, when presented with incompatible header
       # files.
     fi
   fi

   # If we're building newlib, use its generic headers last, but search
   # for any libc-related directories first (so make it the last -B
   # switch).
   FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/newlib/ -isystem $$r/$(TARGET_SUBDIR)/newlib/targ-include -isystem $$s/newlib/libc/include'
   ;;
esac

# On Canadian crosses, we'll be searching the right directories for
# the previously-installed cross compiler, so don't bother to add
# flags for directories within the install tree of the compiler
# being built; programs in there won't even run.
if test "${build}" = "${host}" && test -d ${topsrcdir}/gcc; then
  # Search for pre-installed headers if nothing else fits.
  FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include'
fi

if test "x${use_gnu_ld}" = x && test "x${with_gnu_ld}" != xno &&
   echo " ${configdirs} " | grep " ld " > /dev/null &&
   test -d ${srcdir}/ld; then
  # Arrange for us to find uninstalled linker scripts.
  FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/ld'
fi

if test "x${CC_FOR_TARGET+set}" = xset; then
  :
elif test -d ${topsrcdir}/gcc; then
  CC_FOR_TARGET='$$r/gcc/xgcc -B$$r/gcc/'
elif test "$host" = "$target"; then
  CC_FOR_TARGET='$(CC)'
else
  CC_FOR_TARGET=`echo gcc | sed -e 's/x/x/' ${program_transform_name}`
fi
# On Canadian crosses, configure reads CC_FOR_TARGET from Makefile,
# if Makefile exists.  Prevent $(FLAGS_FOR_TARGET) from being duplicated.
case $CC_FOR_TARGET in
*' $(FLAGS_FOR_TARGET)') ;;
*) CC_FOR_TARGET=$CC_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;;
esac

if test "x${CHILL_FOR_TARGET+set}" = xset; then
  :
elif test -d ${topsrcdir}/gcc; then
  CHILL_FOR_TARGET='$$r/gcc/xgcc -B$$r/gcc/ -L$$r/gcc/ch/runtime/'
elif test "$host" = "$target"; then
  CHILL_FOR_TARGET='$(CC)'
else
  CHILL_FOR_TARGET=`echo gcc | sed -e 's/x/x/' ${program_transform_name}`
fi
case $CHILL_FOR_TARGET in
*' $(FLAGS_FOR_TARGET)') ;;
*) CHILL_FOR_TARGET=$CHILL_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;;
esac

if test "x${CXX_FOR_TARGET+set}" = xset; then
  :
elif test -d ${topsrcdir}/gcc; then
  CXX_FOR_TARGET='$$r/gcc/`case $$dir in libstdc++-v3) echo xgcc ;; *) echo g++ ;; esac` -B$$r/gcc/ -nostdinc++ '$libstdcxx_flags
elif test "$host" = "$target"; then
  CXX_FOR_TARGET='$(CXX)'
else
  CXX_FOR_TARGET=`echo c++ | sed -e 's/x/x/' ${program_transform_name}`
fi
case $CXX_FOR_TARGET in
*' $(FLAGS_FOR_TARGET)') ;;
*) CXX_FOR_TARGET=$CXX_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;;
esac
qCXX_FOR_TARGET=`echo "$CXX_FOR_TARGET" | sed 's,[&%],\\\&,g'`

# We want to defer the evaluation of `cmd`s and shell variables in
# CXX_FOR_TARGET when recursing in the top-level Makefile, such as for
# bootstrap.  We'll enclose CXX_FOR_TARGET_FOR_RECURSIVE_MAKE in single
# quotes, but we still have to duplicate `$'s so that shell variables
# can be expanded by the nested make as shell variables, not as make
# macros.
qqCXX_FOR_TARGET=`echo "$qCXX_FOR_TARGET" | sed -e 's,[$][$],$$$$,g'`

targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}"
sed -e "s:^TARGET_CONFIGDIRS[ 	]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:" \
    -e "s%^CONFIG_ARGUMENTS[ 	]*=.*$%CONFIG_ARGUMENTS = ${targargs}%" \
    -e "s%^FLAGS_FOR_TARGET[ 	]*=.*$%FLAGS_FOR_TARGET = ${FLAGS_FOR_TARGET}%" \
    -e "s%^CC_FOR_TARGET[ 	]*=.*$%CC_FOR_TARGET = ${CC_FOR_TARGET}%" \
    -e "s%^CHILL_FOR_TARGET[ 	]*=.*$%CHILL_FOR_TARGET = ${CHILL_FOR_TARGET}%" \
    -e "s%^CXX_FOR_TARGET[ 	]*=.*$%CXX_FOR_TARGET = ${qCXX_FOR_TARGET}%" \
    -e "s%^CXX_FOR_TARGET_FOR_RECURSIVE_MAKE[ 	]*=.*$%CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = ${qqCXX_FOR_TARGET}%" \
    -e "s%^TARGET_SUBDIR[ 	]*=.*$%TARGET_SUBDIR = ${target_subdir}%" \
    -e "s%^gxx_include_dir[ 	]*=.*$%gxx_include_dir=${gxx_include_dir}%" \
       Makefile > Makefile.tem
rm -f Makefile
mv -f Makefile.tem Makefile

#
# Local Variables:
# fill-column: 131
# End:
#
