#! /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, 93, 94, 95, 96, 97, 1998, 1999 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 tclX itcl tix libgui"

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

# these tools are built for the host environment
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
# know that we are building the simulator.
host_tools="texinfo byacc flex bison binutils ld gas gcc 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 \
		target-libio \
		target-librx \
		target-libstdc++ \
		target-libg++ \
		target-libf2c \
		target-libchill \
		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"
    ;;
  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"
    ;;
  *-cygwin32*)
    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"
    ;;
  *-*-aix4.[3456789]* | *-*-aix[56789].*)
    host_makefile_frag="${host_makefile_frag} config/mh-aix43"
    ;;
  *-*-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-*-cygwin32*)
      # We don't want -fPIC on cygwin32.
      ;;
    i[3456]86-*-*)
      host_makefile_frag="${host_makefile_frag} config/mh-x86pic"
      ;;
    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"
    ;;
  *-*-linux-gnu)
    target_makefile_frag="${target_makefile_frag} config/mt-linux"
    ;;
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"
    ;;
  :m32r-*)
    target_makefile_frag="${target_makefile_frag} config/mt-ospace"
    ;;
  no:* | :*)
    ;;
  *)
    echo "*** bad value \"${enable_target_optspace}\" for --enable-target-optspace flag; ignored" 1>&2
    ;;
esac

skipdirs=
gasdir=gas
use_gnu_ld=
use_gnu_as=

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

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

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

is_cross_compiler=

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

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

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

copy_dirs=

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

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

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

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

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

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

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

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

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

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

# Configure extra directories which are host specific

case "${host}" in
	i[3456]86-*-go32*)
	  configdirs="$configdirs dosrel" ;;
	i[3456]86-*-mingw32*)
	  configdirs="$configdirs dosrel" ;;
	*-cygwin32*)
	  configdirs="$configdirs 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"
	;;
  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 gprof rcs guile perl texinfo apache inet libtool"
	;;
  *-*-cygwin32)
     noconfigdirs="autoconf automake send-pr gprof rcs guile perl apache inet"
    ;;
  *-*-windows*)
# This is only used to build WinGDB...
# note that powerpc-eabi depends on sim configured before gdb.
     configdirs="bfd libiberty opcodes readline sim gdb"
     target_configdirs=
    ;;
  *-*-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"
    ;;
esac


