#	State notation language (snc) rules
# Each <name>.st (or <name>.stt) produces <name>.c

ifeq (,$(_RULES_SNCSEQ_INCLUDED))
_RULES_SNCSEQ_INCLUDED := YES


#--------------------------------------------------
# snc flags

TARGET_SNCFLAGS = $($(basename $@)_SNCFLAGS) $($(basename $@)_SNCFLAGS_$(OS_CLASS))

#  addons -  concat os specific sequencer flags
ifneq ($(strip $(SNCFLAGS_$(OS_CLASS))),)
SNCFLAGS += $(subst -nil-,,$(SNCFLAGS_$(OS_CLASS)))
else
ifdef SNCFLAGS_DEFAULT
SNCFLAGS += $(SNCFLAGS_DEFAULT)
endif
endif

#--------------------------------------------------
# vpath

vpath %.st $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.stt $(USR_VPATH) $(ALL_SRC_DIRS)

#--------------------------------------------------
# depends rule needs .c files

ST_TARGETS = $(TESTPROD) $(PROD) $(LIBRARY) $(LOADABLE_LIBRARY)
ST_TARGET_SRCS = $(addsuffix .st, $(ST_TARGETS))
ST_DEPENDS_FILES = $(addsuffix $(DEP),$(SRC_FILES) $(ST_TARGET_SRCS))

#--------------------------------------------------
# snc executable location

ifdef SNCSEQ
 SNC = $(SNCSEQ)/bin/$(EPICS_HOST_ARCH)/snc$(HOSTEXE)
else
 ifdef SEQ
  SNC = $(SEQ)/bin/$(EPICS_HOST_ARCH)/snc$(HOSTEXE)
 else
  SNC = $(INSTALL_LOCATION)/bin/$(EPICS_HOST_ARCH)/snc$(HOSTEXE)
 endif
endif

#--------------------------------------------------
# preserve compatibility to base versions before 3.14.12

ifndef ECHO
 NOP = $(PERL) -e ''
 ECHO := $(if $(findstring s,$(MAKEFLAGS)),$(NOP),@echo)
endif

#--------------------------------------------------

define COMPILE.snl
	$(abspath $(SNC)) $(TARGET_SNCFLAGS) $(SNCFLAGS) $(USR_SNCFLAGS) $< -o $@
endef

#--------------------------------------------------
# Rules

%.st$(DEP): %.st
	$(ECHO) "generating dependencies for $<"
	@$(RM) $@
	$(MKMF) -m $@ $(USR_VPATH) $(ALL_SRC_DIRS) $*.i $<

%.i: %.st
	$(ECHO) "preprocessing $<"
	@$(RM) $@
	$(PREPROCESS.cpp)

%.c: %.i $(SNC)
	$(ECHO) "compiling $< to C"
	@$(RM) $@
	$(COMPILE.snl)

%.c: %.stt $(SNC)
	$(ECHO) "compiling $< to C"
	@$(RM) $@
	$(COMPILE.snl)

CLEANS += $(wildcard *.d)

ifeq ($(BASE_3_14),YES)
clean::
	$(RM) $(CLEANS)
endif

-include $(ST_DEPENDS_FILES)

endif # _RULES_SNCSEQ_INCLUDED
