# Makefile for cmlog user client library
include ../Makefile.config

OBJTYPE = .obj/$(TARGETDIR)
SHOBJTYPE = .shobj/$(TARGETDIR)

ifeq ($(XTRAOBJS), YES)
XOBJS = 
else
XOBJS =
endif

#-D_CMLOG_DEBUG 
CMLOG_USE_THREAD = YES

XTRACXXFLAGS := -I. -I../data -I../Common \
	-D_CMLOG_BUILD_CLIENT
XTRACFLAGS := -I. -I../data -I../Common \
	-D_CMLOG_BUILD_CLIENT

ifeq ($(TARGET), vxworks)
XTRACXXFLAGS := $(XTRACXXFLAGS) -I../Thread -D_NO_EPICS_ERRLOG
XTRACFLAGS := $(XTRACFLAGS) -I../Thread -D_NO_EPICS_ERRLOG
endif

OBJS = $(OBJTYPE)/cmlogMsg.o \
	$(OBJTYPE)/cmlogSlist.o \
	$(OBJTYPE)/cmlogClntCxt.o \
	$(OBJTYPE)/cmlogClient.o \
	$(OBJTYPE)/cmlogFilter.o \
	$(OBJTYPE)/cmlogUtil.o

SHOBJS = $(SHOBJTYPE)/cmlogMsg.o \
	$(SHOBJTYPE)/cmlogSlist.o \
	$(SHOBJTYPE)/cmlogClntCxt.o \
	$(SHOBJTYPE)/cmlogClient.o \
	$(SHOBJTYPE)/cmlogFilter.o \
	$(SHOBJTYPE)/cmlogUtil.o

ifdef CMLOG_USE_THREAD
XTRACXXFLAGS := $(XTRACXXFLAGS) -D_CMLOG_USE_THREAD -DCMLOG_USE_THREAD \
	-D_CDEV_USE_THREAD -I../Thread -I../data
XTRACFLAGS := $(XTRACFLAGS) -D_CMLOG_USE_THREAD -DCMLOG_USE_THREAD \
	-D_CDEV_USE_THREAD -I../Thread -I../data

ifeq ($(TARGET), solaris)
XTRACXXFLAGS := -mt $(XTRACXXFLAGS)
XTRACFLAGS := -mt $(XTRACFLAGS)
endif

ifeq ($(TARGET), sparcv9)
XTRACXXFLAGS := -mt $(XTRACXXFLAGS)
XTRACFLAGS := -mt $(XTRACFLAGS)
endif

OBJS := $(OBJS) \
	$(OBJTYPE)/cpSynch.o \
	$(OBJTYPE)/cpThread.o \
	$(OBJTYPE)/cpThreadManager.o \
	$(OBJTYPE)/cdevData.o \
	$(OBJTYPE)/cdevDataEntry.o \
	$(OBJTYPE)/cdevTagTable.o \
	$(OBJTYPE)/cdevGlobalTagTable.o \
	$(OBJTYPE)/cdevIntHash.o \
	$(OBJTYPE)/cdevStrHash.o \
	$(OBJTYPE)/cdevSlist.o \
	$(OBJTYPE)/cmlog_cdevMessage.o \
	$(OBJTYPE)/cmlog_cdevPacket1.o \
	$(OBJTYPE)/cmlog_cdevTagMap.o

SHOBJS := $(SHOBJS) \
	$(SHOBJTYPE)/cpSynch.o \
	$(SHOBJTYPE)/cpThread.o \
	$(SHOBJTYPE)/cpThreadManager.o \
	$(SHOBJTYPE)/cdevData.o \
	$(SHOBJTYPE)/cdevDataEntry.o \
	$(SHOBJTYPE)/cdevTagTable.o \
	$(SHOBJTYPE)/cdevGlobalTagTable.o \
	$(SHOBJTYPE)/cdevIntHash.o \
	$(SHOBJTYPE)/cdevStrHash.o \
	$(SHOBJTYPE)/cdevSlist.o \
	$(SHOBJTYPE)/cmlog_cdevMessage.o \
	$(SHOBJTYPE)/cmlog_cdevPacket1.o \
	$(SHOBJTYPE)/cmlog_cdevTagMap.o
endif




ifneq ($(TARGET), vxworks)
ifeq ($(TARGET), solaris)
LIBS = 	-lsocket -lnsl

ifdef CMLOG_USE_THREAD
LIBS := $(LIBS) -lposix4 -lpthread -lthread
endif

