OSDN Git Service

* include/posix.h: .dylib is used on all Apple MACH platforms.
[pf3gnuchains/gcc-fork.git] / Makefile.tpl
index dee4cee..9d662dc 100644 (file)
@@ -75,21 +75,12 @@ LN_S = @LN_S@
 # Miscellaneous non-standard autoconf-set variables
 # -------------------------------------------------
 
-# The file containing GCC's version number.
-gcc_version_trigger = @gcc_version_trigger@
-gcc_version = @gcc_version@
-
 # The gcc driver likes to know the arguments it was configured with.
 TOPLEVEL_CONFIGURE_ARGUMENTS=@TOPLEVEL_CONFIGURE_ARGUMENTS@
 
-gxx_include_dir = @gxx_include_dir@
-libstdcxx_incdir = @libstdcxx_incdir@
-
 tooldir = @tooldir@
 build_tooldir = @build_tooldir@
 
-# Directory in which the compiler finds executables, libraries, etc.
-libsubdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)
 GDB_NLM_DEPS = 
 
 # This is the name of the environment variable used for the path to
@@ -104,10 +95,11 @@ SET_LIB_PATH = @SET_LIB_PATH@
 # Some platforms don't like blank entries, so we remove duplicate,
 # leading and trailing colons.
 REALLY_SET_LIB_PATH = \
+  @SET_GCC_LIB_PATH@ \
   $(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH):$(TARGET_LIB_PATH):$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
 
 # This is the list of directories to be built for the build system.
-BUILD_CONFIGDIRS = libiberty libbanshee
+BUILD_CONFIGDIRS = libiberty
 # Build programs are put under this directory.
 BUILD_SUBDIR = @build_subdir@
 # This is set by the configure script to the arguments to use when configuring
@@ -151,6 +143,9 @@ SUBDIRS = @configdirs@
 # This is set by the configure script to the arguments to use when configuring
 # directories built for the host system.
 HOST_CONFIGARGS = @host_configargs@
+# Host programs are put under this directory, which is . except if building
+# with srcdir=..
+HOST_SUBDIR = @host_subdir@
 # This is the list of variables to export in the environment when
 # configuring subdirectories for the host system.
 HOST_EXPORTS = \
@@ -173,13 +168,19 @@ HOST_EXPORTS = \
        OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
        TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
        GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
-       GMPINC="$(HOST_GMPINC)"; export GMPINC;
+       GMPINC="$(HOST_GMPINC)"; export GMPINC; \
+       SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+       @SET_GCC_LIB_PATH@
 
 # Similar, for later GCC stages.
 STAGE_HOST_EXPORTS = \
        $(HOST_EXPORTS) \
-       CC="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
-       CC_FOR_BUILD="$(STAGE_CC_WRAPPER) $$r/prev-gcc/xgcc$(exeext) -B$$r/prev-gcc/ -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
+       CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
+         -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \
+       CC_FOR_BUILD="$(STAGE_CC_WRAPPER) \
+         $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
+         -B$$r/$(HOST_SUBDIR)/prev-gcc/ \
+         -B$(build_tooldir)/bin/"; export CC_FOR_BUILD;
 
 # This is set by the configure script to the list of directories which
 # should be built using the target tools.
@@ -198,7 +199,7 @@ BASE_TARGET_EXPORTS = \
        CC="$(CC_FOR_TARGET)"; export CC; \
        CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
        CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
-       CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+       CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
        CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
        GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
        GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
@@ -207,7 +208,9 @@ BASE_TARGET_EXPORTS = \
        LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
        NM="$(NM_FOR_TARGET)"; export NM; \
        RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
-       WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES;
+       WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+       SET_GCC_LIB_PATH_CMD="@SET_GCC_LIB_PATH@"; export SET_GCC_LIB_PATH_CMD; \
+       @SET_GCC_LIB_PATH@
 
 RAW_CXX_TARGET_EXPORTS = \
        $(BASE_TARGET_EXPORTS) \
@@ -243,43 +246,44 @@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
 
 CXX_FOR_BUILD = $(CXX)
 
-# Path to the build directory for a Canadian cross, empty otherwise.
-BUILD_DIR_PREFIX = @BUILD_DIR_PREFIX@
-
 # Special variables passed down in EXTRA_GCC_FLAGS.  They are defined
 # here so that they can be overridden by Makefile fragments.
 BUILD_PREFIX = @BUILD_PREFIX@
 BUILD_PREFIX_1 = @BUILD_PREFIX_1@
 
+# Flags to pass to stage2 and later makes.  They are defined
+# here so that they can be overridden by Makefile fragments.
+BOOT_CFLAGS= -g -O2
+
 CONFIGURED_BISON = @CONFIGURED_BISON@
-BISON = `if [ -f $$r/$(BUILD_DIR_PREFIX)/bison/bison ] ; then \
-           echo $$r/$(BUILD_DIR_PREFIX)/bison/bison -L $$s/bison/ ; \
+BISON = `if [ -f $$r/$(BUILD_SUBDIR)/bison/tests/bison ] ; then \
+           echo $$r/$(BUILD_SUBDIR)/bison/tests/bison ; \
         else \
            echo ${CONFIGURED_BISON} ; \
         fi`
 
 CONFIGURED_YACC = @CONFIGURED_YACC@
-YACC = `if [ -f $$s/$(BUILD_DIR_PREFIX)/bison/bison ] ; then \
-           echo $$r/$(BUILD_DIR_PREFIX)/bison/bison -y -L $$s/bison/ ; \
-       elif [ -f $$s/$(BUILD_DIR_PREFIX)/byacc/byacc ] ; then \
-           echo $$r/$(BUILD_DIR_PREFIX)/byacc/byacc ; \
+YACC = `if [ -f $$r/$(BUILD_SUBDIR)/bison/tests/bison ] ; then \
+           echo $$r/$(BUILD_SUBDIR)/bison/tests/bison -y ; \
+       elif [ -f $$r/$(BUILD_SUBDIR)/byacc/byacc ] ; then \
+           echo $$r/$(BUILD_SUBDIR)/byacc/byacc ; \
        else \
            echo ${CONFIGURED_YACC} ; \
        fi`
 
 CONFIGURED_FLEX = @CONFIGURED_FLEX@
