
# Possible directives
# DIRECTIVES = -DREMOVE_THROW -DTEST -D$(OSTYPE)

DIRECTIVES = -D$(OSTYPE) 
# OPTIMIZATION = -O3 -fexpensive-optimizations
OPTIMIZATION = 

# I don't normally change anything below this line

# VERBOSE = -v
DEBUGGING = -g
# PROFILE = -pg

.SUFFIXES = .cc 
	 
SGB_INCL_DIR = -I$(SGB_ROOT)/include
SGB_LIB = -L$(SGB_ROOT)/lib -lgb 
SGB_LIB = -L$(SGB_ROOT)/$(OSTYPE)/lib -lgb 

MATH_LIB = -lm

INCLUDE_DIRS = -I. $(SGB_INCL_DIR) $(DMALLOC_INCL)
LIBRARIES = $(SGB_LIB) $(NR_LIB) $(DMALLOC_LIB) $(MATH_LIB)


# PURIFY = purify -collector=/local/gnu/gcc-2.7.2/lib/gcc-lib/sparc-sun-sunos4.1.3/2.7.2/ld

CC = gcc
CPP = g++
CC_OPTS = -c $(EXCEPTIONS) $(DEBUGGING) $(PROFILE) $(OPTIMIZATION) $(VERBOSE) $(DIRECTIVES) 
LINK_OPTS = $(PROFILE) $(LIBRARIES) $(VERBOSE) 
COMPILE.c = $(CC) $(CC_OPTS) $(INCLUDE_DIRS) 
COMPILE.cpp = $(CPP) $(CC_OPTS) $(INCLUDE_DIRS) 
LINK.c = $(PURIFY) $(CC) -o
LINK.cpp = $(PURIFY) $(CPP) -o
CTANGLE = ctangle
RM = rm -f

BINARIES = adj2sgb connected nary_tree sgb2adj sgb_any_dup_edges  sgb_any_uni_edges sgb_uni2bi sgbpeek star string sgb_rename sgb2ns

all: $(BINARIES) 

sgb_any_uni_edges: sgb_any_uni_edges.o Makefile 
	$(LINK.cpp) sgb_any_uni_edges sgb_any_uni_edges.o $(LINK_OPTS)

sgb_any_dup_edges: sgb_any_dup_edges.o Makefile 
	$(LINK.cpp) sgb_any_dup_edges sgb_any_dup_edges.o $(LINK_OPTS)

connected: connected.o Makefile
	$(LINK.c) $@ connected.o $(LINK_OPTS)

sgb_uni2bi: sgb_uni2bi.o Makefile
	$(LINK.cpp) $@ sgb_uni2bi.o $(LINK_OPTS)

adj2sgb: adj2sgb.o Makefile
	$(LINK.c) $@ adj2sgb.o $(LINK_OPTS)

sgbpeek: sgbpeek.o Makefile
	$(LINK.c) $@ sgbpeek.o $(LINK_OPTS)

nary_tree: nary_tree.o gomp.o Makefile
	$(LINK.cpp) $@ nary_tree.o gomp.o $(LINK_OPTS)

string: string.o Makefile
	$(LINK.c) $@ string.o $(LINK_OPTS)

star: star.o Makefile
	$(LINK.c) $@ star.o $(LINK_OPTS)

sgb2adj: sgb2adj.o Makefile
	$(LINK.c) $@ sgb2adj.o $(LINK_OPTS)

sgb2ns: sgb2ns.o Makefile
	$(LINK.c) $@ sgb2ns.o $(LINK_OPTS)

sgb_rename: sgb_rename.o Makefile
	$(LINK.cpp) $@ sgb_rename.o $(LINK_OPTS)

.cc.o:
	$(COMPILE.cpp) $<

.c.o:
	$(COMPILE.c) $<

.w.c:
	$(CTANGLE) $<

veryclean: clean

clean:
	$(RM) *core *.o *~ *# $(BINARIES) 

