diff --git a/config/RULES.Db b/config/RULES.Db new file mode 100644 index 000000000..266dfab13 --- /dev/null +++ b/config/RULES.Db @@ -0,0 +1,200 @@ +# $Id$ +# +# Rules for making things related to databases +# +MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(EXE) +MSI = $(EPICS_EXTENSIONS_BIN)/msi$(EXE) +DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) +DBST = dbst +MAKEDBDEPENDS = $(PERL) $(TOP)/config/makeDbDepends.pl +REPLACEVAR = $(PERL) $(TOP)/config/replaceVAR.pl +ifndef WIN32 +TOUCH = touch +else +TOUCH = type NUL >> +endif + +#----------------------------------------------------------------- +# if we are not building base add base dbd dirs + +ifneq ($(EPICS_BASE),$(TOP)) +ifneq ($(EPICS_BASE),$(INSTALL_LOCATION)) +EPICS_DBDFLAGS += -I $(EPICS_BASE)/dbd +endif +endif + +#--------------------------------------------------------------- +# ---------------------------------------------------- +# create names (lists) for installed things +# ---------------------------------------------------- + +INSTALL_BPTS = $(BPTS:%= $(INSTALL_DBD)/%) +INSTALL_DBDS = $(DBDINSTALL:%= $(INSTALL_DBD)/%) +INSTALL_DBDNAME = $(DBDNAME:%= $(INSTALL_DBD)/%) +INSTALL_DATA = $(INSTALLDB:%=$(INSTALL_DB)/%) +INSTALL_TEMPLATES = $(filter %.template,$(INSTALL_DATA)) + +#--------------------------------------------------------------- +# Main targets + +all:: install + +inc:: $(INSTALL_DBDS) $(INSTALL_BPTS) $(INSTALL_TEMPLATES) + +rebuild:: clean install + +install:: inc buildInstall + +buildInstall:: build $(INSTALL_DATA) + +clean:: + @echo "Cleaning" + @$(RM) $(DB) $(DBDNAME) *.template *.substitutions *.db.raw \ + *.db-stamp *.edf esiread.cnf + +##################################################### "Foreign" templates + +TEMPLATE_LINKS = $(filter-out $(notdir $(USES_TEMPLATE)), $(USES_TEMPLATE)) +TEMPLATE_FILES = $(filter $(notdir $(USES_TEMPLATE)), $(USES_TEMPLATE)) +DB_STAMP = $(patsubst %.db, %.db-stamp, $(DB)) +DB_REALTARGET = $(patsubst %.db-stamp, %.db, $@) + +ifneq '$(TEMPLATE_LINKS)' '' +build:: $(notdir $(TEMPLATE_LINKS)) +endif +build:: $(INSTALL_DBDNAME) $(TEMPLATE_FILES) $(DB_STAMP) + +$(notdir $(TEMPLATE_LINKS)): %.template: +ifndef WIN32 + @$(RM) $(notdir $(TEMPLATE_LINKS)) + ln -s $(TEMPLATE_LINKS) . +# Workaround for dbLoadTemplate bug: terminate here if link target doesn't exist + @cat $(TEMPLATE_LINKS) > /dev/null +else + @$(RM) $(notdir $(TEMPLATE_LINKS)) + $(CP) $(TEMPLATE_LINKS) . +endif + +##################################################### Inflated or plain databases + +$(INSTALL_DB)/%.db: %.db-stamp + @echo "Installing database $@" + @$(INSTALL) -d -m 644 $(patsubst %.db-stamp, %.db, $<) $(@D) + +# Must have DBDNAME defined to use dbst optimization +ifndef DBDNAME +DB_OPT = NO +endif + +# dbst based database optimization +ifeq '$(DB_OPT)' 'YES' +.PRECIOUS: %.db.raw +%.db-stamp: %.db.raw $(INSTALL_DBD)/$(DBDNAME) + @echo "Optimizing database $@" + $(DBST) $(INSTALL_DBD)/$(DBDNAME) $< -d > $(DB_REALTARGET) + @$(TOUCH) $@ +%.db-stamp: %.t.db.raw $(INSTALL_DBD)/$(DBDNAME) + @echo "Optimizing database $@" + $(DBST) $(INSTALL_DBD)/$(DBDNAME) $< -d > $(DB_REALTARGET) + @$(TOUCH) $@ +else +# NO optimization => move it and keep a stamp +%.db-stamp: %.db.raw + @$(MV) $< $(DB_REALTARGET) + @$(TOUCH) $@ + @$(TOUCH) $< +%.db-stamp: %.t.db.raw + @$(MV) $< $(DB_REALTARGET) + @$(TOUCH) $@ + @$(TOUCH) $< +endif + +%.t.db.raw: %.substitutions + @echo "Inflating database from $<" + @$(RM) $@ + @$(MSI) $< > $@ + +##################################################### CapFast filter + +%.edf:: ../%.sch $(DEPSCHS) + @if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi + $(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $< + +##################################################### Substitution files + +$(INSTALL_DB)/%.substitutions: %.substitutions + @echo "Installing $@" + @$(INSTALL) -d -m 644 $(@F) $(@D) + +%.substitutions:: ../%.substitutions + @$(CP) $< $@ + +ifdef CREATESUBSTITUTIONS +%.substitutions:: $(word $(words $(CREATESUBSTITUTIONS)),$(CREATESUBSTITUTIONS)) + @$(CREATESUBSTITUTIONS) $* +endif + +# Better make it PRECIOUS (to get around make bug) +.PRECIOUS: %.substitutions + +##################################################### Template databases + +# Installed template files (dbLoadTemplate() on IOC side) +$(INSTALL_DB)/%.template: %.template + @echo "Installing $@" + @$(INSTALL) -d -m 644 $(@F) $(@D) + +%.template:: ../%.template + @$(CP) $< $@ + +%.template: %.edf + $(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $< + @$(REPLACEVAR) < $@.VAR > $@ + @$(RM) $@.VAR + +##################################################### Flat databases + +%.db.raw:: ../%.db + $(CP) $< $@ + +%.db.raw: %.edf + $(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $< + @$(REPLACEVAR) < $@.VAR > $@ + @$(RM) $@.VAR + +##################################################### DBD stuff + +$(INSTALL_DBD)/%: % + @echo "Installing $@" + @$(INSTALL) -d -m 644 $< $(@D) + +$(INSTALL_DBD)/%:: ../% + @echo "Installing $@" + @$(INSTALL) -d -m 644 $< $(@D) + +bpt%.dbd: bpt%.data + $(RM) $@ + $(MAKEBPT) $< + +bpt%.dbd:: ../bpt%.data + $(RM) $@ + $(MAKEBPT) $< + +# Patch for old applications +ifdef USER_DBDFLAGS +DBDFLAGS = $(USER_DBDFLAGS) +endif + +ifdef DBDEXPAND +$(DBDNAME): ../$(DBDEXPAND) + @echo "Expanding dbd" + @$(RM) $@ + $(DBEXPAND) $(DBDFLAGS) $< > $@ +endif + +##################################################### Dependencies + +DEPENDS: $(filter $(patsubst %.db, %.substitutions, $(DB)), $(wildcard *.substitutions)) + @$(MAKEDBDEPENDS) $^ + +-include DEPENDS