-FLEX = `if [ -f $$r/$(BUILD_DIR_PREFIX)/flex/flex ] ; \
-       then echo $$r/$(BUILD_DIR_PREFIX)/flex/flex ; \
+FLEX = `if [ -f $$r/$(BUILD_SUBDIR)/flex/flex ] ; \
+       then echo $$r/$(BUILD_SUBDIR)/flex/flex ; \
        else echo ${CONFIGURED_FLEX} ; fi`
 
 CONFIGURED_LEX = @CONFIGURED_LEX@
-LEX = `if [ -f $$r/$(BUILD_DIR_PREFIX)/flex/flex ] ; \
-       then echo $$r/$(BUILD_DIR_PREFIX)/flex/flex ; \
+LEX = `if [ -f $$r/$(BUILD_SUBDIR)/flex/flex ] ; \
+       then echo $$r/$(BUILD_SUBDIR)/flex/flex ; \
        else echo ${CONFIGURED_LEX} ; fi`
 
 CONFIGURED_M4 = @CONFIGURED_M4@
-M4 = `if [ -f $$r/$(BUILD_DIR_PREFIX)/m4/m4 ] ; \
-       then echo $$r/$(BUILD_DIR_PREFIX)/m4/m4 ; \
+M4 = `if [ -f $$r/$(BUILD_SUBDIR)/m4/m4 ] ; \
+       then echo $$r/$(BUILD_SUBDIR)/m4/m4 ; \
        else echo ${CONFIGURED_M4} ; fi`
 
 # For an installed makeinfo, we require it to be from texinfo 4.2 or
@@ -287,8 +291,8 @@ M4 = `if [ -f $$r/$(BUILD_DIR_PREFIX)/m4/m4 ] ; \
 # makeinfo even if only the Makefile is there, because Texinfo builds its
 # manual when made, and it requires its own version.
 CONFIGURED_MAKEINFO = @CONFIGURED_MAKEINFO@
-MAKEINFO = `if [ -f $$r/$(BUILD_DIR_PREFIX)/texinfo/makeinfo/Makefile ] ; \
-       then echo $$r/$(BUILD_DIR_PREFIX)/texinfo/makeinfo/makeinfo ; \
+MAKEINFO = `if [ -f $$r/$(BUILD_SUBDIR)/texinfo/makeinfo/Makefile ] ; \
+       then echo $$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo ; \
        else if (${CONFIGURED_MAKEINFO} --version \
          | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])') >/dev/null 2>&1; \
         then echo ${CONFIGURED_MAKEINFO}; else echo $$s/missing makeinfo; fi; fi`
@@ -299,8 +303,9 @@ MAKEINFO = `if [ -f $$r/$(BUILD_DIR_PREFIX)/texinfo/makeinfo/Makefile ] ; \
 # (Default to avoid splitting info files by setting the threshold high.)
 MAKEINFOFLAGS = --split-size=5000000
 
-EXPECT = `if [ -f $$r/expect/expect ] ; \
-       then echo $$r/expect/expect ; \
+# FIXME: expect may become a build tool?
+EXPECT = `if [ -f $$r/$(HOST_SUBDIR)/expect/expect ] ; \
+       then echo $$r/$(HOST_SUBDIR)/expect/expect ; \
        else echo expect ; fi`
 
 RUNTEST = `if [ -f $$s/dejagnu/runtest ] ; \
@@ -313,7 +318,7 @@ RUNTEST = `if [ -f $$s/dejagnu/runtest ] ; \
 
 # This is the list of directories that may be needed in RPATH_ENVVAR
 # so that programs built for the host machine work.
-HOST_LIB_PATH = $$r/bfd:$$r/opcodes
+HOST_LIB_PATH = $$r/$(HOST_SUBDIR)/bfd:$$r/$(HOST_SUBDIR)/opcodes
 
 AS = @AS@
 
@@ -354,8 +359,8 @@ FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
 AR_FOR_TARGET=@AR_FOR_TARGET@
 CONFIGURED_AR_FOR_TARGET=@CONFIGURED_AR_FOR_TARGET@
 USUAL_AR_FOR_TARGET = ` \
-  if [ -f $$r/binutils/ar ] ; then \
-    echo $$r/binutils/ar ; \
+  if [ -f $$r/$(HOST_SUBDIR)/binutils/ar ] ; then \
+    echo $$r/$(HOST_SUBDIR)/binutils/ar ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
       echo $(AR); \
@@ -367,9 +372,9 @@ USUAL_AR_FOR_TARGET = ` \
 AS_FOR_TARGET=@AS_FOR_TARGET@
 CONFIGURED_AS_FOR_TARGET=@CONFIGURED_AS_FOR_TARGET@
 USUAL_AS_FOR_TARGET = ` \
-  if [ -f $$r/gas/as-new ] ; then \
-    echo $$r/gas/as-new ; \
-  elif [ -f $$r/gcc/xgcc ]; then \
+  if [ -f $$r/$(HOST_SUBDIR)/gas/as-new ] ; then \
+    echo $$r/$(HOST_SUBDIR)/gas/as-new ; \
+  elif [ -f $$r/$(HOST_SUBDIR)/gcc/xgcc ]; then \
     $(CC_FOR_TARGET) -print-prog-name=as ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
@@ -390,7 +395,8 @@ CFLAGS_FOR_TARGET = -O2 $(CFLAGS)
 # build libgcc2.a.  We define it here so that it can itself be
 # overridden on the command line.
 GCC_FOR_TARGET=@GCC_FOR_TARGET@
-USUAL_GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) $$r/gcc/xgcc -B$$r/gcc/ $(FLAGS_FOR_TARGET)
+USUAL_GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) \
+  $$r/$(HOST_SUBDIR)/gcc/xgcc -B$$r/$(HOST_SUBDIR)/gcc/ $(FLAGS_FOR_TARGET)
 LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
 
 CXX_FOR_TARGET = @CXX_FOR_TARGET@
@@ -403,8 +409,8 @@ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
 DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
 CONFIGURED_DLLTOOL_FOR_TARGET=@CONFIGURED_DLLTOOL_FOR_TARGET@
 USUAL_DLLTOOL_FOR_TARGET = ` \
