#! /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, 1993, 1994, 1995, 1996, 1997, 1998,
#   1999, 2000, 2001, 2002 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 zlib"

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 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 fastjar"

# libgcj represents the runtime libraries only used by gcj.
libgcj="target-libffi \
	target-boehm-gc \
	target-zlib \
	target-qthreads \
	target-libjava"

# 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 \
		target-librx \
		${libstdcxx_version} \
		target-libf2c \
		${libgcj}
		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

# hpux11 in 64bit mode has libraries in a weird place.  Arrange to find
# them automatically.
case "${host}" in
  hppa*64*-*-hpux11*)	
    withoptions="$withoptions -x-libraries=/usr/lib/pa20_64 -x-includes=/usr/X11R6/include"
    ;;
esac

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"
      ;;
    parisc*-*-* | 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"
      ;;
    *-*-*)
      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"
    ;;
  alpha*-*-linux*)
    target_makefile_frag="${target_makefile_frag} config/mt-linux"
    target_makefile_frag="${target_makefile_frag} config/mt-alphaieee"
    ;;
  alpha*-*-*)
    target_makefile_frag="${target_makefile_frag} config/mt-alphaieee"
    ;;
  *-*-linux*)
    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
  hppa*64*-*-*)
    noconfigdirs="$noconfigdirs byacc"
    ;;
  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 send-pr uudecode guile apache inet itcl tix db snavigator gnuserv 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
  *-*-chorusos)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    ;;
  *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    ;;
  *-*-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
      i*86-*-netbsdelf*) ;;
      *)
	noconfigdirs="$noconfigdirs ${libgcj}"
	;;
    esac
    ;;
  *-*-netware)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-newlib target-libiberty target-libgloss ${libgcj}"
    ;;
  *-*-rtems*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    case ${target} in
	h8300*-*-* | h8500-*-*)
	  noconfigdirs="$noconfigdirs target-libf2c"
          ;;
        *) ;;
    esac
    ;;
  *-*-vxworks*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    ;;
  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 ${libgcj}"
    ;;
  alpha*-*-linux*)
    # newlib is not 64 bit ready
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    # linux has rx in libc
    skipdirs="$skipdirs target-librx"
    ;;
  alpha*-*-freebsd*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;;
  alpha*-*-*)
    # newlib is not 64 bit ready
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    ;;
  sh-*-linux*)
    noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
    # linux has rx in libc
    skipdirs="$skipdirs target-librx"
    ;;    
  sh*-*-pe|mips*-*-pe|*arm-wince-pe)
    noconfigdirs="$noconfigdirs ${libgcj}"
    noconfigdirs="$noconfigdirs 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 ${libgcj}"
    ;;
  arm-*-pe*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  arm-*-coff*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  arm-*-elf*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  arm-*-oabi*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  c4x-*-*)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-libgloss ${libgcj}"
    ;;
  c54x*-*-* | tic54x-*-*)
    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj} gcc gdb newlib"
    ;;
  thumb-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  thumb-*-elf)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  thumb-*-oabi)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  strongarm-*-elf)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  strongarm-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  xscale-*-elf)
    noconfigdirs="$noconfigdirs target-libgloss target-libffi target-qthreads"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  xscale-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  thumb-*-pe)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  arm-*-riscix*)
    noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
    ;;
  cris-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
  d10v-*-*)
    noconfigdirs="$noconfigdirs target-librx ${libstdcxx_version} target-libgloss ${libgcj}"
    ;;
  d30v-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
  fr30-*-elf*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    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-librx target-libgloss ${libgcj} target-libf2c"
    ;;
  hppa*64*-*-linux* | parisc*64*-*-linux*)
    # In this case, it's because the hppa64-linux target is for
    # the kernel only at this point and has no libc, and thus no
    # headers, crt*.o, etc., all of which are needed by these.
    noconfigdirs="$noconfigdirs target-zlib"
    ;;
  hppa*-*-*elf* | \
  parisc*-*-linux* | hppa*-*-linux* | \
  hppa*-*-lites* | \
  hppa*64*-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    # 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)
    noconfigdirs="$noconfigdirs ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
         target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  i[34567]86-*-freebsd*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;;
  s390*-*-linux*)
    # The libffi port is not yet in the GCC tree
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    # linux has rx in libc
    skipdirs="$skipdirs target-librx"
    ;;
  *-*-linux*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    # linux has rx in libc
    skipdirs="$skipdirs target-librx"
    ;;
  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-librx target-libgloss ${libgcj}"
    ;;
  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 ${libgcj}"
    ;;
  i[3456]86-*-sco*)
    noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
    ;;
  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 ${libgcj}"
    ;;
  i[3456]86-*-beos*)
     noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
     ;;
  m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
    noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
    ;;
  m68k-*-elf*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  m68k-*-coff*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-cygmon"
    fi
    ;;
  mcore-*-pe*)
  # The EPOC C++ environment does not support exceptions or rtti,
  # and so building libstdc++-v3 tends not to always work.
    noconfigdirs="$noconfigdirs target-libstdc++-v3"
    ;;
  mmix-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
  mn10200-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  mn10300-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    ;;
  powerpc-*-aix*)
    # copied from rs6000-*-* entry
    # The configure and build of ld are currently disabled because
    # GNU ld is known to be broken for AIX 4.2 and 4.3 (at least)
    # The symptom is that GDBtk 4.18 fails at startup with a segfault
    # if linked by GNU ld, but not if linked by the native ld.
    noconfigdirs="$noconfigdirs gprof cvssrc target-libgloss ${libgcj} ld"
    use_gnu_ld=no
    ;;
  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 ${libgcj}"
    # 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 ${libgcj}"
    ;;
  powerpc-*-beos*)
    noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
    ;;
  powerpc-*-eabi)
    noconfigdirs="$noconfigdirs ${libgcj}"
    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 ${libgcj}"
    ;;
  rs6000-*-aix*)
    # The configure and build of ld are currently disabled because
    # GNU ld is known to be broken for AIX 4.2 and 4.3 (at least)
    # The symptom is that GDBtk 4.18 fails at startup with a segfault
    # if linked by GNU ld, but not if linked by the native ld.
    noconfigdirs="$noconfigdirs gprof ld ${libgcj}"
    use_gnu_ld=no
    ;;
  rs6000-*-*)
    noconfigdirs="$noconfigdirs gprof ${libgcj}"
    ;;
  m68k-apollo-*)
    noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}"
    ;;
  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 ${libgcj}"
    ;;
  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 ${libgcj}"
    ;;
  mips*-*-bsd*)
    noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
    ;;
  mipstx39-*-*)
    noconfigdirs="$noconfigdirs gprof ${libgcj}"   # same as generic mips
    target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
   ;;
  mips*-*-linux*)
    noconfigdirs="$noconfigdirs target-libffi"
    ;;
  mips*-*-*)
    noconfigdirs="$noconfigdirs gprof ${libgcj}"
    ;;
  romp-*-*)
    noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
    ;;
  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 ${libgcj}"
    ;;
  sh64-*-*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  sparc-*-elf*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
  sparc64-*-elf*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
  sparclite-*-*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
  sparc-*-sunos4*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    if [ x${is_cross_compiler} != xno ] ; then
           noconfigdirs="$noconfigdirs gdb gdbtest target-newlib target-libgloss"
    else
           use_gnu_ld=no
    fi
    ;;
  sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
    ;;
  v810-*-*)
    noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss ${libgcj}"
    ;;
  v850-*-*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  v850e-*-*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  v850ea-*-*)
    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
    ;;
  vax-*-vms)
    noconfigdirs="$noconfigdirs bfd binutils gdb ld target-newlib opcodes target-libgloss ${libgcj}"
    ;;
  vax-*-*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    ;;
  *-*-lynxos*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
    ;; 
  *-*-macos* | \
  *-*-mpw*)
    # Macs want a resource compiler.
    configdirs="$configdirs grez"
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;    
  *-*-*)
    noconfigdirs="$noconfigdirs ${libgcj}"
    ;;
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/,$//'`