endif

ifeq ($(TARGET), sparcv9)
LIBS = 	-lsocket -lnsl

ifdef CMLOG_USE_THREAD
LIBS := $(LIBS) -lposix4 -lpthread -lthread
endif

endif

ifeq ($(TARGET), Linux-i386)
LIBS = 	

ifdef CMLOG_USE_THREAD
LIBS := $(LIBS) -lpthread
endif

endif


ifeq ($(TARGET), solaris-noth)
LIBS = 	-lsocket -lnsl
endif

ifeq ($(TARGET), solaris-gnu)
LIBS = 	-lsocket -lnsl
endif

else
LIBS = 
endif

targets: $(OBJTYPE) $(SHOBJTYPE) progs copylib copyheader copybin

$(OBJTYPE):
	@mkdir -p $(OBJTYPE)

$(SHOBJTYPE):
	@mkdir -p $(SHOBJTYPE)

ifneq ($(TARGET), vxworks)

progs:libcmlog.a libcmlog.so cmlogMsg cmlogParentPid

ifdef CMLOG_USE_THREAD
libcmlog.a: $(OBJS)
	rm -f $@
	$(MAKELIB) $@ $(OBJS)
	$(RANLIB) $@

libcmlog.so: $(SHOBJS)
	rm -f $@
	$(MAKESHLIB) $@ $(SHOBJS)
