#TODO: an GCC anpassen
CXX	 = g++ 

CFLAGS   = -Wall -I/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/rdbms/public/ -L/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/ 


MKDIR	 = mkdir -p

LD	 = $(CXX)

MAKE	 = make

LDFLAGS = -L/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/ -L/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/rdbms/public/ -Wl,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so -Wl,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libocci.so -Wl,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libocci.so.10.1 -Wl,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libnnz10.so -locci -lnnz10 -lclntsh


OBJDIR   = .o

MISCDIR  = .misc

AWK	 = awk

OBJS     	= Logger.o Watch.o PSpeicher.o PTree.o CharNode.o Container_simple.o globals.o DiskPagePool.o SuffixDiskPagePool.o Index.o 

OBJS_ODCI  	= Logger.o Watch.o PSpeicher.o PTree.o CharNode.o Container_simple.o globals.o DiskPagePool.o SuffixDiskPagePool.o Index_join.o Join.o itf_ODCI.o

OBJS_JOIN	= Logger.o Watch.o PSpeicher.o PTree.o CharNode.o Container_simple.o globals.o DiskPagePool.o SuffixDiskPagePool.o Index_join.o Join.o

OBJS_APPXSEARCH =  Logger.o Watch.o PSpeicher.o PTree.o CharNode.o Container_simple.o globals.o DiskPagePool.o SuffixDiskPagePool.o Index_join.o ApproxSearch.o

OBJS_KMJOIN	= Logger.o Watch.o PSpeicher.o PTree.o CharNode.o Container_simple.o globals.o DiskPagePool.o SuffixDiskPagePool.o Index_join.o KMismatch_Join.o

OBJS_ELAJOIN	= Logger.o Watch.o PSpeicher.o PTree.o CharNode.o Container_simple.o globals.o DiskPagePool.o SuffixDiskPagePool.o Index_join.o ELA_Join.o

INCLUDES	= Logger.hpp Watch.h PSpeicher.hpp PTree.hpp CharNode.hpp Container_simple.hpp globals.hpp Index.hpp KollisionException.hpp DiskPagePool.hpp SuffixDiskPagePool.hpp

INDEX_FLAG	= -D MAKEFLAG_INDEX_EXE

JOIN_FLAG	= -D MAKEFLAG_JOIN_EXE


.PHONY: all index join tdp kmjoin elajoin appxsearch odci


all: index join kmjoin appxsearch elajoin odci

tdp: TestDataProducer.cpp
	$(CXX) $(CFLAGS) -c TestDataProducer.cpp -o tdp.out

join: $(OBJS_JOIN)
	$(CXX)  $(OBJS_JOIN) -o join.out $(LDFLAGS)

kmjoin: $(OBJS_KMJOIN)
	$(CXX) $(OBJS_KMJOIN) $(JOIN_FLAG) -o kmjoin.out $(LDFLAGS)

elajoin: $(OBJS_ELAJOIN)
	$(CXX) $(OBJS_ELAJOIN) $(JOIN_FLAG) -o elajoin.out $(LDFLAGS)
	
appxsearch: $(OBJS_APPXSEARCH)
	$(CXX) $(OBJS_APPXSEARCH) -o appxsearch.out $(LDFLAGS)

index : $(OBJS)
	$(CXX) $(OBJS) -o index.out $(LDFLAGS)
	
odci: $(OBJS_ODCI)
	$(CXX) $(OBJS_ODCI) -o CppPTIndexInterface.so $(LDFLAGS);
	

Join.o: Join.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c $(JOIN_FLAG) Join.cpp	

KMismatch_Join.o: KMismatch_Join.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c $(JOIN_FLAG) KMismatch_Join.cpp
		
ELA_Join.o: ELA_Join.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c $(JOIN_FLAG) ELA_Join.cpp
	
ApproxSearch.o : ApproxSearch.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c ApproxSearch.cpp
	
PSpeicher.o: PSpeicher.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c PSpeicher.cpp
	
	
PTree.o: PTree.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c PTree.cpp

CharNode.o: CharNode.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c CharNode.cpp

Container_simple.o: Container_simple.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c Container_simple.cpp

globals.o: globals.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c globals.cpp

Index_join.o: Index.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c Index.cpp -o Index_join.o

Index.o: Index.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c $(INDEX_FLAG) Index.cpp
	
DiskPagePool.o: DiskPagePool.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c DiskPagePool.cpp

SuffixDiskPagePool.o: SuffixDiskPagePool.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c SuffixDiskPagePool.cpp

Watch.o: Watch.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c Watch.cpp
	
itf_ODCI.o: CppPTIndexInterface.c
	$(CXX) $(CFLAGS) $(DEBUG) $(OPTIMIZE) -c CppPTIndexInterface.c -o itf_ODCI.o

Logger.o: Logger.cpp $(INCLUDES)
	$(CXX) $(CFLAGS) -c Logger.cpp

clean:
	@rm -rf *~ core *.out *.stackdump *.o *.sbr *.o *.exp *.lib *.dll
