OSDN Git Service

reported by Peter Schmid <schmid@snake.iap.physik.tu-darmstadt.de>
[pf3gnuchains/gcc-fork.git] / configure.in
index c350b34..9b8488c 100644 (file)
@@ -48,15 +48,9 @@ if [ "${enable_gdbgui}" = "yes" ] ; then
        host_libs="${host_libs} libgui"
 fi
 
-# Set up configure/Makefile variables if libstdc++-v3 is to be built.
-if [ "${enable_libstdcxx_v3}" = "yes" ] && test -d $srcdir/libstdc++-v3; then
-        libstdcxx_version="target-libstdc++-v3"
-       # Don't use libstdc++-v3's flags to configure/build itself.
-       libstdcxx_flags='`case $$dir in libstdc++-v3) ;; *) cat $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/libstdc++.INC 2>/dev/null || : ;; esac` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs'
-else
-        libstdcxx_version="target-libio target-libstdc++"
-        libstdcxx_flags='-isystem $$s/libstdc++ -isystem $$s/libstdc++/std -isystem $$s/libstdc++/stl -isystem $$s/libio -isystem $$r/$(TARGET_SUBDIR)/libio -L$$r/$(TARGET_SUBDIR)/libstdc++'
-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
@@ -78,7 +72,6 @@ target_libs="target-libiberty \
                target-newlib \
                target-librx \
                ${libstdcxx_version} \
-               target-libg++ \
                target-libf2c \
                target-libchill \
                ${libgcj}
@@ -311,7 +304,7 @@ if [ x${shared} = xyes ]; then
     arm*-*-*)
       host_makefile_frag="${host_makefile_frag} config/mh-armpic"
       ;;
-    hppa*-*-*)
+    parisc*-*-* | hppa*-*-*)
       host_makefile_frag="${host_makefile_frag} config/mh-papic"
       ;;
     i[3456]86-*-cygwin*)
@@ -364,6 +357,13 @@ case "${target}" in
   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"
     ;;
@@ -445,6 +445,18 @@ if [ ! -d ${target_subdir} ] ; then
   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
@@ -562,7 +574,7 @@ case "${host}" in
     noconfigdirs="tcl expect dejagnu make texinfo bison patch flex byacc send-pr gprof uudecode dejagnu diff guile perl apache inet itcl tix db snavigator gnuserv gettext"
     ;;
   i[3456]86-*-go32* | i[3456]86-*-msdosdjgpp*)
-    noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl apache inet itcl tix db snavigator gnuserv gettext libffi"
+    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"
@@ -572,7 +584,7 @@ case "${host}" in
      noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
      ;;
   *-*-cygwin*)
-     noconfigdirs="autoconf automake send-pr rcs guile perl texinfo apache inet"
+     noconfigdirs="autoconf automake send-pr rcs guile perl apache inet"
     ;;
   *-*-netbsd*)
     noconfigdirs="rcs"
@@ -585,9 +597,39 @@ case "${host}" in
     ;;
 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}"
+    ;;
+  *-*-netbsd*)
+    # Skip some stuff on all NetBSD configurations.
+    skipdirs="$skipdirs target-newlib target-libiberty target-libgloss"
+
+    # Skip some stuff that's unsupported on some NetBSD configurations.
+    case "${target}" in
+      *)
+       noconfigdirs="$noconfigdirs ${libgcj}"
+       ;;
+    esac
+    ;;
   *-*-netware)
-    noconfigdirs="$noconfigdirs target-libg++ ${libstdcxx_version} target-librx target-newlib target-libiberty target-libgloss ${libgcj}"
+    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-newlib target-libiberty target-libgloss ${libgcj}"
     ;;
   *-*-rtems*)
     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
@@ -614,6 +656,11 @@ case "${target}" in
     # 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"
@@ -651,7 +698,7 @@ case "${target}" in
     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
     ;;
   c4x-*-*)
-    noconfigdirs="$noconfigdirs target-libg++ ${libstdcxx_version} target-librx target-libgloss ${libgcj}"
+    noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-libgloss ${libgcj}"
     ;;
   c54x*-*-* | tic54x-*-*)
     noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj} gcc gdb newlib"
@@ -695,27 +742,36 @@ case "${target}" in
   arm-*-riscix*)
     noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
     ;;
