# 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)-complex

# 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 list map queue set stack vector utility functional \
	 iterator memory numeric

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
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
	$(CXX) $(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 -s -f $(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-complex: ${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-complex

bigstmp-complex: ${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-complex

.PHONY: install
install:
	rootme=`pwd`/ ; export rootme ; \
	if [ -z "$(MULTISUBDIR)" ]; then \
	  cd $(srcdir); \
	  for FILE in $(HEADERS) *.h std/*.*; do \
	    rm -f $(gxx_includedir)/$$FILE ; \
	    $(INSTALL_DATA) $$FILE $(gxx_includedir)/$$FILE ; \
	    chmod a-x $(gxx_includedir)/$$FILE ; \
	  done ; \
	  cd stl; \
	  for FILE in *.h; do \
	    rm -f $(gxx_includedir)/$$FILE ; \
	    $(INSTALL_DATA) $$FILE $(gxx_includedir)/$$FILE ; \
	    chmod a-x $(gxx_includedir)/$$FILE ; \
	  done ; \
	else true ; \
	fi
	rootme=`pwd`/ ; export rootme ; \
	for FILE in $(LIBS) ; do \
	  rm -f $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
	  if [ $$FILE = $(SHLINK) ] ; then \
	    ln -s -f $(SHLIB) $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
	  elif [ $$FILE = mshlink ]; then \
	    for FILE in $(MSHLINK) ; do \
	      rm -f $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
	      ln -s -f $$FILE $(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) -C ../libg++ clean
	$(MAKE) check
	$(MAKE) -C ../libio check
	$(MAKE) -C ../libg++ check

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

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