# First scan to see if an enabled language requires some other language.
# We assume that a given config-lang.in will list all the language
# front ends it requires, even if some are required indirectly.
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_requires=`sed -n -e 's,^lang_requires=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^lang_requires=\([^ 	]*\).*$,\1,p' $lang`
       for other in $this_lang_requires
       do
	  case ,${enable_languages}, in
	   *,$other,*)
	      ;;
	   *,all,*)
	      ;;
	   *,$lang_alias,*)
	      echo " \`$other' language required by \`$lang_alias'; enabling" 1>&2
	      enable_languages="$enable_languages,$other"
	      ;;
	  esac
       done
       ;;
   esac
done

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`
	  this_lang_dirs=`sed -n -e 's,^lang_dirs=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^lang_dirs=\([^ 	]*\).*$,\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 $this_lang_dirs\"
	  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* | parisc*)
      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 and libstdc++-v3 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/c++'
  else
    . ${topsrcdir}/config.if
    gxx_include_dir='${prefix}/include/${libstdcxx_incdir}'
  fi
else
  gxx_include_dir=${gxx_include_dir}
fi

FLAGS_FOR_TARGET=
case " $skipdirs " in
*" target-newlib "*) ;;
*)
 case " $target_configdirs " in
 *" newlib "*)
  case " $targargs " in
  *" --with-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
  ;;
 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${GCJ_FOR_TARGET+set}" = xset; then
  :
