CXX      = g++
MLESRC   = ../mlesrc
USRSRC   = ../gesrc.2
ISCL     = ../lib/libscl/gpp
LSCL     = ../lib/libscl/gpp
IMLE     = ../lib/libmle/gpp
LMLE     = ../lib/libmle/gpp
CXXFLAGS = -O2 -Wall -c \
	   -I$(MLESRC) -I$(USRSRC) -I$(IMLE) -I$(ISCL) 
LDFLAGS  = -L$(LMLE) -lmle -L$(LSCL) -lscl -lm 

HEADERS  = $(IMLE)/libmle.h $(MLESRC)/mle_base.h $(MLESRC)/mle.h \
	$(USRSRC)/mleusr.h $(ISCL)/spline_interpolator.h \
	$(USRSRC)/tree_policy.h $(ISCL)/libscl.h
	
OBJECTS = mlecode1.o mlecode2.o mleusr.o tree_policy.o

LIBRARIES = libscl.a libmle.a

PROGRAMS = mle 

all :  $(LIBRARIES) $(PROGRAMS)

libscl.a :
	make -C $(LSCL)

libmle.a :
	make -C $(LMLE)

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

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

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

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

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

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