-  if [ -f $$r/binutils/dlltool ] ; then \
-    echo $$r/binutils/dlltool ; \
+  if [ -f $$r/$(HOST_SUBDIR)/binutils/dlltool ] ; then \
+    echo $$r/$(HOST_SUBDIR)/binutils/dlltool ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
       echo $(DLLTOOL); \
@@ -419,9 +425,9 @@ GFORTRAN_FOR_TARGET = @GFORTRAN_FOR_TARGET@
 LD_FOR_TARGET=@LD_FOR_TARGET@
 CONFIGURED_LD_FOR_TARGET=@CONFIGURED_LD_FOR_TARGET@
 USUAL_LD_FOR_TARGET = ` \
-  if [ -f $$r/ld/ld-new ] ; then \
-    echo $$r/ld/ld-new ; \
-  elif [ -f $$r/gcc/xgcc ]; then \
+  if [ -f $$r/$(HOST_SUBDIR)/ld/ld-new ] ; then \
+    echo $$r/$(HOST_SUBDIR)/ld/ld-new ; \
+  elif [ -f $$r/$(HOST_SUBDIR)/gcc/xgcc ]; then \
     $(CC_FOR_TARGET) -print-prog-name=ld ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
@@ -436,9 +442,9 @@ LDFLAGS_FOR_TARGET =
 NM_FOR_TARGET=@NM_FOR_TARGET@
 CONFIGURED_NM_FOR_TARGET=@CONFIGURED_NM_FOR_TARGET@
 USUAL_NM_FOR_TARGET = ` \
-  if [ -f $$r/binutils/nm-new ] ; then \
-    echo $$r/binutils/nm-new ; \
-  elif [ -f $$r/gcc/xgcc ]; then \
+  if [ -f $$r/$(HOST_SUBDIR)/binutils/nm-new ] ; then \
+    echo $$r/$(HOST_SUBDIR)/binutils/nm-new ; \
+  elif [ -f $$r/$(HOST_SUBDIR)/gcc/xgcc ]; then \
     $(CC_FOR_TARGET) -print-prog-name=nm ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
@@ -451,8 +457,8 @@ USUAL_NM_FOR_TARGET = ` \
 RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
 CONFIGURED_RANLIB_FOR_TARGET=@CONFIGURED_RANLIB_FOR_TARGET@
 USUAL_RANLIB_FOR_TARGET = ` \
-  if [ -f $$r/binutils/ranlib ] ; then \
-    echo $$r/binutils/ranlib ; \
+  if [ -f $$r/$(HOST_SUBDIR)/binutils/ranlib ] ; then \
+    echo $$r/$(HOST_SUBDIR)/binutils/ranlib ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
       if [ x'$(RANLIB)' != x ]; then \
@@ -468,8 +474,8 @@ USUAL_RANLIB_FOR_TARGET = ` \
 WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
 CONFIGURED_WINDRES_FOR_TARGET=@CONFIGURED_WINDRES_FOR_TARGET@
 USUAL_WINDRES_FOR_TARGET = ` \
-  if [ -f $$r/binutils/windres ] ; then \
-    echo $$r/binutils/windres ; \
+  if [ -f $$r/$(HOST_SUBDIR)/binutils/windres ] ; then \
+    echo $$r/$(HOST_SUBDIR)/binutils/windres ; \
   else \
     if [ '$(host)' = '$(target)' ] ; then \
       echo $(WINDRES); \
@@ -484,14 +490,6 @@ PICFLAG_FOR_TARGET =
 # Miscellaneous targets and flag lists
 # ------------------------------------
 
-@if gcc-bootstrap
-# Let's leave this as the first rule in the file until toplevel
-# bootstrap is fleshed out completely.
-sorry:
-       @echo Toplevel bootstrap temporarily out of commission.
-       @echo Please reconfigure without --enable-bootstrap
-@endif gcc-bootstrap
-
 # The first rule in the file had better be this one.  Don't put any above it.
 # This lives here to allow makefile fragments to contain dependencies.
 @default_target@:
