rules for installing UIs to central location

This commit is contained in:
2016-08-04 17:14:47 +02:00
parent a4cffce68e
commit 0bd8b66e3b
+45 -25
View File
@@ -1,20 +1,18 @@
# driver.makefile
#
# $Header: /cvs/G/DRV/misc/App/tools/driver.makefile,v 1.100 2014/12/10 14:15:29 zimoch Exp $
#
# This generic makefile compiles EPICS modules (drivers, records, snl, ...)
# for all installed EPICS versions in parallel.
# for all installed EPICS versions.
# Read this documentation and the inline comments carefully before
# changing anything in this file.
#
# Usage: Create a Makefile containig the line:
# include /ioc/tool/driver.makefile
# include /ioc/tool/driver.makefile
# Optionally add variable definitions below that line.
#
# This makefile automatically finds the source file (unless overwritten with
# the SOURCES variable in your Makefile) and generates a
# library for each EPICS version and each target architecture.
# Therefore, it calls Makefile (i.e. itself) recursively.
# the SOURCES variable in your Makefile) and generates a module consisting
# of a library and .dbd file for each EPICS version and each target architecture.
# Therefore, it calls itself recursively.
#
# - First run: (see comment ## RUN 1)
# Find out what to build
@@ -33,13 +31,13 @@
# - Fourth run: (see comment ## RUN 4)
# Compile everything.
#
# Library names are derived from the directory name (unless overwritten
# Module names are derived from the directory name (unless overwritten
# with the MODULE variable in your Makefile).
# A LIBVERSION number is generated from the latest CVS or GIT tag of the sources.
# If any file is not up-to-date in CVS/GIT, not tagged, or tagged differently from the
# other files, the version is a test version and labelled with the user name.
# The library is installed to ${EPICS_MODULES}/${MODULE}/${LIBVERSION}/lib/${T_A}/.
# The library can be loaded with require "<libname>" [,"<version>"] [,"<variable>=<substitution>, ..."]
# A module can be loaded with require "<module>" [,"<version>"] [,"<variable>=<substitution>, ..."]
#
# User variables (add them to your Makefile, none is required):
# MODULE
@@ -48,7 +46,7 @@
# SOURCES
# All source files to compile.
# If not defined, default is all *.c *.cc *.cpp *.st *.stt in
# the source directory (where your Makefile is).
# the source directory (where you run make).
# If you define this, you must list ALL sources.
# DBDS
# All dbd files of the project.
@@ -58,8 +56,8 @@
# If not defined, all headers are for local use only.
# EXCLUDE_VERSIONS
# EPICS versions to skip. Usually 3.13 or 3.14
# EXCLUDE_ARCHS
# Skip architectures that start or end with the pattern, e.g. T2 or ppc604
# ARCH_FILTER
# Sub set of architectures to build for, e.g. %-ppc604
# get the location of this file
MAKEHOME:=$(dir $(lastword ${MAKEFILE_LIST}))
@@ -105,6 +103,8 @@ HEADERS=
# Don't install anything (different from default EPICS make rules)
default: build
.PHONY: build clean install uninstall debug help version
IGNOREFILES = .cvsignore .gitignore
%: ${IGNOREFILES}
${IGNOREFILES}:
@@ -168,6 +168,7 @@ help:
@for target in '' build '<EPICS version>' \
install 'install.<EPICS version>' \
uninstall 'uninstall.<EPICS version>' \
installqt uninstallqt \
clean help version; \
do echo " make $$target"; \
done
@@ -216,6 +217,7 @@ build install debug:: ${IGNOREFILES}
# make 3.13 or make 3.14 instead of make
define VERSIONRULES
.PHONY: $(1) %.$(1)
$(1): ${IGNOREFILES}
for VERSION in $${EPICS_VERSIONS_$(1)}; do $${MAKEVERSION} EPICSVERSION=$$$$VERSION build; done
@@ -228,6 +230,7 @@ $(foreach v,$(sort $(basename ${INSTALLED_EPICS_VERSIONS})),$(eval $(call VERSIO
# make <action>.<version> instead of make <action> or
# make <version> instead of make
# EPICS version must be installed but need not be in EPICS_VERSIONS
.PHONY: ${INSTALLED_EPICS_VERSIONS} ${INSTALLED_EPICS_VERSIONS:%=build.%} ${INSTALLED_EPICS_VERSIONS:%=install.%} ${INSTALLED_EPICS_VERSIONS:%=debug.%}
${INSTALLED_EPICS_VERSIONS}:
${MAKEVERSION} EPICSVERSION=$@ build
@@ -240,6 +243,33 @@ ${INSTALLED_EPICS_VERSIONS:%=install.%}:
${INSTALLED_EPICS_VERSIONS:%=debug.%}:
${MAKEVERSION} EPICSVERSION=${@:debug.%=%} debug
# Install user interfaces to global location
.PHONY: installui uninstallui
define INSTALL_UI_RULE
INSTALL_$(1)=$(2)
$(1)_FILES=$$(wildcard $$(or $${$(1)},$(3)))
.PHONY: install$(1) uninstall$(1)
installui: install$(1)
install$(1):
# @echo $(1)=$${$(1)}
@$$(if $${$(1)_FILES},echo "Installing $(1) user interfaces";$$(MKDIR) $${INSTALL_$(1)})
$$(if $$(wildcard $${INSTALL_$(1)}/.$${PRJ}-*.txt),$$(RM) $$(addprefix $${INSTALL_$(1)}/,$$(filter-out $$(notdir $${$(1)_FILES}),$$(shell cat $${INSTALL_$(1)}/.$${PRJ}-*.txt 2>/dev/null)) .$${PRJ}-*.txt))
$$(if $${$(1)_FILES},install -C -m444 $${$(1)_FILES} -t $${INSTALL_$(1)})
@$$(if $${$(1)_FILES},echo $$(notdir $${$(1)_FILES}) > $${INSTALL_$(1)}/.$${PRJ}-$$(LIBVERSION).txt)
uninstallui: uninstall$(1)
uninstall$(1):
@echo "Removing $(1) user interfaces"
$$(RM) $$(addprefix $${INSTALL_$(1)}/,$$(sort $$(notdir $${$(1)_FILES}) $$(shell cat $${INSTALL_$(1)}/.$${PRJ}-*.txt 2>/dev/null)) .$${PRJ}-*.txt)
endef
#$(eval $(call INSTALL_UI_RULE,VARIABLE,installdir,sourcedefaultlocation))
$(eval $(call INSTALL_UI_RULE,QT,${CONFIGBASE}/qt,qt/*))
else # EPICSVERSION
# EPICSVERSION defined
# second or third turn (see T_A branch below)
@@ -299,7 +329,7 @@ ifndef T_A
# Look for sources etc.
# Export everything for third run
AUTOSRCS := $(filter-out ~%,$(wildcard *.c) $(wildcard *.cc) $(wildcard *.cpp *.st *.stt *.gt))
AUTOSRCS := $(filter-out ~%,$(wildcard *.c *.cc *.cpp *.st *.stt *.gt))
SRCS = $(if ${SOURCES},$(filter-out -none-,${SOURCES}),${AUTOSRCS})
SRCS += ${SOURCES_${EPICS_BASETYPE}}
SRCS += ${SOURCES_${EPICSVERSION}}
@@ -467,8 +497,6 @@ export BINS
export CFG
export UIS
else # in O.*
## RUN 4
# in O.* directory
@@ -531,7 +559,6 @@ INSTALL_DB = ${INSTALL_REV}/db
INSTALL_CFG = ${INSTALL_REV}/cfg
INSTALL_DOC = ${MODULE_LOCATION}/doc
INSTALL_SCR = ${INSTALL_REV}
INSTALL_UI = ${MODULE_LOCATION}/ui
#INSTALL_DOCUS = $(addprefix ${INSTALL_DOC}/${PRJ}/,$(notdir ${DOCU}))
@@ -749,7 +776,7 @@ EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE) -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS)
# Setup searchpaths from all used files
# find all sources whatever suffix
$(foreach filetype,SRCS TEMPLS SCR UIS,$(foreach ext,$(sort $(suffix ${${filetype}})),\
$(foreach filetype,SRCS TEMPLS SCR,$(foreach ext,$(sort $(suffix ${${filetype}})),\
$(eval vpath %${ext} $(sort $(dir $(filter %${ext},${${filetype}:%=../%}))))))
# Do not treat %.dbd the same way because it creates a circular dependency
@@ -785,7 +812,6 @@ INSTALL_DBS = $(addprefix ${INSTALL_DB}/,$(notdir ${TEMPLS}))
INSTALL_SCRS = $(addprefix ${INSTALL_SCR}/,$(notdir ${SCR}))
INSTALL_BINS = $(addprefix ${INSTALL_BIN}/,$(notdir ${BINS}))
INSTALL_CFGS = $(CFG:%=${INSTALL_CFG}/%)
INSTALL_UIS = $(addprefix ${INSTALL_UI}/,$(notdir ${UIS}))
debug::
@echo "INSTALL_LIB = $(INSTALL_LIB)"
@@ -803,10 +829,8 @@ debug::
@echo "INSTALL_CFGS = $(INSTALL_CFGS)"
@echo "INSTALL_BIN = $(INSTALL_BIN)"
@echo "INSTALL_BINS = $(INSTALL_BINS)"
@echo "INSTALL_UI = $(INSTALL_UI)"
@echo "INSTALL_UIS = $(INSTALL_UIS)"
INSTALLS += ${INSTALL_CFGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_BINS} ${INSTALL_DEPS} ${INSTALL_UIS}
INSTALLS += ${INSTALL_CFGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_BINS} ${INSTALL_DEPS}
${INSTALLRULE} ${INSTALLS}
@@ -834,10 +858,6 @@ ${INSTALL_CFGS}: ${CFGS}
@echo "Installing configuration files $^ to $(@D)"
$(INSTALL) -d -m444 $^ $(@D)
${INSTALL_UIS}: $(notdir ${UIS})
@echo "Installing user interfaces $^ to $(@D)"
$(INSTALL) -d -m444 $^ $(@D)
${INSTALL_BINS}: $(addprefix ../,$(filter-out /%,${BINS})) $(filter /%,${BINS})
@echo "Installing binaries $^ to $(@D)"
$(INSTALL) -d -m555 $^ $(@D)