CXX      = g++
SNPSRC   = ../snpsrc
EMMSRC   = ../emmsrc
USRSRC   = ../lrr
ISCL     = ../lib/libscl/gpp
LSCL     = ../lib/libscl/gpp
ISNP     = ../lib/libsnp/gpp
LSNP     = ../lib/libsnp/gpp
ISMM     = ../lib/libsmm/gpp
LSMM     = ../lib/libsmm/gpp
CXXFLAGS = -O2 -Wall -c \
	   -I$(SNPSRC) -I$(EMMSRC) -I$(USRSRC) -I$(ISMM) -I$(ISNP) -I$(ISCL)
LDFLAGS  = -L$(LSMM) -lsmm -L$(LSNP) -lsnp -L$(LSCL) -lscl -lm 

HEADERS  = $(ISNP)/libsnp.h $(ISMM)/libsmm.h \
	$(EMMSRC)/emm_base.h $(EMMSRC)/emm.h $(USRSRC)/emmusr.h \
	$(SNPSRC)/snp_base.h $(SNPSRC)/snp.h $(SNPSRC)/snpusr.h \
	$(ISCL)/libscl.h
	
OBJECTS = emmcode1.o emmcode2.o emmcode3.o emmusr.o\
	  snpcode1.o snpcode2.o snpcode3.o snpusr.o

LIBRARIES = libscl.a libsnp.a libsmm.a

PROGRAMS = snp emm annual4

all :  $(LIBRARIES) $(PROGRAMS)

libscl.a :
	make -C $(LSCL)

libsnp.a :
	make -C $(LSNP)

libsmm.a :
	make -C $(LSMM)

annual4 : annual4.o $(LIBRARIES)
	$(CXX) -o annual4 annual4.o $(LDFLAGS)

annual4.o : $(USRSRC)/annual4.cpp 
	$(CXX) $(CXXFLAGS) $(USRSRC)/annual4.cpp

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

emm.o : $(EMMSRC)/emm.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(EMMSRC)/emm.cpp

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

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

emmcode1.o : $(EMMSRC)/emmcode1.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(EMMSRC)/emmcode1.cpp

emmcode2.o : $(EMMSRC)/emmcode2.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(EMMSRC)/emmcode2.cpp

emmcode3.o : $(EMMSRC)/emmcode3.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(EMMSRC)/emmcode3.cpp

emmusr.o : $(USRSRC)/emmusr.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(USRSRC)/emmusr.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

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

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

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

