# C-compiler
CC=g++
#CC=CC

# linker
LD=g++
#LD=CC
# libraries
LIBS=-lm
# include
INCS=../SVMTorch
# install
INSTALLDIR=..
BIN=$(INSTALLDIR)/bin
LIBEXEC=$(INSTALLDIR)/libexec


SVNFILEVER="$Id: Makefile 35 2010-09-22 14:41:15Z batmangn@UPHS.PENNHEALTH.PRV $"
SVNFILEVER:=$(patsubst d:,,$(SVNFILEVER))	# clean up the $Id:
SVNFILEVER:=$(patsubst $,,$(SVNFILEVER)) 	# and $ chars
SVNFILEVER:=$(strip $(SVNFILEVER))		# strip whitespace

# Get the SVN global project revision number
SVN_REV=$(shell test -d .svn && svnversion .)
BADCHARS=$(findstring :,$(SVNVERSION))$(findstring S,$(SVNVERSION))
ifeq ($(BADCHARS),)
        ifneq ($(SVNVERSION),)
		ifneq ($(SVNVERSION),exported)
			VERSION=Built from revision $(patsubst M,,$(SVNVERSION))
		endif
	endif
endif

RELEASE_ID="0.2.0"

CFLAGS := -Wall -DSVN_REV=\"$(SVN_REV)\" -DRELEASE_ID=\"$(RELEASE_ID)\"



all:	COMPARE_extract COMPARE_check_input COMPARE_average_score COMPARE_build COMPARE_build_loo COMPARE_build_check COMPARE_SVM_discriminate COMPARE_map_svm_diff_to_region COMPARE_float_sum COMPARE_float_sum_m COMPARE_model COMPARE_score_mean COMPARE_score_sum Compare Compare_test

clean:
	rm -f *.o 
	rm -f COMPARE_extract
	rm -f COMPARE_check_input
	rm -f COMPARE_average_score
	rm -f COMPARE_build
	rm -f COMPARE_build_loo
	rm -f COMPARE_build_check
	rm -f COMPARE_SVM_discriminate
	rm -f COMPARE_map_svm_diff_to_region
	rm -f COMPARE_float_sum
	rm -f COMPARE_float_sum_m
	rm -f COMPARE_model
	rm -f COMPARE_score_mean
	rm -f COMPARE_score_sum
	rm -f ../script/Compare
	rm -f ../script/Compare_test

install:
	-if test ! -d $(BIN) ; then \
	    mkdir $(BIN); \
   	fi
	-if test ! -d $(LIBEXEC) ; then \
	    mkdir $(LIBEXEC); \
   	fi

	@for executable in COMPARE_extract COMPARE_check_input COMPARE_average_score COMPARE_build COMPARE_build_loo COMPARE_build_check COMPARE_SVM_discriminate COMPARE_map_svm_diff_to_region COMPARE_float_sum COMPARE_float_sum_m COMPARE_model COMPARE_score_mean COMPARE_score_sum ; do \
		install -v -s $$executable $(LIBEXEC) ; \
	done

	cp ../script/Compare_test ${BIN}
	cp ../script/Compare ${BIN}


uninstall:
	rm ${LIBEXEC}/COMPARE_extract 
	rm ${LIBEXEC}/COMPARE_check_input 
	rm ${LIBEXEC}/COMPARE_average_score 
	rm ${LIBEXEC}/COMPARE_build
	rm ${LIBEXEC}/COMPARE_build_loo 
	rm ${LIBEXEC}/COMPARE_build_check
	rm ${LIBEXEC}/COMPARE_SVM_discriminate 
	rm ${LIBEXEC}/COMPARE_map_svm_diff_to_region
	rm ${LIBEXEC}/COMPARE_float_sum
	rm ${LIBEXEC}/COMPARE_float_sum_m
	rm ${LIBEXEC}/COMPARE_model 
	rm ${LIBEXEC}/COMPARE_score_sum
	rm ${LIBEXEC}/COMPARE_score_mean
	rm ${BIN}/Compare_test 
	rm ${BIN}/Compare 	
help:   
	@echo
	@echo " COMPARE software"
	@echo
	@echo " (c) SBIA, University of Pennsylvania"
	@echo
	@echo " usage: make all | install | clean | uninstall | test"
	@echo
	@echo "    all                 builds all [Default]"
	@echo "    clean               removes object files"
	@echo "    install             creates bin folder and copies programs"
	@echo "                        use INSTALLDIR='/my/path' to choose installation target"
	@echo "    uninstall           removes programs in bin folder"
	@echo "    test                carries out a test run in demo folder"
	@echo
	@echo "$(SVNFILEVER)"

