# Copyright (C) 1994, 1995 Free Software Foundation

# This file is part of the GNU ANSI C++ Library.  This library 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.

# This library 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 this library; see the file COPYING.  If not, write to the Free
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

VERSION = 2.9.0

OBJS  = cstringi.o stdexcepti.o cstdlibi.o cmathi.o stlinst.o
SUBLIBS = $(STAMP)-string $(STAMP)-complx

# C++ headers with no extension
HEADERS= cassert cctype cerrno cfloat ciso646 climits clocale cmath complex \
	 csetjmp csignal cstdarg cstddef cstdio cstdlib cstring ctime \
	 cwchar cwctype string stdexcept \
	 algorithm deque functional hash_map hash_set iterator list map \
	 memory numeric pthread_alloc queue rope set slist stack utility \
	 vector fstream iomanip iostream strstream iosfwd

ARLIB   = libstdc++.a
SHLIB   = libstdc++.so.$(VERSION)
SHARLIB = libstdc++-sh.a
SHLINK  = libstdc++.so
MSHLINK = libstdc++.so.`echo $(VERSION) | sed 's/\([0-9][.][0-9]\).*/\1/'`
SHFLAGS = 
SHDEPS  =

STAMP   = bigstmp

LIBS    = $(ARLIB)

#### package, host, target, and site dependent Makefile fragments come in here.
##

IO_DIR    = ../libio
LIBIBERTY_DIR = ../libiberty

LIBIBERTY_OBJS = `cat $(LIBIBERTY_DIR)/needed-list` strerror.o

tooldir = $(exec_prefix)/$(target)
# This is where the libraries will be installed; note, it will be set
# at make runtime now. See below at target install.
INSTALLDIR = $(libdir)

MOSTLYCLEAN_JUNK = *stmp-* tlib*.a *.s *.ii stdlist piclist
CLEAN_JUNK = $(LIBS)

.PHONY: libs
libs: $(LIBS)

stdlist: $(IO_DIR)/iostream.list $(OBJS) $(SUBLIBS) $(LIBIBERTY_DIR)/libiberty.a
	-rm -f tlist
	touch tlist
	echo *.o >> tlist
	for f in `cat $(IO_DIR)/iostream.list` ; do \
	  echo "$(IO_DIR)/$$f" >> tlist ; \
	done
	for f in $(LIBIBERTY_OBJS) ; do \
	  echo "$(LIBIBERTY_DIR)/$$f" >> tlist ; \
	done
	mv tlist stdlist

piclist: stdlist
	-rm -f tlist
	cp stdlist tlist
	if [ x"$(enable_shared)" = xyes ]; then \
	  sed 's,\([A-Za-z_]*\.o\),pic/\1,g' tlist > tlist2 ; \
	  mv tlist2 tlist ; \
	else true ; fi
	mv tlist piclist

$(ARLIB): stdlist
	-rm -f t$(ARLIB)
	$(AR) $(AR_FLAGS) t$(ARLIB) `cat stdlist`
	mv t$(ARLIB) $(ARLIB)
	$(RANLIB) $(ARLIB)

$(SHLIB): piclist
	$(CC) $(LIBCXXFLAGS) $(SHFLAGS) -shared -o $(SHLIB) `cat piclist` $(SHDEPS)

$(SHARLIB): $(SHLIB)
	-rm -f t$(SHARLIB)
	$(AR) $(AR_FLAGS) t$(SHARLIB) $(SHLIB)
	mv t$(SHARLIB) $(SHARLIB)
	$(RANLIB) $(SHARLIB)

$(SHLINK):
	ln -f -s $(SHLIB) $(SHLINK)

mshlink:
	@$(MAKE) $(MSHLINK) "SHLINK=$(MSHLINK)"

$(IO_DIR)/iostream.list: force
	cd $(IO_DIR) ; $(MAKE) $(FLAGS_TO_PASS) iostream.list

$(LIBIBERTY_DIR)/libiberty.a:
	cd $(LIBIBERTY_DIR) ; $(MAKE) $(FLAGS_TO_PASS)

STRFUNCS = REP MAIN TRAITS ADDSS ADDPS ADDCS ADDSP ADDSC \
	   EQSS EQPS EQSP NESS NEPS NESP LTSS LTPS LTSP GTSS GTPS GTSP \
	   LESS LEPS LESP GESS GEPS GESP
STRIO	 = EXTRACT INSERT GETLINE

# These are here for SunOS VPATH.
cstringi.o: cstringi.cc
cstdlibi.o: cstdlibi.cc
cmathi.o: cmathi.cc
stdexcepti.o: stdexcepti.cc
stlinst.o: stlinst.cc

