DIR = graph
.cc.o:
	(cd ..; $(LINK_COMPILE.cc) $(GNUFLAGS) $(DIR)/$<; mv $@ $(DIR))
EXTRA_OBJECTS = linkTemplates/linkTemplateFiles.o  
STK_OBJECTS   = STkTemplates/STkTemplateFiles.o  \
		autogenSTkMethods/initSTkFiles.o  \
		manualSTkMethods/manualSTkFiles.o  
## order established by lorder() and tsort().  cycles exist:
## tsort: cycle in data
## tsort: attrMethods.o
## tsort: graphTemplate.o
## tsort: Edge.o
## tsort: cycle in data
## tsort: attrMethods.o
## tsort: Graph.o
## tsort: Edge.o
SOURCES.cc = \
	AdjacencyMatrix.cc \
	Buckets.cc \
	IncidenceMatrix.cc \
	DBinGraph.cc \
	DHyperGraph.cc \
	UBinGraph.cc \
	BinGraph.cc \
	UHyperGraph.cc \
	HyperGraph.cc \
	Edge.cc \
	attrMethods.cc \
	Graph.cc \
	Vertex.cc \
	GraphObject.cc \
	GraphBuild.cc \
        LoadDimacsGraph.cc \
        SaveDimacsGraph.cc \
        parser.cc \
        scanner.cc \
        parseGraph.cc \
	graphTemplate.cc 

SOURCES.c = \
	nauty.c \
	nautil.c 

COBJECTS = \
	$(SOURCES.c:%.c=%.o)

OBJECTS = \
	$(SOURCES.cc:%.cc=%.o)

all:	objects

make_extra:
	cd linkTemplates;  $(MAKE) -f Make.graphlinkTemplates \
		LINK_COMPILE.cc="$(LINK_COMPILE.cc)"\
		GNUFLAGS="$(GNUFLAGS)" all
make_extra_stk:
	cd STkTemplates;  $(MAKE) -f Make.graphSTkTemplates \
		LINK_COMPILE.cc="$(LINK_COMPILE.cc)"\
		GNUFLAGS="$(GNUFLAGS)" all
	cd manualSTkMethods;  $(MAKE) -f Make.graphmanualSTkMethods init
	cd autogenSTkMethods; $(MAKE) -f Make.graphautogenSTkMethods \
		LINK_COMPILE.cc="$(LINK_COMPILE.cc)"\
		GNUFLAGS="$(GNUFLAGS)" all
	cd manualSTkMethods;  $(MAKE) -f Make.graphmanualSTkMethods \
		LINK_COMPILE.cc="$(LINK_COMPILE.cc)"\
		GNUFLAGS="$(GNUFLAGS)" all
parser.cc y.tab.h: parser.y
	$(PARSE) --yacc -t -d parser.y
	mv y.tab.c parser.cc
parser.o:	y.tab.h	parser.cc
	(cd ..; $(LINK_COMPILE.cc) -DYYDEBUG $(DIR)/parser.cc; \
	mv $@ $(DIR))
scanner.cc: scanner.l y.tab.h
	$(FLEX) scanner.l
	mv lex.yy.c scanner.cc
scanner.o:	y.tab.h	scanner.cc
	(cd ..; $(LINK_COMPILE.cc) -Igraph $(DIR)/scanner.cc; \
	mv $@ $(DIR))

nauty.o:	nauty.c
	(cd ..; $(LINK_COMPILE.c) -Igraph $(DIR)/nauty.c; \
	mv $@ $(DIR))

nautil.o:	nautil.c
	(cd ..; $(LINK_COMPILE.c) -Igraph $(DIR)/nautil.c; \
	mv $@ $(DIR))

#scanner.o:	y.tab.h	scanner.cc
#	(cd ..; $(LINK_COMPILE.cc) -Igraph -D__EXTERN_C__ $(DIR)/scanner.cc; \
#	mv $@ $(DIR))
../libgraph.a: $(OBJECTS) $(COBJECTS) make_extra
	@-rm ../libgraph.a
	ar cr ../libgraph.a $(OBJECTS) $(COBJECTS) $(EXTRA_OBJECTS)
	ranlib ../libgraph.a
../libgraphstk.a: make_extra_stk
	@-rm ../libgraphstk.a
	ar cr ../libgraphstk.a $(STK_OBJECTS) 
	ranlib ../libgraphstk.a
objects: $(SOURCES.cc) $(OBJECTS) $(COBJECTS)
clean:
	-$(RM) $(OBJECTS) $(COBJECTS) $(EXTRA_OBJECTS) $(STK_OBJECTS) \
	libgraph.a libgraphstk.a
	cd linkTemplates; make -f Make.graphlinkTemplates clean
	cd STkTemplates; make -f Make.graphSTkTemplates clean
	cd autogenSTkMethods; make -f Make.graphautogenSTkMethods clean
	cd manualSTkMethods; make -f Make.graphmanualSTkMethods clean
print:
	hsp -p $(SOURCES.cc)
wc:
	wc $(SOURCES.cc)
depend:
	makedepend -fMake.graph $(DEPENDFLAGS) $(SOURCES.cc)
# DO NOT DELETE THIS LINE -- make depend depends on it.
