From d9bfeb9625cbb10ee1650342ea6a49cdfbf4972d Mon Sep 17 00:00:00 2001 From: Dirk Zimoch <dirk.zimoch@psi.ch> Date: Wed, 11 May 2016 13:45:16 +0200 Subject: [PATCH] warn about depencies on old drivers --- App/tools/driver.makefile | 67 +++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/App/tools/driver.makefile b/App/tools/driver.makefile index 2312df0f..fbf60a14 100644 --- a/App/tools/driver.makefile +++ b/App/tools/driver.makefile @@ -72,7 +72,6 @@ BUILDCLASSES = vxWorks EPICS_MODULES ?= /ioc/modules MODULE_LOCATION = ${EPICS_MODULES}/$(or ${PRJ},$(error PRJ not defined))/$(or ${LIBVERSION},$(error LIBVERSION not defined)) EPICS_LOCATION = /usr/local/epics -SNCSEQ=${EPICS_BASE}/../seq DOCUEXT = txt html htm doc pdf ps tex dvi gif jpg png DOCUEXT += TXT HTML HTM DOC PDF PS TEX DVI GIF JPG PNG @@ -142,6 +141,7 @@ export OS_CLASS_LIST export ARCH_FILTER export EXCLUDE_ARCHS +export MAKE_FIRST # shell commands RMDIR = rm -rf @@ -180,6 +180,8 @@ help: @echo " HEADERS () [only those to install]" @echo " TEMPLATES (*.template *.db *.subs) [db files]" @echo " SCRIPTS (*.cmd) [startup and other scripts]" + @echo " BINS () [programs to install]" + @echo " UIS (*.ui) [user interfaces to install]" @echo " EXCLUDE_VERSIONS () [versions not to build, e.g. 3.14]" @echo " EXCLUDE_ARCHS () [target architectures not to build]" @echo " ARCH_FILTER () [target architectures to build, e.g. SL6%]" @@ -336,8 +338,6 @@ SCR += ${SCRIPTS_${EPICS_BASETYPE}} SCR += ${SCRIPTS_${EPICSVERSION}} export SCR -export CFG - DOCUDIR = . #DOCU = $(foreach DIR,${DOCUDIR},$(wildcard ${DIR}/*README*) $(foreach EXT,${DOCUEXT}, $(wildcard ${DIR}/*.${EXT}))) export DOCU @@ -359,7 +359,7 @@ SRCS_vxWorks += ${SOURCES_${EPICS_BASETYPE}_vxWorks} SRCS_vxWorks += ${SOURCES_vxWorks_${EPICS_BASETYPE}} export SRCS_vxWorks -install build debug:: +install build debug:: $(MAKE_FIRST) @echo "MAKING EPICS VERSION R${EPICSVERSION}" uninstall:: @@ -450,19 +450,25 @@ install build debug:: O.${EPICSVERSION}_Common O.${EPICSVERSION}_${T_A} endif -REQ = ${REQUIRED} ${REQUIRED_${OS_CLASS}} ${REQUIRED_${T_A}} ${REQUIRED_${EPICS_BASETYPE}} ${REQUIRED_${EPICSVERSION}} -REQ += $(if $(filter %.st %.stt,${SRCS}),seq) -export REQ - # add sources for specific epics types (3.13 or 3.14) or architectures ARCH_PARTS = ${T_A} $(subst -, ,${T_A}) ${OS_CLASS} VAR_EXTENSIONS = ${EPICS_BASETYPE} ${EPICSVERSION} ${ARCH_PARTS} ${ARCH_PARTS:%=${EPICS_BASETYPE}_%} ${ARCH_PARTS:%=${EPICSVERSION}_%} export VAR_EXTENSIONS +REQ = ${REQUIRED} $(foreach x, ${VAR_EXTENSIONS}, ${REQUIRED_$x}) +export REQ + SRCS += $(foreach x, ${VAR_EXTENSIONS}, ${SOURCES_$x}) USR_LIBOBJS += ${LIBOBJS} $(foreach x,${VAR_EXTENSIONS},${LIBOBJS_$x}) export USR_LIBOBJS +BINS += $(foreach x, ${VAR_EXTENSIONS}, ${BINS_$x}) +export BINS + +export CFG + +export UIS + else # in O.* ## RUN 4 # in O.* directory @@ -560,6 +566,8 @@ LIBOBJS += $(filter /%.o /%.a,${SRCS}) # add all .a and .o with relative path, but prefix with ../ LIBOBJS += $(patsubst %,../%,$(filter-out /%,$(filter %.o %.a,${SRCS}))) LIBOBJS += ${LIBRARIES:%=${INSTALL_LIB}/%Lib} +LIBOBJS += $(foreach l,${USR_LIBOBJS}, $(addprefix ../,$(filter-out /%,$l)) $(filter /%,$l)) + LIBNAME = $(if $(strip ${LIBOBJS}),${PRJ}Lib,) # must be the un-munched name MODULELIB = ${LIBNAME:%=%.munch} PROD = ${MODULELIB} @@ -573,12 +581,14 @@ PROD = ${MODULELIB} else # only 3.14 from here +LIBRARY_OBJS = $(strip ${LIBOBJS} $(foreach l,${USR_LIBOBJS},$(addprefix ../,$(filter-out /%,$l))$(filter /%,$l))) + ifeq (${OS_CLASS},vxWorks) # only install the munched lib INSTALL_PROD= -MODULELIB = $(if $(strip ${LIBOBJS} ${USR_LIBOBJS}),${PRJ}Lib.munch,) +MODULELIB = $(if ${LIBRARY_OBJS},${PRJ}Lib.munch,) else -MODULELIB = $(if $(strip ${LIBOBJS} ${USR_LIBOBJS}),${LIB_PREFIX}${PRJ}${SHRLIB_SUFFIX},) +MODULELIB = $(if ${LIBRARY_OBJS},${LIB_PREFIX}${PRJ}${SHRLIB_SUFFIX},) endif # vxWorks @@ -588,11 +598,10 @@ LIBOBJS += $(filter /%.$(OBJ) /%(LIB_SUFFIX),${SRCS}) LIBOBJS += ${LIBRARIES:%=${INSTALL_LIB}/%Lib} LIBS = -L ${EPICS_BASE_LIB} ${BASELIBS:%=-l%} LINK.cpp += ${LIBS} -PRODUCT_OBJS = ${LIBOBJS} ${USR_LIBOBJS} +PRODUCT_OBJS = ${LIBRARY_OBJS} # Linux -LOADABLE_LIBRARY=$(if $(strip ${LIBOBJS} ${USR_LIBOBJS}),${PRJ},) -LIBRARY_OBJS = ${LIBOBJS} ${USR_LIBOBJS} +LOADABLE_LIBRARY=$(if ${LIBRARY_OBJS},${PRJ},) # Hack needed needed for 3.14.8 host arch when no Makefile exists (but only for example GNUmakefile) ifeq (${EPICSVERSION}-${T_A},3.14.8-${EPICS_HOST_ARCH}) @@ -680,10 +689,8 @@ DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS}))) #$(shell awk '$(maksubfuncfile)' $(addprefix ../,$(filter %.c %.cc %.C %.cpp, $(SRCS))) > ${SUBFUNCFILE}) #DBDFILES += $(if $(shell cat ${SUBFUNCFILE}),${SUBFUNCFILE}) -# snc location in 3.14 -#-include ${SNCSEQ}/configure/RULES_BUILD # incompatible to 3.15 -SNC=${SNCSEQ}/bin/$(EPICS_HOST_ARCH)/snc -SNC_CFLAGS=-I ${SNCSEQ}/include +# snc location in 3.14: from latest version module seq or fall back to globally installed +SNC=$(lastword $(dir ${EPICS_BASE})seq/bin/$(EPICS_HOST_ARCH)/snc $(shell ls -dv ${EPICS_MODULES}/seq/*.*.*/R${EPICSVERSION}/bin/${EPICS_HOST_ARCH}/snc 2>/dev/null)) endif # 3.14 @@ -776,7 +783,9 @@ INSTALL_DBDS = ${MODULEDBD:%=${INSTALL_DBD}/%} INSTALL_HDRS = $(addprefix ${INSTALL_INCLUDE}/,$(notdir ${HDRS})) 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)" @@ -792,8 +801,12 @@ debug:: @echo "INSTALL_SCRS = $(INSTALL_SCRS)" @echo "INSTALL_CFG = $(INSTALL_CFG)" @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_DEPS} +INSTALLS += ${INSTALL_CFGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_BINS} ${INSTALL_DEPS} ${INSTALL_UIS} ${INSTALLRULE} ${INSTALLS} @@ -825,6 +838,10 @@ ${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) + # Create SNL code from st/stt file # (RULES.Vx only allows ../%.st, 3.14 has no .st rules at all) # Important to have %.o: %.st and %.o: %.stt rule before %.o: %.c rule! @@ -844,8 +861,10 @@ SNCFLAGS += -r @echo "Compiling $(*F).c" $(RM) $@ $(COMPILE.c) ${SNC_CFLAGS} $(*F).c +ifneq (${EPICS_BASETYPE},3.13) @echo "Building $(*F)_snl.dbd" - awk -F '[ ;]' '/extern struct seqProgram/ { print "registrar (" $$4 "Registrar)"}' $(*F).c > $(*F)_snl.dbd + awk -F [\(\)] '/epicsExportRegistrar/ { print "registrar (" $$2 ")"}' $(*F).c > $(*F)_snl.dbd +endif %$(OBJ) %_snl.dbd: %.stt @echo "Preprocessing $(<F)" @@ -857,8 +876,10 @@ SNCFLAGS += -r @echo "Compiling $(*F).c" $(RM) $@ $(COMPILE.c) ${SNC_CFLAGS} $(*F).c +ifneq (${EPICS_BASETYPE},3.13) @echo "Building $(*F)_snl.dbd" - awk -F '[ ;]' '/extern struct seqProgram/ { print "registrar (" $$4 "Registrar)"}' $(*F).c > $(*F)_snl.dbd + awk -F [\(\)] '/epicsExportRegistrar/ { print "registrar(" $$2 ")"}' $(*F).c > $(*F)_snl.dbd +endif # Create GPIB code from gt file %.c %.dbd %.list: %.gt @@ -949,15 +970,15 @@ ${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE) @echo "Collecting dependencies" $(RM) $@ @echo "# Generated file. Do not edit." > $@ - # dependencies on other module headers + # check dependencies on other module headers cat *.d 2>/dev/null | sed 's/ /\n/g' | sed -n 's%${EPICS_MODULES}/*\([^/]*\)/\([0-9]*\.[0-9]*\)\.[0-9]*/.*%\1 \2%p;s%$(EPICS_MODULES)/*\([^/]*\)/\([^/]*\)/.*%\1 \2%p'| sort -u >> $@ ifneq ($(strip ${REQ}),) # manully added dependencies: ${REQ} $(foreach m,${REQ},echo "$m $(or ${$m_VERSION},$(and $(wildcard ${EPICS_MODULES}/$m),$(error REQUIRED module $m has no numbered version. Set $m_VERSION)),$(warning REQUIRED module $m not found for ${T_A}.))" >> $@;) endif ifdef OLD_INCLUDE - # dependencies on old style driver headers - ${MAKEHOME}/getPrerequisites.tcl -dep ${OLD_INCLUDE} | grep -vw ${PRJ} >> $@; true + # check dependencies on old style driver headers + ${MAKEHOME}/getPrerequisites.tcl -dep ${OLD_INCLUDE} | grep -vw -e ${PRJ} -e ^$$ >> $@ && echo "Warning: dependency on old style driver"; true; endif $(BUILDRULE) -- GitLab