diff --git a/App/tools/driver.makefile b/App/tools/driver.makefile
index ac8b9f1ba7642e20df64adcb57af5926171a6739..34c2d65bcea89aac97ea21c48e5dbca814e39151 100644
--- a/App/tools/driver.makefile
+++ b/App/tools/driver.makefile
@@ -1,6 +1,6 @@
 # driver.makefile
 #
-# $Header: /cvs/G/DRV/misc/App/tools/driver.makefile,v 1.81 2011/09/19 08:52:12 zimoch Exp $
+# $Header: /cvs/G/DRV/misc/App/tools/driver.makefile,v 1.82 2012/09/27 08:30:27 zimoch Exp $
 #
 # This generic makefile compiles EPICS code (drivers, records, snl, ...)
 # for all installed EPICS versions in parallel.
@@ -269,15 +269,25 @@ else # EPICSVERSION
 # EPICSVERSION defined 
 # second or third turn (see T_A branch below)
 
+EPICS_BASE=${EPICS_LOCATION}/base-${EPICSVERSION}
+
 ifneq ($(filter 3.14.%,$(EPICSVERSION)),)
 EPICS_BASETYPE=3.14
+
+# There is no 64 bit support before 3.14.12 
+ifneq ($(filter %_64,$(EPICS_HOST_ARCH)),)
+ifeq ($(wildcard $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)),)
+EPICS_HOST_ARCH:=$(patsubst %_64,%,$(EPICS_HOST_ARCH))
+export USR_CFLAGS_$(EPICS_HOST_ARCH) += -m32
+export USR_CXXFLAGS_$(EPICS_HOST_ARCH) += -m32
+export USR_LDFLAGS_$(EPICS_HOST_ARCH) += -m32
+endif
+endif
 endif # 3.14
 ifneq ($(filter 3.13.%,$(EPICSVERSION)),)
 EPICS_BASETYPE=3.13
 endif # 3.13
 
-EPICS_BASE=${EPICS_LOCATION}/base-${EPICSVERSION}
-
 # Is a version requested which is not installed?
 # Look if ${EPICS_BASE}/config/CONFIG file exists.
 ${EPICS_BASE}/config/CONFIG:
@@ -300,6 +310,7 @@ TOP:=${EPICS_BASE}
 -include ${EPICS_BASE}/configure/CONFIG
 EPICS_BASE:=${EB}
 SHRLIB_VERSION=
+COMMON_DIR = O.${EPICSVERSION}_Common
 endif # 3.14
 INSTALL_LOCATION= ${INSTALL_ROOT}/R${EPICSVERSION}
 
@@ -327,7 +338,7 @@ endif # 3.14
 PROJECTDBD=${PRJ}${LIBVERSIONSTR}.dbd
 export DBDFILES PROJECTDBD     
 
-RECORDS1 = $(patsubst %Record.dbd,%,$(notdir $(filter %Record.dbd, ${DBDS})))
+RECORDS1 = $(patsubst %Record.dbd,%,$(notdir $(filter %Record.dbd, ${DBDFILES})))
 RECORDS2 = $(shell ${MAKEHOME}/expandDBD.tcl -r $(addprefix -I, $(sort $(dir ${DBDFILES}))) $(realpath ${DBDS}))
 RECORDS = $(sort ${RECORDS1} ${RECORDS2})
 export RECORDS
@@ -338,7 +349,7 @@ export MENUS
 BPTS = $(patsubst %.data,%.dbd,$(wildcard bpt*.data))
 export BPTS
 
-HDRS = ${HEADERS} $(addsuffix Record.h,${RECORDS})
+HDRS = ${HEADERS} $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS}))
 export HDRS
 
 TEMPLS = ${TEMPLATES}
@@ -391,6 +402,11 @@ install build install-headers debug:: .cvsignore
 	@echo "MAKING EPICS VERSION R${EPICSVERSION}"
 # Delete old build if INSTBASE has changed.
 # Create build dirs (and links) if necessary 