+  cris-*-*)
+    noconfigdirs="$noconfigdirs ${libgcj}"
+    ;;
   d10v-*-*)
-    noconfigdirs="$noconfigdirs target-librx target-libg++ ${libstdcxx_version} target-libgloss ${libgcj}"
+    noconfigdirs="$noconfigdirs target-librx ${libstdcxx_version} target-libgloss ${libgcj}"
     ;;
   d30v-*-*)
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     ;;
   fr30-*-elf*)
-    noconfigdirs="${libgcj}"
+    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 target-libg++ ${libstdcxx_version} target-librx target-libgloss ${libgcj}"
+    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* | \
-  hppa*-*-linux* | \
+  parisc*-*-linux* | hppa*-*-linux* | \
   hppa*-*-lites* | \
   hppa*64*-*-*)
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     # Do configure ld/binutils/gas for this case.
     ;;
   hppa*-*-*)
@@ -726,6 +782,8 @@ case "${target}" 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*)
@@ -733,21 +791,13 @@ case "${target}" in
     noconfigdirs="$noconfigdirs tix readline mmalloc libgui itcl gdb"
     ;;
   i[3456]86-*-coff | i[3456]86-*-elf)
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     if [ x${is_cross_compiler} != xno ] ; then
          target_configdirs="${target_configdirs} target-libstub target-cygmon"
     fi
     ;;
-  i[3456]86-*-go32* | i[3456]-*-msdosdjgpp*)
-    # but don't build gdb
-    noconfigdirs="$noconfigdirs gdb target-libg++ ${libstdcxx_version} target-librx ${libgcj}"
-    ;;
-  i[3456]86-*-linux*)
-    # linux has rx in libc
-    skipdirs="$skipdirs target-librx"
-    ;;
   *-*-linux*)
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     # linux has rx in libc
     skipdirs="$skipdirs target-librx"
     ;;
@@ -776,7 +826,7 @@ case "${target}" in
     esac
     ;;    
   i[3456]86-*-pe)
-    noconfigdirs="$noconfigdirs target-libg++ ${libstdcxx_version} target-librx target-libgloss ${libgcj}"
+    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,
@@ -787,7 +837,7 @@ case "${target}" in
     noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}"
     ;;
   i[3456]86-*-solaris2*)
-    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+    noconfigdirs="$noconfigdirs target-libgloss"
     ;;
   i[3456]86-*-sysv4*)
     # The SYSV4 C compiler doesn't handle Emacs correctly
@@ -801,18 +851,24 @@ case "${target}" in
   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="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-bsp target-cygmon"
     fi
     ;;
   m68k-*-coff*)
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-bsp target-cygmon"
     fi
     ;;
+  mmix-*-*)
+    noconfigdirs="$noconfigdirs ${libgcj}"
+    ;;
   mn10200-*-*)
     noconfigdirs="$noconfigdirs ${libgcj}"
     if [ x${is_cross_compiler} != xno ] ; then
@@ -848,7 +904,7 @@ case "${target}" in
     noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
     ;;
   powerpc-*-eabi)
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
     fi
@@ -879,6 +935,10 @@ case "${target}" in
   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*)
@@ -891,6 +951,9 @@ case "${target}" in
     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}"
     ;;
@@ -906,8 +969,10 @@ case "${target}" in
     esac
     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
     ;;
+  sh64-*-*)
+    noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
+    ;;
   sparc-*-elf*)
-    noconfigdirs="${libgcj}"
     if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-libstub target-cygmon"
     fi
@@ -916,24 +981,34 @@ case "${target}" in
     if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-libstub target-cygmon"
     fi
-    noconfigdirs="${libgcj}"
     ;;
   sparclite-*-*)
     if [ x${is_cross_compiler} != xno ] ; then
           target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon"
     fi
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     ;;
   sparc-*-sunos4*)
-    noconfigdirs="${libgcj}"
+    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*)
+    case "${host}" in
+    sparc-*-solaris2.8)
+      # According to Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, libjava
+      # won't build correctly on Solaris 8 if there's a
+      # previously-installed version of GCC in the configured prefix.
+      # This problem does not show up on earlier versions of Solaris.
+      noconfigdirs="$noconfigdirs ${libgcj}"
+      ;;
+    esac
+    ;;
   v810-*-*)
