# Top level makefile fragment for GNU C++.
#   Copyright (C) 1994, 1995 Free Software Foundation, Inc.

#This file is part of GNU CC.

#GNU CC is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2, or (at your option)
#any later version.

#GNU CC is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with GNU CC; see the file COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston, MA 02111-1307, USA.

# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.info, foo.dvi,
# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
# foo.uninstall, foo.distdir,
# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
#
# It should also provide rules for:
#
# - making any compiler driver (eg: g++)
# - the compiler proper (eg: cc1plus)
# - define the names for selecting the language in LANGUAGES.
#
# Extra flags to pass to recursive makes.
CXX_FLAGS_TO_PASS = \
	"CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
	"CXXFLAGS=$(CXXFLAGS)" \
	"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"

# Actual names to use when installing a native compiler.
CXX_INSTALL_NAME = `t='$(program_transform_name)'; echo c++ | sed $$t`
GXX_INSTALL_NAME = `t='$(program_transform_name)'; echo g++ | sed $$t`

# Actual names to use when installing a cross-compiler.
CXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo c++ | sed $$t`
GXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g++ | sed $$t`

# The name to use for the demangler program.
DEMANGLER_PROG = c++filt

# Extra headers to install.
CXX_EXTRA_HEADERS = $(srcdir)/cp/inc/typeinfo $(srcdir)/cp/inc/exception \
	$(srcdir)/cp/inc/new $(srcdir)/cp/inc/new.h

# Extra code to include in libgcc2.
CXX_LIB2FUNCS = tinfo.o tinfo2.o new.o new1.o new2.o exception.o
CXX_LIB2SRCS = $(srcdir)/cp/new.cc $(srcdir)/cp/new1.cc $(srcdir)/cp/new2.cc \
	$(srcdir)/cp/exception.cc $(srcdir)/cp/tinfo.cc \
	$(srcdir)/cp/tinfo2.cc $(srcdir)/cp/tinfo.h
#
# Define the names for selecting c++ 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++: cc1plus

# Tell GNU make to ignore these if they exist.
.PHONY: C++ c++

g++.c: $(srcdir)/gcc.c
	-rm -f $@
	ln -s $(srcdir)/gcc.c $@ || cp $(srcdir)/gcc.c $@

g++spec.o: $(srcdir)/cp/g++spec.c
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/cp/g++spec.c

# N.B.: This is a copy of the gcc.o rule, with -DLANG_SPECIFIC_DRIVER added.
# It'd be nice if we could find an easier way to do this---rather than have
# to track changes to the toplevel gcc Makefile as well.
# We depend on g++.c last, to make it obvious where it came from.
g++.o: $(CONFIG_H) multilib.h config.status $(lang_specs_files) g++.c
	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	$(DRIVER_DEFINES) \
	-DLANG_SPECIFIC_DRIVER \
  -c g++.c

# Create the compiler driver for g++.
g++$(exeext): g++.o g++spec.o version.o choose-temp.o pexecute.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g++.o g++spec.o version.o \
	  choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS)

# Create a version of the g++ driver which calls the cross-compiler.
g++-cross$(exeext): g++$(exeext)
	-rm -f g++-cross$(exeext)
	cp g++$(exeext) g++-cross$(exeext)

cxxmain.o: cplus-dem.c demangle.h
	rm -f cxxmain.c
	ln -s $(srcdir)/cplus-dem.c cxxmain.c > /dev/null 2>&1 \
	 || cp $(srcdir)/cplus-dem.c cxxmain.c
	$(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  -DVERSION=\"$(version)\" cxxmain.c
	rm -f cxxmain.c

$(DEMANGLER_PROG): cxxmain.o underscore.o getopt.o getopt1.o $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) $(LIBS) -o $@ \
	  cxxmain.o underscore.o getopt.o getopt1.o

CXX_SRCS = $(srcdir)/cp/call.c $(srcdir)/cp/decl2.c \
 $(srcdir)/cp/except.c $(srcdir)/cp/input.c $(srcdir)/cp/pt.c \
 $(srcdir)/cp/spew.c $(srcdir)/cp/xref.c $(srcdir)/cp/class.c \
 $(srcdir)/cp/expr.c $(srcdir)/cp/lex.c \
 $(srcdir)/cp/ptree.c $(srcdir)/cp/tree.c $(srcdir)/cp/cvt.c \
 $(srcdir)/cp/errfn.c $(srcdir)/cp/rtti.c $(srcdir)/cp/method.c \
 $(srcdir)/cp/search.c $(srcdir)/cp/typeck.c $(srcdir)/cp/decl.c \
 $(srcdir)/cp/error.c $(srcdir)/cp/friend.c $(srcdir)/cp/init.c \
 $(srcdir)/cp/parse.y $(srcdir)/cp/sig.c $(srcdir)/cp/typeck2.c \
 $(srcdir)/cp/repo.c

cc1plus: $(P) $(CXX_SRCS) $(LIBDEPS) stamp-objlist c-common.o c-pragma.o
	cd cp; $(MAKE) $(FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) ../cc1plus
#
# Build hooks:

c++.all.build: g++$(exeext) $(DEMANGLER_PROG)
c++.all.cross: g++-cross$(exeext) $(DEMANGLER_PROG)
c++.start.encap: g++$(exeext)
c++.rest.encap: $(DEMANGLER_PROG)

c++.info:
c++.dvi:

# C++ language-support library pieces for libgcc.
tinfo.o: cc1plus $(srcdir)/cp/tinfo.cc
	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
	  -c $(srcdir)/cp/tinfo.cc