+ifeq (${EPICS_BASETYPE},3.14)
+	@if [ ! -d O.${EPICSVERSION}_Common ]; then \
+            mkdir -p O.${EPICSVERSION}_Common; \
+        fi
+endif
 	@for ARCH in ${CROSS_COMPILER_TARGET_ARCHS}; do \
             echo ${INSTBASE} | cmp -s O.${EPICSVERSION}_$$ARCH/INSTBASE - || $(RMDIR) O.${EPICSVERSION}_$$ARCH; \
 	    if [ ! -d O.${EPICSVERSION}_$$ARCH ]; then \
@@ -419,13 +435,26 @@ else # T_A
 # still in source directory for uninstall, install-doc, install-templates
 
 ifeq ($(filter ${OS_CLASS},${OS_CLASS_LIST}),)
+# Just print note if this OS_CLASS is not one of BUILDCLASSES
 
 build%: build
 build:
-	@echo skipping ${T_A} because ${OS_CLASS} is not in BUILDCLASSES
+	@echo Skipping ${T_A} because ${OS_CLASS} is not in BUILDCLASSES
 %:
 	@true
-else # OS_CLASS in BUILDCLASSES
+
+else ifeq ($(wildcard $(firstword ${CC})),)
+# Print warning if compiler is not installed on this machine.
+
+install% : build
+install: build
+build%: build
+build:
+	@echo Warning: Skipping ${T_A} because cross compiler ${CC} is not installed
+%:
+	@true
+
+else
 
 CFLAGS += ${EXTRA_CFLAGS}
 INSTALL_BIN = ${INSTALL_LOCATION}/${T_A}
@@ -443,8 +472,12 @@ DEPFILE = ${PRJ}${LIBVERSIONSTR}.dep
 INSTALLDIRS = ${INSTALL_LOCATION} ${INSTALL_INCLUDE} ${INSTALL_BIN} 
 INSTALLDIRS += ${INSTALL_DBD} ${INSTALL_DOC} ${INSTALL_DOC}/${PRJ}
 INSTALLDIRS += ${INSTALL_TEMPL} 
- 
-DBDLINKS = ${INSTALL_BIN}/dbd
+
+ifeq (${EPICS_BASETYPE},3.14)
+COMMON_DIR = ../O.${EPICSVERSION}_Common
+else
+COMMON_DIR = .
+endif
 
 ifeq ($(words ${DBDFILES}),0)
 PROJECTDBD=
@@ -473,9 +506,9 @@ debug::
 	@echo "DBDFILES = ${DBDFILES}"
 
 ifeq (${EPICS_BASETYPE},3.13)
-install:: build ${INSTALLDIRS} ${DBDLINKS} ${INSTALL_HDRS} ${INSTALL_TEMPLATES}
+install:: build ${INSTALLDIRS} ${INSTALL_HDRS} ${INSTALL_TEMPLATES}
 else # 3.14
-install: build ${INSTALLDIRS} ${DBDLINKS} ${INSTALL_HDRS} ${INSTALL_TEMPLATES}
+install: build ${INSTALLDIRS} ${INSTALL_HDRS} ${INSTALL_TEMPLATES}
 endif # 3.14
 
 install-headers:: ${INSTALL_LOCATION} ${INSTALL_INCLUDE}
@@ -483,12 +516,16 @@ install-headers:: ${INSTALL_HDRS}
 install-templates:: ${INSTALL_TEMPLATES}
 install-doc:: ${INSTALL_LOCATION} ${INSTALL_DOC} ${INSTALL_DOC}/${PRJ} ${INSTALL_DOCUS}
 
+#link only non-test versions
+ifneq (${LIBVERSION},test)
+SETLINKS=${MAKEHOME}setLinks.tcl
+else
+SETLINKS=@\#
+endif
+
 ${INSTALLDIRS}:
 	mkdir -m 775 $@
 
-${INSTALL_BIN}/dbd:
-	${LN} ../dbd $@
-
 ${INSTALL_DOC}/${PRJ}/%: %
 	@echo "Installing documentation $@"
 	$(RM) $@
@@ -501,8 +538,7 @@ ${INSTALL_TEMPL}/%${LIBVERSIONSTR}.template: %.template
 	echo "#${PRJ}Lib ${LIBVERSION}" > $@
 	cat $^ >> $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_TEMPL} .template $(basename $(notdir $^))
+	$(SETLINKS) ${INSTALL_TEMPL} .template $(basename $(notdir $^))
 
 ${INSTALL_TEMPL}/%${LIBVERSIONSTR}.db: %.db
 	@echo "Installing template file $@"
