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


#--------------------------------------------------
# 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

SNC_SRC_FILES = $(basename $(notdir $(filter %.st %.stt,$(SRC_FILES))))
SNC_CSRC_FILES =  $(addsuffix .c,$(SNC_SRC_FILES))
HDEPENDS_FILES_YES += $(addsuffix $(DEP),$(basename $(SNC_CSRC_FILES)))

#--------------------------------------------------
# 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

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

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

%.c: %.i $(SNC)
	$(ECHO) "converting $<"
	$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $(USR_SNCFLAGS) $(call PATH_FILTER,$<) -o $(@F).tmp
	$(MV) $(@F).tmp $@

%.c: %.stt $(SNC)
	$(ECHO) "converting $< "
	$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $(USR_SNCFLAGS) $(call PATH_FILTER,$<) -o $(@F).tmp
	$(MV) $(@F).tmp $@

CLEANS += $(SNC_CSRC_FILES)

ifndef BASE_3_15
clean::
	$(RM) $(CLEANS)
endif
