Merge 3.16 into core/master and related master branches
This commit is contained in:
2
README
2
README
@ -20,7 +20,7 @@ Additional information about EPICS including mailing list
|
|||||||
archives and subscription instructions, documentation and
|
archives and subscription instructions, documentation and
|
||||||
training materials, additional components, links to other
|
training materials, additional components, links to other
|
||||||
websites etc. is available on the EPICS home page at
|
websites etc. is available on the EPICS home page at
|
||||||
http://www.aps.anl.gov/epics/
|
https://epics.anl.gov/
|
||||||
|
|
||||||
$Format:%cD$
|
$Format:%cD$
|
||||||
$Format:%H$
|
$Format:%H$
|
||||||
|
@ -170,6 +170,10 @@ COMPILE.ctdt = $(CC) -c $(CPPFLAGS) $(CFLAGS_ctdt) $(INCLUDES) $(SOURCE_FLAG)
|
|||||||
VXCPPFLAGS = $(filter-out $(OP_SYS_INCLUDE_CPPFLAGS),$(CPPFLAGS))
|
VXCPPFLAGS = $(filter-out $(OP_SYS_INCLUDE_CPPFLAGS),$(CPPFLAGS))
|
||||||
PREPROCESS.cpp = $(CPP) $(VXCPPFLAGS) $(INCLUDES) $< > $@
|
PREPROCESS.cpp = $(CPP) $(VXCPPFLAGS) $(INCLUDES) $< > $@
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Use LEDLIB for command-line editing
|
||||||
|
COMMANDLINE_LIBRARY = LEDLIB
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# Allow site overrides
|
# Allow site overrides
|
||||||
-include $(CONFIG)/os/CONFIG_SITE.Common.vxWorksCommon
|
-include $(CONFIG)/os/CONFIG_SITE.Common.vxWorksCommon
|
||||||
|
@ -136,6 +136,16 @@ STATIC_LDLIBS_NO=
|
|||||||
STATIC_LDFLAGS=
|
STATIC_LDFLAGS=
|
||||||
RANLIB=
|
RANLIB=
|
||||||
|
|
||||||
|
#
|
||||||
|
# option needed for parallel builds with Visual Studio 2015 onward
|
||||||
|
#
|
||||||
|
# -FS Force Synchronous PDB Writes
|
||||||
|
ifneq ($(VisualStudioVersion),)
|
||||||
|
OPT_CXXFLAGS_NO += -FS
|
||||||
|
OPT_CFLAGS_NO += -FS
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# add -profile here to run the ms profiler
|
# add -profile here to run the ms profiler
|
||||||
# -LTCG whole program optimization
|
# -LTCG whole program optimization
|
||||||
|
@ -98,7 +98,7 @@
|
|||||||
base/configure/os/CONFIG_SITE.Common.vxWorksCommon file or in one of its
|
base/configure/os/CONFIG_SITE.Common.vxWorksCommon file or in one of its
|
||||||
target-specific overrides.</P>
|
target-specific overrides.</P>
|
||||||
|
|
||||||
<P>Consult the <a href="http://www.aps.anl.gov/epics/base/vxWorks6.php">vxWorks
|
<P>Consult the <a href="https://epics.anl.gov/base/vxWorks6.php">vxWorks
|
||||||
6.x</a> EPICS web pages and the vxWorks documentation for information
|
6.x</a> EPICS web pages and the vxWorks documentation for information
|
||||||
about configuring your vxWorks operating system for use with EPICS.</P>
|
about configuring your vxWorks operating system for use with EPICS.</P>
|
||||||
|
|
||||||
@ -128,7 +128,7 @@
|
|||||||
|
|
||||||
<H3><A NAME="0_0_8"> Documentation</A></H3>
|
<H3><A NAME="0_0_8"> Documentation</A></H3>
|
||||||
<BLOCKQUOTE>EPICS documentation is available through the
|
<BLOCKQUOTE>EPICS documentation is available through the
|
||||||
<a href="http://www.aps.anl.gov/epics/">EPICS website</a> at Argonne.
|
<a href="https://epics.anl.gov/">EPICS website</a> at Argonne.
|
||||||
<P>Release specific documentation can also be found in the base/documentation
|
<P>Release specific documentation can also be found in the base/documentation
|
||||||
directory of the distribution.</BLOCKQUOTE>
|
directory of the distribution.</BLOCKQUOTE>
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body lang="en">
|
<body lang="en">
|
||||||
<h1 align="center">EPICS Release 7.0.1.1</h1>
|
|
||||||
|
<h1 align="center">EPICS Release 7.0.2.x</h1>
|
||||||
|
|
||||||
<!-- Insert new items immediately below this template ...
|
<!-- Insert new items immediately below this template ...
|
||||||
|
|
||||||
@ -17,6 +18,8 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<h1 align="center">EPICS Release 7.0.1.1</h1>
|
||||||
|
|
||||||
<h3>Changed SIML failure behavior</h3>
|
<h3>Changed SIML failure behavior</h3>
|
||||||
|
|
||||||
<p>A failure when fetching the simulation mode through <tt>SIML</tt> will not
|
<p>A failure when fetching the simulation mode through <tt>SIML</tt> will not
|
||||||
@ -83,6 +86,61 @@ be happy to try and answer them!</p>
|
|||||||
|
|
||||||
<!-- Insert inherited items immediately below here ... -->
|
<!-- Insert inherited items immediately below here ... -->
|
||||||
|
|
||||||
|
<h3>Restore use of ledlib for VxWorks command editing</h3>
|
||||||
|
|
||||||
|
<p>The epicsReadline refactoring work described below unfortunately disabled the
|
||||||
|
VxWorks implementation of the osdReadline.c API that uses ledlib for command
|
||||||
|
editing and history. This functionality has now been restored, see Launchpad
|
||||||
|
<a href="https://bugs.launchpad.net/bugs/1741578">bug #1741578</a>.</p>
|
||||||
|
|
||||||
|
<h3>Constant link types</h3>
|
||||||
|
|
||||||
|
<p>Constant links can now hold 64-bit integer values, either as scalars or
|
||||||
|
arrays. Only base 10 is supported by the JSON parser though, the JSON standard
|
||||||
|
doesn't allow for hexadecimal numbers.</p>
|
||||||
|
|
||||||
|
<h3>Upgraded the YAJL JSON Library</h3>
|
||||||
|
|
||||||
|
<p>The third-party YAJL library that has been included in libCom for several
|
||||||
|
years has been upgraded to version 2.1.0 and several bugs fixed. This has an
|
||||||
|
updated API, requiring any code that uses it to parse its own JSON files to be
|
||||||
|
modified to match. The changes are mainly that it uses <tt>size_t</tt> instead
|
||||||
|
<tt>unsigned int</tt> for string lengths, but it also uses <tt>long long</tt>
|
||||||
|
instead of <tt>long</tt> for JSON integer values, which was the main motivation
|
||||||
|
for the upgrade.</p>
|
||||||
|
|
||||||
|
<p>The self-tests that YAJL comes with have been imported and are now run as an
|
||||||
|
EPICS Unit Test program, and the JSON syntax accepted by the parser was extended
|
||||||
|
to permit trailing commas in both arrays and maps. The difference between the
|
||||||
|
old and new YAJL APIs can be detected at compile time by looking for the macro
|
||||||
|
<tt>EPICS_YAJL_VERSION</tt> which is defined in the yajl_common.h header file
|
||||||
|
along with a brief description of the API changes.</p>
|
||||||
|
|
||||||
|
<h3>Timestamp support for the calc link type</h3>
|
||||||
|
|
||||||
|
<p>A new optional parameter can be given when specifying a calc JSON link. The
|
||||||
|
<tt>time</tt> parameter is a string containing a single letter <tt>A..L</tt>
|
||||||
|
that selects one of the input links to be used for the timestamp of calculation
|
||||||
|
if requested. The timestamp will be fetched atomically with the value from the
|
||||||
|
chosen input link (providing that input link type supports the readLocked()
|
||||||
|
method).</p>
|
||||||
|
|
||||||
|
<h3>Silence errors from puts to constant link types</h3>
|
||||||
|
|
||||||
|
<p>A soft channel output record with the OUT link unset uses the CONSTANT link
|
||||||
|
type. The new link type code was causing some soft channel device supports to
|
||||||
|
return an error status from the write method of that link type, which would
|
||||||
|
cause a ca_put() operation to such a record to generate an exception. This has
|
||||||
|
been silenced by giving the constant link types a dummy putValue method. A new
|
||||||
|
test program has been added to prevent regressions of this behaviour.</p>
|
||||||
|
|
||||||
|
<h3>RSRV expanding large buffer causes crash</h3>
|
||||||
|
|
||||||
|
<p>In the 3.16.1 release a crash can occur in the IOC's RSRV server when a large
|
||||||
|
array is made even larger; the previous array buffer was not being released
|
||||||
|
correctly. See Launchpad
|
||||||
|
<a href="https://bugs.launchpad.net/epics-base/+bug/1706703">bug
|
||||||
|
#1706703</a>.</p>
|
||||||
|
|
||||||
|
|
||||||
<h2 align="center">Changes made between 3.16.0.1 and 3.16.1</h2>
|
<h2 align="center">Changes made between 3.16.0.1 and 3.16.1</h2>
|
||||||
|
Submodule modules/ca updated: 524ceee2c8...eb683aa8ad
Submodule modules/database updated: 610f008529...a4f072238a
Submodule modules/libcom updated: 8ce980f663...dd15a270bc
@ -5,8 +5,6 @@
|
|||||||
# in file LICENSE that is included with this distribution.
|
# in file LICENSE that is included with this distribution.
|
||||||
#*************************************************************************
|
#*************************************************************************
|
||||||
|
|
||||||
use Carp;
|
|
||||||
|
|
||||||
# Copy directories and files from a template
|
# Copy directories and files from a template
|
||||||
|
|
||||||
sub copyTree {
|
sub copyTree {
|
||||||
@ -15,7 +13,7 @@ sub copyTree {
|
|||||||
# $Rtextsubs contains substitutions for file content.
|
# $Rtextsubs contains substitutions for file content.
|
||||||
|
|
||||||
opendir my $FILES, $src
|
opendir my $FILES, $src
|
||||||
or croak "opendir failed while copying $src: $!\n";
|
or die "opendir failed while copying $src: $!\n";
|
||||||
my @entries = readdir $FILES;
|
my @entries = readdir $FILES;
|
||||||
closedir $FILES;
|
closedir $FILES;
|
||||||
|
|
||||||
@ -36,9 +34,9 @@ sub copyTree {
|
|||||||
print "." unless $opt_d;
|
print "." unless $opt_d;
|
||||||
copyFile($srcName, $dstName, $Rtextsubs);
|
copyFile($srcName, $dstName, $Rtextsubs);
|
||||||
} elsif (-l $srcName) {
|
} elsif (-l $srcName) {
|
||||||
carp "\nSoft link in template, ignored:\n\t$srcName\n";
|
warn "\nSoft link in template, ignored:\n\t$srcName\n";
|
||||||
} else {
|
} else {
|
||||||
carp "\nUnknown file type in template, ignored:\n\t$srcName\n";
|
warn "\nUnknown file type in template, ignored:\n\t$srcName\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,11 +44,11 @@ sub copyTree {
|
|||||||
sub copyDir {
|
sub copyDir {
|
||||||
my ($src, $dst, $Rnamesubs, $Rtextsubs) = @_;
|
my ($src, $dst, $Rnamesubs, $Rtextsubs) = @_;
|
||||||
if (-e $dst && ! -d $dst) {
|
if (-e $dst && ! -d $dst) {
|
||||||
carp "\nTarget exists but is not a directory, skipping:\n\t$dst\n";
|
warn "\nTarget exists but is not a directory, skipping:\n\t$dst\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
print "Creating directory '$dst'\n" if $opt_d;
|
print "Creating directory '$dst'\n" if $opt_d;
|
||||||
mkdir $dst, 0777 or croak "Can't create $dst: $!\n"
|
mkdir $dst, 0777 or die "Can't create $dst: $!\n"
|
||||||
unless -d $dst;
|
unless -d $dst;
|
||||||
copyTree($src, $dst, $Rnamesubs, $Rtextsubs);
|
copyTree($src, $dst, $Rnamesubs, $Rtextsubs);
|
||||||
}
|
}
|
||||||
@ -61,7 +59,7 @@ sub copyFile {
|
|||||||
print "Creating file '$dst'\n" if $opt_d;
|
print "Creating file '$dst'\n" if $opt_d;
|
||||||
open(my $SRC, '<', $src)
|
open(my $SRC, '<', $src)
|
||||||
and open(my $DST, '>', $dst)
|
and open(my $DST, '>', $dst)
|
||||||
or croak "$! copying $src to $dst\n";
|
or die "$! copying $src to $dst\n";
|
||||||
while (<$SRC>) {
|
while (<$SRC>) {
|
||||||
# Substitute any @VARS@ in the text
|
# Substitute any @VARS@ in the text
|
||||||
s{@(\w+?)@}
|
s{@(\w+?)@}
|
||||||
|
@ -5,8 +5,6 @@
|
|||||||
# in file LICENSE that is included with this distribution.
|
# in file LICENSE that is included with this distribution.
|
||||||
#*************************************************************************
|
#*************************************************************************
|
||||||
|
|
||||||
use Carp;
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Parse all relevent configure/RELEASE* files and includes
|
# Parse all relevent configure/RELEASE* files and includes
|
||||||
#
|
#
|
||||||
@ -51,7 +49,7 @@ sub readRelease {
|
|||||||
"discovered in $file\n";
|
"discovered in $file\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
open(my $IN, '<', $file) or croak "Can't open $file: $!\n";
|
open(my $IN, '<', $file) or die "Can't open $file: $!\n";
|
||||||
$Ractive->{$file}++;
|
$Ractive->{$file}++;
|
||||||
while (<$IN>) {
|
while (<$IN>) {
|
||||||
chomp;
|
chomp;
|
||||||
@ -79,7 +77,7 @@ sub readRelease {
|
|||||||
if (-e $path) {
|
if (-e $path) {
|
||||||
&readRelease($path, $Rmacros, $Rapps, $Ractive);
|
&readRelease($path, $Rmacros, $Rapps, $Ractive);
|
||||||
} elsif ($op eq "include") {
|
} elsif ($op eq "include") {
|
||||||
carp "EPICS/Release.pm: Include file '$path' not found\n";
|
warn "EPICS/Release.pm: Include file '$path' not found\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$Ractive->{$file}--;
|
$Ractive->{$file}--;
|
||||||
@ -101,17 +99,18 @@ sub expandMacros {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Expand all (possibly nested) macros in dictionary
|
# Expand all (possibly nested) macros in a dictionary
|
||||||
#
|
#
|
||||||
sub expandRelease {
|
sub expandRelease {
|
||||||
my ($Rmacros) = @_;
|
my ($Rmacros, $warn) = @_;
|
||||||
# $Rmacros is a reference to a hash
|
# $Rmacros is a reference to a hash
|
||||||
|
$warn = '' unless defined $warn;
|
||||||
|
|
||||||
while (my ($macro, $val) = each %$Rmacros) {
|
while (my ($macro, $val) = each %$Rmacros) {
|
||||||
while (my ($pre,$var,$post) = $val =~ m/ (.*) \$\( (\w+) \) (.*) /x) {
|
while (my ($pre,$var,$post) = $val =~ m/ (.*) \$\( (\w+) \) (.*) /x) {
|
||||||
carp "EPICS/Release.pm: Undefined macro \$($var) used\n"
|
warn "EPICS/Release.pm: Undefined macro \$($var) used $warn\n"
|
||||||
unless exists $Rmacros->{$var};
|
unless exists $Rmacros->{$var};
|
||||||
croak "EPICS/Release.pm: Circular definition of macro $macro\n"
|
die "EPICS/Release.pm: Circular definition of macro $var $warn\n"
|
||||||
if $macro eq $var;
|
if $macro eq $var;
|
||||||
$val = $pre . $Rmacros->{$var} . $post;
|
$val = $pre . $Rmacros->{$var} . $post;
|
||||||
$Rmacros->{$macro} = $val;
|
$Rmacros->{$macro} = $val;
|
||||||
|
@ -237,7 +237,7 @@ sub checkRelease {
|
|||||||
my @order = ();
|
my @order = ();
|
||||||
my $relfile = "$path/configure/RELEASE";
|
my $relfile = "$path/configure/RELEASE";
|
||||||
readReleaseFiles($relfile, \%check, \@order, $arch);
|
readReleaseFiles($relfile, \%check, \@order, $arch);
|
||||||
expandRelease(\%check);
|
expandRelease(\%check, "while checking module\n\t$app = $path");
|
||||||
delete $check{TOP};
|
delete $check{TOP};
|
||||||
delete $check{EPICS_HOST_ARCH};
|
delete $check{EPICS_HOST_ARCH};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user