#*************************************************************************
# Copyright (c) 2007 UChicago Argonne LLC, as Operator of Argonne
#     National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
#     Operator of Los Alamos National Laboratory.
# EPICS BASE is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution. 
#*************************************************************************
TOP = ../..
include $(TOP)/configure/CONFIG

LIBCOM = $(TOP)/src/libCom

# Command-line input support
epicsReadline_CFLAGS += -DEPICS_COMMANDLINE_LIBRARY=EPICS_COMMANDLINE_LIBRARY_$(COMMANDLINE_LIBRARY)
epicsReadline_INCLUDES += $(INCLUDES_$(COMMANDLINE_LIBRARY))

#POSIX thread priority scheduling flag
THREAD_CPPFLAGS_NO += -DDONT_USE_POSIX_THREAD_PRIORITY_SCHEDULING
osdThread_CPPFLAGS += $(THREAD_CPPFLAGS_$(USE_POSIX_THREAD_PRIORITY_SCHEDULING))

#epicsVersion is created by this Makefile
INC += epicsVersion.h

SRC_DIRS += $(LIBCOM)/bucketLib
INC += bucketLib.h
SRCS += bucketLib.c

SRC_DIRS += $(LIBCOM)/ring
#following needed for locating epicsRingPointer.h and epicsRingBytes.h
INC += epicsRingPointer.h
INC += epicsRingBytes.h
SRCS += epicsRingPointer.cpp
SRCS += epicsRingBytes.c

SRC_DIRS += $(LIBCOM)/calc
INC += postfix.h
SRCS += postfix.c
SRCS += calcPerform.c

SRC_DIRS += $(LIBCOM)/cvtFast
INC += cvtFast.h
SRCS += cvtFast.c

# From cppStd
SRC_DIRS += $(LIBCOM)/cppStd
INC += epicsAlgorithm.h
INC += epicsExcept.h
INC += epicsMemory.h

# From cxxTemplates
SRC_DIRS += $(LIBCOM)/cxxTemplates
INC += resourceLib.h
INC += tsDLList.h
INC += tsSLList.h
INC += tsMinMax.h
INC += tsBTree.h
INC += tsFreeList.h
INC += epicsSingleton.h
INC += epicsGuard.h
INC += epicsOnce.h
SRCS += resourceLib.cpp
SRCS += epicsOnce.cpp
SRCS += epicsSingletonMutex.cpp

SRC_DIRS += $(LIBCOM)/dbmf
INC += dbmf.h
SRCS += dbmf.c

SRC_DIRS += $(LIBCOM)/ellLib
INC += ellLib.h
SRCS += ellLib.c

SRC_DIRS += $(LIBCOM)/env
INC += envDefs.h
SRCS += envSubr.c
SRCS += envData.c

SRC_DIRS += $(LIBCOM)/error
INC += epicsPrint.h
INC += errMdef.h
INC += errSymTbl.h
INC += errlog.h
INC += error.h
SRCS += errlog.c
SRCS += errSymLib.c
SRCS += errSymTbl.c

SRC_DIRS += $(LIBCOM)/fdmgr
INC += fdManager.h
INC += fdmgr.h
SRCS += fdmgr.cpp
SRCS += fdManager.cpp

SRC_DIRS += $(LIBCOM)/freeList
INC += freeList.h
SRCS += freeListLib.c
HTMLS += freeList/freeList.html

SRC_DIRS += $(LIBCOM)/gpHash
INC += gpHash.h
SRCS += gpHashLib.c
HTMLS += gpHash/gpHash.html

SRC_DIRS += $(LIBCOM)/iocsh
INC += iocsh.h
INC += registry.h
INC += libComRegister.h
SRCS += iocsh.cpp
SRCS += registry.c
SRCS += libComRegister.c

SRC_DIRS += $(LIBCOM)/logClient
INC += iocLog.h
INC += logClient.h
SRCS += iocLog.c
SRCS += logClient.c

