Use the pre-expanded Perl configuration variables.
Conda builds of Perl need these (and a fix to the Perl
config files, see https://github.com/conda/conda/issues/8425
for details).
When using an EPICS 7 softIoc.dbd file with a PV from an older version
of Base which didn't have all the fields, our attempts to read those
fields will time out, but the internal logic was buggy. Don't try to
print the values of timed out fields at all. The user will still see a
warning about connection timeouts at the top.
* recnames:
validate alias names as well
yet more record name validation
Further record name validation
popFirstTemp() may return NULL
fix crash on bad record name
Extend record name validation
This is needed when convertRelease.pl gets run before the
EPICS::Path and EPICS::Release modules are installed, and
after 'make uninstall' has deleted the lib/perl directory.
Instead of displaying the failures from each submodule at the end
of testing that submodule, RULES_TOP suppresses the output when
it detects a parent module, and RULES_MODULES adds the children's
failure lists into the parent's list so they all get shown at the
end of the tests/results.
Add documentation for aSub from wiki.
Fix incorrect document structures.
Remove inclusion of menu.dbd files.
Fix links to common doc's, remove some links to nowhere.
Adjust podToHtml.pl and the rule that calls it.
Use osiUnistd.h instead.
Add io.h to osiUnistd.h on Windows
# Conflicts:
# modules/libcom/src/flex/flexdef.h
# modules/libcom/src/osi/os/WIN32/osiUnistd.h
* github/7.0:
Unify doxygen keywords to use '\' not '@'
Applied all doxy-libcom changes to latest headers
# Conflicts:
# modules/libcom/src/yajl/yajl_common.h
If fastReceiver() took more than 0.01 seconds to exit,
sleepySender() might have pushed a second message onto
the queue after setting recvExit, so there would be an
extra message in the queue for the next test, which I
was seeing on Appveyor. That's my current theory...
The internal mySend() and myReceive() routines do expect a timeout
of -1 to mean wait forever, see the epicsMessageQueueSend() and
epicsMessageQueueReceive() API routines.
Move the code that wakes up the next sending task to after we've
added our threadNode to the receiveQueue. He still has to wait for
us to release the Mutex though, so this might make no difference.
This commit also changes when we decrement the number of waiting
senders so it always happens immediately after a threadNode gets
taken off the sendQueue by the code that removed it.
When sending a message, if the queue is full so we have to wait, we
create a threadNode with an eventNode in it and stick it on the
sendQueue, then wait for a receiver to signal that event, waking us.
If we awoke due to a timeout but a receiver was actually waking us
up anyway (i.e. eventSent was set), we shouldn't give up.
Introduced freeEventNode() which ensures eventNodes don't have a
signalled event in them before returning the node to the freeList.
Callers pass the status from epicsEventWaitWithTimeout() to indicate
whether it was signalled or not. If it timed out we must trigger it
and Wait to clear the event state.
It appears that previously a negative timeout actually implemented a
'wait forever', but the VxWorks and RTEMS implementations both check
for (timeout <= 0) and return immediately if nothing can be done
without waiting.
* lp-anj7/expanded-rules:
Generate module version files with new RULES_EXPAND facilities
Extend RULES_EXPAND to add more features
More generator doc updates
Document <library>_API = <stem> for Makefiles
Convert epicsShareAPI to epicsStdCall in modules/ca
Update generator script
Modify rules to allow multiple API.h libraries to be built
Convert modules/ca to use LIBCA_API instead of epicsShare
Try out a representative sample of APIs from multiple libraries
Add build rules to generate and install *API.h header files
Add script to generate *API.h headers
* lp-anj7/typed-dsets:
Bump database version to 3.18.0, use in SHRLIB_VERSION
Adjust example code in devSup.h
Set USE_TYPED_DSET centrally now everything uses it
Update the wording of the Release Notes entry
- Record updates: . histogramRecord . eventRecord . aaiRecord . aaoRecord
- Record updates: . aoRecord . biRecord . boRecord . mbbiRecord . mbbiDirectRecord . mbboRecord . mbboDirectRecord . longinRecord . longoutRecord . stringoutRecord . stringinRecord . waveformRecord . calcoutRecord . subArrayRecord
initial typed-dset changes for ao record
Add Release Notes entry about dsets
Export and use aidset, set USE_TYPED_DSET
Remove duplicated include line
Add HAS_<record>dset macros to allow detection
Export and use int64outdset, set USE_TYPED_DSET
Export and use int64indset, set USE_TYPED_DSET
Modify lsodset, set USE_TYPED_DSET
Modify lsidset, set USE_TYPED_DSET
Modify printfdset, set USE_TYPED_DSET
Don't apply the %.tap: %.t and %.xml: %.tap rules to tap and junit
result files from other test frameworks.
(They would overwrite the other frameworks' own rules.)
Use only %.t files in new TESTSCRIPTS.t var for Perl tests.
TAPFILES and JUNITFILES can be appended to by other rules.
The runtests and test-results rules have no direct recipes.
Added run-tap-tests and tap-results rules, simlified recipe.
Make %.tap:%.t and %.xml:%.tap into static pattern rules.
It was created before modern continuous integration systems
came along; Diamond were supposed to run the tests for us,
but they didn't last for very long.
For all standard build ACTIONS, a rule before-<action> is
run just before running that action in the subdirectories
given by the DIRS variable. Only works in Makefiles that
include RULES_DIRS or RULES_TOP.
Lists the directories with failed tests at the end of the build.
It is no longer necessary to use 'make -k' to see the results
of all tests after one or more failures as only the top-level
test-results recipe will generate a build error.
- make runtests a double-colon rule, so that other test frameworks
can add their own recipes independently
- only define runtests:: $TESTSCRIPTS rule when there are TESTSCRIPTS
(to avoid having it run every time when no TESTSCRIPTS are defined)
- $(strip $TAPFILES) inside ifneq to fix trouble when TAPFILES=' '
I split his two "Fields Common to ..." sections back into separate docs,
added links between them all, and made the appropriate build changes.
Also added these and the aai/aao records to the documentation index.
Passing zero as to GetProcAddress is undocumented,
but seems to be equivalent to passing GetModuleHandle(NULL)
which searches only the address space of the executable file.
Emulate the effect of dlsym(0, ...) by searching all
loaded modules. Probably not so efficient...
* Use EXPAND_COMMON for architecture-independent templates,
generated in the O.Common directory instead of O.$(T_A).
* Add EXPAND_ME to name Makefile variables to be added without
having to provide a value (permits spaces in value too).
* Comments in RULES_EXPAND describe how to use these rules.
The second increment of refcnt must occur before pthread_create
or a subtle possibility of a double free() occurs if the thread
runs immediately and self-joins before the second inc.
Also use atomic ops for joinable flag to ensure that
concurrent joins will error properly.
Also improve behavior in case signals are delivered to the sleeping
thread. This fixes a potential security weakness reported by codacy
(interaction of usleep with SIGALRM and other timer functions such
as sleep(), alarm(), setitimer(), and nanosleep() is unspecified).
This fix apply to event record device with constant INP.
Now when the event record is proccessed the associated records with the
same SCAN setup get triggered correctly, it is not more necessary to set
VAL on event record.
Fixes lp: #1829770
Modifications to allow for CA multicast listening by adding multicast address
from EPICS_CA_BEACON_ADDR_LIST (or EPICS_CA_ADDR_LIST if beacon list is empty).
Original modifications from Jim Smedinghoff, with further changes by Pierrick Hanlet.
. histogramRecord
. eventRecord
. aaiRecord
. aaoRecord
- Device support updates:
. devHistogramSoft (histogramRecord)
. devEventSoft (eventRecord)
. devAaiSoft (aaiRecord)
. devAaoSoft (aaoRecord)
- Fixes in already-migrated records
. lsiRecord: replaced 'struct lsidset' with typedef(ed) 'lsidset'
. int64inRecord (similar as above)
. int64outRecord (similar as above)
. calcRecord: minor fix in init_record() prototype declaration
- Note: the comments about return values in dset structs were outright copied from .c to .pod/.dbd files without confirmation if they are indeed correct!
Working with Dirk Zimoch @dirk.zimoch, fixed various issues
with bit operations on VS2019 32bit. These seem to relate to
handling bit 31 of a 32 bit number.
As EPICS << is an arithmetic bit shift, following Java we
have added <<< and >>> operators for logical shifts
Though it is on a different architecture, this looks like
a similar issue to LP: #1838792
prefer SO_REUSEPORT on targets which define it.
Linux defines both, and seems to treat
SO_REUSEPORT and SO_REUSEADDR as equivalent.
BSD derivatives need SO_REUSEPORT.
taskWait() actually returns OK on timeout, so drop the timeout warning
(the other implementations don't have one).
The taskWait() may return ERROR with S_objLib_OBJ_ID_ERROR if the target
thread has higher priority; this indicates a successful join, because
we already did a rendezvous using joinSem.
Delete joinSem *after* calling taskSpareFieldSet(), in case it matters.
This lets us collect and echo their stderr streams, and if they
hang up without responding we can kill them directly instead of
just giving up and bailing out.
Left debug output turned on for now.
GNU libstdc++ prior to GCC 6.1.0, the overlay math.h always
includes math.h from glibc, which defines isinf() and friends.
GCC 6.1.0 includes a change (6c8ced3f4f867b72a623fe2f23efa204c5786a28)
so that the overlay math.h never includes the glibc math.h
when compiling c++.
The overlay math.h sometimes includes "using std::isinf"
Determined by inspecting libc math.h when building gcc.
* 3.15:
minor epicsTimerTest
epicsTimerTest loosen test threshold
debug epicsTimerTest
posix/epicsMath.h
Revert "libcom: fix colliding isnan/isinf between C99 and C++0x for gcc-4"
Revert "libcom: properly declare isnan() in C++ code"
travis-ci /etc/hosts workaround
redo travis-ci with matrix
epicsSockResolveTest add detail
libcom: properly declare isnan() in C++ code
libcom: fix colliding isnan/isinf between C99 and C++0x for gcc-4
libcom: import some C99 math (isnan etc.) into global namespace
# Conflicts:
# .travis.yml
# ci/travis-prepare.sh
External device support that must also build against earlier
Base versions can use these to determine whether they need so
declare their own dset structures for each record type.
Exception specifications are deprecated: http://isocpp.github.io/
CppCoreGuidelines/CppCoreGuidelines.html#e30-dont-use-exception-
specifications . They will be removed from the C++ standard with
C++20. Modern compilers are warning about them since years. Thus
it's unlikely that anyone is still using the epicsThrows() macro.
Even if that's the case the fix is trivial: Simply remove the macro.
This commit is actually to test an updated Jenkins configuration
for mirroring commits from Launchpad to GitHub, using a webhook
instead of polling LP for updates every 5 minutes.
* zimoch/iocLogClientFixesTry2: (22 commits)
use EPICS_PRIVATE_API macro and fix bug with darwin/ios
renamed epicsSocketCountUnsentBytes to epicsSocketUnsentCount and moved it to osi/os/
fix bug from commit f85454. Apparently epicsExportSharedSymbols is needed even though epicsExport.h is included
epicsSocketCountUnsentBytes returns -1 on failure
bugfix: memmove'ed to much
epicsSockCountUnsentBytes renamed to epicsSocketCountUnsentBytes
moved logClientSendMessage and made it static
fix wrong function name in comment
sending 0 bytes helps to detect broken connections on some systems (but is undefined behavior on Linux, fails on vxWorks and is a documented no-op on Windows)
cannot print sockets with %d in Windows, they are not small ints but maybe pointers.
ask logClient socket how many bytes are still in the send queue and don't discard them in case the connection turns out broken.
use dynamic debug flag for logClient
increase error message buffer size for long (Windows) error messges
improve logClientShow to show unsent bytes on level 2 (and fix level 1)
removed unneeded include
no need to delay startup only because log server is currently not available
send pending log messages directly after connecting
avoid needless memmove calls
elimitate duplicate code in logClient
do not discard unsent messages when log server has closed connection, instead try to send them after reconnect
...
* lp-Com/use-monotonic:
VxWorks: Measure CPU time-base frequency if necessary
replace most internal getCurrent() -> getMonotonic()
dbScan periodic scan use monotonic time
monotonic adapt to regular time APIs
* lp-bhill/shared-rpath-independent-of-static-build:
Another comment fix
Fix comment as well
Also apply rpath change to PRODDIR_RPATH_LDFLAGS
Shared lib rpath should not depend on whether or not static libs are also being built.
* Add VS2019 build target
* Install Strawberry perl when building VS2019 (this image is missing perl)
* Build debug configuration with MSVC (previously just mingw and cygwin)
* allow static-debug on MSVC by setting -static and modifying CONFIG_SITE
Force cleanup of resource for threads which may
still be running opens the possibility of strange
race conditions. Like threads be erroneously
detected as non-epics.
Doing this cleanup at process exit serves no real
purpose. This code might be valid to re-add
in a DLL exit handler.
* main/make-simple:
restore ModuleDirs in caPerlApp
simplify e_flex/antelope path compute
further no need to search for perl modules under bin
skip RELEASE_TOPS
configure: Don't hide any perl scripts being run
missed a TOP
no need to search for perl modules under bin/
drop unnecessary *ModuleDirs
avoided embedded TOP for non sub-modules
* 3.15: (28 commits)
update RELEASE_NOTES
add option EPICS_NO_CALLBACK
replace CALLBACK -> epicsCallback
Update dbTest.c
Remove links to wiki-ext
Add POD annotations from Wiki to subArrayRecord and menuAlarmStat
Rename subArrayRecord.dbd and menuAlarmStat.dbd to .pod
Add POD annotations to longoutRecord from Wiki
Rename longoutRecord.dbd longoutRecord.dbd.pod
Add POD annotations to longinRecord from Wiki
Rename longinRecord.dbd longinRecord.dbd.pod
Add POD annotations to subRecord from Wiki
Rename subRecord.dbd subRecord.dbd.pod
Add POD annotations to selRecord from Wiki
Rename selRecord.dbd selRecord.dbd.pod
Add POD annotations to seqRecord from Wiki
Rename seqRecord.dbd seqRecord.dbd.pod
Fix menu declaration test too
Add redefinition guard to menu-generated typedefs
Updates to existing .dbd.pod texts, add event and fanout from wiki
...
# Conflicts:
# documentation/README.1st
# documentation/README.html
# modules/database/src/ioc/db/callback.h
# modules/database/src/ioc/db/dbNotify.c
# modules/database/src/ioc/db/menuAlarmStat.dbd
# modules/database/src/ioc/db/menuFtype.dbd
# modules/database/src/std/rec/compressRecord.dbd.pod
# modules/database/src/std/rec/eventRecord.dbd
# modules/database/src/std/rec/fanoutRecord.dbd
# modules/database/src/std/rec/longinRecord.dbd
# modules/database/src/std/rec/longoutRecord.dbd
# modules/database/src/std/rec/selRecord.dbd
# modules/database/src/std/rec/seqRecord.dbd
# modules/database/src/std/rec/subArrayRecord.dbd
# modules/database/src/std/rec/subRecord.dbd
# modules/libcom/src/iocsh/menuAlarmStat.dbd.pod
# modules/libcom/src/iocsh/menuFtype.dbd.pod
# src/ioc/db/menuAlarmStat.dbd
# src/ioc/db/menuFtype.dbd
Manually fix some move+rename
Make additional CALLBACK -> epicsCallback
preserve INT64 in menuFtype
preserve OLDSIM et al
- Revert "N to 1 Median" choice entry place
- Convert images to PNG and update Makefile
- Update record support routins definition based on epics7 recSup.h
* lp-asLib/as-hostname:
update release notes
asLib more string size...
asLib one short
asLib: asUseIP name lookup soft-fail
Expand Release Note entry for as-hostname changes.
as-hostname address review comments
asLib: test asUseIP
as,rsrv: use real client IP instead of untrusted host name
# Conflicts:
# documentation/RELEASE_NOTES.html
* origin/3.15: (40 commits)
Revert "More msi.plt retries for Jenkins builds on Windows"
Revert "Testing msi: Add retries if necessary"
msi: Flush stdout on program exit
Now fix the non-windows systems
Don't use / in Windows program paths
Redirect msi's STDERR to /dev/null (NUL on Windows) during tests
VxWorks: Mark undetected underflow parse test as ToDo
Fix VxWorks osiSockOptMcastLoop_t => char
Fix sync filter example in dbd.pod
doc/ca: clarify variable size array subscription
Remove cacExitHandler
Don't clear caClientCallbackThreadId in CA's exit handler
appveyor-ci: ANL Make install 4.1 -> 4.2.1
appveyor-ci: use pre-installed AppVeyor MinGW
appveyor-ci: use choco MinGW 5.3.0 to work around build problem (fixes lp:1827225)
appveyor-ci: exclude some cygwin builds (broken compiler) appveyor-ci: remove slack, add email and GitHub notifications (cherry-picked from branch 7.0)
epicsTime: rely on implicit copy constructor
iocLogServer: check return values
Fix potential buffer overflow in iocLogServer
Fix weird use of strncpy
...
# Conflicts:
# modules/database/src/ioc/dbtemplate/msi.c
# modules/database/src/std/rec/stringinRecord.c
# modules/database/src/std/rec/stringoutRecord.c
# modules/database/test/ioc/dbtemplate/msi.plt
# modules/libcom/src/osi/os/vxWorks/osdSock.h
# src/ioc/dbtemplate/msi.c
# src/ioc/dbtemplate/msi.cpp
This function, and struct iocshFuncDef, expose
internal details. Specifically iocshCmdDef::func .
Which prevents changing/extending the iocsh function
signature.
Deprecate in favor of iocshCmd() and iocshRun().
The BSP routine sysTimeBaseFreq() is optional. If not present or
non-functional we measure the frequency of the CPU's time-base
counter (against the OS system clock) once at initialization-time.
Always release field logs when we drop them.
Adjust how first and after modes work to make them easier to test.
Change stream checking code, fix leaks and double frees.
Add mustStash(), mustSwap(), streamReset(), drop mustPassOld().
Modify test code to check free-list count and release all of
the field-logs returned by the filter; it must release any of
the field-logs that it decides to drop.
Moves where the field-logs get freed into the mustPass/mustDrop routines,
where it only happens if the filter didn't free them itself.
Filters that save field-logs can't use this code as-is.
Allows handling of complex situations like a package
build where some libraries are in a staging area,
but will be copied to the same final location.
eg.
LINKER_ORIGIN_ROOT=/usr/lib/epics:/build/mymodule
Where build TOP is /build/mymodule
For linux, enable softIoc to find .dbd relative to the executable
location.
The same could be done for other targets
*bsd
may have symlink /proc/curproc/file
fallback to sysctl() with KERN_PROC_PATHNAME
solaris
getexecname()
mac
_NSGetExecutablePath()
WIN32
GetModuleFileName(NULL)
others
out of luck...
Use Linux specific linker trick to allow relocation
of built tree.
relative rpath
use $ORIGIN to reference libraries in other modules
by relative path.
fix rel. RPATH
After configuring the build you should be able to build EPICS base by
issuing the following commands in the distribution's root directory
(base):
gnumake clean uninstall
gnumake
The command "gnumake clean uninstall" will remove all files and
directories generated by a previous build. The command "gnumake" will
build and install everything for the configured host and targets.
It is recommended that you do a "gnumake clean uninstall" at the root
directory of an EPICS directory structure before each complete rebuild
to ensure that all components will be rebuilt.
Example application and extension
A perl tool, makeBaseApp.pl is included in the distribution file. This
script will create a sample application that can be built and then
executed to try out this release of base.
Instructions for building and executing the example IOC application can
be found in the section "Example Application" of Chapter 2, "Getting
Started", in the "IOC Application Developer's Guide" for this release.
The "Example IOC Application" section briefly explains how to create and
build an example application in a user created <top> directory. It also
explains how to run the example application on a vxWorks ioc or as a
process on the host system. By running the example application as a
host-based IOC, you will be able to quickly implement a complete EPICS
system and be able to run channel access clients on the host system.
A perl script, makeBaseExt.pl, is included in the distribution file.
This script will create a sample extension that can be built and
executed. The makeBaseApp.pl and makeBaseExt.pl scripts are installed
into the install location bin/<hostarch> directory during the base
build.
Multiple host platforms
You can build using a single EPICS directory structure on multiple host
systems and for multiple cross target systems. The intermediate and
binary files generated by the build will be created in separate
subdirectories and installed into the appropriate separate host/target
install directories. EPICS executables and perl scripts are installed
into the $(INSTALL_LOCATION)/bin/<arch> directories. Libraries are
installed into $(INSTALL_LOCATION)/lib/<arch>. The default definition
for $(INSTALL_LOCATION) is $(TOP) which is the root directory in the
distribution directory structure, base. Created object files are stored
in O.<arch> source subdirectories, This allows objects for multiple
cross target architectures to be maintained at the same time. To build
EPICS base for a specific host/target combination you must have the
proper host/target C/C++ cross compiler and target header files and the
base/configure/os directory must have the appropriate configure files.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.