#
# Define the paths of the following libs.
#
export CLIENT_SDK_ARCHIVE=EXASolution_SDK-23.0.0-Linux_x86_64.tar.gz

#
# Set here the location of latest tpch archive (containing dbgen and qgen) found at the tpc.org site
#
export TPCH_DBQGEN_ARCHIVE = tpch_archives/TPC-H_Tools_v3.0.0.zip

#
# Usually you don't need to change anything below.
#
export PATH=/bin:/usr/bin
export CXXFLAGS = -O3 -g2 -Wall -Werror -Wno-error=unused-result 
export CPPFLAGS = -I.
unexport LD_LIBRARY_PATH LD_RUN_PATH

# 
# Needed for qgen to generate the validation.sql
#
export MAKE_DIR = $(PWD)
export DSS_CONFIG = $(MAKE_DIR)/dbqgen
export SDKLIBDIR = $(MAKE_DIR)/ClientSDK

#
# Targets
#
all: tools query_streams tpch sql acid_transactions

#
# 'make tar' or 'make install' to create TPCH.tgz
#
tar: clean all
	touch TPCH.tgz
	tar czvf TPCH.tgz --exclude "*~" --exclude "*.kdevelop" --exclude "*.kdevses" --exclude ".svn" --exclude ".bzr" --exclude "TPCH.tgz" .
zip: clean
	zip EXASOL-TPCH-Kit.zip -r . -x \*.bzr\* -x \*.zip -x \*.bak -x \*.old -x livets\*
# archive is what you need to deploy initially, when you can't clone the git repo
archive: clean
	tar czvf Exasol-TPCH-Kit.tgz --transform='s,^,TPCH/,' ACID $(CLIENT_SDK_ARCHIVE) Makefile README.md run_all.sh scripts sql tpch_archives

install: tar

clean:
	$(MAKE) -C scripts/tools clean
	$(MAKE) -C scripts/query_streams clean
	$(MAKE) -C ACID/scripts/transaction clean
	$(MAKE) -C ACID/scripts/transaction_isolation clean
	$(MAKE) -C ACID/scripts/transaction_atomicity clean
	rm -fR $(SDKLIBDIR)
	rm -fR dbqgen	
	rm -f $(TPCH_DBQGEN_ARCHIVE).patch.new
	rm -f TPCH.tgz
	rm -f EXASOL-TPCH-Kit.zip
	rm -f Exasol-TPCH-Kit.tgz
	rm -f sql/validation.sql
	find . -name "*~"|xargs rm -f
	
tools:
	$(MAKE) -C scripts/tools	

sdk:
	if ! [ -d $(SDKLIBDIR) ]; then \
		mkdir -p $(SDKLIBDIR); \
		tar zxvf $(CLIENT_SDK_ARCHIVE) -C $(SDKLIBDIR); \
		 mv $(SDKLIBDIR)/*/* $(SDKLIBDIR)/; \
	fi

query_streams: sdk
	$(MAKE) -C scripts/query_streams

acid_transactions:
	$(MAKE) -C ACID/scripts/transaction
	$(MAKE) -C ACID/scripts/transaction_isolation
	$(MAKE) -C ACID/scripts/transaction_atomicity
	
tpch: tpch_src tpch_patch
	$(MAKE) -C dbqgen/ -f makefile.suite
	
tpch_src:
	if ! [ -d dbqgen ]; then \
		rm -fr dbqgen; \
		mkdir dbqgen; \
		unzip $(TPCH_DBQGEN_ARCHIVE) -d dbqgen; \
		rm -fR dbqgen/__MACOSX; \
		mv dbqgen/*/* dbqgen/; \
		mv dbqgen/dbgen/* dbqgen; \
		rm -fR dbqgen/dbgen; \
	fi

tpch_patch:
	if ! [ -f dbqgen/patched~ ]; then \
		patch -p0 < $(TPCH_DBQGEN_ARCHIVE).patch; \
		touch dbqgen/patched~; \
	fi
	    

sql: tpch
	cd $(DSS_CONFIG)/queries && $(DSS_CONFIG)/qgen -s 1 -c -i $(MAKE_DIR)/sql/initstream.sql -d > $(MAKE_DIR)/sql/validation.sql && cd $(MAKE_DIR)
	dos2unix sql/validation.sql

patch: make_patch_prepare tpch_src make_patch

make_patch_prepare:
	$(MAKE) -C dbqgen/ -f makefile.suite clean
	find dbqgen/ -name '*~' -execdir rm {} \;
	mv dbqgen dbqgen.new
	
make_patch:
	rm -fr dbqgen.ori
	mv dbqgen dbqgen.ori
	mv dbqgen.new dbqgen
	! diff   -urN dbqgen.ori dbqgen > $(TPCH_DBQGEN_ARCHIVE).patch.new
	rm -fr dbqgen.ori
	
refset1: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 1

refset100: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 100

refset300: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 300
	
refset1000: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 1000
	
refset3000: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 3000
	
refset10000: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 10000

refset30000: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 30000
	
refset100000: tpch
	bash $(PWD)/scripts/misc/generate_refset.sh 100000
	