case "${target}" in
  *-*-netware)
    noconfigdirs="$noconfigdirs target-libg++ target-libstdc++ target-librx target-newlib target-libiberty target-libgloss"
    ;;
  *-*-rtems*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  *-*-vxworks*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;;
  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"
    ;;
  alpha*-*-linux*)
    # newlib is not 64 bit ready
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    # linux has rx in libc
    skipdirs="$skipdirs target-librx"
    ;;
  alpha*-*-*)
    # newlib is not 64 bit ready
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;;
  arc-*-*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  arm-*-pe*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  arm-*-coff*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  arm-*-elf*)
    noconfigdirs="$noconfigdirs target-libgloss"
    if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    ;;
  arm-*-oabi*)
    noconfigdirs="$noconfigdirs target-libgloss"
    if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
    fi
    ;;
  c4x-*-*)
    noconfigdirs="$noconfigdirs target-libg++ target-libstdc++ target-libio target-librx target-libgloss"
    ;;
  thumb-*-coff)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  arm-*-riscix*)
    noconfigdirs="$noconfigdirs ld target-libgloss"
    ;;
  d10v-*-*)
    noconfigdirs="$noconfigdirs target-librx target-libg++ target-libstdc++ target-libio target-libgloss"
    ;;
  h8300*-*-* | \
  h8500-*-*)
    noconfigdirs="$noconfigdirs target-libg++ target-libstdc++ target-libio target-librx target-libgloss"
    ;;
  hppa*-*-*elf* | \
  hppa*-*-lites*)
    # 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
    noconfigdirs="$noconfigdirs ld shellutils"
    ;;
  i[3456]86-*-go32* | i[3456]-*-msdosdjgpp*)
    # but don't build gdb
    noconfigdirs="$noconfigdirs gdb target-libg++ target-libstdc++ target-libio target-librx"
    ;;
  *-*-linux*)
    # linux has rx in libc
    skipdirs="$skipdirs target-librx"
    ;;
  i[3456]86-*-mingw32*)
    target_configdirs="$target_configdirs target-mingw"
    noconfigdirs="$noconfigdirs expect target-libgloss"

    # 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
    ;;    
  *-*-cygwin32*)
    target_configdirs="$target_configdirs target-winsup"
    noconfigdirs="$noconfigdirs target-gperf target-libgloss"
    # always build newlib.
    skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'`

    # Can't build gdb for cygwin32 if not native.
    case "${host}" in
      *-*-cygwin32*) ;; # 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 target-libg++ target-libstdc++ target-libio target-librx target-libgloss"
    ;;
  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"
    ;;
  i[3456]86-*-sco*)
    noconfigdirs="$noconfigdirs gprof target-libgloss"
    ;;
  i[3456]86-*-solaris2*)
    # The linker does static linking correctly, but the Solaris C library
    # has bugs such that some important functions won't work when statically
    # linked.  (See man pages for getpwuid, for example.)
    noconfigdirs="$noconfigdirs ld 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"
    ;;
  mn10200-*-*)
    noconfigdirs="$noconfigdirs"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  mn10300-*-*)
    noconfigdirs="$noconfigdirs"
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  powerpc-*-aix*)
    # copied from rs6000-*-* entry
    noconfigdirs="$noconfigdirs gprof cvssrc target-libgloss"
    # This is needed until gcc and ld are fixed to work together.
    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"
    # 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"
    ;;
  rs6000-*-lynxos*)
    # The CVS server code doesn't work on the RS/6000
    # Newlib makes problems for libg++ in crosses.
    noconfigdirs="$noconfigdirs target-newlib gprof cvssrc"
    ;;
  rs6000-*-aix*)
    noconfigdirs="$noconfigdirs gprof"
    # This is needed until gcc and ld are fixed to work together.
    use_gnu_ld=no
    ;;
  rs6000-*-*)
    noconfigdirs="$noconfigdirs gprof"
    ;;
  m68k-apollo-*)
    noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss"
    ;;
  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 and linker do not support IRIX 6.
    # emacs is emacs 18, which does not work on Irix 5 (emacs19 does work)
    noconfigdirs="$noconfigdirs ld gas gprof emacs target-libgloss"
    ;;
  mips*-dec-bsd*)
    noconfigdirs="$noconfigdirs gprof target-libgloss"
    ;;
  mips*-*-bsd*)
    noconfigdirs="$noconfigdirs gprof target-libgloss"
    ;;
  mipstx39-*-*)
    noconfigdirs="$noconfigdirs gprof"   # same as generic mips
    target_configdirs="${target_configdirs} target-libstub target-cygmon"
   ;;
  mips*-*-*)
    noconfigdirs="$noconfigdirs gprof"
    ;;
  romp-*-*)
    noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss"
    ;;
  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"
    ;;
  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
    ;;
  sparclite-*-aout*)
    if [ x${is_cross_compiler} != xno ] ; then
	   target_configdirs="${target_configdirs} target-libstub target-cygmon"
    fi
    ;;
  sparc-*-sunos4*)
    if [ x${is_cross_compiler} != xno ] ; then
           noconfigdirs="$noconfigdirs gdb gdbtest target-newlib target-libgloss"
    else
           use_gnu_ld=no
    fi
    ;;
  v810-*-*)
    noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libio target-libg++ target-libstdc++ opcodes target-libgloss"
    ;;
  v850-*-*)
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  vax-*-vms)
    noconfigdirs="$noconfigdirs bfd binutils gdb ld target-newlib opcodes target-libgloss"
    ;;
  vax-*-*)
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;;
  *-*-lynxos*)
    # Newlib makes problems for libg++ in crosses.
    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
    ;; 
  *-*-macos* | \
  *-*-mpw*)
    # Macs want a resource compiler.
    configdirs="$configdirs grez"
    ;;    
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

# 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"
      ;;
    powerpc*-*)
      target_makefile_frag="${target_makefile_frag} config/mt-ppcpic"
      ;;
    alpha*-*-linux*)
      target_makefile_frag="${target_makefile_frag} config/mt-elfalphapic"
      ;;
    *)
      if test -f ${srcdir}/config/mt-${target_cpu}pic; then
        target_makefile_frag="${target_makefile_frag} config/mt-${target_cpu}pic"
      fi
      ;;
  esac
fi

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

# post-target:

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

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

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

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

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

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

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

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

# provide a proper gxx_include_dir.
# Note, if you change the default, make sure to fix both here and in
# the gcc, libio, libstdc++ and libg++ 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

targargs="--host=${target_alias} --build=${build_alias} ${targargs}"
sed -e "s:^TARGET_CONFIGDIRS[ 	]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:" \
    -e "s%^CONFIG_ARGUMENTS[ 	]*=.*$%CONFIG_ARGUMENTS = ${targargs}%" \
    -e "s%^TARGET_SUBDIR[ 	]*=.*$%TARGET_SUBDIR = ${target_subdir}%" \
    -e "s%^gxx_include_dir[ 	]*=.*$%gxx_include_dir=${gxx_include_dir}%" \
       Makefile > Makefile.tem
rm -f Makefile
mv -f Makefile.tem Makefile

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