Don't generate code to register record types that have only
been declared, i.e. that have no fields defined in them.
This allows libraries to created which only contain device
support without the record types that they support. The
library must have a DBD file that may declare the record
types (to avoid generating a warning) and also contains any
other device(), variable(), function() and registrar()
entries for software included in the library.
Adds -l flag to the registerRecordDeviceDriver program,
which results in epicsExportSharedSymbols being defined
and shareLib.h being reloaded so the generated output file
can be linked into the library that it is registering.
This aspect has not been tested on Windows DLLs yet.
Record types are the only DBD entries for which the parser
will not accept redefinitions. This change lets it accept
a record type declaration any number of times. However once
a record type declaration has been parsed the full record
type definition cannot be loaded, an error will be raised
if the full definition is seen. The parser will still not
accept a full record type definition more than once either,
any later copies of the record type must be declarations.
If a record type named in a device() entry does not exist when
the device is seen, the DBD parser will now print a warning
and create an empty record type with that name to hold the
device entry information.
This will allow support modules to be built into libraries that
include their own registerRecordDeviceDriver code, which was
apparently possible with 3.14 although not officially supported.
To avoid the warning message, the DBD file can declare each
record type before the device statement that uses it.
A record type declaration looks like this:
recordtype(ao) {}
device(ao, ....)
An IOC will accept and ignore a record type declaration, but it
must have loaded the full record type definition first.
Fix a recently introduced problem where cdCommands and envParams
had TOP as a relative path (which actually worked by chance).
Also fixed a problem with convertRelease hanging when the -t
argument matched the absolute path to TOP.
Record types cannot be duplicated however.
DBD sub-objects now have a ->what method for their description.
This also adds a method to look up a breaktable by name.
For compatibility with msi; users can put -Mvar=value into a
xxx_DBFLAGS variable to have msi define that macro when
generating the xxx.db file. This lets mkmf accept the same
DBFLAGS variable that msi does in this case.
If two targets using the same OS are built in parallel,
they can both try to install the same include/os/* file
at the same time, causing the installEpics.pl script to
die. We fix this by making all installations atomic:
First copy the file to the installation directory using
a unique name, then rename it to the target name. The
target name is in the same directory and filesystem as
the temporary name, so the rename should be atomic.
The LocalPath() function must not replace /cygdrive/x with x:
This used to be necessary when mixing win32 and cygwin tools,
but we tell users not to do that any more. This problem only
appears if the path to base starts with /cygdrive/x.
This fixes the perl compilation failures of fullPathName.pl
that occur before the src/tools directory has been built, and
ensures that the other tools that use EPICS modules also work.
* Updated the ReleaseChecklist document for Bazaar
* Replaced all RCS $Id$ and $header$ keywords with $Revision-Id$
as supported by the Bazaar Keywords plug-in
* Changed a few names in CONFIG_BASE_VERSION and epicsVersion.h
* Removed various extraneous keywords and non-ASCII characters