Makefile.in (LANGUAGES): Remove c++.
authorDoug Evans <dje@gnu.org>
Fri, 22 Apr 1994 08:25:33 +0000 (08:25 +0000)
committerDoug Evans <dje@gnu.org>
Fri, 22 Apr 1994 08:25:33 +0000 (08:25 +0000)
        * Makefile.in (LANGUAGES): Remove c++.
        (SUBDIRS): New variable.
        (LEX, LEXFLAGS): Ditto.
        (MAKEOVERRIDES): Ditto.
        (COMPILERS): Remove cc1plus.
        (LANG_MAKEFILES, LANG_STAGESTUFF, LANG_DIFF_EXCLUDES, FLAGS_TO_PASS):
        New variables.
        (CPLUS_OBJS, CPLUS_TREE_H, C++, c++, g++, g++-cross, cc1plus,
        cp-*.o, g++.o, gplus.info): Deleted.
        (STAGESTUFF): Remove g++, g++-cross, cc1plus.  Add $(LANG_STAGESTUFF).
        (Makefile): Depend on $(LANG_MAKEFILES).
        (####language hooks, ####language fragments): New spots for sed
        to insert things.
        (all.cross, all.build, start.encap, rest.encap, info, dvi,
        install-normal, install-common, install-info, install-man,
        uninstall, distdir, mostlyclean, clean, distclean, extraclean,
        realclean, stage1, stage2, stage3, stage4): Depend on lang.foo.
        (mostlyclean, clean, distclean, extraclean, realclean): Clean as
        much of the language subdirectories as we can.
        (install-common):  Remove g++ installation.
        (install-man): Remove g++.1 installation.
        (uninstall): Remove g++ reference.
        (TAGS): Remove cp-parse.? reference.
        (distdir): Ditto.
        (distdir-start, distdir-finish): New targets.
        (diff): Remove cp-parse.? reference.  Add $(LANG_DIFF_EXCLUDES).
        (compare, compare3, gnucompare, gnucompare3): Compare language
        subdirectories too.
        (stage1-start, stage2-start, stage3-start, stage4-start): New targets.
        Ensure stage subdirectory exists before processing language
        dependent part.

From-SVN: r7136

gcc/Makefile.in

index 12ac4705a58631bffbabf2c765160ab6cd828521..c2996def7d8bf4d59573326c88ff028a0d6924ae 100644 (file)
 # Variables that exist for you to override.
 # See below for how to change them for certain systems.
 
+# List of language subdirectories.
+# This is overridden by configure.
+SUBDIRS =
+
 # Selection of languages to be made.
-LANGUAGES = c c++ objective-c proto
+# This is overridden by configure.
+LANGUAGES = c objective-c proto
 
 ALLOCA =
 ALLOCA_FLAGS =
@@ -53,6 +58,8 @@ T_CPPFLAGS =
 CC = cc
 BISON = bison
 BISONFLAGS =
+LEX = flex
+LEXFLAGS =
 AR = ar
 OLDAR_FLAGS = qc
 AR_FLAGS = rc
@@ -65,6 +72,8 @@ INSTALL_DATA = $(INSTALL)
 SYMLINK = ln -s
 MAKEINFO = makeinfo
 TEXI2DVI = texi2dvi
+# For GNUmake: let us decide what gets passed to recursive makes.
+MAKEOVERRIDES =
 
 # Define this as & to perform parallel make on a Sequent.
 # Note that this has some bugs, and it seems currently necessary 
@@ -383,7 +392,6 @@ HOST_PRINT = $(HOST_PREFIX)print-rtl.o
 # so that tm.h and config.h will be found in the compilation
 # subdirectory rather than in the source directory.
 INCLUDES = -I. -I$(srcdir) -I$(srcdir)/config
-SUBDIR_INCLUDES = -I.. -I../$(srcdir) -I../$(srcdir)/config
 
 # Always use -I$(srcdir)/config when compiling.
 .c.o:
@@ -393,10 +401,49 @@ SUBDIR_INCLUDES = -I.. -I../$(srcdir) -I../$(srcdir)/config
 # defined in this file into the environment.
 .NOEXPORT:
 \f
+# Support for additional languages (other than c and objc).
+# ??? objc can be supported this way too (leave for later).
+
+# These next lines are overridden by configure.
+LANG_MAKEFILES =
+LANG_STAGESTUFF =
+LANG_DIFF_EXCLUDES =
+
+# Flags to pass to recursive makes.
+# CC is set by configure.  Hosts without symlinks need special handling
+# because we need CC="stage1/xgcc -Bstage1/" to work in the language
+# subdirectories.
+# ??? The choices here will need some experimenting with.
+FLAGS_TO_PASS = \
+       "AR_FLAGS=$(AR_FLAGS)" \
+       "AR_FOR_TARGET=$(AR_FOR_TARGET)" \
+       "BISON=$(BISON)" \
+       "BISONFLAGS=$(BISONFLAGS)" \
+       "CC=set-by-configure" \
+       "CFLAGS=$(CFLAGS)" \
+       "CLIB=$(CLIB)" \
+       "GCC_FOR_TARGET=$(CC_FOR_TARGET)" \
+       "LDFLAGS=$(LDFLAGS)" \
+       "LEX=$(LEX)" \
+       "LEXFLAGS=$(LEXFLAGS)" \
+       "MAKEINFO=$(MAKEINFO)" \
+       "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
+       "MALLOC=$(MALLOC)" \
+       "OBSTACK=$(OBSTACK)" \
+       "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \
+       "RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \
+       "SHELL=$(SHELL)" \
+       "exec_prefix=$(exec_prefix)" \
+       "prefix=$(prefix)" \
+       "tooldir=$(tooldir)" \
+       "bindir=$(bindir)" \
+       "libsubdir=$(libsubdir)"
+\f
 # Lists of files for various purposes.
 
 # A list of all the language-specific executables.
-COMPILERS = cc1 cc1plus cc1obj
+# This is overridden by configure.
+COMPILERS = cc1 cc1obj
 
 # Language-specific object files for C.
 C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
@@ -406,14 +453,6 @@ C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
 OBJC_OBJS = objc-parse.o objc-act.o c-lex.o c-pragma.o \
    c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
 
-# Language-specific object files for C++.
-CPLUS_OBJS = cp-parse.o cp-decl.o cp-decl2.o \
-   cp-typeck.o cp-type2.o cp-tree.o cp-ptree.o \
-   cp-cvt.o cp-search.o cp-lex.o cp-gc.o cp-call.o \
-   cp-class.o cp-init.o cp-method.o cp-except.o \
-   cp-expr.o cp-pt.o cp-edsel.o cp-xref.o \
-   $(CPLUS_INPUT) cp-spew.o c-common.o cp-error.o cp-errfn.o
-
 # Files specific to the C interpreter bytecode compiler(s).
 BC_OBJS = bc-emit.o bc-optab.o
 
@@ -445,8 +484,9 @@ STAGESTUFF = *.o insn-flags.h insn-config.h insn-codes.h \
  bc-arity.h bc-opcode.h bc-opname.h \
  stamp-bcarity stamp-bcopcode stamp-bcopname \
  bi-arity bi-opcode bi-opname \
- $(GCC_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross cccp g++ g++-cross \
- cc1plus cc1obj enquire protoize unprotoize specs collect2 $(USE_COLLECT2)
+ $(GCC_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross cccp \
+ cc1obj enquire protoize unprotoize specs collect2 $(USE_COLLECT2) \
+ $(LANG_STAGESTUFF)
 
 # Members of libgcc1.a.
 LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
@@ -488,37 +528,56 @@ USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \
 CONFIG_H =
 RTL_H = rtl.h rtl.def machmode.h machmode.def
 TREE_H = tree.h real.h tree.def machmode.h machmode.def
-CPLUS_TREE_H = $(TREE_H) cp-tree.h cp-tree.def
 BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
 \f
+# Language makefile fragments.
+
+# The following targets define the interface between us and the languages.
+#
+# all.build, all.cross, start.encap, rest.encap,
+# info, dvi,
+# install-normal, install-common, install-info, install-man,
+# uninstall, distdir,
+# mostlyclean, clean, distclean, extraclean, realclean,
+# stage1, stage2, stage3, stage4
+#
+# Each language is linked in with a series of hooks (since we can't use `::'
+# targets).  The name of each hooked is "lang.${target_name}" (eg: lang.info).
+# Configure computes and adds these here.
+
+####language hooks
+
+# sed inserts language fragments after the following line.
+####language fragments
+
+# End of language makefile fragments.
+\f
 # Avoid a lot of time thinking about remaking Makefile.in and *.def.
 .SUFFIXES: .in .def
 
 Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
-   $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file)
+   $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file) \
+   $(LANG_MAKEFILES)
        $(SHELL) config.status
 
 all.internal: start.encap rest.encap
 # This is what to compile if making a cross-compiler.
-# Note that we can compile enquire using the cross-compiler just build,
+# Note that we can compile enquire using the cross-compiler just built,
 # although we can't run it on this machine.
-all.cross: native gcc-cross g++-cross specs stmp-headers $(LIBGCC) $(STMP_FIXPROTO) $(CROSS_TEST) $(ENQUIRE) $(EXTRA_PARTS)
+all.cross: native gcc-cross specs stmp-headers $(LIBGCC) $(STMP_FIXPROTO) \
+       $(CROSS_TEST) $(ENQUIRE) $(EXTRA_PARTS) lang.all.cross
 # This is what to compile if making gcc with a cross-compiler.
-all.build: native xgcc g++ $(EXTRA_PARTS)
+all.build: native xgcc $(EXTRA_PARTS) lang.all.build
 # This is what must be made before installing GCC and converting libraries.
-start.encap: native xgcc g++ specs $(LIBGCC1) xlimits.h
+start.encap: native xgcc specs $(LIBGCC1) xlimits.h lang.start.encap
 # These can't be made until after GCC can run.
-rest.encap: stmp-headers $(LIBGCC) $(STMP_FIXPROTO) $(EXTRA_PARTS)
+rest.encap: stmp-headers $(LIBGCC) $(STMP_FIXPROTO) $(EXTRA_PARTS) lang.rest.encap
 # This is what is made with the host's compiler
 # whether making a cross compiler or not.
 native: config.status cpp $(LANGUAGES) $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
 
 # Define the names for selecting languages in LANGUAGES.
-# Note that it would be nice to move the dependency on g++
-# into the C++ rule, but that needs a little bit of work
-# to do the right thing within all.cross.
 C c: cc1
-C++ c++: cc1plus
 OBJC objc: cc1obj objc-runtime
 OBJECTIVE-C objective-c: cc1obj objc-runtime
 PROTO: proto
@@ -559,27 +618,15 @@ xgcc: gcc.o version.o $(LIBDEPS)
 specs: xgcc
        $(GCC_FOR_TARGET) -dumpspecs > specs
 
-# Create the compiler driver for g++.
-g++: g++.o $(LIBDEPS)
-       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o g++ g++.o $(LIBS)
-
 # We do want to create an executable named `xgcc', so we can use it to
 # compile libgcc2.a.
 # Also create gcc-cross, so that install-common will install properly.
 gcc-cross: xgcc
        cp xgcc gcc-cross
 
-# Create a version of the g++ driver which calls the cross-compiler.
-g++-cross: $(srcdir)/g++.c
-       $(CC) $(ALL_CFLAGS) $(INCLUDES) $(LDFLAGS) -o g++-cross \
-          -DGCC_NAME=\"$(target)-gcc\" $(srcdir)/g++.c version.o $(LIBS)
-
 cc1: $(P) $(C_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1 $(C_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
 
-cc1plus: $(P) $(CPLUS_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
-       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1plus $(CPLUS_OBJS) $(BC_OBJS) $(OBJS) $(LIBS)
-
 cc1obj: $(P) $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1obj $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
 
@@ -836,47 +883,6 @@ c-convert.o : c-convert.c $(CONFIG_H) $(TREE_H) flags.h
 c-pragma.o: c-pragma.c $(CONFIG_H) $(TREE_H)
 c-iterate.o: c-iterate.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h flags.h
 
-# C++ language specific files.
-
-cp-parse.o : $(srcdir)/cp-parse.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h cp-lex.h
-       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-  `echo $(srcdir)/cp-parse.c | sed 's,^\./,,'`
-
-$(srcdir)/cp-parse.c $(srcdir)/cp-parse.h : $(srcdir)/cp-parse.y
-       @echo expect 27 shift/reduce conflicts and 14 reduce/reduce conflicts
-       cd $(srcdir); $(BISON) $(BISONFLAGS) -d -o cp-parse.c cp-parse.y
-       cd $(srcdir); grep '^#define[   ]*YYEMPTY' cp-parse.c >>cp-parse.h
-
-cp-spew.o : cp-spew.c $(CONFIG_H) $(CPLUS_TREE_H) \
-   $(srcdir)/cp-parse.h flags.h cp-lex.h
-cp-lex.o : cp-lex.c $(CONFIG_H) $(CPLUS_TREE_H) \
-   $(srcdir)/cp-parse.h $(srcdir)/cp-input.c flags.h cp-hash.h cp-lex.h
-cp-decl.o : cp-decl.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h \
-  cp-lex.h cp-decl.h stack.h
-cp-decl2.o : cp-decl2.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h \
-  cp-lex.h cp-decl.h
-cp-type2.o : cp-type2.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
-cp-typeck.o : cp-typeck.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h $(RTL_H)
-cp-class.o : cp-class.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
-cp-call.o : cp-call.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
-cp-init.o : cp-init.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h $(RTL_H)
-cp-method.o : cp-method.c $(CONFIG_H) $(CPLUS_TREE_H)
-cp-cvt.o : cp-cvt.c $(CONFIG_H) $(CPLUS_TREE_H)
-cp-search.o : cp-search.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h flags.h
-cp-tree.o : cp-tree.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
-cp-ptree.o : cp-ptree.c $(CONFIG_H) $(CPLUS_TREE_H)
-cp-gc.o : cp-gc.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
-cp-except.o : cp-except.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h $(RTL_H)
-cp-expr.o : cp-expr.c $(CONFIG_H) $(CPLUS_TREE_H) $(RTL_H) flags.h \
-  expr.h insn-codes.h
-cp-edsel.o : cp-edsel.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h flags.h
-cp-xref.o : cp-xref.c $(CONFIG_H) $(CPLUS_TREE_H) input.h
-cp-pt.o : cp-pt.c $(CONFIG_H) $(CPLUS_TREE_H) cp-decl.h cp-parse.h
-cp-error.o : cp-error.c $(CONFIG_H) $(CPLUS_TREE_H)
-cp-errfn.o : cp-errfn.c $(CONFIG_H) $(CPLUS_TREE_H)
-
-g++.o : g++.c $(CONFIG_H)
-
 # To make a configuration always use collect2, set USE_COLLECT2 to ld.
 ld: collect2
        rm -f ld
@@ -1620,19 +1626,16 @@ stmp-fixproto: fixhdr.ready fixproto stmp-headers
 # Remake the info files.
 
 doc: info
-info: $(srcdir)/cpp.info $(srcdir)/gcc.info
+info: $(srcdir)/cpp.info $(srcdir)/gcc.info lang.info
 
 $(srcdir)/cpp.info: cpp.texi
        cd $(srcdir); $(MAKEINFO) cpp.texi
 
-#$(srcdir)/gplus.info: gplus.texi
-#      $(MAKEINFO) `echo $(srcdir)/gplus.texi | sed 's,^\./,,'`
-
 $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \
                md.texi rtl.texi tm.texi 
        cd $(srcdir); $(MAKEINFO) gcc.texi
 
-dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi
+dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi lang.dvi
 
 # This works with GNU Make's default rule.
 $(srcdir)/gcc.dvi: gcc.texi extend.texi install.texi invoke.texi \
@@ -1656,9 +1659,11 @@ $(srcdir)/INSTALL: install1.texi install.texi
 # `clean' deletes everything made by running `make all'.
 # `distclean' also deletes the files made by config.
 # `realclean' also deletes everything that could be regenerated automatically.
+# We remove as much from the language subdirectories as we can
+# (less duplicated code).
 
 
-mostlyclean: bytecode.mostlyclean
+mostlyclean: bytecode.mostlyclean lang.mostlyclean
        -rm -f $(STAGESTUFF)
 # Clean the objc subdir if we created one.
        if [ -d objc ]; then \
@@ -1678,9 +1683,13 @@ mostlyclean: bytecode.mostlyclean
        -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s
 # Delete the stamp files.
        -rm -f stamp-* tmp-*
+       -rm -f */stamp-* */tmp-*
 # Delete debugging dump files.
        -rm -f *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop
        -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack
+       -rm -f */*.greg */*.lreg */*.combine */*.flow */*.cse */*.jump */*.rtl
+       -rm -f */*.tree */*.loop */*.dbr */*.jump2 */*.sched */*.cse2
+       -rm -f */*.sched2 */*.stack
 # Delete some files made during installation.
        -rm -f specs gfloat.h float.h-* enquire SYSCALLS.c.X SYSCALLS.c
        -rm -f collect collect2 mips-tfile mips-tdump alloca.s
@@ -1689,62 +1698,66 @@ mostlyclean: bytecode.mostlyclean
          gen-protos fixproto.list fixtmp.* fixhdr.ready
 # Delete unwanted output files from TeX.
        -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
+       -rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg
 # Delete sorted indices we don't actually use.
        -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns
 # Delete core dumps.
-       -rm -f core config/core
+       -rm -f core */core
 
 # Delete all files made by compilation
 # that don't exist in the distribution.
-clean: mostlyclean bytecode.clean
+clean: mostlyclean bytecode.clean lang.clean
 # It may not be quite desirable to delete unprotoize.c here,
 # but the spec for `make clean' requires it.
 # Using unprotoize.c is not quite right in the first place, 
 # but what better way is there?
        -rm -f libgcc.a libgcc1.a libgcc2.a libgcc2.ready libgcc1.null
        -rm -f *.dvi
+       -rm -f */*.dvi
        -if [ -f md.pre-cpp ]; then \
          rm -f md ; \
        fi
 # Delete the include directory.
        -rm -rf stmp-* include objc-headers
+       -rm -f */stmp-*
 
 # Delete all files that users would normally create
 # while building and installing GCC.
-distclean: clean bytecode.distclean
+distclean: clean bytecode.distclean lang.distclean
        -rm -f tm.h aux-output.c config.h config.status tconfig.h hconfig.h
        -rm -f md md.pre-cpp
        -rm -f Makefile *.oaux
        -rm -fr stage1 stage2 stage3 stage4
-       -rm -f cp-parse.output
+       -rm -f */stage1 */stage2 */stage3 */stage4
        -rm -f objc-parse.output
        -rm -f c-parse.output
 
 # Delete anything likely to be found in the source directory
 # that shouldn't be in the distribution.
-extraclean: distclean
+extraclean: distclean lang.extraclean
        -rm -rf =* ./"#"* *~* config/=* config/"#"* config/*~*
        -rm -f patch* *.orig *.rej config/patch* config/*.orig config/*.rej
        -rm -f config/*/=* config/*/"#"* config/*/*~*
        -rm -f config/*/*.orig config/*/*.rej
-       -rm -f objc/=* objc/"#"* objc/*~*
-       -rm -f objc/*.orig objc/*.rej
        -rm -f *.dvi *.oaux *.d *.[zZ] *.gz
        -rm -f *.tar *.xtar *diff *.diff.* *.tar.* *.xtar.* *diffs
        -rm -f *lose config/*lose config/*/*lose
        -rm -f *.s *.s[0-9] *.i install1.texi config/ChangeLog
+       -rm -f */=* */"#"* */*~*
+       -rm -f */patch* */*.orig */*.rej
+       -rm -f */*.dvi */*.oaux */*.d */*.[zZ] */*.gz
+       -rm -f */*.tar */*.xtar */*diff */*.diff.* */*.tar.* */*.xtar.* */*diffs
+       -rm -f */*lose */*.s */*.s[0-9] */*.i
 
 # Get rid of every file that's generated from some other file.
 # Most of these files ARE PRESENT in the GCC distribution.
-realclean: distclean bytecode.realclean
+realclean: distclean bytecode.realclean lang.realclean
        -rm -f c-parse.y c-gperf.h objc-parse.y
-       -rm -f cp-parse.c cp-parse.h cp-parse.output
        -rm -f objc-parse.c objc-parse.output
        -rm -f c-parse.c c-parse.h c-parse.output
        -rm -f cexp.c cexp.output TAGS 
        -rm -f cpp.info* cpp.??s cpp.*aux
        -rm -f gcc.info* gcc.??s gcc.*aux
-       -rm -f gplus.info* gplus.??s gplus.*aux
 \f
 # Entry points `install' and `uninstall'.
 # Also use `install-collect2' to install collect2 when the config files don't.
@@ -1756,7 +1769,7 @@ install: $(INSTALL_TARGET) ; @true
 
 # Copy the compiler files into directories where they will be run.
 install-normal: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
-    install-man install-info
+    install-man install-info lang.install-normal
 
 # Do nothing while making gcc with a cross-compiler. The person who
 # makes gcc for the target machine has to know how to put a complete
@@ -1801,7 +1814,7 @@ install-dir:
        -if [ -d $(mandir) ] ; then true ; else mkdir $(mandir) ; fi
 
 # Install the compiler executables built during cross compilation.
-install-common: native install-dir xgcc $(EXTRA_PARTS)
+install-common: native install-dir xgcc $(EXTRA_PARTS) lang.install-common
        for file in $(COMPILERS); do \
          if [ -f $$file ] ; then \
            rm -f $(libsubdir)/$$file; \
@@ -1829,26 +1842,12 @@ install-common: native install-dir xgcc $(EXTRA_PARTS)
            rm -f $(tooldir)/bin/gcc; \
            $(INSTALL_PROGRAM) gcc-cross $(tooldir)/bin/gcc; \
          else true; fi; \
-         if [ -f cc1plus ] ; then \
-           rm -f $(bindir)/$(target)-g++; \
-           $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \
-           chmod a+x $(bindir)/$(target)-g++; \
-           rm -f $(bindir)/$(target)-c++; \
-           ln $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \
-         fi ; \
        else \
          rm -f $(bindir)/gcc; \
          $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
          rm -f $(bindir)/$(target)-gcc-1; \
          ln $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
          mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
-         if [ -f cc1plus ] ; then \
-           rm -f $(bindir)/g++; \
-           $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
-           chmod a+x $(bindir)/g++; \
-           rm -f $(bindir)/c++; \
-           ln $(bindir)/g++ $(bindir)/c++; \
-         fi ; \
        fi
 # Install protoize if it was compiled.
        -if [ -f protoize ]; \
@@ -1865,22 +1864,20 @@ install-common: native install-dir xgcc $(EXTRA_PARTS)
        $(INSTALL_PROGRAM) cpp $(libsubdir)/cpp
 
 # Install the info files.
-install-info: doc install-dir
+install-info: doc install-dir lang.install-info
        -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
        cd $(srcdir); for f in cpp.info* gcc.info*; \
        do $(INSTALL_DATA) $$f $(infodir)/$$f; done
        -chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
 
 # Install the man pages.
-install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 $(srcdir)/g++.1
+install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 lang.install-man
        -rm -f $(mandir)/gcc$(manext)
        -$(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/gcc$(manext)
        -chmod a-x $(mandir)/gcc$(manext)
        -rm -f $(mandir)/cccp$(manext)
        -$(INSTALL_DATA) $(srcdir)/cccp.1 $(mandir)/cccp$(manext)
        -chmod a-x $(mandir)/cccp$(manext)
-       -$(INSTALL_DATA) $(srcdir)/g++.1 $(mandir)/g++$(manext)
-       -chmod a-x $(mandir)/g++$(manext)
 
 # Install the library.
 install-libgcc: libgcc.a install-dir
@@ -1966,13 +1963,12 @@ install-collect2: collect2 install-dir
        $(INSTALL_PROGRAM) xgcc $(libsubdir)/gcc
 
 # Cancel installation by deleting the installed files.
-uninstall:
+uninstall: lang.uninstall
        -rm -rf $(libsubdir)
        -rm -rf $(bindir)/gcc
        -rm -rf $(bindir)/protoize
        -rm -rf $(bindir)/unprotoize
        -rm -rf $(mandir)/gcc$(manext)
-       -rm -rf $(mandir)/g++$(manext)
        -rm -rf $(mandir)/cccp$(manext)
        -rm -rf $(mandir)/protoize$(manext)
        -rm -rf $(mandir)/unprotoize$(manext)
@@ -1983,7 +1979,7 @@ uninstall:
 TAGS: force
        cd $(srcdir);                                                   \
        mkdir temp;                                                     \
-       mv -f c-parse.[ch] cp-parse.[ch] objc-parse.c cexp.c =*.[chy] temp; \
+       mv -f c-parse.[ch] objc-parse.c cexp.c =*.[chy] temp;           \
        etags *.y *.h *.c;                                              \
        mv temp/* .;                                                    \
        rmdir temp
@@ -2004,8 +2000,10 @@ gcc.xtar: distdir
 # Make the distribution.
        tar -chf gcc.xtar gcc-$(version)
 
-distdir: doc $(srcdir)/INSTALL c-parse.y c-gperf.h objc-parse.y cp-parse.y \
-  c-parse.c cp-parse.c objc-parse.c cexp.c
+# This target exists to do the initial work before the language specific
+# stuff gets done.
+distdir-start: doc $(srcdir)/INSTALL c-parse.y c-gperf.h objc-parse.y \
+  c-parse.c objc-parse.c cexp.c
        @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \
        then true; \
        else echo "You must update the version number in \`gcc.texi'"; sleep 10;\
@@ -2045,19 +2043,25 @@ distdir: doc $(srcdir)/INSTALL c-parse.y c-gperf.h objc-parse.y cp-parse.y \
          ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
        done
        ln .gdbinit tmp
+
+# Finish making `distdir', after the languages have done their thing.
+distdir-finish:
        mv tmp gcc-$(version)
 # Get rid of everything we don't want in the distribution.
        cd gcc-$(version); make -f Makefile.in extraclean
 
+distdir: distdir-start lang.distdir distdir-finish
+
 # make diff oldversion=M.N 
 # creates a diff file between an older distribution and this one.
 # The -P option assumes this is GNU diff.
 diff:
        diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h \
-         -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c \
-         -x bi-parser.c -x objc-parse.c -x TAGS -x "gcc.??" -x "gcc.??s" \
-         -x gcc.aux -x "cpp.??s" -x "cpp.??" -x cpp.aux -x "cpp.info*"
-         -x "gcc.info*" \
+         -x cexp.c -x bi-parser.c -x objc-parse.y -x objc-parse.c \
+         -x TAGS \
+         -x "gcc.??" -x "gcc.??s" -x gcc.aux -x "gcc.info*" \
+         -x "cpp.??" -x "cpp.??s" -x cpp.aux -x "cpp.info*" \
+         $(LANG_DIFF_EXCLUDES) \
          gcc-$(oldversion) gcc-$(version) > diffs
 
 # do make -f ../gcc/Makefile maketest DIR=../gcc
@@ -2112,15 +2116,33 @@ compare: force
          tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
            && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
        done
+       for dir in tmp-foo $(SUBDIRS); do \
+         if [ `echo $$dir/*.o` != "$$dir/*.o" ] ; then \
+           for file in $$dir/*.o; do \
+             tail +16c ./$$file > tmp-foo1; \
+             tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
+               && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
+           done \
+         fi \
+       done
        -rm -f tmp-foo*
 
 # Similar, but compare with stage3 directory
 compare3: force
        for file in *.o; do \
-         tail +16c $$file > tmp-foo1; \
+         tail +16c ./$$file > tmp-foo1; \
          tail +16c stage3/$$file > tmp-foo2 2>/dev/null \
            && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
        done
+       for dir in tmp-foo $(SUBDIRS); do \
+         if [ `echo $$dir/*.o` != "$$dir/*.o" ] ; then \
+           for file in $$dir/*.o; do \
+             tail +16c ./$$file > tmp-foo1; \
+             tail +16c stage3/$$file > tmp-foo2 2>/dev/null \
+               && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
+           done \
+         fi \
+       done
        -rm -f tmp-foo*
 
 # Compare the object files in the current directory with those in the
@@ -2131,41 +2153,75 @@ gnucompare: force
        for file in *.o; do \
          cmp --ignore-initial=16 $$file stage2/$$file || true ; \
        done
+       for dir in tmp-foo $(SUBDIRS); do \
+         if [ `echo $$dir/*.o` != "$$dir/*.o" ] ; then \
+           for file in $$dir/*.o; do \
+             cmp --ignore-initial=16 $$file stage2/$$file || true ; \
+           done \
+         fi \
+       done
 
 # Similar, but compare with stage3 directory
 gnucompare3: force
        for file in *.o; do \
          cmp --ignore-initial=16 $$file stage3/$$file || true ; \
        done
+       for dir in tmp-foo $(SUBDIRS); do \
+         if [ `echo $$dir/*.o` != "$$dir/*.o" ] ; then \
+           for file in $$dir/*.o; do \
+             cmp --ignore-initial=16 $$file stage3/$$file || true ; \
+           done \
+         fi \
+       done
 
 # Copy the object files from a particular stage into a subdirectory.
-stage1: force
+stage1-start:
        -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
+       -for dir in . $(SUBDIRS) ; \
+        do \
+          if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi \
+        done
        -mv $(STAGESTUFF) stage1
        -rm -f stage1/libgcc.a
        -cp libgcc.a stage1
        -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
+stage1: force stage1-start lang.stage1
 
-stage2: force
+stage2-start:
        -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
+       -for dir in . $(SUBDIRS) ; \
+        do \
+          if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi \
+        done
        -mv $(STAGESTUFF) stage2
        -rm -f stage2/libgcc.a
        -cp libgcc.a stage2
        -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
+stage2: force stage2-start lang.stage2
 
-stage3: force
+stage3-start:
        -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
+       -for dir in . $(SUBDIRS) ; \
+        do \
+          if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi \
+        done
        -mv $(STAGESTUFF) stage3
        -rm -f stage3/libgcc.a
        -cp libgcc.a stage3
        -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
+stage3: force stage3-start lang.stage3
 
-stage4: force
+stage4-start:
        -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
+       -for dir in . $(SUBDIRS) ; \
+        do \
+          if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi \
+        done
        -mv $(STAGESTUFF) stage4
        -rm -f stage4/libgcc.a
        -cp libgcc.a stage4
        -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi
+stage4: force stage4-start lang.stage4
 
 # Copy just the executable files from a particular stage into a subdirectory,
 # and delete the object files.  Use this if you're just verifying a version