#************************************************************************* # Copyright (c) 2011 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 the file LICENSE that is included with this distribution. #************************************************************************* # RULES.Db # Set db substitutions and template file suffixes SUBST_SUFFIX ?= .substitutions TEMPL_SUFFIX ?= .template #--------------------------------------------------------------- # vpath vpath %.pm $(USR_VPATH) $(SRC_DIRS) $(dir $(DBD)) vpath %.pod $(USR_VPATH) $(SRC_DIRS) .. $(dir $(DBD)) vpath %.dbd $(USR_VPATH) $(SRC_DIRS) $(dir $(DBD)) vpath %.db $(USR_VPATH) $(SRC_DIRS) $(dir $(DB)) vpath %.vdb $(USR_VPATH) $(SRC_DIRS) $(dir $(DB)) vpath %$(SUBST_SUFFIX) $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR) vpath %$(TEMPL_SUFFIX) $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR) vpath bpt%.data $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR) vpath %.acf $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR) vpath %.acs $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR) #--------------------------------------------------------------- # dbflags dbdflags DBD_SEARCH_DIRS = . .. $(COMMON_DIR) $(SRC_DIRS) $(INSTALL_DBD) $(RELEASE_DBD_DIRS) DB_SEARCH_DIRS = . .. $(COMMON_DIR) $(SRC_DIRS) $(INSTALL_DB) $(RELEASE_DB_DIRS) DBDFLAGS = $(USR_DBDFLAGS) $(CMD_DBDFLAGS) $(addprefix -I,$(DBD_SEARCH_DIRS)) DBFLAGS = $($*_DBFLAGS) $(USR_DBFLAGS) $(CMD_DBFLAGS) $(addprefix -I,$(DB_SEARCH_DIRS)) REGRDDFLAGS = $(DBDFLAGS) $($*_REGRDDFLAGS) $(USR_REGRDDFLAGS) $(CMD_REGRDDFLAGS) #--------------------------------------------------------------- # Targets # --------------------------------------------------- # To allow os specific dbd files AND have the -j option work properly, CROSS_TARGET_OS_TYPES = $(sort $(foreach target, \ $(EPICS_HOST_ARCH) $(CROSS_COMPILER_TARGET_ARCHS), \ $(firstword $(subst -, ,$(target))))) DBD += $(foreach type, $(CROSS_TARGET_OS_TYPES), $(DBD_$(type))) # Users add os specific dbd files to a Makefile as follows # # DBD_vxWorks += abcVx.dbd # DBD_RTEMS += abcRTEMS.dbd # DBD_solaris += abcSolaris.dbd # # --------------------------------------------------- # DBD concatination files COMMON_DBDCATS += $(addprefix $(COMMON_DIR)/,$(DBDCAT)) DBDCAT_SOURCES += $(foreach file, $($*_DBD), $(DBDCAT_SOURCE) ) DBDCAT_SOURCE = $(firstword $(wildcard $(file) $(foreach dir, \ $(DBD_SEARCH_DIRS),$(addsuffix /$(file),$(dir)))) \ $(COMMON_DIR)/$(file)) DBDCAT_COMMAND = $(if $(DBDCAT_SOURCES),\ $(CAT) $(DBDCAT_SOURCES) > $(notdir $@),\ @echo "No input files for $(notdir $@)") INSTALL_DBDS += $(addprefix $(INSTALL_DBD)/,$(DBDCAT)) # --------------------------------------------------- DBDINC_NAME = $(patsubst %.h,%,$(patsubst %.dbd,%,$(DBDINC))) DBD += $(addsuffix .dbd,$(DBDINC_NAME)) INC += $(addsuffix .h,$(DBDINC_NAME)) INSTALL_DBDS += $(addprefix $(INSTALL_DBD)/,$(notdir $(DBD))) COMMON_DBDS += $(filter $(COMMON_DIR)/%, $(foreach file, $(DBD), \ $(firstword $(SOURCE_DBD) $(COMMON_DIR)/$(file) ) ) ) SOURCE_DBD = $(wildcard $(file) $(SOURCE_DBD_bbb) ) SOURCE_DBD_bbb = $(foreach dir, $(GENERIC_SRC_DIRS), $(SOURCE_DBD_aaa) ) SOURCE_DBD_aaa = $(addsuffix /$(file), $(dir) ) INSTALL_DBS += $(addprefix $(INSTALL_DB)/,$(notdir $(DB))) COMMON_DBS += $(filter $(COMMON_DIR)/%, $(foreach file, $(DB), \ $(firstword $(SOURCE_DB) $(COMMON_DIR)/$(file) ) ) ) SOURCE_DB = $(wildcard $(file) $(SOURCE_DB_bbb) ) SOURCE_DB_bbb = $(foreach dir, $(GENERIC_SRC_DIRS), $(SOURCE_DB_aaa) ) SOURCE_DB_aaa = $(addsuffix /$(file), $(dir) ) COMMONS = $(COMMON_DIR)/*.dbd $(COMMON_DIR)/*.db $(COMMON_DIR)/*.h \ $(COMMON_DIR)/*$(SUBST_SUFFIX) $(COMMON_DIR)/*$(TEMPL_SUFFIX) # Remove trailing numbers (to 99) on stem TEMPLATE1 = $(patsubst %0,%,$(patsubst %1,%,$(patsubst %2,%,$(patsubst %3,%, \ $(patsubst %4,%,$(patsubst %5,%,$(patsubst %6,%,$(patsubst %7,%, \ $(patsubst %8,%,$(patsubst %9,%,$*)))))))))) TEMPLATE2 = $(patsubst %0,%,$(patsubst %1,%,$(patsubst %2,%,$(patsubst %3,%, \ $(patsubst %4,%,$(patsubst %5,%,$(patsubst %6,%,$(patsubst %7,%, \ $(patsubst %8,%,$(patsubst %9,%,$(TEMPLATE1))))))))))) TEMPLATE3 = $(addsuffix $(TEMPL_SUFFIX),$(addprefix ../,$(TEMPLATE2))) TEMPLATE_FILENAME = $(firstword $(wildcard $($*_TEMPLATE) \ $(addprefix ../,$($*_TEMPLATE)) ../$*$(TEMPL_SUFFIX) $(TEMPLATE3) \ ../template)) INSTALL_DB_INSTALLS = $(addprefix $(INSTALL_DB)/,$(notdir $(DB_INSTALLS))) INSTALL_DBD_INSTALLS = $(addprefix $(INSTALL_DBD)/,$(notdir $(DBD_INSTALLS))) COMMONDEP_TARGET = $(COMMON_DIR)/$(basename $@) #--------------------------------------------------------------- # acf files # An access security configuration file, *.acf, can be created from # an *.acs file (has format of acf file plus #include "filename" lines) # flags for GNU compiler ACF_CPPFLAGS_YES = -undef -nostdinc ACF_CPPFLAGS = $(ACF_CPPFLAGS_$(GNU)) ACF_INCLUDES = -I. $(TARGET_INCLUDES) $(USR_INCLUDES)\ $(SRC_INCLUDES) -I$(INSTALL_DB) ACFDEPENDS_CMD = $(MKMF) -m $@ $(ACF_INCLUDES) $(COMMONDEP_TARGET) $< ACF_CMD = $(CPP) $(ACF_CPPFLAGS) $(ACF_INCLUDES) $< > $@ #--------------------------------------------------------------- # dependencies HINC += $(addsuffix .h,$(DBDINC_NAME)) COMMON_DBDINC += $(addprefix $(COMMON_DIR)/,$(HINC)) DBDDEPENDS_FILES += $(addsuffix $(DEP),$(HINC) \ $(patsubst $(COMMON_DIR)/%,%,$(COMMON_DBS)) \ $(patsubst $(COMMON_DIR)/%,%, \ $(filter-out $(COMMON_DIR)/bpt%.dbd,$(COMMON_DBDS)))) #--------------------------------------------------------------- ifndef T_A DEP = .d TEMPLATE3 += $(addsuffix $(TEMPL_SUFFIX), $(TEMPLATE2)) COMMON_DIR = . INSTALL_DBDS = INSTALL_DBS = COMMON_DBDS = $(DBD) COMMON_DBS = $(DB) COMMONS = $(DBD) $(DB) ACTIONS = inc ACTIONS += build ACTIONS += install ACTIONS += buildInstall ACTIONS += runtests tapfiles clean-tests test-results junitfiles actionArchTargets = $(foreach action, $(ACTIONS), \ $(foreach arch, $(BUILD_ARCHS), $(action)$(DIVIDER)$(arch))) cleanArchTargets = $(foreach arch, $(BUILD_ARCHS), clean$(DIVIDER)$(arch)) include $(CONFIG)/CONFIG_APP_INCLUDE all: install install: buildInstall buildInstall: build rebuild: clean install .PHONY: all $(ACTIONS) $(actionArchTargets) $(BUILD_ARCHS): install $(cleanArchTargets): clean .PHONY: $(BUILD_ARCHS) $(actionArchTargets) $(cleanArchTargets) else # T_A is defined ifeq ($(EPICS_HOST_ARCH),$(T_A)) host: install else host: endif .PHONY: host endif # T_A ifneq (,$(strip $(DBDDEPENDS_FILES))) -include $(DBDDEPENDS_FILES) endif #--------------------------------------------------------------- # build dependancies, clean rule inc: $(COMMON_INC) $(INSTALL_INC) $(COMMON_DBDS) $(COMMON_DBDCATS) \ $(INSTALL_DBDS) $(INSTALL_DBD_INSTALLS) $(COMMON_DOCS) build: $(COMMON_DBS) $(INSTALL_DBS) \ $(DBDDEPENDS_FILES) $(TARGETS) \ $(INSTALL_DB_INSTALLS) clean: db_clean db_clean: @$(RM) $(COMMONS) $(DBDDEPENDS_FILES) @$(RM) *_registerRecordDeviceDriver.cpp @$(RM) $(TARGETS) .PHONY: db_clean realclean: clean #--------------------------------------------------------------- # Dependency files %Record.h$(DEP): $(COMMON_DIR)/%Record.dbd $(DBDTORECTYPEH_dep) @$(RM) $@ @$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ %Record.h$(DEP): %Record.dbd $(DBDTORECTYPEH_dep) @$(RM) $@ @$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ %Record.h$(DEP): ../%Record.dbd $(DBDTORECTYPEH_dep) @$(RM) $@ @$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ menu%.h$(DEP): $(COMMON_DIR)/menu%.dbd $(DBDTOMENUH_dep) @$(RM) $@ @$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ menu%.h$(DEP): menu%.dbd $(DBDTOMENUH_dep) @$(RM) $@ @$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ menu%.h$(DEP): ../menu%.dbd $(DBDTOMENUH_dep) @$(RM) $@ @$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ %.dbd$(DEP): %.dbd.pod @$(RM) $@ @echo "$(COMMONDEP_TARGET): ../Makefile" > $@ %.dbd$(DEP): %Include.dbd @$(RM) $@ @$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ %.dbd$(DEP): ../%Include.dbd @$(RM) $@ @$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ %.dbd$(DEP): $($*_DBD) @$(RM) $@ @$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $($*_DBD) > $@ @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@ %.db$(DEP): %$(SUBST_SUFFIX) @$(RM) $@ $(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) -S$< $(TEMPLATE_FILENAME) > $@ %.db$(DEP): ../%$(SUBST_SUFFIX) @$(RM) $@ $(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) -S$< $(TEMPLATE_FILENAME) > $@ %.db$(DEP): %$(TEMPL_SUFFIX) @$(RM) $@ $(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) $< > $@ %.db$(DEP): ../%$(TEMPL_SUFFIX) @$(RM) $@ $(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) $< > $@ %.acf$(DEP): %.acs @$(RM) $@ @$(ACFDEPENDS_CMD) %.acf$(DEP): ../%.acs @$(RM) $@ @$(ACFDEPENDS_CMD) .PRECIOUS: %$(DEP) #--------------------------------------------------------------- # Substitution files # WARNING: CREATESUBSTITUTIONS script needs output dir on command line ifdef CREATESUBSTITUTIONS $(COMMON_DIR)/%$(SUBST_SUFFIX): $(ECHO) "Create substitutions" @$(RM) $@ $(CREATESUBSTITUTIONS) $@ endif $(INSTALL_DB)/%$(SUBST_SUFFIX): %$(SUBST_SUFFIX) $(ECHO) "Installing substitution file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) $(INSTALL_DB)/%$(SUBST_SUFFIX): ../%$(SUBST_SUFFIX) $(ECHO) "Installing substitution file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) .PRECIOUS: $(COMMON_DIR)/%$(SUBST_SUFFIX) #--------------------------------------------------------------- # Template files $(INSTALL_DB)/%$(TEMPL_SUFFIX): %$(TEMPL_SUFFIX) $(ECHO) "Installing template file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) $(INSTALL_DB)/%$(TEMPL_SUFFIX): ../%$(TEMPL_SUFFIX) $(ECHO) "Installing template file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) .PRECIOUS: $(COMMON_DIR)/%$(TEMPL_SUFFIX) #--------------------------------------------------------------- # INC files $(COMMON_DIR)/%Record.h: $(COMMON_DIR)/%Record.dbd $(DBDTORECTYPEH_dep) @$(RM) $(notdir $@) $(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%Record.h: %Record.dbd $(DBDTORECTYPEH_dep) @$(RM) $(notdir $@) $(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%Record.h: ../%Record.dbd $(DBDTORECTYPEH_dep) @$(RM) $(notdir $@) $(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/menu%.h: $(COMMON_DIR)/menu%.dbd $(DBDTOMENUH_dep) @$(RM) $(notdir $@) $(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/menu%.h: menu%.dbd $(DBDTOMENUH_dep) @$(RM) $(notdir $@) $(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/menu%.h: ../menu%.dbd $(DBDTOMENUH_dep) @$(RM) $(notdir $@) $(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ .PRECIOUS: $(COMMON_DIR)/%.h #--------------------------------------------------------------- # DBD files $(COMMON_DIR)/bpt%.dbd: bpt%.data $(ECHO) "Converting data from $<" @$(RM) $(notdir $@) $(MAKEBPT) $< $(notdir $@) @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.dbd: %.dbd.pod @$(RM) $(notdir $@) $(PERL) $(TOOLS)/podRemove.pl -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.dbd: %Include.dbd $(ECHO) "Expanding dbd file $<" @$(RM) $(notdir $@) $(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.dbd: ../%Include.dbd $(ECHO) "Expanding dbd file $<" @$(RM) $(notdir $@) $(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ # Make DBDCAT file x depend on x_DBD source files define DBDCAT_template $$(COMMON_DIR)/$(1).dbd: ../Makefile $$(foreach file, $$($(1)_DBD),$$(DBDCAT_SOURCE) ) endef $(foreach name,$(subst .dbd,,$(DBDCAT)), $(eval $(call DBDCAT_template,$(name)))) $(COMMON_DBDCATS):$(COMMON_DIR)/%.dbd: $(ECHO) "Creating dbd file $(notdir $@)" @$(RM) $(notdir $@) $(DBDCAT_COMMAND) @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.dbd: $($*_DBD) $(ECHO) "Creating dbd file $(notdir $@)" @$(RM) $(notdir $@) $(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $($*_DBD) @$(MV) $(notdir $@) $@ $(INSTALL_DBD)/%: $(COMMON_DIR)/% $(ECHO) "Installing created dbd file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) $(INSTALL_DBD)/%: % $(ECHO) "Installing dbd file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) $(INSTALL_DBD)/%: ../% $(ECHO) "Installing dbd file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) define DBD_INSTALLS_template $$(INSTALL_DBD)/$$(notdir $(1)): $(1) $(ECHO) "Installing $$@" @$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DBD) endef $(foreach file, $(DBD_INSTALLS), $(eval $(call DBD_INSTALLS_template, $(file)))) .PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%.dbd #--------------------------------------------------------------- # Markdown files $(COMMON_DIR)/%.md: %.dbd.pod $(DBDTOMD_pl) @$(RM) $(notdir $@) $(DBDTOMD) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.md: %.pod $(PODTOMD_pl) @$(RM) $(notdir $@) $(PODTOMD) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.md: ../%.pl $(PODTOMD_pl) @$(RM) $(notdir $@) $(PODTOMD) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ .PRECIOUS: $(COMMON_DIR)/%.md #--------------------------------------------------------------- # HTML files $(COMMON_DIR)/%.html: %.dbd.pod $(DBDTOHTML_pl) @$(RM) $(notdir $@) $(DBDTOHTML) $(DBDFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.html: %.pod $(PODTOHTML_dep) @$(RM) $(notdir $@) $(PODTOHTML) -s -s -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.html: %.pm $(PODTOHTML_dep) @$(RM) $(notdir $@) $(PODTOHTML) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.html: ../%.pm $(PODTOHTML_dep) @$(RM) $(notdir $@) $(PODTOHTML) -s -o $(notdir $@) $< @$(MKDIR) $(dir $@) @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.html: ../%.pl $(PODTOHTML_dep) @$(RM) $(notdir $@) $(PODTOHTML) -s -o $(notdir $@) $< @$(MV) $(notdir $@) $@ .PRECIOUS: $(COMMON_DIR)/%.html #--------------------------------------------------------------- # DB files $(COMMON_DIR)/%.db: $(COMMON_DIR)/%.edf $(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $*.VAR $< @$(REPLACEVAR) < $*.VAR > $@ @$(RM) $*.VAR $(COMMON_DIR)/%.db: %$(SUBST_SUFFIX) $(ECHO) "Inflating database from $< $(TEMPLATE_FILENAME)" @$(RM) $(notdir $@) $(MSI3_15) $(DBFLAGS) -o $(notdir $@) -S$< $(TEMPLATE_FILENAME) @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.db: ../%$(SUBST_SUFFIX) $(ECHO) "Inflating database from $< $(TEMPLATE_FILENAME)" @$(RM) $(notdir $@) $(MSI3_15) $(DBFLAGS) -o $(notdir $@) -S$< $(TEMPLATE_FILENAME) @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.db: %$(TEMPL_SUFFIX) $(ECHO) "Inflating database from $<" @$(RM) $(notdir $@) $(MSI3_15) $(DBFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.db: ../%$(TEMPL_SUFFIX) $(ECHO) "Inflating database from $<" @$(RM) $(notdir $@) $(MSI3_15) $(DBFLAGS) -o $(notdir $@) $< @$(MV) $(notdir $@) $@ $(COMMON_DIR)/%.acf: %.acs $(ECHO) "Creating acf file $@" @$(RM) $@ $(ACF_CMD) $(COMMON_DIR)/%.acf: ../%.acs $(ECHO) "Creating acf file $@" @$(RM) $@ $(ACF_CMD) .PRECIOUS: $(COMMON_DIR)/%.acf $(INSTALL_DB)/%: % $(ECHO) "Installing $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) $(INSTALL_DB)/%: ../% $(ECHO) "Installing $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) $(INSTALL_DB)/%.db: $(COMMON_DIR)/%.db $(ECHO) "Installing created db file $@" @$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D) define DB_INSTALLS_template $$(INSTALL_DB)/$$(notdir $(1)): $(1) $(ECHO) "Installing $$@" @$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DB) endef $(foreach file, $(DB_INSTALLS), $(eval $(call DB_INSTALLS_template, $(file)))) .PRECIOUS: $(COMMON_DIR)/%.edf .PRECIOUS: $(COMMON_DBS) #--------------------------------------------------------------- # register record,device,driver support %_registerRecordDeviceDriver.cpp: $(COMMON_DIR)/%.dbd $(REGRECDEVDRV_dep) @$(RM) $@ $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ \ $< $(basename $@) $(IOCS_APPL_TOP) %_registerRecordDeviceDriver.cpp: %.dbd $(REGRECDEVDRV_dep) @$(RM) $@ $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ \ $< $(basename $@) $(IOCS_APPL_TOP) %_registerRecordDeviceDriver.cpp: ../%.dbd $(REGRECDEVDRV_dep) @$(RM) $@ $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ \ $< $(basename $@) $(IOCS_APPL_TOP) .PRECIOUS: %_registerRecordDeviceDriver.cpp