#---------------------------------------------------------------------
# Various flags

#Shared variables
INC=-I/user/cvssppg/eep1nd/local/include
LIB=-lm -lpthread -L/usr/X11R6/lib -L/usr/X11R6/lib64 -L/usr/lib/NX/lib/ -lX11 
#-Wall -ansi -pedantic -ffast-math

#Matlab variables
MPATH=/opt/MWmatlab/R2006a
GPP=g++
#MPATH=/opt/matlab7
#GPP=g++-3.3

MINC=-I$(MPATH)/extern/include -I$(MPATH)/simulink/include
MFLAG=-DMATLAB_MEX_FILE -fPIC -ansi -D_GNU_SOURCE -pthread -fexceptions -DNDEBUG
M1=-pthread -shared -m32 -Wl,--version-script,$(MPATH)/extern/lib/glnx86/mexFunction.map
M2=-Wl,-rpath-link,$(MPATH)/bin/glnx86 -L$(MPATH)/bin/glnx86 -lmx -lmex -lmat -lm

MCOMPILE=-c $(MINC) $(MFLAG) $(INC) -O2
MLINK=$(M1) $(M2) $(LIB) -O2

#---------------------------------------------------------------------
# Main interface
all: wartr.mexglx warts.mexglx warthog.mexglx

npw: warthogNPWc
uni: warthogUNIc
srmi: warthogSRMIc

dnpw: debug/warthogNPWc
duni: debug/warthogUNIc
dsrmi: debug/warthogSRMIc

tst: warthogt wartst

Warthog.tgz: wartr.mexglx warthog.mexglx warts.mexglx
	cp demos.m wartMigration.m warts.m wartr.m warthog.m *.mexglx Warthog
	tar -cf Warthog.tgz -z Warthog

#---------------------------------------------------------------------
# Matlab bins

wartr.mexglx: wartr.cc CWarp.o imgOp.o mexversion.o AddTri.o
	$(GPP) $(MCOMPILE) wartr.cc
	$(GPP) $(MLINK) -o wartr.mexglx wartr.o CWarp.o imgOp.o AddTri.o mexversion.o
	rm wartr.o

warthog.mexglx: warthog.cc CWarp.o imgOp.o opt.o mexversion.o AddTri.o warthogx.o
	$(GPP) $(MCOMPILE) warthog.cc
	$(GPP) $(MLINK) -o warthog.mexglx warthog.o warthogx.o CWarp.o imgOp.o opt.o AddTri.o mexversion.o
	rm warthog.o

warts.mexglx: warts.cc CWarp.o imgOp.o mexversion.o AddTri.o wartx.o
	$(GPP) $(MCOMPILE) warts.cc
	$(GPP) $(MLINK) -o warts.mexglx warts.o wartx.o CWarp.o imgOp.o AddTri.o mexversion.o
	rm warts.o

#---------------------------------------------------------------------
# Command line bins

warthogSRMIc: warthogSRMIc.cc warthogx.o wartx.o CWarp.o imgOp.o opt.o AddTri.o
	g++ warthogSRMIc.cc AddTri.o CWarp.o imgOp.o opt.o wartx.o warthogx.o  $(LIB) $(INC) -O2 -o warthogSRMIc

debug/warthogSRMIc: warthogSRMIc.cc debug/CWarp.o debug/imgOp.o debug/opt.o debug/AddTri.o debug/wartx.o debug/warthogx.o
	g++ warthogSRMIc.cc debug/wartx.o debug/warthogx.o debug/opt.o debug/imgOp.o debug/CWarp.o debug/AddTri.o $(LIB) $(INC) -g -pg -o debug/warthogSRMIc
	cp debug/warthogSRMIc z

warthogNPWc: warthogNPWc.cc warthogx.o wartx.o CWarp.o imgOp.o opt.o AddTri.o
	g++ warthogNPWc.cc AddTri.o CWarp.o imgOp.o opt.o wartx.o warthogx.o  $(LIB) $(INC) -O2 -o warthogNPWc

debug/warthogNPWc: warthogNPWc.cc debug/CWarp.o debug/imgOp.o debug/opt.o debug/AddTri.o debug/wartx.o debug/warthogx.o
	g++ warthogNPWc.cc debug/wartx.o debug/warthogx.o debug/opt.o debug/imgOp.o debug/CWarp.o debug/AddTri.o $(LIB) $(INC) -g -pg -o debug/warthogNPWc
	cp debug/warthogNPWc z

