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

############            files            ############
########        list of source files        ########
DATA_CONTAINER_SRC= ParamSet.cc PeakData.cc Peak.cc PeakType.cc Domain.cc

########        list of header files        ########
#DATA_CONTAINER_HDS=ParamSet.hh PeakData.hh Peak.hh PeakType.hh Domain.hh
DATA_CONTAINER_HDS=${DATA_CONTAINER_SRC:.cc=.hh}


########        list of object files        ########
DATA_CONTAINER_OBJ=${DATA_CONTAINER_SRC:.cc=.o}

LIB_OBJ=${DATA_CONTAINER_OBJ}

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

############            compileer options            ############
LDFLAGS += -L${LOCAL_LIB_DIR}
DATA_CONTAINER_LIB=-l${STEM}
BUILD_IN_FUNC_LIB=-lBuildInFunc
HELPERS_LIB=-lHelpers

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

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

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

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

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

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

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

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

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

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

############            cleaning            ############
clean:
	${RM} ${RM_FLAGS} *.o
	${RM} ${RM_FLAGS} ${SHARED_LIB} ${STATIC_LIB}
	${RM} ${RM_FLAGS} ${TEST_EXEC_LIST}
	${RM} ${RM_FLAGS} ${TEST_SHARED_LIB}
	${RM} ${RM_FLAGS} ${TEST_PYTHON_MOD}
	${RM} ${RM_FLAGS} ${TEST_PYTHON_CMOD}
	${RM} ${RM_FLAGS} *_wrap.cxx

allclean: clean
	${RM} ${RM_FLAGS} ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${RM} ${RM_FLAGS} ${LOCAL_LIB_DIR}/${STEM}.py
	${RM} ${RM_FLAGS} ./${STEM}_wrap.cxx

############            test routines            ############
########        list of test executables        ########
TEST_EXEC_LIST=${LOCAL_BIN_DIR}/testDomain ${LOCAL_BIN_DIR}/testPeak ${LOCAL_BIN_DIR}/testPeakData ${LOCAL_BIN_DIR}/testParamSet

TEST_SHARED_LIB=${LOCAL_LIB_DIR}/_Domain.so ${LOCAL_LIB_DIR}/_Peak.so ${LOCAL_LIB_DIR}/_PeakData.so ${LOCAL_LIB_DIR}/_ParamSet.so
TEST_PYTHON_MOD=${LOCAL_LIB_DIR}/Domain.py  ${LOCAL_LIB_DIR}/Peak.py  ${LOCAL_LIB_DIR}/PeakData.py  ${LOCAL_LIB_DIR}/ParamSet.py
TEST_PYTHON_CMOD=${TEST_PYTHON_MOD:.py=.pyc}

########        create && test        ########
allTest: DomainTest PeakTest PeakDataTest ParamSetTest

allPyTest: DomainPyTest PeakPyTest PeakDataPyTest ParamSetPyTest

####    test Domain    ####
DomainTest: testDomain
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.Domain | tee ${LOG_DIR}/log.Domain

testDomain: testDomain.o  ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^  ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

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

#--------------------------
DomainPyTest: ${LOCAL_LIB_DIR}/_Domain.so ${LOCAL_LIB_DIR}/Domain.py
	python test_src/testDomain.py 2>${LOG_DIR}/err.Domain | tee ${LOG_DIR}/log.Domain

${LOCAL_LIB_DIR}/_Domain.so: _Domain.so
	${MV} $^ ${LOCAL_LIB_DIR}

${LOCAL_LIB_DIR}/Domain.py: Domain.py
	${MV} $^ ${LOCAL_LIB_DIR}

_Domain.so : Domain_wrap.o
	${CXX} ${WARNING} -shared -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}

Domain_wrap.o : Domain_wrap.cxx
	${CXX} ${CXXFLAGS} -o $@ -c $^

Domain_wrap.cxx Domain.py : Domain.i
	${SWIG} ${SWIG_FLAGS} $^

####    test Peak    ####
PeakTest: testPeak
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.Peak | tee ${LOG_DIR}/log.Peak

testPeak : testPeak.o  ${LOCAL_LIB_DIR}/${SHARED_LIB} ${LOCAL_LIB_DIR}/${STATIC_LIB}
	${CXX} -o $@ $^  ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

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

#------------------------
PeakPyTest: ${LOCAL_LIB_DIR}/_Peak.so ${LOCAL_LIB_DIR}/Peak.py
	python test_src/testPeak.py 2>${LOG_DIR}/err.Peak | tee ${LOG_DIR}/log.Peak