# Later do wide strings, too.
stmp-string: ${srcdir}/sinst.cc ${srcdir}/std/bastring.h \
	     ${srcdir}/std/bastring.cc ${srcdir}/std/straits.h
	for name in $(STRFUNCS) $(STRIO); do \
	  echo c$${name}; \
	  if [ x"$(enable_shared)" = xyes ]; then \
	    $(COMPILE.cc) $(PICFLAG) -DC -D$${name} ${srcdir}/sinst.cc \
	      -o pic/c$${name}.o; \
	  else true ; fi; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	  $(COMPILE.cc) -DC -D$${name} ${srcdir}/sinst.cc -o c$${name}.o; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	done
	touch stmp-string

bigstmp-string: ${srcdir}/sinst.cc ${srcdir}/std/bastring.h \
	        ${srcdir}/std/bastring.cc ${srcdir}/std/straits.h
	echo cstring
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DC \
	    `for N in $(STRFUNCS); do echo " -D$${N}"; done` \
	    $(srcdir)/sinst.cc -o pic/cstrmain.o; \
	else true ; fi
	$(COMPILE.cc) -DC `for N in $(STRFUNCS); do echo " -D$${N}"; done` \
	  $(srcdir)/sinst.cc -o cstrmain.o
	echo cstrio
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DC \
	    `for N in $(STRIO); do echo " -D$${N}"; done` \
	    $(srcdir)/sinst.cc -o pic/cstrio.o; \
	else true ; fi
	$(COMPILE.cc) -DC `for N in $(STRIO); do echo " -D$${N}"; done` \
	  $(srcdir)/sinst.cc -o cstrio.o
	touch bigstmp-string

COMFUNCS = MAIN ADDCC ADDCF ADDFC SUBCC SUBCF SUBFC MULCC MULCF MULFC DIVCC \
	   DIVCF DIVFC PLUS MINUS EQCC EQCF EQFC NECC NECF NEFC ABS ARG POLAR \
	   CONJ NORM COS COSH EXP LOG POWCC POWCF POWCI POWFC SIN SINH SQRT
COMIO    = EXTRACT INSERT

stmp-complx: ${srcdir}/cinst.cc ${srcdir}/std/complext.h \
	      ${srcdir}/std/complext.cc ${srcdir}/std/dcomplex.h \
	      ${srcdir}/std/ldcomplex.h
	for N in $(COMFUNCS) $(COMIO); do \
	  echo f$${N}; \
	  if [ x"$(enable_shared)" = xyes ]; then \
	    $(COMPILE.cc) $(PICFLAG) -DF -D$${N} $(srcdir)/cinst.cc \
	      -o pic/f$${N}.o; \
	  else true ; fi; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	  $(COMPILE.cc) -DF -D$${N} ${srcdir}/cinst.cc -o f$${N}.o; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	  echo d$${N}; \
	  if [ x"$(enable_shared)" = xyes ]; then \
	    $(COMPILE.cc) $(PICFLAG) -DD -D$${N} $(srcdir)/cinst.cc \
	      -o pic/d$${N}.o; \
	  else true ; fi; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	  $(COMPILE.cc) -DD -D$${N} ${srcdir}/cinst.cc -o d$${N}.o; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	  echo ld$${N}; \
	  if [ x"$(enable_shared)" = xyes ]; then \
	    $(COMPILE.cc) $(PICFLAG) -DLD -D$${N} $(srcdir)/cinst.cc \
	      -o pic/ld$${N}.o; \
	  else true ; fi; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	  $(COMPILE.cc) -DLD -D$${N} ${srcdir}/cinst.cc -o ld$${N}.o; \
	  if [ $$? -eq 0 ]; then true; else exit 1; fi; \
	done
	touch stmp-complx