@@ -510,8 +546,7 @@ ${INSTALL_TEMPL}/%${LIBVERSIONSTR}.db: %.db
 	echo "#${PRJ}Lib ${LIBVERSION}" > $@
 	cat $^ >> $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_TEMPL} .db $(basename $(notdir $^))
+	$(SETLINKS) ${INSTALL_TEMPL} .db $(basename $(notdir $^))
 
 ifeq ($(filter O.%,$(notdir ${CURDIR})),)
 # still in source directory, third run
@@ -529,17 +564,14 @@ uninstall::
 	@for i in ${RMFILES}; \
 	    do ${EXISTS} $$i && echo "Uninstalling $$i" && $(RM) $$i; \
 	done; true
-	@if [ "${LIBVERSION}" != "test" ]; \
-	then  \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} "" ${PRJ}Lib; \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} .munch ${PRJ}Lib; \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} .so lib${PRJ}; \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} .dep ${PRJ}; \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_DBD} .dbd ${INSTALL_PROJECTDBD:%${LIBVERSIONSTR}.dbd=%}; \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_INCLUDE} .h $(notdir ${HDRS:%.h=%}); \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_TEMPL} .template $(notdir ${TEMPLS:%.template=%}); \
-	    ${MAKEHOME}/setLinks.tcl ${INSTALL_TEMPL} .db $(notdir ${TEMPLS:%.db=%}); \
-	fi
+	$(SETLINKS) ${INSTALL_BIN} "" ${PRJ}Lib;
+	$(SETLINKS) ${INSTALL_BIN} .munch ${PRJ}Lib;
+	$(SETLINKS) ${INSTALL_BIN} .so lib${PRJ};
+	$(SETLINKS) ${INSTALL_BIN} .dep ${PRJ};
+	$(SETLINKS) ${INSTALL_DBD} .dbd ${INSTALL_PROJECTDBD:%${LIBVERSIONSTR}.dbd=%};
+	$(SETLINKS) ${INSTALL_INCLUDE} .h $(notdir ${HDRS:%.h=%});
+	$(SETLINKS) ${INSTALL_TEMPL} .template $(notdir ${TEMPLS:%.template=%});
+	$(SETLINKS) ${INSTALL_TEMPL} .db $(notdir ${TEMPLS:%.db=%});
 
 ${INSTALL_INCLUDE}/%${LIBVERSIONSTR}.h: %.h
 	@echo "Installing header file $@"
@@ -547,8 +579,7 @@ ${INSTALL_INCLUDE}/%${LIBVERSIONSTR}.h: %.h
 	echo "#define __${PRJ}Lib__ ${MAJOR}.${MINOR}" > $@
 	cat $^ >> $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_INCLUDE} .h $(basename $(notdir $^))
+	$(SETLINKS) ${INSTALL_INCLUDE} .h $(basename $(notdir $^))
 
 vpath %.db $(sort $(dir ${TEMPLS}))
 vpath %.template $(sort $(dir ${TEMPLS}))
@@ -632,27 +663,25 @@ ALLMINORS := $(shell for ((i=0;i<=${MINOR};i++));do echo $$i;done)
 PREREQUISITES = $(shell ${MAKEHOME}/getPrerequisites.tcl ${INSTALL_INCLUDE} | grep -vw ${PRJ})
 ifeq (${OS_CLASS}, vxWorks)
 PROVIDES = ${ALLMINORS:%=--defsym __${PRJ}Lib_${MAJOR}.%=0}
-#REQUIRES = ${PREREQUISITES:%=-u __%}
 endif # vxWorks
 ifeq (${OS_CLASS}, Linux)
-REQUIRES = ${PREREQUISITES:%=-Wl,-u,%}
 PROVIDES = ${ALLMINORS:%=-Wl,--defsym,${PRJ}Lib_${MAJOR}.%=0}
 endif # Linux
 endif # !test
 endif # LIBVERSION defined
 
-LDFLAGS += ${PROVIDES} ${REQUIRES}
+LDFLAGS += ${PROVIDES} ${USR_LDFLAGS_${T_A}}
 
 # Create and include dependency files
 CPPFLAGS += -MD