${LOCAL_LIB_DIR}/_Peak.so: _Peak.so
	${MV} $^ ${LOCAL_LIB_DIR}

${LOCAL_LIB_DIR}/Peak.py: Peak.py
	${MV} $^ ${LOCAL_LIB_DIR}

_Peak.so : Peak_wrap.o Peak.o
	${CXX} ${WARNING} -shared -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}

Peak_wrap.o : Peak_wrap.cxx
	${CXX} ${CXXFLAGS} -o $@ -c $^

t.txt : Peak_wrap.cxx
	${CXX} ${CXXFLAGS} -o $@ -E $^

Peak_wrap.cxx Peak.py : Peak.i
	${SWIG} ${SWIG_FLAGS} $^

####    test PeakData    ####
PeakDataTest: testPeakData
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.PeakData | tee ${LOG_DIR}/log.PeakData

testPeakData : testPeakData.o
	${CXX} -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

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

#----------------------------
PeakDataPyTest: ${LOCAL_LIB_DIR}/_PeakData.so ${LOCAL_LIB_DIR}/PeakData.py
	python test_src/testPeakData.py 2>${LOG_DIR}/err.PeakData | tee ${LOG_DIR}/log.PeakData

${LOCAL_LIB_DIR}/_PeakData.so: _PeakData.so
	${MV} $^ ${LOCAL_LIB_DIR}

${LOCAL_LIB_DIR}/PeakData.py: PeakData.py
	${MV} $^ ${LOCAL_LIB_DIR}

_PeakData.so : PeakData_wrap.o
	${CXX} ${WARNING} -shared -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${LIB_DIR} ${MANYO_LIB}

PeakData_wrap.o : PeakData_wrap.cxx
	${CXX} ${CXXFLAGS} -o $@ -c $^

PeakData_wrap.cxx PeakData.py : PeakData.i
	${SWIG} ${SWIG_FLAGS} $^

####    test ParamSet    ####
ParamSetTest: testParamSet
	${LOCAL_BIN_DIR}/$^ 2>${LOG_DIR}/err.ParamSet | tee ${LOG_DIR}/log.ParamSet

testParamSet: testParamSet.o
	${CXX} -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}
	${MV} $@ ${LOCAL_BIN_DIR}

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

#----------------------------
ParamSetPyTest: ${LOCAL_LIB_DIR}/_ParamSet.so ${LOCAL_LIB_DIR}/ParamSet.py
	python test_src/testParamSet.py 2>${LOG_DIR}/err.ParamSet | tee ${LOG_DIR}/log.ParamSet

${LOCAL_LIB_DIR}/_ParamSet.so: _ParamSet.so
	${MV} $^ ${LOCAL_LIB_DIR}

${LOCAL_LIB_DIR}/ParamSet.py: ParamSet.py
	${MV} $^ ${LOCAL_LIB_DIR}

_ParamSet.so : ParamSet_wrap.o
	${CXX} ${WARNING} -shared -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}

ParamSet_wrap.o : ParamSet_wrap.cxx
	${CXX} ${CXXFLAGS} -o $@ -c $^

ParamSet_wrap.cxx ParamSet.py : ParamSet.i
	${SWIG} ${SWIG_FLAGS} $^


####    test ContainerBase    ####
ContainerBaseTest : ${LOCAL_BIN_DIR}/testContainerBase
	$^ >${LOG_DIR}/$@.log 2>&1

${LOCAL_BIN_DIR}/testContainerBase : testContainerBase
	${MV} $^ $@

testContainerBase : testContainerBase.o
	${CXX} -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}

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

#---------------------------------------------------
ContainerForVectorTest : ${LOCAL_BIN_DIR}/testContainerForVector
	$^ >${LOG_DIR}/$@.log 2>&1

${LOCAL_BIN_DIR}/testContainerForVector : testContainerForVector
	${MV} $^ $@

testContainerForVector : testContainerForVector.o
	${CXX} -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}

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

#---------------------------------------------------
ContainerForMatrixTest : ${LOCAL_BIN_DIR}/testContainerForMatrix
	$^ >${LOG_DIR}/$@.log 2>&1

${LOCAL_BIN_DIR}/testContainerForMatrix : testContainerForMatrix
	${MV} $^ $@

testContainerForMatrix : testContainerForMatrix.o
	${CXX} -o $@ $^ ${LDFLAGS} ${DATA_CONTAINER_LIB} ${BUILD_IN_FUNC_LIB} ${HELPERS_LIB} ${MANYO_LIB}

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

