#Makefile for downloading and building all of the native libraries to support WFDB;
#WFDB will be build on the current directory under the tmp subfolder

#This Makefile will build the following packages:
# curl 
# wfdb (with curl dependency)
# edr  (with wfdb dependency)
#
# The file will fetch the required files from their resepective sources and comp
# and compile everything accordingly. It may be necessary to run this file as 
# with root priveleges.

#Package names and versions
CURL=curl-7.33.0
WFDB="wfdb-10.5.21"
ECGPUWAVE=ecgpuwave-1.3.2


#TODO: Make OS dependent
INSTALL_DIR:=$(shell pwd)
BUILD_DIR=build

clean: clean-wfdb clean-curl clean-edr clean-ecgpuwave
	rm -rf ./tmp; \
	rm -rf ./$(BUILD_DIR)
tmp:
	mkdir -p ./tmp/
build: tmp
	rm -rf ./$(BUILD_DIR)/; \
	mkdir ./$(BUILD_DIR);

##CURL TARGET
#TODO: Remove from build dir ??
clean-curl: 
	rm -rf ./tmp/$(CURL); \
	rm -f ./curl.isconfig; \
	rm -f ./curl.isbuilt; \
	rm -f curl.tar.gz
curl.tar.gz:
	wget http://curl.haxx.se/download/$(CURL).tar.gz; \
	mv $(CURL).tar.gz curl.tar.gz; \
	cp ./curl.tar.gz ./tmp/;
curl.isconfig: curl.tar.gz
	cd ./tmp/; \
	tar xfvz curl.tar.gz; \
	cd $(CURL); \
	./configure --prefix=$(INSTALL_DIR)/$(BUILD_DIR) --without-ssl --without-zlib --without-libssh2 --disable-ldap; \
	touch ../../curl.isconfig
curl.isbuilt: curl.isconfig
	cd ./tmp/$(CURL); \
	make ;\
	make install \
	&& touch ../../curl.isbuilt;
curl: curl.isbuilt

##WFDB TARGET
#TODO: remove for build directory as well??
clean-wfdb: 
	rm -rf ./tmp/$(WFDB)
	rm -f ./wfdb.isconfig; \
	rm -f ./wfdb.isbuilt; \
	rm -f wfdb.tar.gz
wfdb.tar.gz:
	wget http://www.physionet.org/physiotools/wfdb.tar.gz; \
	cp ./wfdb.tar.gz ./tmp/wfdb.tar.gz;
wfdb.isconfig: wfdb.tar.gz
	cd ./tmp; \
	tar xvfz wfdb.tar.gz; \
	cd $(WFDB); \
	./configure --prefix=$(INSTALL_DIR)/$(BUILD_DIR) --with-libcurl \
	&& touch ../../wfdb.isconfig
wfdb.isbuilt: PATH:=$(PATH):$(INSTALL_DIR)/$(BUILD_DIR)/bin
wfdb.isbuilt: curl.isbuilt wfdb.isconfig
	cd ./tmp/;\
	export LIBRARY_PATH=$(INSTALL_DIR)/$(BUILD_DIR)/lib ;\
	cd ./$(WFDB)/ ;\
	export PATH; \
	export C_INCLUDE_PATH=$C_INCLUDE_PATH:$(INSTALL_DIR)/$(BUILD_DIR)/include; \
	make install \
	&& touch ../../wfdb.isbuilt
wfdb: wfdb.isbuilt

##EDR TARGET
#TODO: clean build folder as well??
clean-edr:
	rm -f edr*; \
	rm -f ./$(BUILD_DIR)/edr;
edr: LC:=$(shell $(INSTALL_DIR)/$(BUILD_DIR)/bin/curl-config --cflags)
edr: LL=$(INSTALL_DIR)/$(BUILD_DIR)
edr: edr.c wfdb.isbuilt
	mkdir -p $(LL)/include/wfdb ;\
	cp -r $(INSTALL_DIR)/tmp/$(WFDB)/lib/*.h* $(LL)/include/wfdb/; \
	cp -r $(INSTALL_DIR)/tmp/$(WFDB)/lib/*.dll $(LL)/lib/wfdb.dll; \
	gcc $(LC)/curl -I$(LL)/include/ -o edr -O edr.c -L$(LL)/lib -L$(LL)/lib64 -lm -lwfdb -lcurl
	cp edr ./$(BUILD_DIR)/bin;
edr.c:
	wget http://www.physionet.org/physiotools/edr/edr.c


#MULTISCALE ENTROPY TARGET
clean-mse:
	rm -f mse*; \
	rm -f ./$(BUILD_DIR)/mse;
mse: mse.c
	gcc -o mse -O mse.c -lm
	cp mse ./$(BUILD_DIR)/bin;
mse.c:
	wget http://www.physionet.org/physiotools/mse/mse.c
	
	
#ECGPU Wave Target
clean-ecgpuwave: 
	rm -rf ./tmp/$(WFDB)
	rm -f ./ecgpuwave.isconfig; \
	rm -f ./ecgpuwave.isbuilt; \
	rm -f ecgpuwave.tar.gz
ecgpuwave.tar.gz:
	wget http://www.physionet.org/physiotools/ecgpuwave/src/$(ECGPUWAVE).tar.gz ;\
	mv $(ECGPUWAVE).tar.gz ecgpuwave.tar.gz
	cp ecgpuwave.tar.gz ./tmp/ecgpuwave.tar.gz;
	cd ./tmp; \
	tar xvfz ecgpuwave.tar.gz
ecgpuwave-gfortran-addon.zip: ecgpuwave.tar.gz
	wget http://wfdb-app-toolbox.googlecode.com/svn/trunk/dependencies/ecgpuwave-gfortran-addon.zip ;\
	cp ecgpuwave-gfortran-addon.zip ./tmp/ecgpuwave-gfortran-addon.zip ;\
	cd ./tmp; \
	unzip ecgpuwave-gfortran-addon.zip ;\
	cp -rvs ./*.f ./$(ECGPUWAVE)/	
ecgpuwave.isbuilt: C_INCLUDE_PATH:=$(INSTALL_DIR)/$(BUILD_DIR)/include
ecgpuwave.isbuilt: LIBRARY_PATH:=$(INSTALL_DIR)/$(BUILD_DIR)/lib 
ecgpuwave.isbuilt: ecgpuwave-gfortran-addon.zip
	cd ./tmp/$(ECGPUWAVE);\
	export LIBRARY_PATH ;\
	export C_INCLUDE_PATH;\
	make \
	&& touch ../../ecgpuwave.isbuilt ;\
	cp -v ecgpuwave.exe $(INSTALL_DIR)/$(BUILD_DIR)/bin;\
	cp -v /bin/libgcc_s_dw2-1.dll $(INSTALL_DIR)/$(BUILD_DIR)/liba;\
	cp -v /bin/libgfortran-3.dll $(INSTALL_DIR)/$(BUILD_DIR)/lib;\
	cp -v /bin/libquadmath-0.dll $(INSTALL_DIR)/$(BUILD_DIR)/lib;\
ecgpuwave: wfdb.isbuilt ecgpuwave.isbuilt

all: tmp build curl wfdb edr

checkin:
	rm -fv $(INSTALL_DIR)/$(BUILD_DIR)/bin/hr* ;\
	rm -fv $(INSTALL_DIR)/$(BUILD_DIR)/bin/pschart ;\
	rm -fv $(INSTALL_DIR)/$(BUILD_DIR)/bin/psdf ;\
	rm -rfv $(INSTALL_DIR)/$(BUILD_DIR)/lib/pkgconfig/libcurl.pc ;\