Index: configure.ac =================================================================== --- configure.ac (revision 176348) +++ configure.ac (working copy) @@ -1126,6 +1126,13 @@ AC_ARG_ENABLE(build-with-cxx, ENABLE_BUILD_WITH_CXX=$enableval, ENABLE_BUILD_WITH_CXX=no) +# Build stage1 with C and build stages 2 and 3 with C++. +AC_ARG_ENABLE(build-poststage1-with-cxx, +[AS_HELP_STRING([--enable-build-poststage1-with-cxx], + [build stages 2 and 3 with C++, not C])], +ENABLE_BUILD_POSTSTAGE1_WITH_CXX=$enableval, +ENABLE_BUILD_POSTSTAGE1_WITH_CXX=yes) + # Used for setting $lt_cv_objdir _LT_CHECK_OBJDIR @@ -1696,9 +1703,11 @@ if test -d ${srcdir}/gcc; then exit 1 fi - if test "$language" = "c++" \ - && test "$ENABLE_BUILD_WITH_CXX" = "yes"; then - boot_language=yes + if test "$language" = "c++"; then + if test "$ENABLE_BUILD_WITH_CXX" = "yes" \ + || test "$ENABLE_BUILD_POSTSTAGE1_WITH_CXX" = "yes"; then + boot_language=yes + fi fi case ,${enable_languages}, in @@ -2397,10 +2406,10 @@ case "$have_compiler:$host:$target:$enab ;; esac -case ",$enable_languages,:$ENABLE_BUILD_WITH_CXX:$enable_bootstrap" in - *,c++,*:yes:yes) ;; - *:yes:yes) - AC_MSG_ERROR([bootstrapping with --enable-build-with-cxx requires c++ in --enable-languages]) +case ",$enable_languages,:,$ENABLE_BUILD_WITH_CXX,$ENABLE_BUILD_POSTSTAGE1_WITH_CXX,:$enable_bootstrap" in + *,c++,*:*:*) ;; + *:*,yes,*:yes) + AC_MSG_ERROR([bootstrapping with --enable-build-with-cxx or --enable-build-postage1-with-cxx requires c++ in --enable-languages]) ;; esac @@ -3188,6 +3197,15 @@ case ${enable_werror} in esac AC_SUBST(stage2_werror_flag) +# If using ENABLE_BUILD_POSTSTAGE1_WITH_CXX, pass +# --enable-build-with-cxx after stage1. +if test "$ENABLE_BUILD_POSTSTAGE1_WITH_CXX" = "yes"; then + POSTSTAGE1_CONFIGURE_FLAGS=--enable-build-with-cxx +else + POSTSTAGE1_CONFIGURE_FLAGS= +fi +AC_SUBST(POSTSTAGE1_CONFIGURE_FLAGS) + # Specify what files to not compare during bootstrap. compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*" Index: Makefile.tpl =================================================================== --- Makefile.tpl (revision 176348) +++ Makefile.tpl (working copy) @@ -416,6 +416,7 @@ TFLAGS = STAGE_CFLAGS = $(BOOT_CFLAGS) STAGE_TFLAGS = $(TFLAGS) STAGE_CONFIGURE_FLAGS=@stage2_werror_flag@ +POSTSTAGE1_CONFIGURE_FLAGS = @POSTSTAGE1_CONFIGURE_FLAGS@ [+ FOR bootstrap-stage +] # Defaults for stage [+id+]; some are overridden below. @@ -426,7 +427,10 @@ STAGE[+id+]_CXXFLAGS = $(CXXFLAGS) STAGE[+id+]_CXXFLAGS = $(STAGE[+id+]_CFLAGS) @endif target-libstdc++-v3-bootstrap STAGE[+id+]_TFLAGS = $(STAGE_TFLAGS) -STAGE[+id+]_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) +# STAGE1_CONFIGURE_FLAGS overridden below, so we can use +# POSTSTAGE1_CONFIGURE_FLAGS here. +STAGE[+id+]_CONFIGURE_FLAGS = \ + $(STAGE_CONFIGURE_FLAGS) $(POSTSTAGE1_CONFIGURE_FLAGS) [+ ENDFOR bootstrap-stage +] # Only build the C compiler for stage1, because that is the only one that @@ -444,6 +448,9 @@ STAGE1_LANGUAGES = @stage1_languages@ # the last argument when conflicting --enable arguments are passed. # * Likewise, we force-disable coverage flags, since the installed # compiler probably has never heard of them. +# * Don't remove this, because above we added +# POSTSTAGE1_CONFIGURE_FLAGS to STAGE[+id+]_CONFIGURE_FLAGS, which +# we don't want for STAGE1_CONFIGURE_FLAGS. STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" Index: gcc/doc/install.texi =================================================================== --- gcc/doc/install.texi (revision 176348) +++ gcc/doc/install.texi (working copy) @@ -1286,6 +1286,13 @@ will try to guess whether the @code{.ini Build GCC using a C++ compiler rather than a C compiler. This is an experimental option which may become the default in a later release. +@item --enable-build-poststage1-with-cxx +When bootstrapping, build stages 2 and 3 of GCC using a C++ compiler +rather than a C compiler. Stage 1 is still built with a C compiler. +This is an experimental option which may become the default in a later +release. This is enabled by default and may be disabled using +@option{--disable-build-poststage1-with-cxx}. + @item --enable-maintainer-mode The build rules that regenerate the Autoconf and Automake output files as well as the GCC master message catalog @file{gcc.pot} are normally