SRC_DIRS += $(LIBCOM)/macLib
INC += macLib.h
SRCS += macCore.c
SRCS += macEnv.c
SRCS += macUtil.c

SRC_DIRS += $(LIBCOM)/misc
INC += adjustment.h
INC += cantProceed.h
INC += dbDefs.h
INC += epicsConvert.h
INC += epicsExit.h
INC += epicsStdlib.h
INC += epicsString.h
INC += epicsTypes.h
INC += shareLib.h
INC += epicsExport.h
INC += unixFileName.h
INC += locationException.h
INC += ipAddrToAsciiAsynchronous.h
INC += compilerDependencies.h
INC += epicsUnitTest.h
INC += testMain.h
SRCS += aToIPAddr.c
SRCS += adjustment.c
SRCS += cantProceed.c
SRCS += epicsConvert.c
SRCS += epicsExit.c
SRCS += epicsStdlib.c
SRCS += epicsString.c
SRCS += truncateFile.c
SRCS += ipAddrToAsciiAsynchronous.cpp
SRCS += epicsUnitTest.c

# From osi
SRC_DIRS += $(LIBCOM)/osi
INC += osiFileName.h
INC += osiSock.h
INC += osdSock.h
INC += epicsInterrupt.h
INC += osdInterrupt.h

INC += epicsMutex.h
INC += osdMutex.h
INC += epicsEvent.h
INC += osdEvent.h
INC += epicsMath.h
INC += osdMessageQueue.h
INC += osdStrtod.h

INC += epicsAssert.h
INC += epicsFindSymbol.h
INC += osiPoolStatus.h
INC += osdPoolStatus.h
INC += osdThread.h

INC += epicsThread.h
INC += epicsTime.h
INC += epicsGeneralTime.h
INC += osdTime.h
INC += generalTimeSup.h
INC += osiClockTime.h
INC += epicsSignal.h
INC += osiProcess.h
INC += osiUnistd.h
INC += osiWireFormat.h
INC += osdWireFormat.h
INC += osdWireConfig.h
INC += epicsEndian.h
INC += epicsReadline.h
INC += epicsMessageQueue.h
INC += epicsStdio.h
INC += epicsStdioRedirect.h
INC += epicsGetopt.h

INC += devLib.h
INC += devLibVME.h
INC += devLibVMEImpl.h
INC += osdVME.h

SRCS += epicsThread.cpp
SRCS += epicsMutex.cpp
SRCS += epicsEvent.cpp
SRCS += epicsTime.cpp
SRCS += epicsMessageQueue.cpp
SRCS += epicsMath.cpp

SRCS += epicsGeneralTime.c
SRCS += osiClockTime.c

SRCS += osdSock.c
SRCS += osdSockAddrReuse.cpp
SRCS += osiSock.c
SRCS += systemCallIntMech.cpp
SRCS += epicsSocketConvertErrnoToString.cpp
SRCS += osdAssert.c
SRCS += osdFindSymbol.c
SRCS += osdInterrupt.c
SRCS += osdPoolStatus.c
SRCS += osdSignal.cpp
SRCS += osdEnv.c
SRCS += epicsReadline.c
SRCS += epicsTempFile.cpp
SRCS += epicsStdio.c
SRCS += osdStdio.c

osdEnv_CFLAGS_WIN32= -U__STDC__

SRCS += osdThread.c
SRCS += osdMutex.c
SRCS += osdEvent.c
SRCS += osdTime.cpp
SRCS += osdProcess.c
SRCS += osdNetIntf.c
SRCS += osdMessageQueue.c

SRCS += devLibVME.c
SRCS += devLibVMEOSD.c

SRC_DIRS += $(LIBCOM)/taskwd
INC += taskwd.h
SRCS += taskwd.c

SRC_DIRS += $(LIBCOM)/timer
INC += epicsTimer.h
SRCS += epicsTimer.cpp
SRCS += timer.cpp
SRCS += timerQueue.cpp
SRCS += timerQueueActive.cpp
SRCS += timerQueueActiveMgr.cpp
SRCS += timerQueuePassive.cpp