warthogUNIc: warthogUNIc.cc warthogx.o wartx.o CWarp.o imgOp.o opt.o AddTri.o
	g++ warthogUNIc.cc AddTri.o CWarp.o imgOp.o opt.o wartx.o warthogx.o  $(LIB) $(INC) -O2 -o warthogUNIc

debug/warthogUNIc: warthogUNIc.cc debug/CWarp.o debug/imgOp.o debug/opt.o debug/AddTri.o debug/wartx.o debug/warthogx.o
	g++ warthogUNIc.cc debug/wartx.o debug/warthogx.o debug/opt.o debug/imgOp.o debug/CWarp.o debug/AddTri.o $(LIB) $(INC) -g -pg -o debug/warthogUNIc
	cp debug/warthogUNIc z

warthogt: warthogt.cc debug/CWarp.o debug/imgOp.o debug/opt.o debug/AddTri.o
	g++ warthogt.cc debug/opt.o debug/imgOp.o debug/CWarp.o debug/AddTri.o $(LIB) $(INC) -g -pg -o warthogt

wartst: wartst.cc debug/CWarp.o debug/imgOp.o debug/AddTri.o
	g++ wartst.cc debug/imgOp.o debug/CWarp.o debug/AddTri.o $(LIB) $(INC) -g -pg -o wartst 

wartrt: wartrt.cc CWarp.o imgOp.o 
	g++ -o wartrt wartrt.cc imgOp.o CWarp.o -O $(LIB) $(INC)


#---------------------------------------------------------------------
# Object files
wartx.o: wartx.cc wartx.hh opt.hh imgOp.hh CImgE.hh CImgI.hh
	g++ -c wartx.cc $(INC) -O2

debug/wartx.o: wartx.cc wartx.hh opt.hh imgOp.hh CImgE.hh CImgI.hh
	g++ -c wartx.cc $(INC) -g -pg -o debug/wartx.o

warthogx.o: warthogx.cc warthogx.hh opt.hh imgOp.hh CImgE.hh CImgI.hh
	g++ -c warthogx.cc $(INC) -O2

debug/warthogx.o: warthogx.cc warthogx.hh opt.hh imgOp.hh CImgE.hh CImgI.hh
	g++ -c warthogx.cc $(INC) -g -pg -o debug/warthogx.o

opt.o: opt.cc opt.hh CImgE.hh CImgI.hh CImgE.hh CImgI.hh
	g++ -c opt.cc $(INC) -O2

debug/opt.o: opt.cc opt.hh imgOp.hh CImgE.hh CImgI.hh
	g++ -c opt.cc $(INC) -g -pg -o debug/opt.o

imgOp.o: imgOp.cc imgOp.hh C2dBspline.hh CImgE.hh CImgI.hh AddTri.hh
	g++ -c imgOp.cc $(INC) -O2

debug/imgOp.o: imgOp.cc imgOp.hh C2dBspline.hh CImgE.hh CImgI.hh
	g++ -c imgOp.cc $(INC) -g -pg -o debug/imgOp.o

CWarp.o: CWarp.cc CWarp.hh #CImgE.hh CImgI.hh
	g++ -c CWarp.cc $(INC) -O2

debug/CWarp.o: CWarp.cc CWarp.hh #CImgE.hh CImgI.hh
	g++ -c CWarp.cc $(INC) -g -pg -o debug/CWarp.o

#AddPoly.o: AddPoly.cc AddPoly.hh
#	g++ -c AddPoly.cc $(INC) -O2

#debug/AddPoly.o: AddPoly.cc AddPoly.hh
#	g++ -c AddPoly.cc $(INC) -g -pg -o debug/AddPoly.o

AddTri.o: AddTri.cc AddTri.hh
	g++ -c AddTri.cc $(INC) -O2

debug/AddTri.o: AddTri.cc AddTri.hh
	g++ -c AddTri.cc $(INC) -g -pg -o debug/AddTri.o

mexversion.o:
	gcc -c $(MINC) $(MFLAG) -fexceptions -m32 -O $(MPATH)/extern/src/mexversion.c

#---------------------------------------------------------------------
# Cleaning up the object files
clean:
	rm *.o debug/*.o
	rm warthogt wartst wartrt
	rm debug/warthogNPWc warthogNPWc 
	rm warthogUNIc debug/warthogUNIc 
	rm warthogSRMIc debug/warthogSRMIc 
	rm wartr.mexglx warts.mexglx warthog.mexglx 
	rm *~