else
libcmlog.a: $(OBJS)
	rm -f $@
	$(MAKELIB) $@ $(OBJS) ../data/.obj/$(TARGETDIR)/*.o
	$(RANLIB) $@

libcmlog.so: $(SHOBJS)
	rm -f $@
	$(MAKESHLIB) $@ $(SHOBJS) ../data/.shobj/$(TARGETDIR)/*.o
endif


cmlogMsg: $(OBJTYPE)/cmlogUnixLogMsg.o libcmlog.a
	rm -f $@
	$(CXX) -o $@ $(OBJTYPE)/cmlogUnixLogMsg.o libcmlog.a $(LIBS)

cmlogParentPid: $(OBJTYPE)/cmlogParentPid.o
	rm -f $@
	$(CC) -o $@ $(OBJTYPE)/cmlogParentPid.o

copybin:
	if test ! -d $(BINDIR); then mkdir -p $(BINDIR); else echo; fi
	mv cmlogMsg cmlogParentPid $(BINDIR)	

copylib:libcmlog.a libcmlog.so
	if test ! -d $(LIBDIR); then mkdir -p $(LIBDIR); else echo; fi
	mv libcmlog.a libcmlog.so $(LIBDIR)	

else

progs: libcmlog.a cmlogVxLogMsg

libcmlog.a: $(OBJS)
	rm -f $@
	$(MAKELIB) $@ $(OBJS) $(XOBJS)
	$(RANLIB) $@

cmlogVxLogMsg: $(OBJTYPE)/cmlogVxLogMsg.o
	rm -f $@
	$(MAKELIB) $@ $(OBJTYPE)/cmlogVxLogMsg.o

copybin: cmlogVxLogMsg
	if test ! -d $(BINDIR); then mkdir -p $(BINDIR); else echo; fi
	mv cmlogVxLogMsg $(BINDIR)		

copylib:libcmlog.a
	if test ! -d $(LIBDIR); then mkdir -p $(LIBDIR); else echo; fi
	mv libcmlog.a $(LIBDIR)	
endif

copyheader: cmlogClient.h cmlogFilter.h
	cp cmlogClient.h cmlogFilter.h $(INCDIR)

clean:
	rm -rf *.o core *~ cmlogVxLogMsg cmlogMsg cmlogParentPid .obj .shobj *.a *.so

#########################################################################
# do not edit the followings
$(OBJTYPE)/cmlogMsg.o: ../Common/cmlogMsg.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../Common/cmlogMsg.cc -o $@

$(OBJTYPE)/cmlogSlist.o: ../Common/cmlogSlist.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../Common/cmlogSlist.cc -o $@

$(OBJTYPE)/cmlogUtil.o: ../Common/cmlogUtil.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../Common/cmlogUtil.cc -o $@

$(OBJTYPE)/cmlogClntCxt.o: ../Network/cmlogClntCxt.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../Network/cmlogClntCxt.cc -o $@

$(OBJTYPE)/cmlogVxLogMsg.o: cmlogVxLogMsg.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c cmlogVxLogMsg.cc -o $@

$(SHOBJTYPE)/cmlogMsg.o: ../Common/cmlogMsg.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -c ../Common/cmlogMsg.cc -o $@

$(SHOBJTYPE)/cmlogSlist.o: ../Common/cmlogSlist.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -c ../Common/cmlogSlist.cc -o $@

$(SHOBJTYPE)/cmlogUtil.o: ../Common/cmlogUtil.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -c ../Common/cmlogUtil.cc -o $@

$(SHOBJTYPE)/cmlogClntCxt.o: ../Network/cmlogClntCxt.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -c ../Network/cmlogClntCxt.cc -o $@


$(OBJTYPE)/cpSynch.o: ../Thread/cpSynch.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../Thread/cpSynch.cc -o $@

$(OBJTYPE)/cpThread.o: ../Thread/cpThread.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -D_POSIX_C_SOURCE=199506L -c ../Thread/cpThread.cc -o $@

$(OBJTYPE)/cpThreadManager.o: ../Thread/cpThreadManager.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../Thread/cpThreadManager.cc -o $@

$(OBJTYPE)/cdevData.o: ../data/cdevData.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevData.cc -o $@

$(OBJTYPE)/cdevDataEntry.o: ../data/cdevDataEntry.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevDataEntry.cc -o $@


$(OBJTYPE)/cdevTagTable.o: ../data/cdevTagTable.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevTagTable.cc -o $@

$(OBJTYPE)/cdevGlobalTagTable.o: ../data/cdevGlobalTagTable.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevGlobalTagTable.cc -o $@

$(OBJTYPE)/cdevIntHash.o: ../data/cdevIntHash.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevIntHash.cc -o $@

$(OBJTYPE)/cdevStrHash.o: ../data/cdevStrHash.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevStrHash.cc -o $@

$(OBJTYPE)/cdevSlist.o: ../data/cdevSlist.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevSlist.cc -o $@

$(OBJTYPE)/cmlog_cdevMessage.o: ../data/cmlog_cdevMessage.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cmlog_cdevMessage.cc -o $@

$(OBJTYPE)/cmlog_cdevPacket1.o: ../data/cmlog_cdevPacket1.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cmlog_cdevPacket1.cc -o $@

$(OBJTYPE)/cmlog_cdevTagMap.o: ../data/cmlog_cdevTagMap.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cmlog_cdevTagMap.cc -o $@



$(SHOBJTYPE)/cpSynch.o: ../Thread/cpSynch.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -c ../Thread/cpSynch.cc -o $@

$(SHOBJTYPE)/cpThread.o: ../Thread/cpThread.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -D_POSIX_C_SOURCE=199506L -c ../Thread/cpThread.cc -o $@

$(SHOBJTYPE)/cpThreadManager.o: ../Thread/cpThreadManager.cc
	rm -f $@
	$(CXX) $(CXXFLAGS_SH) $(XTRACXXFLAGS) -c ../Thread/cpThreadManager.cc -o $@

$(SHOBJTYPE)/cdevData.o: ../data/cdevData.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevData.cc -o $@

$(SHOBJTYPE)/cdevDataEntry.o: ../data/cdevDataEntry.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevDataEntry.cc -o $@


$(SHOBJTYPE)/cdevTagTable.o: ../data/cdevTagTable.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevTagTable.cc -o $@

$(SHOBJTYPE)/cdevGlobalTagTable.o: ../data/cdevGlobalTagTable.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevGlobalTagTable.cc -o $@

$(SHOBJTYPE)/cdevIntHash.o: ../data/cdevIntHash.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevIntHash.cc -o $@

$(SHOBJTYPE)/cdevStrHash.o: ../data/cdevStrHash.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevStrHash.cc -o $@

$(SHOBJTYPE)/cdevSlist.o: ../data/cdevSlist.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cdevSlist.cc -o $@

$(SHOBJTYPE)/cmlog_cdevMessage.o: ../data/cmlog_cdevMessage.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cmlog_cdevMessage.cc -o $@

$(SHOBJTYPE)/cmlog_cdevPacket1.o: ../data/cmlog_cdevPacket1.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cmlog_cdevPacket1.cc -o $@

$(SHOBJTYPE)/cmlog_cdevTagMap.o: ../data/cmlog_cdevTagMap.cc
	rm -f $@
	$(CXX) $(CXXFLAGS) $(XTRACXXFLAGS) -c ../data/cmlog_cdevTagMap.cc -o $@