test:
ifeq ($(INSTALLDIR),..)
	(cd ../demo/comp/; ../../bin/Compare ../list/test_sub.lst bbl_test_rate.txt -m bbl_test.mdl; ../../bin/Compare_test bbl_test.mdl ../list/test_sub.lst test_result.txt; cd ../; ./test.pl --precomputed comp/test1/bbl_test_rate.txt --input comp/bbl_test_rate.txt; ./test.pl --precomputed comp/test1/test_result.txt --input comp/test_result.txt)
else
	(cd ../demo/comp/; $(INSTALLDIR)/bin/Compare ../list/test_sub.lst bbl_test_rate.txt -m bbl_test.mdl; $(INSTALLDIR)/bin/Compare_test bbl_test.mdl ../list/test_sub.lst test_result.txt; cd ../; ./test.pl --precomputed comp/test1/bbl_test_rate.txt --input comp/bbl_test_rate.txt; ./test.pl --precomputed comp/test1/test_result.txt --input comp/test_result.txt)
endif


FeatureExtraction.o: FeatureExtraction.h FeatureExtraction.cc
	$(CC) ${CFLAGS} -c  FeatureExtraction.cc -o FeatureExtraction.o

watershed.o: watershed.h watershed.cc queue.h queue.cc
	$(CC) ${CFLAGS} -c  watershed.cc -o watershed.o

queue.o: queue.h queue.cc
	$(CC) ${CFLAGS} -c  queue.cc -o queue.o

nrutil_compare.o: nrutil_compare.h nrutil_compare.cc
	$(CC) ${CFLAGS} -c  nrutil_compare.cc -o nrutil_compare.o

COMPARE_extract.o: COMPARE_extract.cc
	$(CC) ${CFLAGS} -c  COMPARE_extract.cc -o COMPARE_extract.o

COMPARE_check_input.o: COMPARE_check_input.cc
	$(CC) ${CFLAGS} -c  COMPARE_check_input.cc -o COMPARE_check_input.o

COMPARE_average_score.o: COMPARE_average_score.cc
	$(CC) ${CFLAGS} -c  COMPARE_average_score.cc -o COMPARE_average_score.o

COMPARE_extract: COMPARE_extract.o FeatureExtraction.o watershed.o queue.o nrutil_compare.o
	$(LD)  -o COMPARE_extract COMPARE_extract.o FeatureExtraction.o watershed.o queue.o nrutil_compare.o

COMPARE_check_input: COMPARE_check_input.o nrutil_compare.o
	$(LD)  -o COMPARE_check_input  COMPARE_check_input.o nrutil_compare.o

COMPARE_average_score: COMPARE_average_score.o nrutil_compare.o
	$(LD)  -o COMPARE_average_score COMPARE_average_score.o nrutil_compare.o

COMPARE_SVM_rfe.o: COMPARE_SVM_rfe.h COMPARE_SVM_rfe.cc
	$(CC) ${CFLAGS} -c COMPARE_SVM_rfe.cc -o COMPARE_SVM_rfe.o -I ${INCS}

COMPARE_build.o: COMPARE_build.cc
	$(CC) ${CFLAGS} -c COMPARE_build.cc -o COMPARE_build.o -I ${INCS}

COMPARE_build: COMPARE_build.o COMPARE_SVM_rfe.o nrutil_compare.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/general.o ${INCS}/UserKernel.o 
	$(LD) -o COMPARE_build COMPARE_build.o nrutil_compare.o COMPARE_SVM_rfe.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/general.o ${INCS}/UserKernel.o

COMPARE_build_loo.o: COMPARE_build_loo.cc
	$(CC) ${CFLAGS} -c COMPARE_build_loo.cc -o COMPARE_build_loo.o -I ${INCS}

COMPARE_build_loo: COMPARE_build_loo.o COMPARE_SVM_rfe.o nrutil_compare.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/general.o ${INCS}/UserKernel.o 
	$(LD) -o COMPARE_build_loo COMPARE_build_loo.o nrutil_compare.o COMPARE_SVM_rfe.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/general.o ${INCS}/UserKernel.o