-# 3.14.12 uses -MDD instead. Remove it
+# 3.14.12 already defines -MDD here:
 HDEPENDSCFLAGS =
 -include *.d
 
 # Setup searchpaths from all used files
 vpath % ..
 vpath % $(sort $(dir ${SRCS:%=../%}))
-vpath %.h $(sort $(dir ${HDRS:%=../%}))
+vpath %.h $(addprefix ../,$(sort $(dir $(filter-out /%,${HDRS})))) $(dir $(filter /%,${HDRS}))
 vpath %.template $(sort $(dir ${TEMPLS:%=../%}))
 vpath %.db $(sort $(dir ${TEMPLS:%=../%}))
 vpath %.dbd $(sort $(dir ${DBDFILES:%=../%}))
@@ -665,7 +694,7 @@ USR_DBDFLAGS += $(DBDEXPANDPATH)
 
 ifeq (${EPICS_BASETYPE},3.13)
 USR_INCLUDES += $(addprefix -I, $(sort $(dir ${SRCS:%=../%} ${HDRS:%=../%})))
-build:: PROJECTINFOS ${PROJECTDBD} $(addsuffix Record.h,${RECORDS}) ${PROJECTLIB}
+build:: PROJECTINFOS ${PROJECTDBD} $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS})) ${PROJECTLIB}
 .PHONY:: PROJECTINFOS
 ifneq ($(filter %.cc %.cpp %.C,${SRCS}),)
 ifneq (${T_A},T1-ppc604)
@@ -674,10 +703,12 @@ PROD += ${PROJECTLIB}.munch
 endif # T1-ppc604
 endif # .cc or .cpp found
 else # 3.14
+
 # different macros for 3.14.12 and earlier versions
 SRC_INCLUDES = $(addprefix -I, $(sort $(dir ${SRCS:%=../%} ${HDRS:%=../%})))
 GENERIC_SRC_INCLUDES = $(SRC_INCLUDES)
-build: PROJECTINFOS ${PROJECTDBD} $(addsuffix Record.h,${RECORDS})
+
+build: PROJECTINFOS ${PROJECTDBD} $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS}))
 .PHONY: PROJECTINFOS
 EXPANDARG = -3.14
 ifneq ($(words $(filter %.c %.cc %.C %.cpp, $(SRCS))),0)
@@ -703,33 +734,28 @@ ${INSTALL_BIN}/${PROJECTLIB}.munch: ${PROJECTLIB}.munch
 	$(RM) $@
 	cp $^ $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} .munch ${PRJ}Lib
+	$(SETLINKS) ${INSTALL_BIN} .munch ${PRJ}Lib
 
 ${INSTALL_BIN}/${PROJECTLIB}: ${PROJECTLIB}
 	@echo "Installing library $@"
 	$(RM) $@
 	cp $^ $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} "" ${PRJ}Lib
-	${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} .so lib${PRJ}
+	$(SETLINKS) ${INSTALL_BIN} .so lib${PRJ} 
 
 ${INSTALL_BIN}/${DEPFILE}: ${DEPFILE}
 	@echo "Installing dependency file $@"
 	$(RM) $@
 	cp $^ $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_BIN} .dep ${PRJ}
+	$(SETLINKS) ${INSTALL_BIN} .dep ${PRJ}
 
 ${INSTALL_DBD}/%.dbd: %.dbd
 	@echo "Installing dbd file $@"
 	$(RM) $@
 	cp $^ $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_DBD} .dbd ${^:%${LIBVERSIONSTR}.dbd=%}
+	$(SETLINKS) ${INSTALL_DBD} .dbd ${^:%${LIBVERSIONSTR}.dbd=%}
 
 # Add a #define so that users of the header know the version.
 ${INSTALL_INCLUDE}/%${LIBVERSIONSTR}.h: %.h
@@ -738,8 +764,7 @@ ${INSTALL_INCLUDE}/%${LIBVERSIONSTR}.h: %.h
 	echo "#define __${PRJ}Lib__ ${MAJOR}.${MINOR}" > $@
 	cat $^ >> $@
 	chmod 444 $@