@@ -603,7 +601,7 @@ configure-target: [+
 
 # The target built for a native non-bootstrap build.
 .PHONY: all
-all: unstage all-build all-host all-target stage
+all: unstage all-host all-target stage
 
 .PHONY: all-build
 all-build: [+
@@ -644,12 +642,13 @@ do-[+make_target+]: unstage [+make_target+]-host [+make_target+]-target stage
 
 # Here are the targets which correspond to the do-X targets.
 
-.PHONY: info installcheck dvi install-info
+.PHONY: info installcheck dvi html install-info
 .PHONY: clean distclean mostlyclean maintainer-clean realclean
 .PHONY: local-clean local-distclean local-maintainer-clean
 info: do-info
 installcheck: do-installcheck
 dvi: do-dvi
+html: do-html
 
 # Make sure makeinfo is built before we do a `make info', if we're
 # in fact building texinfo.
@@ -671,6 +670,9 @@ local-distclean:
          rm -rf $(TARGET_SUBDIR); \
        else true; fi
        -rm -rf $(BUILD_SUBDIR)
+       -if [ "$(HOST_SUBDIR)" != "." ]; then \
+         rm -rf $(HOST_SUBDIR); \
+       else true; fi
        -rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile
        -rm -f texinfo/doc/Makefile texinfo/po/POTFILES
        -rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
@@ -695,6 +697,7 @@ clean-target-libgcc:
        (cd gcc/libgcc && find . -type d -print) | \
        while read d; do rm -f gcc/$$d/libgcc.a || : ; done
        -rm -rf gcc/libgcc
+       -rm -f gcc/stmp-dirs
 
 # Check target.
 
@@ -822,38 +825,12 @@ configure-build-[+module+]:
        echo Configuring in $(BUILD_SUBDIR)/[+module+]; \
        cd "$(BUILD_SUBDIR)/[+module+]" || exit 1; \
        case $(srcdir) in \
-         /* | [A-Za-z]:[\\/]*) \
-           topdir=$(srcdir) ;; \
-         *) \
-           case "$(BUILD_SUBDIR)" in \
-             .) topdir="../$(srcdir)" ;; \
-             *) topdir="../../$(srcdir)" ;; \
-           esac ;; \
+         /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+         *) topdir=`echo $(BUILD_SUBDIR)/[+module+]/ | \
+               sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
        esac; \
-       if [ "$(srcdir)" = "." ] ; then \
-         if [ "$(BUILD_SUBDIR)" != "." ] ; then \
-           if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
-             if [ -f Makefile ]; then \
-               if $(MAKE) distclean; then \
-                 true; \
-               else \
-                 exit 1; \
-               fi; \
-             else \
-               true; \
-             fi; \
-           else \
-             exit 1; \
-           fi; \
-         else \
-           true; \
-         fi; \
-         srcdiroption="--srcdir=."; \
-         libsrcdir="."; \
-       else \
-         srcdiroption="--srcdir=$${topdir}/[+module+]"; \
-         libsrcdir="$$s/[+module+]"; \
-       fi; \
+       srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+       libsrcdir="$$s/[+module+]"; \
        rm -f no-such-file || : ; \
        CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
          $(BUILD_CONFIGARGS) $${srcdiroption} \
@@ -864,12 +841,14 @@ configure-build-[+module+]:
 .PHONY: all-build-[+module+] maybe-all-build-[+module+]
 maybe-all-build-[+module+]:
 @if build-[+module+]
+TARGET-build-[+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
 maybe-all-build-[+module+]: all-build-[+module+]
 all-build-[+module+]: configure-build-[+module+]
        @r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(BUILD_EXPORTS) \
-       (cd $(BUILD_SUBDIR)/[+module+] && $(MAKE) [+extra_make_flags+] all)
+       (cd $(BUILD_SUBDIR)/[+module+] && \
+         $(MAKE) [+extra_make_flags+] $(TARGET-build-[+module+]))
 @endif build-[+module+]
 [+ ENDFOR build_modules +]
 
@@ -882,24 +861,21 @@ maybe-configure-[+module+]:
 @if [+module+]
 maybe-configure-[+module+]: configure-[+module+]
 configure-[+module+]:
-       @test ! -f [+module+]/Makefile || exit 0; \
-       [ -d [+module+] ] || mkdir [+module+]; \
+       @[+ IF bootstrap +]test -f stage_last && exit 0; \
+       [+ ENDIF bootstrap +]test ! -f $(HOST_SUBDIR)/[+module+]/Makefile || exit 0; \
+       $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/[+module+] ; \
        r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(HOST_EXPORTS) \
        echo Configuring in [+module+]; \
-       cd [+module+] || exit 1; \
+       cd $(HOST_SUBDIR)/[+module+] || exit 1; \
        case $(srcdir) in \
-         \.) \
-           srcdiroption="--srcdir=."; \
-           libsrcdir=".";; \
-         /* | [A-Za-z]:[\\/]*) \
-           srcdiroption="--srcdir=$(srcdir)/[+module+]"; \
-           libsrcdir="$$s/[+module+]";; \
-         *) \
-           srcdiroption="--srcdir=../$(srcdir)/[+module+]"; \
-           libsrcdir="$$s/[+module+]";; \
+         /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+         *) topdir=`echo $(HOST_SUBDIR)/[+module+]/ | \
+               sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
        esac; \
+       srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+       libsrcdir="$$s/[+module+]"; \
        $(SHELL) $${libsrcdir}/configure \
          $(HOST_CONFIGARGS) $${srcdiroption} [+extra_configure_flags+] \
          || exit 1
@@ -908,19 +884,16 @@ configure-[+module+]:
 .PHONY: all-[+module+] maybe-all-[+module+]
 maybe-all-[+module+]:
 @if [+module+]
+TARGET-[+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
 maybe-all-[+module+]: all-[+module+]
 all-[+module+]: configure-[+module+]
-       @r=`${PWD_COMMAND}`; export r; \
+       @[+ IF bootstrap +]test -f stage_last && exit 0; \
+       [+ ENDIF bootstrap +]r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(SET_LIB_PATH) \
        $(HOST_EXPORTS) \
-       (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
-         IF with_x 
-           +] $(X11_FLAGS_TO_PASS)[+ 
-         ENDIF with_x +] [+extra_make_flags+] [+
-         IF (== (get "module") "gcc") +] \
-           `if [ -f gcc/stage_last ]; then echo quickstrap ; else echo all; fi` [+
-         ELSE +]all[+ ENDIF +])
+       (cd $(HOST_SUBDIR)/[+module+] && \
+         $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] $(TARGET-[+module+]))
 @endif [+module+]
 
 .PHONY: check-[+module+] maybe-check-[+module+]
@@ -937,10 +910,8 @@ check-[+module+]:
          s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
          $(SET_LIB_PATH) \
          $(HOST_EXPORTS) \
-         (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
-           IF with_x 
-             +] $(X11_FLAGS_TO_PASS)[+ 
-           ENDIF with_x +] [+extra_make_flags+] check); \
+         (cd $(HOST_SUBDIR)/[+module+] && \
+           $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check); \
        fi
 [+ ELSE check +]
 check-[+module+]:
@@ -948,10 +919,8 @@ check-[+module+]:
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(SET_LIB_PATH) \
        $(HOST_EXPORTS) \
-       (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
-         IF with_x 
-           +] $(X11_FLAGS_TO_PASS)[+ 
-         ENDIF with_x +] [+extra_make_flags+] check)
+       (cd $(HOST_SUBDIR)/[+module+] && \
+         $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
 [+ ENDIF no_check +]
 @endif [+module+]
 
@@ -967,10 +936,8 @@ install-[+module+]: installdirs
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(SET_LIB_PATH) \
        $(HOST_EXPORTS) \
-       (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+ 
-         IF with_x 
-           +] $(X11_FLAGS_TO_PASS)[+ 
-         ENDIF with_x +] [+extra_make_flags+] install)
+       (cd $(HOST_SUBDIR)/[+module+] && \
+         $(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install)
 [+ ENDIF no_install +]
 @endif [+module+]
 
@@ -997,7 +964,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
          eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
        done; \
        echo "Doing [+make_target+] in [+module+]" ; \
-       (cd [+module+] && \
+       (cd $(HOST_SUBDIR)/[+module+] && \
          $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
                  "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
                  "RANLIB=$${RANLIB}" \
@@ -1038,38 +1005,12 @@ ENDIF raw_cxx +]
        echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
        cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
        case $(srcdir) in \
-         /* | [A-Za-z]:[\\/]*) \
-           topdir=$(srcdir) ;; \
-         *) \
-           case "$(TARGET_SUBDIR)" in \
-             .) topdir="../$(srcdir)" ;; \
-             *) topdir="../../$(srcdir)" ;; \
-           esac ;; \
-       esac; \[+ IF stage +]
-       if [ "$(srcdir)" = "." ] ; then \
-         if [ "$(TARGET_SUBDIR)" != "." ] ; then \
-           if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
-             if [ -f Makefile ]; then \
-               if $(MAKE) distclean; then \
-                 true; \
-               else \
-                 exit 1; \
-               fi; \
-             else \
-               true; \
-             fi; \
-           else \
-             exit 1; \
-           fi; \
-         else \
-           true; \
-         fi; \
-         srcdiroption="--srcdir=."; \
-         libsrcdir="."; \
-       else \[+ ENDIF stage +]
-         srcdiroption="--srcdir=$${topdir}/[+module+]"; \
-         libsrcdir="$$s/[+module+]"; \[+ IF stage +]
-       fi; \[+ ENDIF stage +]
+         /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+         *) topdir=`echo $(TARGET_SUBDIR)/[+module+]/ | \
+               sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
+       esac; \
+       srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+       libsrcdir="$$s/[+module+]"; \
        rm -f no-such-file || : ; \
        CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
          $(TARGET_CONFIGARGS) $${srcdiroption} \
@@ -1080,6 +1021,7 @@ ENDIF raw_cxx +]
 .PHONY: all-target-[+module+] maybe-all-target-[+module+]
 maybe-all-target-[+module+]:
 @if target-[+module+]
+TARGET-target-[+module+]=[+ IF target +][+target+][+ ELSE +]all[+ ENDIF target +]
 maybe-all-target-[+module+]: all-target-[+module+]
 all-target-[+module+]: configure-target-[+module+]
        @r=`${PWD_COMMAND}`; export r; \
@@ -1095,7 +1037,7 @@ ENDIF raw_cxx +]
            IF raw_cxx 
          +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+ 
            ENDIF raw_cxx 
-         +] [+extra_make_flags+] all)
+         +] [+extra_make_flags+] $(TARGET-target-[+module+]))
 @endif target-[+module+]
 
 .PHONY: check-target-[+module+] maybe-check-target-[+module+]
@@ -1249,7 +1191,7 @@ profiledbootstrap: all-prebootstrap configure-gcc
        $(MAKE) $(RECURSE_FLAGS_TO_PASS) all
 
 .PHONY: cross
-cross: all-texinfo all-bison all-byacc all-binutils all-gas all-ld
+cross: all-build all-gas all-ld
        @r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(SET_LIB_PATH) \
@@ -1322,7 +1264,6 @@ stage:
        @$(MAKE) `cat stage_current`-end
 @endif gcc-bootstrap
 
-@if gcc-bootstrap
 # We name the build directories for the various stages "stage1-gcc",
 # "stage2-gcc","stage3-gcc", etc.
 
@@ -1343,7 +1284,9 @@ stage:
 # (both in a combined tree, or separately).  This however requires some
 # change to the gcc driver, again in order to avoid comparison failures.
 
-# Bugs: This is almost certainly not parallel-make safe.
+# Bugs: This is crippled when doing parallel make, the `make all-host'
+# and `make all-target' phases can be parallelized.
+
 
 # 'touch' doesn't work right on some platforms.
 STAMP = echo timestamp > 
@@ -1360,14 +1303,7 @@ STAGE1_LANGUAGES=@stage1_languages@
 # We only want to compare .o files, so set this!
 objext = .o
 
-# Real targets act phony if they depend on phony targets; this hack
-# prevents gratuitous rebuilding of stage 1.
-prebootstrap:
-       $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-prebootstrap
-       $(STAMP) prebootstrap
-
 # Flags to pass to stage2 and later makes.
-BOOT_CFLAGS= -g -O2
 POSTSTAGE1_FLAGS_TO_PASS = \
        CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
        STAGE_PREFIX=$$r/stage[+prev+]-gcc/ \
@@ -1387,81 +1323,118 @@ POSTSTAGE1_FLAGS_TO_PASS = \
 .PHONY: stage[+id+]-start stage[+id+]-end
 
 stage[+id+]-start::
-       [ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
+       @[ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
        echo stage[+id+] > stage_current ; \
-       echo stage[+id+] > stage_last ; \
-       [ -d stage[+id+]-gcc ] || mkdir stage[+id+]-gcc; \
-       set stage[+id+]-gcc gcc ; @CREATE_LINK_TO_DIR@ [+ IF prev +] ; \
-       set stage[+prev+]-gcc prev-gcc ; @CREATE_LINK_TO_DIR@ [+ ENDIF prev +]
+       echo stage[+id+] > stage_last; \
+       $(mkinstalldirs) $(HOST_SUBDIR)[+
+   FOR host_modules +][+ IF bootstrap +]
+@if [+ module +]
+       @cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
+         mkdir stage[+id+]-[+module+]; \
+       set stage[+id+]-[+module+] [+module+] ; \
+       @CREATE_LINK_TO_DIR@ [+ IF prev +] ; \
+       set stage[+prev+]-[+module+] prev-[+module+] ; \
+       @CREATE_LINK_TO_DIR@ [+ ENDIF prev +]
+@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
 
 stage[+id+]-end::
-       rm -f stage_current ; \
-       set gcc stage[+id+]-gcc ; @UNDO_LINK_TO_DIR@ [+ IF prev +] ; \
-       set prev-gcc stage[+prev+]-gcc ; @UNDO_LINK_TO_DIR@ [+ ENDIF prev +]
+       @rm -f stage_current[+ FOR host_modules +][+ IF bootstrap +]
+@if [+ module +]
+       @cd $(HOST_SUBDIR); set [+module+] stage[+id+]-[+module+] ; \
+       @UNDO_LINK_TO_DIR@ [+ IF prev +] ; \
+       set prev-[+module+] stage[+prev+]-[+module+] ; \
+       @UNDO_LINK_TO_DIR@ [+ ENDIF prev +]
+@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
 
 # Bubble a bugfix through all the stages up to stage [+id+].  They
 # are remade, but not reconfigured.  The next stage (if any) will not
 # be reconfigured as well.
 .PHONY: stage[+id+]-bubble
-stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
-       @if [ -f all-stage[+id+]-gcc ] ; then \
-         echo Remaking stage [+id+] ; \
-         rm -f all-stage[+id+]-gcc ; \
-       fi ; \
-       $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]-gcc
-
-[+ IF prev +]
-stage[+prev+]-bubble::
-       @if [ -f configure-stage[+id+]-gcc ] ; then \
-         $(STAMP) configure-stage[+id+]-gcc ; \
-       fi
-[+ ENDIF prev +]
-
-configure-stage[+id+]-gcc: [+ IF prev +] all-stage[+prev+]-gcc [+
-         ELSE +] prebootstrap [+ ENDIF prev +]
-       $(MAKE) stage[+id+]-start
-       @if [ -f stage[+id+]-gcc/Makefile ] ; then \
-         $(STAMP) configure-stage[+id+]-gcc ; \
-         exit 0; \
+stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +][+IF lean +]
+       @bootstrap_lean@-rm -rf stage[+lean+]-* ; $(STAMP) stage[+lean+]-lean[+ ENDIF lean +]
+       @if test -f stage[+id+]-lean [+
+         IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
+         echo Skipping rebuild of stage[+id+] ; \
        else \
-         true ; \
-       fi ; \
+         $(MAKE) $(RECURSE_FLAGS_TO_PASS) NOTPARALLEL= all-stage[+id+]; \
+       fi
+
+.PHONY: all-stage[+id+] clean-stage[+id+]
+all-stage[+id+]: [+ FOR host_modules +][+ IF bootstrap +]\
+  maybe-all-stage[+id+]-[+module+][+
+ENDIF bootstrap+] [+ ENDFOR host_modules +]
+
+do-clean: clean-stage[+id+]
+clean-stage[+id+]: [+ FOR host_modules +][+ IF bootstrap +]\
+  maybe-clean-stage[+id+]-[+module+][+
+ENDIF bootstrap+] [+ ENDFOR host_modules +]
+
+[+ FOR host_modules +][+ IF bootstrap +]
+.PHONY: configure-stage[+id+]-[+module+] maybe-configure-stage[+id+]-[+module+]
+.PHONY: all-stage[+id+]-[+module+] maybe-all-stage[+id+]-[+module+]
+.PHONY: clean-stage[+id+]-[+module+] maybe-clean-stage[+id+]-[+module+]
+
+maybe-configure-stage[+id+]-[+module+]:
+maybe-all-stage[+id+]-[+module+]:
+maybe-clean-stage[+id+]-[+module+]:
+
+@if [+module+]-bootstrap
+maybe-configure-stage[+id+]-[+module+]: configure-stage[+id+]-[+module+]
+configure-stage[+id+]-[+module+]:
+       @$(MAKE) stage[+id+]-start
+       @[ -f [+module+]/Makefile ] && exit 0 || : ; \
        r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; [+ IF prev +] \
        $(STAGE_HOST_EXPORTS) [+ ELSE prev +] \
        $(HOST_EXPORTS) [+ ENDIF prev +] \
-       echo Configuring stage [+id+] in gcc ; \
-       cd gcc || exit 1; \
+       echo Configuring stage [+id+] in [+module+] ; \
+       cd $(HOST_SUBDIR)/[+module+] || exit 1; \
        case $(srcdir) in \
-         \.) \
-           srcdiroption="--srcdir=."; \
-           libsrcdir=".";; \
-         /* | [A-Za-z]:[\\/]*) \
-           srcdiroption="--srcdir=$(srcdir)/gcc"; \
-           libsrcdir="$$s/gcc";; \
-         *) \
-           srcdiroption="--srcdir=../$(srcdir)/gcc"; \
-           libsrcdir="$$s/gcc";; \
+         /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
+         *) topdir=`echo $(HOST_SUBDIR)/[+module+]/ | \
+               sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
        esac; \
+       srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+       libsrcdir="$$s/[+module+]"; \
        $(SHELL) $${libsrcdir}/configure \
          $(HOST_CONFIGARGS) $${srcdiroption} \
-         [+extra_configure_flags+] && \
-         $(STAMP) ../configure-stage[+id+]-gcc
+         [+stage_configure_flags+] [+extra_configure_flags+]
 
-all-stage[+id+]-gcc: configure-stage[+id+]-gcc
-       $(MAKE) stage[+id+]-start
+maybe-all-stage[+id+]-[+module+]: all-stage[+id+]-[+module+]
+all-stage[+id+]-[+module+]: configure-stage[+id+]-[+module+]
+       @$(MAKE) stage[+id+]-start
        @r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; [+ IF prev +] \
        $(STAGE_HOST_EXPORTS) [+ ELSE prev +] \
        $(HOST_EXPORTS) [+ ENDIF prev +] \
-       cd gcc && \
-       $(MAKE) $(GCC_FLAGS_TO_PASS) [+ IF prev +] \
+       cd $(HOST_SUBDIR)/[+module+] && \
+       $(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
+               $(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
+               [+stage_make_flags+] [+extra_make_flags+]
+
+maybe-clean-stage[+id+]-[+module+]: clean-stage[+id+]-[+module+]
+clean-stage[+id+]-[+module+]:
+       @[ -f [+module+]/Makefile ] || [ -f stage[+id+]-[+module+]/Makefile ] \
+         || exit 0 ; \
+       [ -f [+module+]/Makefile ] || $(MAKE) stage[+id+]-start ; \
+       cd $(HOST_SUBDIR)/[+module+] && \
+       $(MAKE) $(FLAGS_TO_PASS) [+ IF prev +] \
                $(POSTSTAGE1_FLAGS_TO_PASS) [+ ENDIF prev +] \
-               [+extra_make_flags+] && $(STAMP) ../all-stage[+id+]-gcc
+               [+stage_make_flags+] [+extra_make_flags+] clean
+@endif [+module+]-bootstrap
 
+[+ ENDIF bootstrap +][+ ENDFOR host_modules +]
+
+# FIXME: Will not need to be conditional when toplevel bootstrap is the
+# only possibility, but now it conflicts with no-bootstrap rules
+@if gcc-bootstrap
 [+ IF compare-target +]
-[+compare-target+]: all-stage[+id+]-gcc
-       [ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
+[+compare-target+]:
+       @if test -f stage[+prev+]-lean; then \
+         echo Cannot compare object files as stage [+prev+] was deleted. ; \
+         exit 0 ; \
+       fi; \
+       [ -f stage_current ] && $(MAKE) `cat stage_current`-end || : ; \
        @r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        rm -f .bad_compare ; \
@@ -1480,50 +1453,28 @@ all-stage[+id+]-gcc: configure-stage[+id+]-gcc
        else \
          true; \
        fi ; \
-       $(STAMP) [+compare-target+]
+       $(STAMP) [+compare-target+][+ IF prev +]
+       @bootstrap_lean@-rm -rf stage[+prev+]-* ; $(STAMP) stage[+prev+]-lean[+ ENDIF prev +]
 [+ ENDIF compare-target +]
 
 [+ IF bootstrap-target +]
 .PHONY: [+bootstrap-target+]
-[+bootstrap-target+]:
-       $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage[+id+]-bubble [+
-         IF compare-target +] [+compare-target+] [+
-         ENDIF compare-target +] all
+[+bootstrap-target+]: stage[+id+]-bubble [+compare-target+] all
 [+ ENDIF bootstrap-target +]
 
-.PHONY: restage[+id+] touch-stage[+id+] distclean-stage[+id+]
-
-# Rules to wipe a stage and all the following ones, used for cleanstrap
+# Rules to wipe a stage and all the following ones, also used for cleanstrap
 [+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
+.PHONY: distclean-stage[+id+]
 distclean-stage[+id+]::
        [ -f stage_current ] && $(MAKE) `cat stage_current`-end || :
-       rm -rf configure-stage[+id+]-gcc all-stage[+id+]-gcc stage[+id+]-gcc [+
+       rm -rf stage[+id+]-* [+
          IF compare-target +][+compare-target+] [+ ENDIF compare-target +]
 
-# Rules to renew the timestamp on a stage and all the following ones
-[+ IF prev +]touch-stage[+prev+]:: touch-stage[+id+] [+ ENDIF prev +]
-touch-stage[+id+]::
-       @[ -f configure-stage[+id+]-gcc ] && \
-         echo '$(STAMP) configure-stage[+id+]-gcc' && \
-         $(STAMP) configure-stage[+id+]-gcc; \
-       [ -f all-stage[+id+]-gcc ] && \
-         echo '$(STAMP) all-stage[+id+]-gcc' && \
-         $(STAMP) all-stage[+id+]-gcc; \
-       :
-
-# After building a stage, touch the following ones
-[+ IF prev +]restage[+prev+]:: touch-stage[+id+] [+ ENDIF prev +]
-restage[+id+]::
-       rm -rf all-stage[+id+]-gcc [+
-         IF compare-target +][+compare-target+] [+ ENDIF compare-target +]
-       $(MAKE) $(RECURSE_FLAGS_TO_PASS) [+
-         IF compare-target +][+compare-target+] [+
-         ELSE +] all-stage[+id+]-gcc [+ ENDIF compare-target +]
-
 [+ IF cleanstrap-target +]
 .PHONY: [+cleanstrap-target+]
-[+cleanstrap-target+]: distclean-stage1 [+bootstrap-target+]
+[+cleanstrap-target+]: distclean [+bootstrap-target+]
 [+ ENDIF cleanstrap-target +]
+@endif gcc-bootstrap
 
 [+ ENDFOR bootstrap-stage +]
 
@@ -1534,7 +1485,10 @@ stagefeedback-start::
          { find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../gcc/&",' | $(SHELL); } && \
          { find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../gcc/&",' | $(SHELL); }
 
-profiledbootstrap: all-prebootstrap configure-gcc
+# FIXME: Will not need to be conditional when toplevel bootstrap is the
+# only possibility, but now it conflicts with no-bootstrap rules
+@if gcc-bootstrap
+profiledbootstrap:
        @r=`${PWD_COMMAND}`; export r; \
        s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
        $(SET_LIB_PATH) \
@@ -1552,7 +1506,12 @@ profiledbootstrap: all-prebootstrap configure-gcc
        $(HOST_EXPORTS) \
        echo "Building feedback based compiler"; \
        $(MAKE) stagefeedback-bubble stagefeedback-end
+@endif gcc-bootstrap
 
+@if gcc-bootstrap
+NOTPARALLEL = .NOTPARALLEL
+$(NOTPARALLEL):
+do-distclean: distclean-stage1
 @endif gcc-bootstrap
 
 # --------------------------------------
@@ -1589,10 +1548,10 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
       )))
 
    ;; make-dep builds a dependency from the MODULE and ON AutoGen vars.
-   (define make-dep (lambda (module-kind)
+   (define make-dep (lambda (module-kind on-kind)
       (string-append
          (dep-target module-kind "module" #t) ": "
-         (dep-target module-kind "on" (exist? "hard")))))
+         (dep-target on-kind "on" (exist? "hard")))))
 
    ;; dep-subtarget extracts everything up to the first dash in the given
    ;; AutoGen variable, for example it extracts "all-" out of "all-gcc".
@@ -1616,27 +1575,26 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
    (define dep-maybe (lambda ()
       (if (exist? "hard") "" "maybe-")))
 
-   ;; dep-kind returns "normal" is the dependency is on an "install" target,
-   ;; or if the LHS module is not bootstrapped.  It returns "bootstrap" for
+   ;; dep-kind returns "normal" if the dependency is on an "install" target,
+   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
    ;; configure or build dependencies between bootstrapped modules; it returns
    ;; "prebootstrap" for configure or build dependencies of bootstrapped
-   ;; modules on a non-bootstrapped modules (e.g. gcc on bison).  All this
+   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
    ;; is only necessary for host modules.
    (define dep-kind (lambda ()
-      (if (or (= (dep-subtarget "on") "install-")
-             (=* (dep-module "on") "build-")
-             (=* (dep-module "on") "target-"))
-          "normal"
+      (if (and (hash-ref boot-modules (dep-module "module"))
+              (=* (dep-module "on") "build-"))
+         "prebootstrap"
 
-          (if (hash-ref boot-modules (dep-module "module"))
-              (if (hash-ref boot-modules (dep-module "on"))
-                 "bootstrap"
-                 "prebootstrap")
-             "normal"))))
+         (if (or (= (dep-subtarget "on") "install-")
+                 (=* (dep-module "on") "target-")
+                 (not (hash-ref boot-modules (dep-module "module")))
+                 (not (hash-ref boot-modules (dep-module "on"))))
+              "normal"
+             "bootstrap"))))
 
    ;; We now build the hash table that is used by dep-kind.
    (define boot-modules (make-hash-table 113))
-   (define preboot-modules (make-hash-table 37))
 +]
 
 [+ FOR host_modules +][+
@@ -1649,27 +1607,22 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
 # to check for bootstrap/prebootstrap dependencies.  To resolve
 # prebootstrap dependencies, prebootstrap modules are gathered in
 # a hash table.
-[+ FOR dependencies +][+ (make-dep "") +]
-[+ CASE (dep-kind) +][+
-   == "prebootstrap"
-     +][+ (hash-create-handle! preboot-modules (dep-module "on") #t) "" +][+
-   == "bootstrap"
+[+ FOR dependencies +][+ (make-dep "" "") +]
+[+ CASE (dep-kind) +]
+[+ == "prebootstrap"
+     +][+ FOR bootstrap_stage +]
+[+ (make-dep (dep-stage) "") +][+
+       ENDFOR bootstrap_stage +]
+all-prebootstrap: [+ (dep-target "" "on" (exist? "hard")) +]
+[+ == "bootstrap"
      +][+ FOR bootstrap_stage +]
-[+ (make-dep (dep-stage)) +][+
+[+ (make-dep (dep-stage) (dep-stage)) +][+
        ENDFOR bootstrap_stage +]
 [+ ESAC +][+
 ENDFOR dependencies +]
 
-# Now build the prebootstrap dependencies.
-[+ FOR host_modules +][+
-   IF (hash-ref preboot-modules (get "module")) +]
-all-prebootstrap: maybe-all-[+module+][+
-   ENDIF +][+
-ENDFOR host_modules +]
-
-# Unless toplevel bootstrap is going, bootstrapped packages are actually
-# prebootstrapped, with the exception of gcc.  Another wart that will go
-# away with toplevel bootstrap.
+# Non-toplevel bootstrap rules must depend on several packages, to be built
+# before gcc.  Another wart that will go away, hopefully soon.
 @if gcc-no-bootstrap
 [+ FOR host_modules +][+
    IF (and (not (= (get "module") "gcc"))
@@ -1711,7 +1664,7 @@ $(srcdir)/Makefile.in: @MAINT@ $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def
 Makefile: $(srcdir)/Makefile.in config.status
        CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
 
-config.status: configure $(gcc_version_trigger)
+config.status: configure
        CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck
 
 # Rebuilding configure.