tinfo2.o: cc1plus $(srcdir)/cp/tinfo2.cc
	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
	  -c $(srcdir)/cp/tinfo2.cc
exception.o: cc1plus $(srcdir)/cp/exception.cc
	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
	  -c -fexceptions $(srcdir)/cp/exception.cc
new.o: cc1plus $(srcdir)/cp/new.cc
	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
	  -c $(srcdir)/cp/new.cc
new1.o: cc1plus $(srcdir)/cp/new1.cc
	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
	  -c $(srcdir)/cp/new1.cc
new2.o: cc1plus $(srcdir)/cp/new2.cc
	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
	  -c $(srcdir)/cp/new2.cc

# We want to update cplib2.txt if any of the source files change...
cplib2.txt: $(CXX_LIB2SRCS) $(CXX_EXTRA_HEADERS) cplib2.ready
	case " $(LANGUAGES) " in \
	*" "[cC]"++ "*) \
	  echo $(CXX_LIB2FUNCS) > cplib2.new;; \
	*) \
	  echo "" > cplib2.new;; \
	esac
	mv -f cplib2.new cplib2.txt 

# Or if it would be different.
cplib2.ready: $(GCC_PASSES) $(LANGUAGES) $(LIBGCC2_DEPS) stmp-int-hdrs
	@if [ -r cplib2.txt ]; then \
	  case " $(LANGUAGES) " in \
	  *" "[cC]"++ "*) \
	    echo $(CXX_LIB2FUNCS) > cplib2.new;; \
	  *) \
	    echo "" > cplib2.new;; \
	  esac; \
	  if cmp -s cplib2.new cplib2.txt; then true; else \
	    touch cplib2.ready; \
	  fi; \
	  rm -f cplib2.new; \
	else true ; \
	fi
	@if [ -f cplib2.ready ]; then true; else \
	  touch cplib2.ready; \
	fi
#
# Install hooks:
# cc1plus is installed elsewhere as part of $(COMPILERS).

# Nothing to do here.
c++.install-normal:

# Install the driver program as $(target)-g++
# and also as either g++ (if native) or $(tooldir)/bin/g++.
c++.install-common:
	-if [ -f cc1plus$(exeext) ] ; then \
	  if [ -f g++-cross$(exeext) ] ; then \
	    rm -f $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
	    $(INSTALL_PROGRAM) g++-cross$(exeext) $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
	    chmod a+x $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
	    rm -f $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
	    ln $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext) \
	      > /dev/null 2>&1 \
	      || cp $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext) ; \
	  else \
	    rm -f $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
	    $(INSTALL_PROGRAM) g++$(exeext) $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
	    chmod a+x $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
	    rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
	    ln $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) \
	      > /dev/null 2>&1 \
	      || cp $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) ; \
	  fi ; \
	fi

c++.install-info:

c++.install-man: $(srcdir)/cp/g++.1
	-if [ -f cc1plus$(exeext) ] ; then \
	  if [ -f g++-cross$(exeext) ] ; then \
	    rm -f $(mandir)/$(GXX_CROSS_NAME)$(manext); \
	    $(INSTALL_DATA) $(srcdir)/cp/g++.1 $(mandir)/$(GXX_CROSS_NAME)$(manext); \
	    chmod a-x $(mandir)/$(GXX_CROSS_NAME)$(manext); \
	  else \
	    rm -f $(mandir)/$(GXX_INSTALL_NAME)$(manext); \
	    $(INSTALL_DATA) $(srcdir)/cp/g++.1 $(mandir)/$(GXX_INSTALL_NAME)$(manext); \
	    chmod a-x $(mandir)/$(GXX_INSTALL_NAME)$(manext); \
	  fi; \
	else true; fi

c++.uninstall:
	-rm -rf $(bindir)/$(CXX_INSTALL_NAME)$(exeext)
	-rm -rf $(bindir)/$(CXX_CROSS_NAME)$(exeext)
	-rm -rf $(bindir)/$(GXX_INSTALL_NAME)$(exeext)
	-rm -rf $(bindir)/$(GXX_CROSS_NAME)$(exeext)
	-rm -rf $(mandir)/$(GXX_INSTALL_NAME)$(manext)
	-rm -rf $(mandir)/$(GXX_CROSS_NAME)$(manext)
#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.

c++.mostlyclean:
	-rm -f cp/*$(objext) $(DEMANGLER_PROG)
c++.clean:
	-rm -f cplib2.txt cplib2.ready
c++.distclean:
	-rm -f cp/config.status cp/Makefile
	-rm -f cp/parse.output
c++.extraclean:
c++.maintainer-clean:
	-rm -f cp/parse.c cp/parse.h
#
# Stage hooks:
# The main makefile has already created stage?/cp.

c++.stage1: stage1-start
	-mv cp/*$(objext) stage1/cp
c++.stage2: stage2-start
	-mv cp/*$(objext) stage2/cp
c++.stage3: stage3-start
	-mv cp/*$(objext) stage3/cp
c++.stage4: stage4-start
	-mv cp/*$(objext) stage4/cp
#
# Maintenance hooks:

# This target creates the files that can be rebuilt, but go in the
# distribution anyway.  It then copies the files to the distdir directory.
c++.distdir:
	mkdir tmp/cp
	cd cp ; $(MAKE) $(FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) parse.c hash.h
	cd cp; \
	for file in *[0-9a-zA-Z+]; do \
	  ln $$file ../tmp/cp >/dev/null 2>&1 || cp $$file ../tmp/cp; \
	done
