CXX      = g++
SNPSRC   = ../snpsrc
MLESRC   = ../mlesrc
USRSRC   = ../cbsrc
ISCL     = ../lib/libscl/gpp
LSCL     = ../lib/libscl/gpp
ISNP     = ../lib/libsnp/gpp
LSNP     = ../lib/libsnp/gpp
IMLE     = ../lib/libmle/gpp
LMLE     = ../lib/libmle/gpp
CXXFLAGS = -O2 -Wall -c \
	   -I$(MLESRC) -I$(SNPSRC) -I$(USRSRC) -I$(IMLE) -I$(ISCL) -I$(ISNP)
LDFLAGS  = -L$(LMLE) -lmle -L$(LSNP) -lsnp -L$(LSCL) -lscl -lm 

HEADERS  = $(IMLE)/libmle.h $(ISNP)/libsnp.h \
	$(MLESRC)/mle_base.h $(MLESRC)/mle.h \
	$(USRSRC)/snp_stat_mod.h $(USRSRC)/mleusr.h \
	$(SNPSRC)/snp.h $(ISCL)/libscl.h
	
OBJECTS = mlecode1.o mlecode2.o mleusr.o \
	  snpcode1.o snpcode2.o snpcode3.o snpusr.o snp_stat_mod.o \
	  crra_mf.o

LIBRARIES = libscl.a libsnp.a  libmle.a

PROGRAMS = mle quadpoints

all :  $(LIBRARIES) $(PROGRAMS)

libscl.a :
	make -C $(LSCL)

libmle.a :
	make -C $(LMLE)

libsnp.a :
	make -C $(LSNP)

mle :  mle.o $(OBJECTS) $(HEADERS) $(LIBRARIES)
	$(CXX) -o mle mle.o $(OBJECTS) $(LDFLAGS)

mle.o : $(MLESRC)/mle.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(MLESRC)/mle.cpp

quadpoints :  quadpoints.o $(OBJECTS) $(HEADERS) $(LIBRARIES)
	$(CXX) -o quadpoints quadpoints.o $(OBJECTS) $(LDFLAGS)

quadpoints.o : $(USRSRC)/quadpoints.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(USRSRC)/quadpoints.cpp

mlecode1.o : $(MLESRC)/mlecode1.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(MLESRC)/mlecode1.cpp

mlecode2.o : $(MLESRC)/mlecode2.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(MLESRC)/mlecode2.cpp

mleusr.o : $(USRSRC)/mleusr.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(USRSRC)/mleusr.cpp

snp_stat_mod.o : $(USRSRC)/snp_stat_mod.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(USRSRC)/snp_stat_mod.cpp

snpcode1.o : $(SNPSRC)/snpcode1.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SNPSRC)/snpcode1.cpp

snpcode2.o : $(SNPSRC)/snpcode2.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SNPSRC)/snpcode2.cpp

snpcode3.o : $(SNPSRC)/snpcode3.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SNPSRC)/snpcode3.cpp

snpusr.o : $(SNPSRC)/snpusr.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SNPSRC)/snpusr.cpp

crra_mf.o : $(USRSRC)/crra_mf.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(USRSRC)/crra_mf.cpp


clean	:
	make -C $(LSCL) clean
	make -C $(LMLE) clean
	make -C $(LSNP) clean
	rm -f *.o core core.*

veryclean	:
	make -C $(LSCL) veryclean
	make -C $(LMLE) veryclean
	make -C $(LSNP) veryclean
	rm -f *.o core core.*
	rm -f $(PROGRAMS)

dirclean	:
	rm -f *.o core core.*
	rm -f $(PROGRAMS)