-    noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libg++ ${libstdcxx_version} opcodes target-libgloss ${libgcj}"
+    noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss ${libgcj}"
     ;;
   v850-*-*)
     noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
@@ -957,8 +1032,11 @@ case "${target}" in
   *-*-mpw*)
     # Macs want a resource compiler.
     configdirs="$configdirs grez"
-    noconfigdirs="${libgcj}"
+    noconfigdirs="$noconfigdirs ${libgcj}"
     ;;    
+  *-*-*)
+    noconfigdirs="$noconfigdirs ${libgcj}"
+    ;;
 esac
 
 # If we aren't building newlib, then don't build libgloss, since libgloss
@@ -980,6 +1058,93 @@ if [ x$with_gnu_as = xno ]; then
   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.
@@ -1114,7 +1279,7 @@ fi
 
 if [ x${shared} = xyes ]; then
   case "${target}" in
-    hppa*)
+    hppa* | parisc*)
       target_makefile_frag="${target_makefile_frag} config/mt-papic"
       ;;
     i[3456]86-*)
@@ -1171,7 +1336,7 @@ rm -f conftest*
 case "${host}" in
   sparc-sun-solaris2*)
       CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`"
-      if [ "`/usr/bin/which $CCBASE`" = "/usr/ucb/cc" ] ; then
+      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
@@ -1213,7 +1378,8 @@ if [ "${shared}" = "yes" ]; then
   esac
 fi
 
-# Record target_configdirs and the configure arguments in Makefile.
+# 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[^        ]*//' \
@@ -1222,6 +1388,11 @@ targargs=`echo "${arguments}" | \
            -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
@@ -1242,9 +1413,12 @@ if [ x${with_newlib} != xno ] && echo " ${target_configdirs} " | grep " newlib "
   targargs="--with-newlib ${targargs}"
 fi
 
+# Pass the appropriate --host, --build, and --cache-file arguments.
+targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}"
+
 # provide a proper gxx_include_dir.
 # Note, if you change the default, make sure to fix both here and in
-# the gcc, libio, libstdc++ and libg++ subdirectories.
+# 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
@@ -1265,7 +1439,7 @@ if test x${gxx_include_dir} = x; then
     gxx_include_dir='${libsubdir}/include/g++'
   else
     . ${topsrcdir}/config.if
-    gxx_include_dir='${prefix}/include/g++'-${libstdcxx_interface}
+    gxx_include_dir='${prefix}/include/${libstdcxx_incdir}'
   fi
 else
   gxx_include_dir=${gxx_include_dir}
@@ -1364,10 +1538,23 @@ case $CHILL_FOR_TARGET in
 *) CHILL_FOR_TARGET=$CHILL_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
+
 if test "x${CXX_FOR_TARGET+set}" = xset; then
   :
 elif test -d ${topsrcdir}/gcc; then
-  CXX_FOR_TARGET='$$r/gcc/g++ -B$$r/gcc/ -nostdinc++ '$libstdcxx_flags
+  # 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
@@ -1377,19 +1564,33 @@ 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'`
-
-targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}"
-sed -e "s:^TARGET_CONFIGDIRS[  ]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:" \
-    -e "s%^CONFIG_ARGUMENTS[   ]*=.*$%CONFIG_ARGUMENTS = ${targargs}%" \
-    -e "s%^FLAGS_FOR_TARGET[   ]*=.*$%FLAGS_FOR_TARGET = ${FLAGS_FOR_TARGET}%" \
-    -e "s%^CC_FOR_TARGET[      ]*=.*$%CC_FOR_TARGET = ${CC_FOR_TARGET}%" \
-    -e "s%^CHILL_FOR_TARGET[   ]*=.*$%CHILL_FOR_TARGET = ${CHILL_FOR_TARGET}%" \
-    -e "s%^CXX_FOR_TARGET[     ]*=.*$%CXX_FOR_TARGET = ${qCXX_FOR_TARGET}%" \
-    -e "s%^TARGET_SUBDIR[      ]*=.*$%TARGET_SUBDIR = ${target_subdir}%" \
-    -e "s%^gxx_include_dir[    ]*=.*$%gxx_include_dir=${gxx_include_dir}%" \
-       Makefile > Makefile.tem
-rm -f Makefile
+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%^CHILL_FOR_TARGET[   ]*=.*$%CHILL_FOR_TARGET = ${CHILL_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
 
 #