bigstmp-complx: ${srcdir}/cinst.cc ${srcdir}/std/complext.h \
	         ${srcdir}/std/complext.cc ${srcdir}/std/dcomplex.h \
	         ${srcdir}/std/ldcomplex.h
	echo fcomplex
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DF \
	    `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
	    $(srcdir)/cinst.cc -o pic/fcomplex.o; \
	else true ; fi
	$(COMPILE.cc) -DF `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
	  $(srcdir)/cinst.cc -o fcomplex.o
	echo fcomio
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DF \
	    `for N in $(COMIO); do echo " -D$${N}"; done` \
	    $(srcdir)/cinst.cc -o pic/fcomio.o; \
	else true ; fi
	$(COMPILE.cc) -DF `for N in $(COMIO); do echo " -D$${N}"; done` \
	  $(srcdir)/cinst.cc -o fcomio.o
	echo dcomplex
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DD \
	    `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
	    $(srcdir)/cinst.cc -o pic/dcomplex.o; \
	else true ; fi
	$(COMPILE.cc) -DD `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
	  $(srcdir)/cinst.cc -o dcomplex.o
	echo dcomio
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DD \
	    `for N in $(COMIO); do echo " -D$${N}"; done` \
	    $(srcdir)/cinst.cc -o pic/dcomio.o; \
	else true ; fi
	$(COMPILE.cc) -DD `for N in $(COMIO); do echo " -D$${N}"; done` \
	  $(srcdir)/cinst.cc -o dcomio.o
	echo ldcomplex
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DLD \
	    `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
	    $(srcdir)/cinst.cc -o pic/ldcomplex.o; \
	else true ; fi
	$(COMPILE.cc) -DLD `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
	  $(srcdir)/cinst.cc -o ldcomplex.o
	echo ldcomio
	if [ x"$(enable_shared)" = xyes ]; then \
	  $(COMPILE.cc) $(PICFLAG) -DLD \
	    `for N in $(COMIO); do echo " -D$${N}"; done` \
	    $(srcdir)/cinst.cc -o pic/ldcomio.o; \
	else true ; fi
	$(COMPILE.cc) -DLD `for N in $(COMIO); do echo " -D$${N}"; done` \
	  $(srcdir)/cinst.cc -o ldcomio.o
	touch bigstmp-complx

.PHONY: install
install:
	rootme=`pwd`/ ; export rootme ; \
	if [ -z "$(MULTISUBDIR)" ]; then \
	  cd $(srcdir); \
	  for FILE in $(HEADERS); do \
	    rm -f $(gxx_include_dir)/$$FILE ; \
	    if [ -f stl/$$FILE ]; then \
	      $(INSTALL_DATA) stl/$$FILE $(gxx_include_dir)/$$FILE ; \
	    else \
	      $(INSTALL_DATA) $$FILE $(gxx_include_dir)/$$FILE ; \
	    fi ; \
	    chmod a-x $(gxx_include_dir)/$$FILE ; \
	  done ; \
	  for FILE in *.h std/*.*; do \
	    rm -f $(gxx_include_dir)/$$FILE ; \
	    $(INSTALL_DATA) $$FILE $(gxx_include_dir)/$$FILE ; \
	    chmod a-x $(gxx_include_dir)/$$FILE ; \
	  done ; \
	  cd stl; \
	  for FILE in *.h; do \
	    rm -f $(gxx_include_dir)/$$FILE ; \
	    $(INSTALL_DATA) $$FILE $(gxx_include_dir)/$$FILE ; \
	    chmod a-x $(gxx_include_dir)/$$FILE ; \
	  done ; \
	else true ; \
	fi
	rootme=`pwd`/ ; export rootme ; \
	if [ x$(libsubdir) = x ] || [ x$(enable_version_specific_runtime_libs) != xyes ]; then \
	  INSTALLDIR=$(libdir); \
	else \
	  INSTALLDIR=$(libsubdir); \
	fi; \
	rm -f $${INSTALLDIR}$(MULTISUBDIR)/$(SHLINK) ; \
	for FILE in $(LIBS) ; do \
	  rm -f $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	  if [ $$FILE = $(SHLINK) ] ; then \
	    ln -f -s $(SHLIB) $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	  elif [ $$FILE = mshlink ]; then \
	    for FILE in $(MSHLINK) ; do \
	      rm -f $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	      ln -f -s $(SHLIB) $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	    done; \
	  elif [ $$FILE = $(SHLIB) ]; then \
	    $(INSTALL_PROGRAM) $$FILE $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	    : On the HP, shared libraries must be mode 555. ;\
	    chmod 555 $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	  else \
	    $(INSTALL_DATA) $$FILE $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	    $(RANLIB) $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	    chmod a-x $${INSTALLDIR}$(MULTISUBDIR)/$$FILE ; \
	  fi ; \
	done
	@rootme=`pwd`/ ; export rootme ; \
	$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install

.PHONY: force
force:

# Remove these for public releases.
MYCXXFLAGS = -g -O2 -Wpointer-arith -Wnested-externs -Woverloaded-virtual -Wbad-function-cast -Winline -Wwrite-strings
MYCFLAGS = -g -O2 -Wpointer-arith -Wnested-externs

.PHONY: stuff
stuff:
	$(MAKE) stuff1
	$(MAKE) stuff2

stuff1:
	$(MAKE) clean
	$(MAKE) -C ../libio c++clean
	touch ../../gcc/libgcc2.ready

stuff2:
	-$(MAKE) -C ../../gcc/ libgcc.a
	-$(MAKE) check CXXFLAGS="$(MYCXXFLAGS)" CFLAGS="$(MYCFLAGS)"
	-$(MAKE) -C ../libio check
	-$(MAKE) -C ../../gcc check-g++