elif test -d ${topsrcdir}/gcc; then
  GCJ_FOR_TARGET='$$r/gcc/gcj -B$$r/gcc/'
elif test "$host" = "$target"; then
  GCJ_FOR_TARGET='gcj'
else
  GCJ_FOR_TARGET=`echo gcj | sed -e 's/x/x/' ${program_transform_name}`
fi
case $GCJ_FOR_TARGET in
*' $(FLAGS_FOR_TARGET)') ;;
*) GCJ_FOR_TARGET=$GCJ_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'`

sedtemp=sed.$$
cat >$sedtemp <<EOF
s:^TARGET_CONFIGDIRS[ 	]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:
s%^TARGET_CONFIGARGS[ 	]*=.*$%TARGET_CONFIGARGS = ${targargs}%
s%^FLAGS_FOR_TARGET[ 	]*=.*$%FLAGS_FOR_TARGET = ${FLAGS_FOR_TARGET}%
s%^CC_FOR_TARGET[ 	]*=.*$%CC_FOR_TARGET = ${CC_FOR_TARGET}%
s%^GCJ_FOR_TARGET[      ]*=.*$%GCJ_FOR_TARGET = ${GCJ_FOR_TARGET}%
s%^CXX_FOR_TARGET[ 	]*=.*$%CXX_FOR_TARGET = ${qCXX_FOR_TARGET}%
s%^CXX_FOR_TARGET_FOR_RECURSIVE_MAKE[ 	]*=.*$%CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = ${qqCXX_FOR_TARGET}%
s%^TARGET_SUBDIR[ 	]*=.*$%TARGET_SUBDIR = ${target_subdir}%
s%^BUILD_SUBDIR[ 	]*=.*$%BUILD_SUBDIR = ${build_subdir}%
s%^BUILD_CONFIGARGS[ 	]*=.*$%BUILD_CONFIGARGS = ${buildargs}%
s%^gxx_include_dir[ 	]*=.*$%gxx_include_dir=${gxx_include_dir}%
EOF
sed -f $sedtemp Makefile > Makefile.tem
rm -f Makefile $sedtemp
mv -f Makefile.tem Makefile

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