#tsDefs contains R3.13 compatibility tsStamp code
SRC_DIRS += $(LIBCOM)/tsDefs
INC += tsDefs.h
SRCS += tsDefs.c

# Time providers, in osi
SRCS_vxWorks += osiNTPTime.c
SRCS_RTEMS += osiNTPTime.c

# These files are in osi/os/vxWorks
# Special reboot hook
SRCS_vxWorks += atReboot.cpp
# For old vxWorks applications
INC_vxWorks += camacLib.h
INC_vxWorks += epicsDynLink.h
INC_vxWorks += module_types.h
INC_vxWorks += task_params.h
SRCS_vxWorks += epicsDynLink.c
SRCS_vxWorks += veclist.c
SRCS_vxWorks += logMsgToErrlog.cpp

#This forces the vxWorks compatibility stuff to be loaded
OBJS_vxWorks = vxComLibrary

# These files are in osi/os/WIN32
SRCS_WIN32 += epicsGetopt.c 
SRCS_WIN32 += setThreadName.cpp
#SRCS_WIN32 += dllmain.cpp
SRCS_WIN32 += forceBadAllocException.cpp

#       Library to build:
#       lib$(LIBRARY).a  or   ..dll/..exp/..lib
#
LIBRARY=Com

Com_SYS_LIBS_WIN32 = ws2_32 advapi32 user32

Com_RCS = Com.rc

# For R3.13 compatibility only
ifeq ($(strip $(COMPAT_313)),YES)
OBJLIB_vxWorks=Com
OBJLIB_SRCS = $(SRCS)
endif

#   libs needed for PROD and TESTPRODUCT
PROD_LIBS = Com
PROD_SYS_LIBS_WIN32 = ws2_32 advapi32

#	for bldErrSymTbl:
#
ERR_S_FILES += $(TOP)/src/libCom/osi/devLib.h
ERR_S_FILES += $(TOP)/src/as/asLib.h
ERR_S_FILES += $(TOP)/src/db/dbAccessDefs.h
ERR_S_FILES += $(TOP)/src/dbStatic/devSup.h
ERR_S_FILES += $(TOP)/src/dbStatic/drvSup.h
ERR_S_FILES += $(TOP)/src/dbStatic/recSup.h
ERR_S_FILES += $(TOP)/src/dbStatic/dbStaticLib.h
ERR_S_FILES += $(LIBCOM)/error/errMdef.h
ERR_S_FILES += $(TOP)/src/cas/generic/casdef.h
ERR_S_FILES += $(TOP)/src/gdd/gddAppFuncTable.h

include $(TOP)/configure/RULES

osdAssert$(OBJ): $(COMMON_DIR)/epicsVersion.h
epicsTime$(OBJ): $(COMMON_DIR)/epicsVersion.h
osdNetIntf$(OBJ): $(COMMON_DIR)/epicsVersion.h
osdSock$(OBJ): $(COMMON_DIR)/epicsVersion.h

envData.c: $(LIBCOM)/env/envDefs.h $(LIBCOM)/env/bldEnvData.pl \
	$(CONFIG)/CONFIG_ENV $(CONFIG)/CONFIG_SITE_ENV
	$(PERL) $(LIBCOM)/env/bldEnvData.pl $(CONFIG)

errSymTbl.c: $(ERR_S_FILES) $(LIBCOM)/error/makeStatTbl.pl
	$(PERL) $(LIBCOM)/error/makeStatTbl.pl  $(ERR_S_FILES)

$(COMMON_DIR)/epicsVersion.h: $(CONFIG)/CONFIG_BASE_VERSION $(CONFIG)/CONFIG_SITE
	$(PERL) $(LIBCOM)/misc/makeEpicsVersion.pl $(CONFIG)/CONFIG_BASE_VERSION $(@D) $(EPICS_SITE_VERSION)

clean::
	@$(RM) errSymTbl.c envData.c

