diff --git a/configure/RULES.Db b/configure/RULES.Db
index 7ea4defd7..4732e623e 100644
--- a/configure/RULES.Db
+++ b/configure/RULES.Db
@@ -239,8 +239,7 @@ menu%.h$(DEP): ../menu%.dbd
%.dbd$(DEP): %.dbd.pod
@$(RM) $@
- @$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
- @echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
+ @echo "$(COMMONDEP_TARGET): ../Makefile" > $@
%.dbd$(DEP): %Include.dbd
@$(RM) $@
@@ -281,6 +280,8 @@ menu%.h$(DEP): ../menu%.dbd
@$(RM) $@
@$(ACFDEPENDS_CMD)
+.PRECIOUS: %$(DEP)
+
##################################################### CapFast filter
$(COMMON_DIR)/%.edf: ../%.sch $(DEPSCHS)
@@ -370,7 +371,7 @@ $(COMMON_DIR)/bpt%.dbd: bpt%.data
$(COMMON_DIR)/%.dbd: %.dbd.pod
@$(RM) $(notdir $@)
- $(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $<
+ $(PERL) $(TOOLS)/podRemove.pl -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
$(COMMON_DIR)/%.dbd: %Include.dbd
@@ -422,7 +423,7 @@ $$(INSTALL_DBD)/$$(notdir $(1)) : $(1)
endef
$(foreach file, $(DBD_INSTALLS), $(eval $(call DBD_INSTALLS_template, $(file))))
-.PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%Include.dbd
+.PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%.dbd
##################################################### HTML files
diff --git a/configure/RULES_BUILD b/configure/RULES_BUILD
index 854068537..a0f9537fe 100644
--- a/configure/RULES_BUILD
+++ b/configure/RULES_BUILD
@@ -260,7 +260,7 @@ YACCOPT ?= $($*_YACCOPT)
$(LIBNAME) $(TESTLIBNAME): $(LIBRARY_OBJS)
-$(LIBNAME) $(TESTLIBNAME): $(LIB_PREFIX)%$(LIB_SUFFIX):
+$(filter-out $(DLLSTUB_LIBNAME) $(TESTDLLSTUB_LIBNAME), $(LIBNAME) $(TESTLIBNAME)): $(LIB_PREFIX)%$(LIB_SUFFIX):
@$(RM) $@
$(ARCMD)
ifneq ($(strip $(RANLIB)),)
@@ -270,13 +270,13 @@ endif # RANLIB
$(SHRLIBNAME) $(DLLSTUB_LIBNAME) $(TESTSHRLIBNAME) $(TESTDLLSTUB_LIBNAME): \
$(LIBRARY_OBJS) $(LIBRARY_RESS) $(SHRLIB_DEPLIBS)
-$(DLLSTUB_LIBNAME): $(SHRLIBNAME)
+$(DLLSTUB_LIBNAME): $(SHRLIBNAME);
$(SHRLIBNAME): $(SHRLIB_PREFIX)%$(SHRLIB_SUFFIX):
@$(RM) $@
$(LINK.shrlib)
$(MT_DLL_COMMAND)
-$(TESTDLLSTUB_LIBNAME): $(TESTSHRLIBNAME)
+$(TESTDLLSTUB_LIBNAME): $(TESTSHRLIBNAME);
$(TESTSHRLIBNAME): $(SHRLIB_PREFIX)%$(SHRLIB_SUFFIX):
@$(RM) $@
$(LINK.shrlib)
diff --git a/documentation/README.1st b/documentation/README.1st
index effafe36d..48c52565b 100644
--- a/documentation/README.1st
+++ b/documentation/README.1st
@@ -1,6 +1,6 @@
Installation Instructions
- EPICS Base Release 3.15.1
+ EPICS Base Release 3.15.2
--------------------------------------------------------------------------
diff --git a/documentation/README.html b/documentation/README.html
index f5d51d7b0..236f8f5f8 100644
--- a/documentation/README.html
+++ b/documentation/README.html
@@ -9,7 +9,7 @@
Installation Instructions
-EPICS Base Release 3.15.1
+EPICS Base Release 3.15.2
Table of Contents
diff --git a/src/ca/client/perl/CA.pm b/src/ca/client/perl/CA.pm
index a7daaf21b..22944172a 100644
--- a/src/ca/client/perl/CA.pm
+++ b/src/ca/client/perl/CA.pm
@@ -652,7 +652,7 @@ not follow this pattern, but are still printable strings.
=item [1] R3.15 Channel Access Reference Manual by Jeffrey O. Hill
-L
+L
=back
diff --git a/src/ca/legacy/gdd/aitHelpers.h b/src/ca/legacy/gdd/aitHelpers.h
index a24ba4181..bfd4069f1 100644
--- a/src/ca/legacy/gdd/aitHelpers.h
+++ b/src/ca/legacy/gdd/aitHelpers.h
@@ -323,7 +323,7 @@ inline int aitString::installBuf(const char* pString, unsigned strLengthIn, unsi
inline int aitString::installBuf(const char* pString)
{
- unsigned strLengthIn = strlen(pString);
+ unsigned strLengthIn = (unsigned) strlen(pString);
return this->installBuf(pString, strLengthIn, strLengthIn+1u);
}
@@ -350,7 +350,7 @@ inline int aitString::installConstBuf(const char* pString, unsigned strLengthIn,
inline int aitString::installConstBuf(const char* pString)
{
- unsigned strLengthIn = strlen(pString);
+ unsigned strLengthIn = (unsigned) strlen(pString);
return this->installConstBuf(pString, strLengthIn, strLengthIn+1u);
}
@@ -378,7 +378,7 @@ inline int aitString::installConstImortalBuf(const char* pString,
inline int aitString::installConstImortalBuf(const char* pString)
{
- unsigned strLengthIn = strlen(pString);
+ unsigned strLengthIn = (unsigned) strlen(pString);
return this->installConstImortalBuf(pString, strLengthIn, strLengthIn+1u);
}
@@ -396,7 +396,7 @@ inline int aitString::copy(const char* pString, unsigned stringLength)
inline int aitString::copy(const char* p)
{
- return this->copy(p, strlen(p));
+ return this->copy(p, (unsigned) strlen(p));
}
inline int aitString::copy(const aitString* p)
@@ -436,7 +436,7 @@ inline aitString::aitString(void)
inline aitString::aitString(const char* p, aitStrType typeIn)
{
- unsigned strLengthIn = strlen(p);
+ unsigned strLengthIn = (unsigned) strlen(p);
this->init(p, typeIn, strLengthIn, strLengthIn+1u);
}
diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c
index 0f6d66d06..0047d8722 100644
--- a/src/ioc/dbStatic/dbStaticLib.c
+++ b/src/ioc/dbStatic/dbStaticLib.c
@@ -2280,28 +2280,29 @@ long dbPutString(DBENTRY *pdbentry,const char *pstring)
case DBF_INLINK:
case DBF_OUTLINK:
case DBF_FWDLINK: {
- dbLinkInfo link_info;
- DBLINK *plink = (DBLINK *)pfield;
+ dbLinkInfo link_info;
+ DBLINK *plink = (DBLINK *)pfield;
- status = dbParseLink(pstring, pflddes->field_type, &link_info);
+ status = dbParseLink(pstring, pflddes->field_type, &link_info);
+ if (status) break;
- if(status==0 && plink->type==CONSTANT && plink->value.constantStr==NULL) {
- /* links not yet initialized by dbInitRecordLinks() */
- free(plink->text);
- plink->text = epicsStrDup(pstring);
- free(link_info.target);
+ if (plink->type==CONSTANT && plink->value.constantStr==NULL) {
+ /* links not yet initialized by dbInitRecordLinks() */
+ free(plink->text);
+ plink->text = epicsStrDup(pstring);
+ free(link_info.target);
+ } else {
+ /* assignment after init (eg. autosave restore) */
+ struct dbCommon *prec = pdbentry->precnode->precord;
+ devSup *devsup = (devSup *)ellNth(&pdbentry->precordType->devList, prec->dtyp+1);
- } else if(status==0) {
- /* assignment after init (eg. autosave restore) */
- struct dbCommon *prec = pdbentry->precnode->precord;
- devSup *devsup = (devSup *)ellNth(&pdbentry->precordType->devList, prec->dtyp+1);
- status = dbCanSetLink(plink, &link_info, devsup);
- if(status==0)
- status = dbSetLink(plink, &link_info, devsup);
+ status = dbCanSetLink(plink, &link_info, devsup);
+ if (status == 0)
+ status = dbSetLink(plink, &link_info, devsup);
+ }
}
+ break;
- }
- break;
default:
return S_dbLib_badField;
}
diff --git a/src/ioc/dbtemplate/msi.html b/src/ioc/dbtemplate/msi.html
index b7e4e9e9e..ff4341ead 100644
--- a/src/ioc/dbtemplate/msi.html
+++ b/src/ioc/dbtemplate/msi.html
@@ -24,7 +24,7 @@ accepted by the EPICS IOC's dbLoadTemplate command.
Command Syntax:
-msi -V -g -ooutfile -Idir -Msubs -Ssubfile template
+msi -V -g -D -ooutfile -Idir -Msubs -Ssubfile template
All parameters are optional. The -o, -I, -M, and -S switches may be
separated from their associated value string by spaces if desired. Output will
@@ -46,6 +46,13 @@ be written to stdout unless the -o option is given.
this was the behavior of previous versions of msi, but it does not follow
common scoping rules and is discouraged.
+ -D
+ Output dependency information suitable for including by a Makefile to
+ stdout instead of performing the macro substitutions. The -o option
+ must be given to specify the target name for the dependency rules. Other
+ options should be given exactly as will be used in the macro substitution
+ process.
+
-o file
Output will be written to the specifed file rather than to the standard
output.
diff --git a/src/tools/Makefile b/src/tools/Makefile
index 00314e824..4b7162b6e 100644
--- a/src/tools/Makefile
+++ b/src/tools/Makefile
@@ -51,6 +51,7 @@ PERL_SCRIPTS += dbdToRecordtypeH.pl
PERL_SCRIPTS += dbdExpand.pl
PERL_SCRIPTS += dbdToHtml.pl
PERL_SCRIPTS += podToHtml.pl
+PERL_SCRIPTS += podRemove.pl
PERL_SCRIPTS += registerRecordDeviceDriver.pl
HTMLS = style.css
diff --git a/src/tools/podRemove.pl b/src/tools/podRemove.pl
new file mode 100644
index 000000000..c44f16a3d
--- /dev/null
+++ b/src/tools/podRemove.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl
+#*************************************************************************
+# Copyright (c) 2015 UChicago Argonne LLC, as Operator of Argonne
+# National Laboratory.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# $Id$
+
+use strict;
+use warnings;
+
+use Getopt::Std;
+
+our ($opt_o);
+
+$Getopt::Std::OUTPUT_HELP_VERSION = 1;
+&HELP_MESSAGE if !getopts('o:') || @ARGV != 1;
+
+my $infile = shift @ARGV;
+
+if (!$opt_o) {
+ ($opt_o = $infile) =~ s/\.pod$//;
+ $opt_o =~ s/^.*\///;
+}
+
+open my $inp, '<', $infile or
+ die "podRemove.pl: Can't open $infile: $!\n";
+open my $out, '>', $opt_o or
+ die "podRemove.pl: Can't create $opt_o: $!\n";
+
+my $inPod = 0;
+while (<$inp>) {
+ if (m/\A=[a-zA-Z]/) {
+ $inPod = !m/\A=cut/;
+ }
+ else {
+ print $out $_ unless $inPod;
+ }
+}
+
+close $out;
+close $inp;
+
+sub HELP_MESSAGE {
+ print STDERR "Usage: podRemove.pl [-o file] file.pod\n";
+ exit 2;
+}