TOP = ../..

include $(TOP)/configure/CONFIG
#----------------------------------------
#  ADD MACRO DEFINITIONS AFTER THIS LINE

SNC = $(INSTALL_HOST_BIN)/snc$(HOSTEXE)

#  Generate snc main programs (not needed under VxWorks)
SNCFLAGS_DEFAULT += +m
SNCFLAGS_vxWorks += -nil-

#  Set to path of valgrind executable if tests should run under valgrind
USE_VALGRIND =

#  Sequence programs and/or object files to create
TESTPROD_HOST += decl
TESTPROD_HOST += delay
TESTPROD_HOST += entry
TESTPROD_HOST += entryOpte
TESTPROD_HOST += entryVar
TESTPROD_HOST += exitOptx
TESTPROD_HOST += optt
TESTPROD_HOST += stop
TESTPROD_HOST += subscript
TESTPROD_HOST += syncq

REGRESSION_TESTS_WITH_DB += bittypes
REGRESSION_TESTS_WITH_DB += evflag
REGRESSION_TESTS_WITH_DB += monitorEvflag
REGRESSION_TESTS_WITH_DB += pvGet
REGRESSION_TESTS_WITH_DB += pvGetAsync
REGRESSION_TESTS_WITH_DB += pvPutAsync
REGRESSION_TESTS_WITH_DB += reassign

REGRESSION_TESTS_WITH_DB += norace

# uncomment this test to see race
# fail (safe mode off)
#REGRESSION_TESTS_WITH_DB += race

REGRESSION_TESTS_WITHOUT_DB += array
REGRESSION_TESTS_WITHOUT_DB += assign
REGRESSION_TESTS_WITHOUT_DB += change
REGRESSION_TESTS_WITHOUT_DB += commaOperator
REGRESSION_TESTS_WITHOUT_DB += foreignTypes
REGRESSION_TESTS_WITHOUT_DB += local
REGRESSION_TESTS_WITHOUT_DB += opttVar
REGRESSION_TESTS_WITHOUT_DB += pvSync
REGRESSION_TESTS_WITHOUT_DB += safeModeNotAssigned
REGRESSION_TESTS_WITHOUT_DB += safeMonitor
REGRESSION_TESTS_WITHOUT_DB += sizeof
REGRESSION_TESTS_WITHOUT_DB += userfunc
REGRESSION_TESTS_WITHOUT_DB += userfuncEf

REGRESSION_TESTS_REMOTE_ONLY += pvGetSync

REGRESSION_TESTS += $(REGRESSION_TESTS_WITHOUT_DB)
REGRESSION_TESTS += $(REGRESSION_TESTS_WITH_DB)

ifeq '$(EPICS_HAS_UNIT_TEST)' '1'
TESTPROD_HOST += $(REGRESSION_TESTS)
TESTPROD_HOST += $(REGRESSION_TESTS_REMOTE_ONLY)
TESTSCRIPTS_HOST += $(REGRESSION_TESTS:%=%.t)
TESTSCRIPTS_HOST += $(REGRESSION_TESTS_WITH_DB:%=%Ioc.t)
TESTSCRIPTS_HOST += $(REGRESSION_TESTS_REMOTE_ONLY:%=%Ioc.t)
endif

#TESTPROD_HOST += ctest

#  Libraries
PROD_LIBS += seq pv
PROD_LIBS += $(EPICS_BASE_IOC_LIBS)

DBD += seqSoftIoc.dbd
seqSoftIoc_DBD += base.dbd
seqSoftIoc_DBD += testSupport.dbd

seqSoftIoc_SRCS += seqSoftIoc_registerRecordDeviceDriver.cpp

ifeq '$(EPICS_HAS_UNIT_TEST)' '1'
seqSoftIoc_SRCS += testSupport.c

REGRESSION_TESTS_vxWorks = $(filter-out pvGetAsync,$(REGRESSION_TESTS))

PROD_vxWorks = vxTestHarness
vxTestHarness_SRCS += $(REGRESSION_TESTS_vxWorks:%=%.st)
vxTestHarness_SRCS += testSupport.c
vxTestHarness_SRCS += vxTestHarness_registerRecordDeviceDriver.cpp
vxTestHarness_OBJS += $(EPICS_BASE_BIN)/vxComLibrary

DBD += vxTestHarness.dbd
vxTestHarness_DBD += base.dbd
vxTestHarness_DBD += $(COMMON_DIR)/vxTestHarnessRegistrars.dbd

# needed for base 3.14.10 compatibility:
USR_DBDFLAGS += -I $(COMMON_DIR)

DB += vxTestHarness.db
endif

define template_SRCS
$(1)_SRCS += $(1).st $(seqSoftIoc_SRCS)
endef
$(foreach st, $(TESTPROD_HOST), $(eval $(call template_SRCS,$(st))))


# PROD_RTEMS = rtemsTestHarness
# rtemsTestHarness_SRCS += $(TESTPROD_HOST::%=%.st)

#PROD_RTEMS += $(TESTPROD_HOST)

include $(TOP)/configure/RULES
#----------------------------------------
#  ADD RULES AFTER THIS LINE

ifeq '$(EPICS_HAS_UNIT_TEST)' '1'
vxTestHarness.db$(DEP):
	@echo "$(COMMON_DIR)/vxTestHarness.db: ../Makefile" > $@
vxTestHarness.dbd$(DEP):
	@echo "$(COMMON_DIR)/vxTestHarness.dbd: ../Makefile" > $@
endif

$(REGRESSION_TESTS_WITH_DB:%=%Ioc.t) $(REGRESSION_TESTS_REMOTE_ONLY:%=%Ioc.t): %Ioc.t: %$(EXE) ../makeTestfile.pl
	$(PERL) ../makeTestfile.pl $@ $* $< ioc $(USE_VALGRIND)

$(REGRESSION_TESTS:%=%.t): %.t: %$(EXE) ../makeTestfile.pl
	$(PERL) ../makeTestfile.pl $@ $* $< noioc $(USE_VALGRIND)

norace.i race.i: ../raceCommon.st

$(COMMON_DIR)/vxTestHarnessRegistrars.dbd: ../makeTestDbd.pl
	$(PERL) ../makeTestDbd.pl $(REGRESSION_TESTS_vxWorks) > $@

$(COMMON_DIR)/vxTestHarness.dbd: $(COMMON_DIR)/vxTestHarnessRegistrars.dbd

$(COMMON_DIR)/vxTestHarness.db: $(REGRESSION_TESTS_WITH_DB:%=../%.db)
	$(PERL) -ne print $(REGRESSION_TESTS_WITH_DB:%=../%.db) > $@

st.cmd: ../st.cmd.vxWorks ../makeStCmd.pl
	$(CP) ../st.cmd.vxWorks $@
	$(PERL) -MExtUtils::Command -e chmod 644 $@

testHarness.cmd: ../makeStCmd.pl
	$(PERL) ../makeStCmd.pl $(REGRESSION_TESTS_vxWorks) > $@
	$(PERL) -MExtUtils::Command -e chmod 644 $@

ifeq "$(OS_CLASS)" "vxWorks"
build: st.cmd testHarness.cmd
endif