# 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.8.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)
INSTALLDIR = $(libdir)

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

# Remove these for public releases.
CXXFLAGS = -g -O -Wpointer-arith -Wnested-externs -Woverloaded-virtual -Wbad-function-cast -Winline -Wwrite-strings -Weffc++
CFLAGS = -g -O -Wpointer-arith -Wnested-externs

.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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 [ -n "$(PICFLAG)" ]; 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 ; \
	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:

.PHONY: stuff
stuff:
	$(MAKE) clean
	$(MAKE) -C ../libio c++clean
	-$(MAKE) $(MAKEFLAGS) check
	-$(MAKE) -C ../libio check
	-$(MAKE) -C ../../gcc check-g++

stuff1:
	$(MAKE) clean
	$(MAKE) -C ../libio c++clean

stuff2:
	-$(MAKE) check
	-$(MAKE) -C ../libio check
	-$(MAKE) -C ../../gcc check-g++
