#/usr/local/bin/bash
# Specify the compiler here.
C++C= g++
CCFLAGS= -ggdb -Wall -O0 -fno-exceptions
DFLAGS= -DDEBUG
# CCFLAGS= -Wall -O3
# DFLAGS= -DNDEBUG
CFLAGS=$(CCFLAGS)
UTILSDIR= ..
SHELL= /usr/local/bin/bash

TEMPLATE_CCS= \
	individual.cc nicherep.cc \
	niche.cc ecosystem.cc

INCDIR= $(UTILSDIR)/include
INCFLAGS= -I$(INCDIR)
INCS=	nlp-benchmarks.hh \
	clock.hh ecosystem.hh nlp-genome.hh basepars.hh \
	nlp-genpars.hh individual.hh nicherep.hh \
	niche.hh nichepars.hh controlpars.hh $(TEMPLATE_CCS)

ALL_TESTS= test-genome test-genpars test-indiv \
	test-niche test-ecosystem test-benchmarks

ALL_EXAMPLES= example-nlp

LIBDIR= $(UTILSDIR)/lib
LIBFLAGS= -L$(LIBDIR)
LIBS= $(LIBFLAGS) -lm -lutils

.PHONY: all
all:	example-nlp

.PHONY: alltests
alltests:	$(ALL_TESTS)

$(INCS):
	echo $@: file not found
	error

UTILINCSS= randoms.hh psout.hh nlp-benchmarks.hh
UTILOBJS= randoms.o psout.o nlp-benchmarks.o

libutils:	$(LIBDIR)/libutils.a

$(LIBDIR)/libutils.a: $(UTILOBJS) $(UTILINCS) Makefile
	ar rcv libutils.a $(UTILOBJS)
	ranlib libutils.a
	cp libutils.a $(LIBDIR)

psout.o: psout.cc $(UTILSDIR)/include/psout.hh Makefile
	$(C++C) -c $(INCFLAGS) $(CCFLAGS) $(DFLAGS) psout.cc -o psout.o

randoms.o: randoms.cc $(UTILSDIR)/include/randoms.hh Makefile
	$(C++C) -c $(INCFLAGS) $(CCFLAGS) $(DFLAGS) randoms.cc -o randoms.o

nlp-benchmarks.o: nlp-benchmarks.cc $(UTILSDIR)/include/nlp-benchmarks.hh Makefile
	$(C++C) -c $(INCFLAGS) $(CCFLAGS) $(DFLAGS) nlp-benchmarks.cc -o nlp-benchmarks.o


.PRECIOUS : test-%.o
test-%.o:	test-%.cc $(INCS) Makefile
	  $(C++C) -c $(INCFLAGS) $(CCFLAGS) $(DFLAGS) $< -o $@

test-%:	test-%.o Makefile
	$(C++C) $(CCFLAGS) $(DFLAGS) $< -o $@ $(LIBS)

.PRECIOUS : example%.o
example%.o:	example%.cc $(INCS) Makefile
	  $(C++C) -c $(INCFLAGS)  $(CCFLAGS) $(DFLAGS) $< -o $@

example%:	example%.o Makefile
	$(C++C) $(CCFLAGS) $(DFLAGS) $< -o $@ $(LIBS)

alltests:	$(ALL_TESTS)

.PHONY: doc
doc:	doc-niche doc-nlp-genome doc-routing

doc-niche:
	doc++ -p -d DOC-NICHE doc-niche.dxx

doc-nlp-genome:
	doc++ -p -d DOC-NLP doc-nlp-genome.dxx

doc-routing:
	doc++ -p -d DOC-ROUTING routing.dxx

####
.PHONY: clean
clean:
	rm -f *~ *.bak *.out *.pixie *.o core l.out* mon.out *.a

.PHONY: allclean
allclean: clean
	rm -f $(ALL_TESTS) $(ALL_EXAMPLES)
