############            Makefile.in            ############
include ../../Makefile.in

############            files            ############
########        list of source files        ########
HELPERS_SRC=Message.cc ExtVectorTool.cc VectorArrayConv.cc MatrixUtil.cc VectorGSLVectorConv.cc VectorComplexTool.cc

########        list of header files        ########
HELPERS_HDS=${HELPERS_SRC:.cc=.hh}
HEADERS= ${HELPERS_HDS}

########        list of object files        ########
LIB_OBJ=${HELPERS_SRC:.cc=.o}

########        library        ########
####    stem && library file    ####
STEM=Helpers
SHARED_LIB=lib${STEM}.so
STATIC_LIB=lib${STEM}.a

############            compiler options            ############
LDFLAGS += -L${LOCAL_LIB_DIR}
HELPERS_LIB=-l${STEM}

############            targets            ############
//lib : ${SHARED_LIB} ${STATIC_LIB}
lib : ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}

########        c++ library        ########
${LOCAL_LIB_DIR}/${SHARED_LIB} : ${SHARED_LIB}
	${MV} $^ $@

${LOCAL_LIB_DIR}/${STATIC_LIB} : ${STATIC_LIB}
	${MV} $^ $@

${SHARED_LIB} : ${LIB_OBJ}
	${CXX} -shared -o $@ $^ ${LDFLAGS} ${MANYO_LIB}

${STATIC_LIB} : ${LIB_OBJ}
	${AR} ${AR_FLAGS} $@ $^
	${RANLIB} ${RANLIB_FLAGS} $@

########        object files       ########
Message.o : Message.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

ExtVectorTool.o : ExtVectorTool.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

VectorArrayConv.o : VectorArrayConv.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

VectorComplexTool.o : VectorComplexTool.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

MatrixUtil.o : MatrixUtil.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

VectorGSLVectorConv.o : VectorGSLVectorConv.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

############            cleaning            ############
clean:
	${RM} ${RM_FLAGS} *.o
	${RM} ${RM_FLAGS} ${SHARED_LIB} ${STATIC_LIB}
	${RM} ${RM_FLAGS} ${TEST_EXEC_LIST}

allclean: clean
	${RM} ${RM_FLAGS} ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	

############            test routines            ############
########        list of test        ########

TEST_EXEC_LIST=${LOCAL_BIN_DIR}/testMessage \
               ${LOCAL_BIN_DIR}/testVectorArrayConv \
               ${LOCAL_BIN_DIR}/testExtVectorTool \
               ${LOCAL_BIN_DIR}/testVectorGSLVectorConv \
               ${LOCAL_BIN_DIR}/testMatrixUtil \

########        create && test        ########
allTest : MessageTest ExtVectorToolTest VectorArrayConvTest MatrixUtilTest VectorGSLVectorConvTest

####    test Message    ####
MessageTest : testMessage
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.Message | tee ${LOG_DIR}/log.Message

testMessage: testMessage.o MessageTestClass.o ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^ ${LDFLAGS} ${HELPERS_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

testMessage.o : ${TEST_SRC}/testMessage.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

MessageTestClass.o : ${TEST_SRC}/MessageTestClass.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

####    testExtVectorTool    ####
ExtVectorToolTest : testExtVectorTool
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.ExtVectorTool | tee ${LOG_DIR}/log.ExtVectorTool

testExtVectorTool : testExtVectorTool.o ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^ ${LDFLAGS} ${HELPERS_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

testExtVectorTool.o : ${TEST_SRC}/testExtVectorTool.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

####    testVectorArrayConv    ####
VectorArrayConvTest : testVectorArrayConv
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.VectorArrayConv | tee ${LOG_DIR}/log.VectorArrayConv

testVectorArrayConv : testVectorArrayConv.o ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^ ${LDFLAGS} ${HELPERS_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

testVectorArrayConv.o : ${TEST_SRC}/testVectorArrayConv.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

####    testMatrixUtil    ####
MatrixUtilTest : testMatrixUtil
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.MatrixUtil | tee ${LOG_DIR}/log.MatrixUtil

testMatrixUtil : testMatrixUtil.o ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^ ${LDFLAGS} ${HELPERS_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

testMatrixUtil.o : ${TEST_SRC}/testMatrixUtil.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^

####    testVectorGSLVector    ####
VectorGSLVectorConvTest : testVectorGSLVectorConv
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.VectorGSLVectorConv | tee ${LOG_DIR}/log.VectorGSLVectorConv

testVectorGSLVectorConv : testVectorGSLVectorConv.o ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^ ${LDFLAGS} ${HELPERS_LIB} ${GSL_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

testVectorGSLVectorConv.o : ${TEST_SRC}/testVectorGSLVectorConv.cc
	${CXX} ${CXXFLAGS} -o $@ -c $^
