#! /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

libstdcxx_version="target-libstdc++-v3"
# Don't use libstdc++-v3's flags to configure/build itself.
libstdcxx_flags='`case $$dir in libstdc++-v3 | libjava) ;; *) test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/testsuite_flags --build-includes;; esac` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'

# 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

build_subdir=${build_alias}

if [ x"${build_alias}" != x"${host}" ] ; then
  if [ ! -d ${build_subdir} ] ; then
    if mkdir ${build_subdir} ; then true
    else
      echo "'*** could not make ${PWD=`pwd`}/${build_subdir}" 1>&2
      exit 1
    fi
  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
  *-*-netbsd*)
    # Skip some stuff on all NetBSD configurations.
    skipdirs="$skipdirs target-newlib target-libiberty target-libgloss"

    # Skip some stuff that's unsupported on some NetBSD configurations.
    case "${target}" in
      *)
        noconfigdirs="$noconfigdirs ${libgcj}"
	;;
    esac
    ;;
  *-*-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-*-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-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  strongarm-*-coff)
    noconfigdirs="$noconfigdirs target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  xscale-*-elf)
    noconfigdirs="$noconfigdirs target-libffi"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  xscale-*-coff)
    noconfigdirs="$noconfigdirs 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*-*-*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  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"
    ;;
  ia64*-**-hpux*)
    # No gdb or ld support yet.
    noconfigdirs="$noconfigdirs tix readline mmalloc libgui itcl gdb ld"
    ;;
  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"
    ;;
  sh64-*-*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  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.
# NB:  embedded tabs in this IF block -- do not untabify
if test x"${enable_languages+set}" != xset; then
	if test x"${LANGUAGES+set}" = xset; then
		enable_languages="${LANGUAGES}"
		echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
	else
		enable_languages=all
	fi
else
	if test x"${enable_languages}" = x ||
	   test x"${enable_languages}" = xyes;
	then
		echo configure.in: --enable-languages needs at least one language argument 1>&2
		exit 1
	fi
fi
enable_languages=`echo "${enable_languages}" | sed -e 's/[ 	,][ 	,]*/,/g' -e 's/,$//'`

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 [ "`type $CCBASE | sed 's/^[^/]*//'`" = "/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 for target and
# build configuration 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-]*=[^ 	]*//'`

# For the build-side libraries, we just need to pretend we're native,
# and not use the same cache file.  Multilibs are neither needed nor
# desired.
buildargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} ${targargs}"

# 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

# Pass the appropriate --host, --build, and --cache-file arguments.
targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}"

# 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

   case "${target}-${is_cross_compiler}" in
   i[3456]86-pc-linux*-no)
      # Here host == target, so we don't need to build gcc,
      # so we don't want to discard standard headers.
      FLAGS_FOR_TARGET=`echo " $FLAGS_FOR_TARGET " | sed -e 's/ -nostdinc / /'`
      FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/newlib/'
      ;;
   *)
      # 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
   ;;
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
  # We add -shared-libgcc to CXX_FOR_TARGET whenever we use xgcc instead
  # of g++ for linking C++ or Java, because g++ has -shared-libgcc by
  # default whereas gcc does not.
  CXX_FOR_TARGET='$$r/gcc/`case $$dir in libstdc++-v3 | libjava) echo xgcc -shared-libgcc ;; *) 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'`

sed -e "s:^TARGET_CONFIGDIRS[ 	]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:" \
    -e "s%^TARGET_CONFIGARGS[ 	]*=.*$%TARGET_CONFIGARGS = ${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%^BUILD_SUBDIR[ 	]*=.*$%BUILD_SUBDIR = ${build_subdir}%" \
    -e "s%^BUILD_CONFIGARGS[ 	]*=.*$%BUILD_CONFIGARGS = ${buildargs}%" \
    -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:
#
