CXX      = g++
SDIR     = .
DCFSRC   = ../dcfsrc
ISCL     = ../lib/libscl/gpp
LSCL     = ../lib/libscl/gpp
CXXFLAGS = -O2 -Wall -c -I$(SDIR) -I$(DCFSRC) -I$(ISCL)
LDFLAGS  = -lm -L$(LSCL) -lscl             

HEADERS  = $(DCFSRC)/lpeqns.h $(DCFSRC)/lpeqns.h \
	   $(DCFSRC)/lprior.h $(DCFSRC)/slpeqns.h $(DCFSRC)/var1EXX.h
OBJECTS  = lprior.o var1EXX.o

PROGRAMS = var array_moments var_grid var1EXXdebug var_sim_2d var_sim_3d

LIBRARIES = libscl.a 

all: $(LIBRARIES) $(PROGRAMS)

libscl.a :
	make -C $(LSCL)

var : var.o $(OBJECTS)
	$(CXX) -o var var.o $(OBJECTS) $(LDFLAGS) 

var.o : $(SDIR)/var.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SDIR)/var.cpp

var_grid : var_grid.o $(OBJECTS)
	$(CXX) -o var_grid var_grid.o $(OBJECTS) $(LDFLAGS) 

var_grid.o : $(SDIR)/var_grid.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SDIR)/var_grid.cpp

var_sim_2d : var_sim_2d.o $(OBJECTS)
	$(CXX) -o var_sim_2d var_sim_2d.o $(OBJECTS) $(LDFLAGS) 

var_sim_2d.o : $(SDIR)/var_sim_2d.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SDIR)/var_sim_2d.cpp

var_sim_3d : var_sim_3d.o $(OBJECTS)
	$(CXX) -o var_sim_3d var_sim_3d.o $(OBJECTS) $(LDFLAGS) 

var_sim_3d.o : $(SDIR)/var_sim_3d.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SDIR)/var_sim_3d.cpp

array_moments : array_moments.o $(OBJECTS)
	$(CXX) -o array_moments array_moments.o $(OBJECTS) $(LDFLAGS) 

array_moments.o : $(SDIR)/array_moments.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SDIR)/array_moments.cpp

var1EXXdebug : var1EXXdebug.o $(OBJECTS)
	$(CXX) -o var1EXXdebug var1EXXdebug.o $(OBJECTS) $(LDFLAGS) 

var1EXXdebug.o : $(SDIR)/var1EXXdebug.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(SDIR)/var1EXXdebug.cpp

lprior.o : $(DCFSRC)/lprior.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(DCFSRC)/lprior.cpp

var1EXX.o : $(DCFSRC)/var1EXX.cpp $(HEADERS)
	$(CXX) $(CXXFLAGS) $(DCFSRC)/var1EXX.cpp

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

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

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