Skip to content
Snippets Groups Projects
Commit 0bd8b66e authored by Dirk Zimoch's avatar Dirk Zimoch
Browse files

rules for installing UIs to central location

parent a4cffce6
No related branches found
No related tags found
No related merge requests found
# 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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment