# Pafee makefile Sample
CXX=g++
MV=/bin/mv -f
RM=/bin/rm -f

STD =/usr/include
CON = ${HOME}/pafee/src/common
COL = ${HOME}/pafee/src/collection
STR = ${HOME}/pafee/src/string
UTL = ${HOME}/pafee/src/utility
MEM = ${HOME}/pafee/src/memory
EXC = ${HOME}/pafee/src/exception
DEV = ${HOME}/pafee/src/device
CLI = ${HOME}/pafee/src/clib
EXE = ${HOME}/pafee/test/bin
OBJ = ${HOME}/pafee/test/obj
LOBJ= ${HOME}/pafee/obj
INC_PAFEE = -I${STD} -I${CON} -I${COL} -I${STR} -I${UTL} -I${MEM} -I${EXC} -I${DEV} -I${CLI}
CFLAGS  = -frepo -Wall -O0 -D_GNU_SOURCE -DPAFEE_STATISTICS_ENABLE -DPAFEE_UNITTEST ${INC_PAFEE}
LDFLAGS = -lstdc++

COLLCS1 = Pafee_List_ut   Pafee_Queue_ut     Pafee_Stack_ut       Pafee_PriorityQueue_ut Pafee_Stack_ut
COLLCS2 = Pafee_Map_ut    Pafee_MultiMap_ut  Pafee_RingBuffer_ut
TMPLTS1 = Pafee_ListT_ut  Pafee_QueueT_ut    Pafee_StackT_ut      Pafee_PriorityQueueT_ut Pafee_StackT_ut
TMPLTS2 = Pafee_MapT_ut   Pafee_MultiMapT_ut Pafee_RingBufferT_ut
UTILITS = Pafee_Crc_ut    Pafee_File_ut      Pafee_Log_ut 
STRINGS = Pafee_String_ut Pafee_Tokenizer_ut
EXES = ${COLLCS1} ${COLLCS2} ${TMPLTS1} ${TMPLTS2} ${UTILITS} ${STRINGS}

all : ${EXES}

#COLLECTIONS
Pafee_List_ut : Pafee_List_ut.o PafeeList.o
	${CXX} -o $@ $(<F) ${LDFLAGS} PafeeList.o

Pafee_Queue_ut : Pafee_Queue_ut.o PafeeQueue.o PafeeList.o PafeeString.o
	${CXX} -o $@ $(<F) PafeeQueue.o  PafeeList.o PafeeString.o ${LDFLAGS}

Pafee_PriorityQueue_ut : Pafee_PriorityQueue_ut.o PafeePriorityQueue.o PafeeList.o PafeeString.o
	${CXX} -o $@ $(<F) PafeePriorityQueue.o PafeeList.o PafeeString.o ${LDFLAGS} 

Pafee_Stack_ut : Pafee_Stack_ut.o PafeeStack.o PafeeList.o
	${CXX} -o $@ $(<F) PafeeStack.o PafeeList.o ${LDFLAGS}

Pafee_Map_ut : Pafee_Map_ut.o PafeeMap.o PafeeList.o PafeeString.o
	${CXX} -o $@ $(<F) PafeeMap.o PafeeList.o PafeeString.o ${LDFLAGS}

Pafee_MultiMap_ut : Pafee_MultiMap_ut.o PafeeMultiMap.o PafeeList.o PafeeString.o
	${CXX} -o $@ $(<F) PafeeMultiMap.o PafeeList.o PafeeString.o ${LDFLAGS}

Pafee_RingBuffer_ut : Pafee_RingBuffer_ut.o PafeeRingBuffer.o PafeeString.o
	${CXX} -o $@ $(<F) PafeeRingBuffer.o  PafeeString.o ${LDFLAGS}

#TEMPLATES
Pafee_ListT_ut : Pafee_ListT_ut.o
	${CXX} -o $@ $(<F) ${LDFLAGS}

Pafee_QueueT_ut : Pafee_QueueT_ut.o PafeeString.o
	${CXX} -o $@ $(<F) PafeeString.o ${LDFLAGS}

Pafee_PriorityQueueT_ut : Pafee_PriorityQueueT_ut.o PafeeString.o
	${CXX} -o $@ $(<F) PafeeString.o ${LDFLAGS}

Pafee_StackT_ut : Pafee_StackT_ut.o
	${CXX} -o $@ $(<F) ${LDFLAGS}

Pafee_MapT_ut : Pafee_MapT_ut.o PafeeList.o PafeeString.o
	${CXX} -o $@ $(<F) ${LDFLAGS} PafeeList.o PafeeString.o

Pafee_MultiMapT_ut : Pafee_MultiMapT_ut.o PafeeList.o PafeeString.o
	${CXX} -o $@ $(<F) ${LDFLAGS} PafeeList.o PafeeString.o

Pafee_RingBufferT_ut : Pafee_RingBufferT_ut.o PafeeString.o
	${CXX} -o $@ $(<F) ${LDFLAGS} PafeeString.o

#STRINGS
Pafee_String_ut : Pafee_String_ut.o PafeeString.o
	${CXX} -o $@ $(<F) ${LDFLAGS} PafeeString.o

Pafee_Tokenizer_ut : Pafee_Tokenizer_ut.o PafeeTokenizer.o
	${CXX} -o $@ $(<F) ${LDFLAGS} PafeeTokenizer.o

#UTILITIES
Pafee_Crc_ut : Pafee_Crc_ut.o PafeeCrc.o
	${CXX} -o $@ $(<F) PafeeCrc.o ${LDFLAGS}

Pafee_File_ut : Pafee_File_ut.o PafeeFile.o
	${CXX} -o $@ $(<F) PafeeFile.o ${LDFLAGS}

Pafee_Log_ut : Pafee_Log_ut.o PafeeLog.o PafeeStdStreamOutput.o 
	${CXX} -o $@ $(<F) PafeeLog.o PafeeStdStreamOutput.o ${LDFLAGS}

%.o : %.cpp %.h
	${CXX} -c ${CFLAGS} $(<F)

%_ut.o : %_ut.cpp
	${CXX} -c ${CFLAGS} $(<F)

%.o : ${STR}/%.cpp ${STR}/%.h
	${CXX} -c ${CFLAGS} ${STR}/$(<F)

%.o : ${COL}/%.cpp ${COL}/%.h
	${CXX} -c ${CFLAGS} ${COL}/$(<F)

%.o : ${UTL}/%.cpp ${UTL}/%.h
	${CXX} -c ${CFLAGS} ${UTL}/$(<F)

%.o : ${DEV}/%.cpp ${DEV}/%.h
	${CXX} -c ${CFLAGS} ${DEV}/$(<F)

clean :
	${RM} *.o
	${RM} *.rpo
	${RM} *.exe