-	@[ "${LIBVERSION}" == "test" ] || \
-	${MAKEHOME}/setLinks.tcl ${INSTALL_INCLUDE} .h $(basename $(notdir $^))
+	$(SETLINKS) ${INSTALL_INCLUDE} .h $(basename $(notdir $^))
 
 
 # Include default EPICS Makefiles (version dependent)
@@ -747,7 +772,6 @@ ifeq (${EPICS_BASETYPE},3.13)
 include ${EPICS_BASE}/config/RULES.Vx
 install:: ${INSTALL_DOCUS} ${INSTALL_PROJECTDBD} ${INSTALL_DEP}
 else # 3.14
-COMMON_DIR = .
 RELEASE_DBDFLAGS = -I ${EPICS_BASE}/dbd
 RELEASE_INCLUDES = -I ${EPICS_BASE}/include -I ${EPICS_BASE}/include/os/${OS_CLASS}
 # avoid library installation when doing 'make build'
@@ -810,7 +834,7 @@ ${SUBFUNCFILE}: $(filter %.c %.cc %.C %.cpp, $(SRCS))
 # Check object code for wrong argument types in va_arg.
 # Some compilers seem to have problems with this.
 %$(OBJ): %.c
-	@echo "Compiling $<"
+	@echo "Compiling $< to $@"
 	$(RM) $@
 	$(COMPILE.c) $<
 	@$(NM) $@ | if grep -q __va_arg_type_violation; \
@@ -822,12 +846,10 @@ ${SUBFUNCFILE}: $(filter %.c %.cc %.C %.cpp, $(SRCS))
 
 # The original 3.13 munching rule does not really work well
 
-MUNCH = $(PERL) $(EPICS_LOCATION)/base/bin/$(EPICS_HOST_ARCH)/munch.pl
-%.munch: %
-	$(RM) $*_ctct.o $*_ctdt.c
-	$(NM) $< | $(MUNCH) > $*_ctdt.c
-	$(GCC) -traditional $(CFLAGS) -fdollars-in-identifiers -c $(SOURCE_FLAG) $*_ctdt.c
-	$(LINK.c) $@ $< $*_ctdt.o
+ifeq (${EPICS_BASETYPE},3.13)
+%.munch: %.out
+	mv $< $@
+endif
 
 ${VERSIONFILE}:
 ifneq (${LIBVERSION},test)
@@ -867,8 +889,8 @@ END {for (name in func_missing) if (!func_found[name]) { \
 	print "void " name "();"; \
 	print "epicsRegisterFunction(" name ");"} \
      for (name in reg_missing) if (!reg_found[name]) { \
-	print "REGISTRYFUNCTION " name ";"; \
-	print "epicsRegisterFunction(" name ");"} \
+	print "extern REGISTRYFUNCTION " name ";"; \
+	print "epicsExportRegistrar(" name ");"} \
      for (name in var_missing) if (!var_found[name]) { \
         type = var_missing[name]; \
 	print "extern " type " " name ";"; \
@@ -877,11 +899,18 @@ END {for (name in func_missing) if (!func_found[name]) { \
 endef
  
 CORELIB = ${CORELIB_${OS_CLASS}}
-CORELIB_vxWorks = ${EPICS_BASE}/bin/${T_A}/iocCoreLibrary.o
+CORELIB_vxWorks = ${EPICS_BASE}/bin/${T_A}/iocCoreLibrary.munch
+ 
+ifeq (${OS_CLASS},vxWorks)
+SHARED_LIBRARIES=NO
+endif
+LSUFFIX_YES=$(SHRLIB_SUFFIX)
+LSUFFIX_NO=$(LIB_SUFFIX)
+LSUFFIX=$(LSUFFIX_$(SHARED_LIBRARIES))
  
 ${EXPORTFILE}: $(filter-out $(basename ${EXPORTFILE})$(OBJ),${LIBOBJS})
 	$(RM) $@
-	$(NM) $^ ${BASELIBS:%=${EPICS_BASE}/lib/${T_A}/lib%.a} ${CORELIB} | awk '$(makexportfile)' > $@
+	$(NM) $^ ${BASELIBS:%=${EPICS_BASE}/lib/${T_A}/$(LIB_PREFIX)%$(LSUFFIX)} ${CORELIB} | awk '$(makexportfile)' > $@
 
 # Create dependency file for recursive requires
 ${PROJECTLIB}: ${DEPFILE}