###*#######################################################################
#
# Makefile to test the installation of g++ and libg++
# (by hgs@cygnus.com)
# 
# Usage: make foo_main test-90S test-90D PREFIX=prefix [other macros]

srcdir = .


#
# Compilation macros
#
PREFIX		= $(prefix)

CFLAGS		=
CXXFLAGS	=
CPP_FLAGS	= #-I$(srcdir)/../g++-include
OPTIMIZE_FLAGS	= -O
DEBUG_FLAGS	= -g -v #-Wall
COMPILE_FLAGS=$(NOSTDINC) -I.. -I$(srcdir) -I$(srcdir)/../src -I$(srcdir)/../$(IO_DIR) $(WRAP_C_INCLUDES)

DEPEND_SOURCES = $(srcdir)/*.cc


T90  = $(T90S) $(T90D)
T90D =  # dex_bar

FLAGS_90 = \
 GXX="$(GXX)"\
 CPP_FLAGS="$(CPP_FLAGS)"\
 OPTIMIZE_FLAGS="$(OPTIMIZE_FLAGS)"\
 DEBUG_FLAGS="$(DEBUG_FLAGS)"\
 GXXLDFLAGS="$(GXXLDFLAGS)"

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


TEMP_FILES = *.o foo_main a b *foo_main.out *foo_main.diff *foo_main.run

help:
	@echo Usage: make foo_main test-40 test-90S test-90D PREFIX=prefix [other macros]


test-90S: foo_main a b

test-90S-then-clean: test-90S
	rm -f ${TEMP_FILES}

test-90D: dfoo_main da db

test-90D-then-clean: test-90D
	rm -f ${TEMP_FILES}

test: $(TEST)
	for P in $(TEST) ; do if [ $$P != foo_main ]; then eval ./$$P; fi; done

a : a.o
	$(CXX) -o a  a.o $(LIBS)
da : a.o
	$(CXX) -o da -dynamic  a.o $(LIBS)


b : bf.o bm.o
	$(CXX) -o b bm.o bf.o $(LIBS)

db : bf.o bm.o
	$(CXX) -o db -dynamic bm.o bf.o $(LIBS)


foo_main:   foo_main.diff
	@true

dfoo_main: dfoo_main.diff
	@true

foo_main.run: foo_main.o foo_func.o Foo.o expected.out
	$(CXX) $(DEBUG_FLAGS) -o $@  foo_main.o foo_func.o Foo.o

foo_main.out: foo_main.run
	./foo_main.run > foo_main.out

foo_main.diff: foo_main.out $(srcdir)/expected.out
	@echo "diff $(srcdir)/expected.out foo_main.out >foo_main.diff"
	@diff $(srcdir)/expected.out foo_main.out >foo_main.diff \
	  || (echo "Static constructor test failed - see libg++/README"; false)

dfoo_main.run: foo_main.o foo_func.o Foo.o
	$(CXX) $(DEBUG_FLAGS) -o $@ -dynamic foo_main.o foo_func.o Foo.o $(LIBS)

dfoo_main.out: dfoo_main.run
	./dfoo_main.run > dfoo_main.out

dfoo_main.diff: dfoo_main.out $(srcdir)/expected.out
	diff $(srcdir)/expected.out dfoo_main.out

ex_bar.o: ex_bar.cc
	$(CXX) -fhandle-exceptions ex_bar.cc

ex_bar: ex_bar.o
	$(CXX) $(DEBUG_FLAGS) -o $@ ex_bar.o

dex_bar: ex_bar.o
	$(CXX) $(DEBUG_FLAGS) -o $@ -dynamic ex_bar.o

# --- Generate depend rules ---

SRCDIR=$(srcdir)/..

# The sed script below attempts to make the depend output portable by
# making the output use the same macros used elsewhere in the Makefile:
# - It replaces double // by a single /.
# - It replaces include files that match part of the GXX_INCLUDE_DIRS
#   by names defined in terms of the macros used to define GXX_INCLUDE_DIRS.
# - It removes any absolute include file names that remain.
# - then remove lines, which contain only `\'
#
depend: depend.tmp
	if [ "x$(DEPEND_SOURCES)" != "x" ] ; then \
	sed < depend.tmp \
	  -e 's|//|/|g' \
	  -e 's|$(srcdir)|$$(srcdir)|g' \
	  -e 's| /[^ ]*[.]h||g' \
	  -e 's|: *\$$(srcdir)/\(.*\.[cC]*\)|: \1|' \
	  -e '/^[ 	]*\\$$/d' -e 's/^[ 	]*$$//' \
	| awk 'BEGIN   { prev = "" } \
	      /^( )*$$/ { if (prev ~ /\\$$/) \
			 { prev = substr(prev,1,length(prev)-1); next } \
		       } \
                       { print prev; prev = $$0 } \
	       END { if (prev !~ /^( )*$$/) print prev }' \
	> $(srcdir)/depend ;\
	fi

depend.tmp: $(DEPEND_SOURCES) 
	if [ "x$(DEPEND_SOURCES)" = "x" ] ; then \
	  echo "" > $(srcdir)/depend ;\
	else \
	echo "" >depend.tmp ; \
	$(SRCDIR)/utils/g++dep.sh -f depend.tmp $(GXX_INCLUDE_DIRS) \
	  $(DEPEND_SOURCES) ;\
	fi

do_depend: depend
	if [ "$(SUBDIRS)" != "" ] ; then \
	for D in $(SUBDIRS) x ; do     		   \
		if [ -d $$D ] ; then 		   \
		echo "cd $$D; $(MAKE) do_depend" ; \
		(cd $$D ; $(MAKE) do_depend );	   \
		fi ;				   \
	done ;\
	fi

# DO NOT DELETE THIS LINE -- g++dep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.

Foo.o : Foo.cc \
  $(srcdir)/Foo.h
a.o : a.cc 
bf.o : bf.cc 
bm.o : bm.cc 
ex_bar.o : ex_bar.cc \
  $(srcdir)/ex_bar.cc
foo_func.o : foo_func.cc \
  $(srcdir)/Foo.h
foo_main.o : foo_main.cc \
  $(srcdir)/Foo.h

# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