COMPARE_build_check.o: COMPARE_build_check.cc
	$(CC) ${CFLAGS} -c COMPARE_build_check.cc -o COMPARE_build_check.o

COMPARE_build_check: COMPARE_build_check.o 
	$(LD) -o COMPARE_build_check COMPARE_build_check.o 

COMPARE_SVM_discriminate.o: COMPARE_SVM_discriminate.cc
	$(CC) ${CFLAGS} -c COMPARE_SVM_discriminate.cc -o COMPARE_SVM_discriminate.o -I ${INCS}

COMPARE_SVM_discriminate: COMPARE_SVM_discriminate.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/IOTorch.o ${INCS}/general.o ${INCS}/UserKernel.o
	$(LD) -o COMPARE_SVM_discriminate COMPARE_SVM_discriminate.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/IOTorch.o ${INCS}/general.o ${INCS}/UserKernel.o

COMPARE_map_svm_diff_to_region.o: COMPARE_map_svm_diff_to_region.cc
	$(CC) ${CFLAGS} -c COMPARE_map_svm_diff_to_region.cc -o COMPARE_map_svm_diff_to_region.o

COMPARE_map_svm_diff_to_region: COMPARE_map_svm_diff_to_region.o nrutil_compare.o
	$(LD) -o COMPARE_map_svm_diff_to_region COMPARE_map_svm_diff_to_region.o nrutil_compare.o

COMPARE_float_sum.o: COMPARE_float_sum.cc nrutil_compare.cc
	$(CC) ${CFLAGS} -c COMPARE_float_sum.cc -o COMPARE_float_sum.o

COMPARE_float_sum: COMPARE_float_sum.o nrutil_compare.o
	$(LD) -o COMPARE_float_sum COMPARE_float_sum.o nrutil_compare.o

COMPARE_float_sum_m.o: COMPARE_float_sum_m.cc nrutil_compare.cc
	$(CC) ${CFLAGS} -c COMPARE_float_sum_m.cc -o COMPARE_float_sum_m.o

COMPARE_float_sum_m: COMPARE_float_sum_m.o nrutil_compare.o
	$(LD) -o COMPARE_float_sum_m COMPARE_float_sum_m.o nrutil_compare.o

FeatureExtraction_model.o: FeatureExtraction_model.h FeatureExtraction_model.cc
	$(CC) ${CFLAGS} -c FeatureExtraction_model.cc -o FeatureExtraction_model.o  -I ${INCS}

COMPARE_model.o: COMPARE_model.cc
	$(CC) ${CFLAGS} -c COMPARE_model.cc -o COMPARE_model.o -I ${INCS}

COMPARE_model: COMPARE_model.o FeatureExtraction_model.o nrutil_compare.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/general.o ${INCS}/UserKernel.o
	$(LD) -o COMPARE_model COMPARE_model.o FeatureExtraction_model.o nrutil_compare.o ${INCS}/SVM.o ${INCS}/StandardSVM.o ${INCS}/Cache.o ${INCS}/Kernel.o ${INCS}/general.o ${INCS}/UserKernel.o

COMPARE_score_sum.o: COMPARE_score_sum.cc
	$(CC) ${CFLAGS} -c COMPARE_score_sum.cc -o COMPARE_score_sum.o

COMPARE_score_sum: COMPARE_score_sum.o 
	$(LD) -o COMPARE_score_sum COMPARE_score_sum.o

COMPARE_score_mean.o: COMPARE_score_mean.cc
	$(CC) ${CFLAGS} -c COMPARE_score_mean.cc -o COMPARE_score_mean.o

COMAPRE_score_mean: COMPARE_score_mean.o
	$(LD) -o COMPARE_score_mean COMPARE_score_mean.o

Compare: ../script/Compare.sh
	sed -e "s/^SVN_REV=.*/SVN_REV=$(SVN_REV)/" -e "s/^RELEASE_ID=.*/RELEASE_ID=$(RELEASE_ID)/" ../script/Compare.sh > ../script/Compare
	chmod +x ../script/Compare

Compare_test: ../script/Compare_test.sh
	sed -e "s/^SVN_REV=.*/SVN_REV=$(SVN_REV)/" -e "s/^RELEASE_ID=.*/RELEASE_ID=$(RELEASE_ID)/" ../script/Compare_test.sh > ../script/Compare_test
	chmod +x ../script/Compare_test
