Compare commits

..

56 Commits

Author SHA1 Message Date
Andrew Johnson
e4ebc01401 Fix EPICS::PodXHtml and generate section links
Some checks failed
Base / Ub-22 clang C++11 (push) Has been cancelled
Base / Ub-22 clang (push) Has been cancelled
Base / Ub-22 gcc + RT-4.9 (push) Has been cancelled
Base / MacOS clang (push) Has been cancelled
Base / Ub-24 gcc-13 c++20 Werror (push) Has been cancelled
Base / Ub-22 gcc + RT-5.1 beatnik (push) Has been cancelled
Base / Ub-22 gcc + RT-4.10 (push) Has been cancelled
Base / Ub-22 gcc + RT-5.1 pc686 (push) Has been cancelled
Base / Ub-22 gcc + RT-5.1 uC5282 (push) Has been cancelled
Base / Ub-22 gcc unsigned char (push) Has been cancelled
Base / Ub-22 gcc + MinGW, static (push) Has been cancelled
Base / Win2019 MSC-19 (push) Has been cancelled
Base / Win2019 MSC-19, debug (push) Has been cancelled
Base / Win2019 MSC-19, static (push) Has been cancelled
Base / Ub-22 gcc + RT-5.1 xilinx_zynq_a9_qemu (push) Has been cancelled
Base / Win2019 mingw (push) Has been cancelled
Base / Ub-22 gcc + MinGW (push) Has been cancelled
Base / Ub-22 gcc C++11, static (push) Has been cancelled
Check EditorConfig / editorconfig (push) Failing after 1s
Base / Cross linux-aarch64 (push) Failing after 2s
Base / Cross linux-arm gnueabi (push) Failing after 1s
Base / Cross linux-arm gnueabihf (push) Failing after 2s
Base / CentOS-8 (push) Failing after 2s
Base / Fedora-33 (push) Failing after 5s
Base / Fedora-latest (push) Failing after 4s
Base / Rocky-9 (push) Failing after 5s
CodeQL / Analyze (cpp) (push) Failing after 1s
Base / Docker CentOS-7 (push) Failing after 14s
Overrides an internal method in Pod::Simple::XHTML that
appends a section sign which links to this section.
2025-03-19 11:26:51 -05:00
Jeremy Lorelli
6ea6ae633b Define NOCRYPT, NOSOUND and NOKANJI before including windows.h 2025-03-19 11:19:45 -05:00
JJL772
9fac52fa58 Add a release note for the windows.h epicsAtomicOSD change 2025-03-19 11:19:45 -05:00
JJL772
fc5d3c9a5c Disable extraneous WIN32 declarations when including windows.h in epicsAtomicOSD.h 2025-03-19 11:19:45 -05:00
c75ad2673e no longer need extern "C" { } around epicsExport macros 2025-03-19 11:17:14 -05:00
b97a35fec8 Don't use __attribute__((noreturn)) on VxWorks
VxWorks does not mark abort() or exit() as noreturn.
Thus, functions declared noreturn which end in a call
to those functions cause a compiler warning on vxWorks.
2025-03-19 11:06:26 -05:00
Andrew Johnson
350570134e Changed dbServerStats() to count the server layers called 2025-03-19 11:03:46 -05:00
Andrew Johnson
72f3e75c8d Add summary stat's calculation 2025-03-19 11:03:46 -05:00
Andrew Johnson
90f97a7037 Release notes; HAS_DBSERVER_STATS in dbServer.h 2025-03-19 11:03:46 -05:00
Andrew Johnson
fd86f0ff04 Unit tests for dbServerStats() 2025-03-19 11:03:46 -05:00
Andrew Johnson
bcc6cb96ae Added dbServerStats() API for iocStats and similar 2025-03-19 11:03:46 -05:00
Michael Davidsaver
a4bc0db6e6 dbCa CP link updates set PUTF/RPRO 2025-03-19 10:59:28 -05:00
Michael Davidsaver
48ebe2c64e Avoid initMainThread() except on vxworks
Move isOkToBlock tracking to osdThread.
Targets except vxworks can store this flag in epicsThreadOSD.
Continue to use TLS w/ vxWorks.

Note that setting of isOkToBlock for "main" thread becomes lazy.
2025-03-19 10:53:42 -05:00
Michael Davidsaver
9f788996dc db: lock record for db_create_read_log() and dbChannelGetField()
since 27fe3e4468 db_create_read_log()
accesses record fields.

remove now redundant db_create_read_log() calls.
2025-03-19 10:51:08 -05:00
Michael Davidsaver
13d6ca598c initHookRegister() make idempotent and MustSucceed 2025-03-05 10:02:38 -06:00
ee1a49045a support CROSS_COMPILER_RUNTESTS_ARCHS other than RTEMS 2025-03-05 10:00:44 -06:00
Ralph Lange
78f263f359 Update GitHub Actions build configuration (#609)
* ci: bump GHA ubuntu jobs (22->24, 20->22)

* ci: add GHA job for CentOS-7 on self-managed Docker

* ci: add jobs for CentOS-8 and Rocky-9 on GHA-managed Docker
2025-03-05 09:55:32 -06:00
43e75e3901 decorate functions that do not return 2025-03-05 09:51:57 -06:00
Ralph Lange
131578124b ci: drop AppVeyor builds on VS2010/VS2012 2025-02-28 09:59:53 -06:00
Andrew Johnson
7bd3e7aa2e Update version numbers and submodules after release 2025-02-21 17:45:00 -06:00
Andrew Johnson
86154953f5 Final commit for 7.0.9
Some checks failed
Check EditorConfig / editorconfig (push) Failing after 2s
Base / Cross linux-aarch64 (push) Failing after 1s
Base / Cross linux-arm gnueabi (push) Failing after 2s
Base / Cross linux-arm gnueabihf (push) Failing after 1s
Base / Fedora-33 (push) Failing after 2s
Base / Fedora-latest (push) Failing after 1s
CodeQL / Analyze (cpp) (push) Failing after 2s
Base / Ub-20 gcc + RT-5.1 uC5282 (push) Has been cancelled
Base / Ub-20 gcc + RT-5.1 xilinx_zynq_a9_qemu (push) Has been cancelled
Base / Win2019 mingw (push) Has been cancelled
Base / Ub-20 gcc + MinGW (push) Has been cancelled
Base / Ub-20 gcc unsigned char (push) Has been cancelled
Base / Ub-20 gcc C++11, static (push) Has been cancelled
Base / Ub-20 gcc + MinGW, static (push) Has been cancelled
Base / Ub-22 gcc-12 c++20 Werror (push) Has been cancelled
Base / Win2019 MSC-19 (push) Has been cancelled
Base / Win2019 MSC-19, debug (push) Has been cancelled
Base / Win2019 MSC-19, static (push) Has been cancelled
Base / Ub-20 clang C++11 (push) Has been cancelled
Base / MacOS clang (push) Has been cancelled
Base / Ub-20 clang (push) Has been cancelled
Base / Ub-20 gcc + RT-5.1 beatnik (push) Has been cancelled
Base / Ub-20 gcc + RT-4.10 (push) Has been cancelled
Base / Ub-20 gcc + RT-4.9 (push) Has been cancelled
Base / Ub-20 gcc + RT-5.1 pc686 (push) Has been cancelled
2025-02-21 17:31:33 -06:00
Andrew Johnson
07572ab025 Update submodules to released versions 2025-02-21 15:47:00 -06:00
Andrew Johnson
0733beae50 Fix for PR #597 breakage of VS-2012/2010 builds 2025-02-20 10:27:41 -06:00
Andrew Johnson
a3d8531008 Revert PR #589
* Revert "Release Notes for PYTHON=python3"
  commit 2612b47c3f.

* Revert "Remove Python build dependency when LINKER_USE_RPATH=ORIGIN"
  commit f4c474eb77.
2025-02-19 14:10:16 -06:00
Michael Davidsaver
7a6e11cae0 make casStatsFetch() safe-ish when RSRV not initialized
Maybe too early.  Or maybe RSRV disabled via dbServer.
2025-02-18 07:30:51 -08:00
Michael Davidsaver
7384351181 clarify cantProceed() message 2025-02-18 07:30:51 -08:00
Michael Davidsaver
890cbc2c0d doc 2025-02-18 07:30:51 -08:00
Andrew Johnson
2612b47c3f Release Notes for PYTHON=python3 2025-02-17 22:47:27 -06:00
Andrew Johnson
f4c474eb77 Remove Python build dependency when LINKER_USE_RPATH=ORIGIN
This change converts the makeRPath.py script to Perl.
Also changes the PYTHON default to run `python3`
2025-02-17 22:47:27 -06:00
Andrew Johnson
1735a821db Update pvDatabase 2025-02-11 17:44:51 -06:00
Michael Davidsaver
1d19ba4cc2 doc and log for *MustSucceed()
Replace the "never returns NULL." statement which is
manifestly not true.
2025-02-07 09:09:22 -08:00
JJL772
144f9756ea Add iocshSetError in a bunch of places 2025-02-05 10:16:16 -06:00
DW
48eed22f3b check IOCSH_STARTUP_SCRIPT before set 2025-02-05 10:03:35 -06:00
Érico Nogueira
8ac2c87156 Post monitors from compress record when resetting it
This way clients receive updates with an empty array after writing into
the RES field.
2025-02-05 09:59:18 -06:00
Simon Rose
0d2ffcd97f Typo fix on arch name (#593) 2025-02-05 09:47:24 -06:00
Andrew Johnson
c8eccfcb8f Edit Release messages for English & Markdown 2025-02-03 11:36:37 -06:00
Michael Davidsaver
6fb40b02fe update RELEASE_NOTES 2025-02-02 20:16:38 -08:00
Andrew Johnson
dad0ee9c89 Revert "Limit _FORTIFY_SOURCE <= 2"
This reverts commit 5fe563bed8.
2025-02-02 19:59:39 -08:00
Timo Korhonen
065fe7cab6 Fix internal link 2025-01-28 15:05:55 -08:00
Michael Davidsaver
e4ad4becde rationalize osdMutex
Avoids split allocation.
Eliminates special case free-list.

win32: eliminate pre-XP
rtems-score: eliminate non-fast
2024-12-29 16:35:26 -08:00
Michael Davidsaver
1cd141c540 dbLoadTemplate: error propagation and more context on .db syntax error 2024-12-29 16:35:26 -08:00
72026a27a0 allow to load the same alias multiple times (unless dbRecordsOnceOnly is set) 2024-12-29 16:35:25 -08:00
Simon Rose
9fb820b46e Add tests for relative include paths 2024-12-29 16:34:10 -08:00
Jeremy Lorelli
721e9cc3a7 Add ABORT_ON_ASSERT flag to CONFIG_SITE
This flag causes EPICS to call abort() on assertion failures rather than
suspend the executing thread. With the epicsThreadSuspendSelf() behavior,
an IOC can end up in a difficult to detect error state where one or more
threads has essentially crashed due to an assertion failure.

This also matches the C behavior of assert(3)
2024-12-29 16:34:10 -08:00
Simon Rose
0186836449 Reading a file from the command-line should not use include paths 2024-12-29 16:34:10 -08:00
Simon Rose
b90ab7de13 Improve relative path check for msi
For posix-ish systems, we previously checked that a path was relative
by simpy checking if it included a '/' character. This meant that you
could not, for example, do
```
$ cat foo.substitutions
file rel/to/bar.template {
}

$ msi -I /some/path foo.substitutions
```
where our template file is located at `/some/path/rel/to/bar.template`.

Note that relateive paths work differently on Windows, so we carve out
an exception there.
2024-12-29 16:34:10 -08:00
Jeremy Lorelli
333be085c0 Fix compile error in tsSLList.h 2024-12-28 12:40:27 -08:00
Ralph Lange
169948967f Merge pull request #578 from ralphlange/doc-udfs
Add documentation for the UDFS field
2024-12-27 15:10:43 +01:00
Ralph Lange
5a11954c51 Add documentation for the UDFS field 2024-12-26 18:44:23 +01:00
Jure Varlec
9f8a8b9c1f Update RELEASE_NOTES with AMSG propagation 2024-12-11 09:38:02 -06:00
Jure Varlec
d0cf47cd6f Propagate AMSG through MSS links
MS and MSI links do not propagate STAT and therefore do not propagate
AMSG, either. CA, CP and CPP links also do not propagate AMSG, but the
reason is technical: the message is not available over Channel Access.
2024-12-11 09:38:02 -06:00
Simon Rose
f4aee8e6b7 Add debug build configuration for os x mX arch 2024-12-11 09:33:24 -06:00
dac620a708 loop safe wrapper for dbGet added 2024-12-11 09:31:49 -06:00
4ee766b6b1 correct mask for finding field in linkGrp
It worked before because the get_xxx functions are never called for
the links (bit0 = 1), but checking both bits looks cleaner.
2024-12-11 09:31:49 -06:00
5143258011 fix support for link 0 2024-12-11 09:31:49 -06:00
Michael Davidsaver
ead8b7e82b doc getIocState() 2024-12-09 17:00:03 -08:00
199 changed files with 1571 additions and 2143 deletions

View File

@@ -52,8 +52,6 @@ environment:
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- CMP: vs2015
- CMP: vs2013
- CMP: vs2012
- CMP: vs2010
- CMP: gcc
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
# TODO: static linking w/ readline isn't working. Bypass auto-detect
@@ -67,11 +65,6 @@ platform:
# Matrix configuration: exclude sets of jobs
matrix:
exclude:
# VS2012 and older installs don't have the 64 bit compiler
- platform: x64
CMP: vs2012
- platform: x64
CMP: vs2010
# Exclude more jobs to reduce build time
# Skip 32-bit for "middle-aged" compilers
- platform: x86

View File

@@ -59,8 +59,6 @@ environment:
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- CMP: vs2015
- CMP: vs2013
- CMP: vs2012
- CMP: vs2010
- CMP: gcc
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
# TODO: static linking w/ readline isn't working. Bypass auto-detect
@@ -74,11 +72,6 @@ platform:
# Matrix configuration: exclude sets of jobs
matrix:
exclude:
# VS2012 and older installs don't have the 64 bit compiler
- platform: x64
CMP: vs2012
- platform: x64
CMP: vs2010
# Exclude more jobs to reduce build time
# Skip 32-bit for "middle-aged" compilers
- platform: x86

View File

@@ -50,9 +50,9 @@ jobs:
matrix:
# Job names also name artifacts, character limitations apply
include:
- os: ubuntu-22.04
cmp: gcc-12
name: "Ub-22 gcc-12 c++20 Werror"
- os: ubuntu-24.04
cmp: gcc
name: "Ub-24 gcc-13 c++20 Werror"
# Turn all warnings into errors,
# except for those we could not fix (yet).
# Remove respective -Wno-error=... flag once it is fixed.
@@ -73,79 +73,79 @@ jobs:
-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3'
CMD_LDFLAGS=-Wl,-z,relro"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "windows-x64-mingw"
name: "Ub-20 gcc + MinGW"
name: "Ub-22 gcc + MinGW"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: static
cross: "windows-x64-mingw"
name: "Ub-20 gcc + MinGW, static"
name: "Ub-22 gcc + MinGW, static"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: static
extra: "CMD_CXXFLAGS=-std=c++11"
name: "Ub-20 gcc C++11, static"
name: "Ub-22 gcc C++11, static"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: static
extra: "CMD_CFLAGS=-funsigned-char CMD_CXXFLAGS=-funsigned-char"
name: "Ub-20 gcc unsigned char"
name: "Ub-22 gcc unsigned char"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: clang
configuration: default
name: "Ub-20 clang"
name: "Ub-22 clang"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: clang
configuration: default
extra: "CMD_CXXFLAGS=-std=c++11"
name: "Ub-20 clang C++11"
name: "Ub-22 clang C++11"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-pc686-qemu@5"
name: "Ub-20 gcc + RT-5.1 pc686"
name: "Ub-22 gcc + RT-5.1 pc686"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-beatnik@5"
test: NO
name: "Ub-20 gcc + RT-5.1 beatnik"
name: "Ub-22 gcc + RT-5.1 beatnik"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-xilinx_zynq_a9_qemu@5"
test: NO
name: "Ub-20 gcc + RT-5.1 xilinx_zynq_a9_qemu"
name: "Ub-22 gcc + RT-5.1 xilinx_zynq_a9_qemu"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-uC5282@5"
test: NO
name: "Ub-20 gcc + RT-5.1 uC5282"
name: "Ub-22 gcc + RT-5.1 uC5282"
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
name: "Ub-20 gcc + RT-4.10"
name: "Ub-22 gcc + RT-4.10"
cross: "RTEMS-pc386-qemu@4.10"
test: NO
- os: ubuntu-20.04
- os: ubuntu-22.04
cmp: gcc
configuration: default
name: "Ub-20 gcc + RT-4.9"
name: "Ub-22 gcc + RT-4.9"
cross: "RTEMS-pc386-qemu@4.9"
- os: macos-latest
@@ -239,10 +239,15 @@ jobs:
matrix:
# Job names also name artifacts, character limitations apply
include:
#- name: "CentOS-7"
# image: centos:7
# cmp: gcc
# configuration: default
- name: "CentOS-8"
image: centos:8
cmp: gcc
configuration: default
- name: "Rocky-9"
image: rockylinux:9
cmp: gcc
configuration: default
- name: "Fedora-33"
image: fedora:33
@@ -255,47 +260,29 @@ jobs:
configuration: default
steps:
- name: "Build newer Git"
# actions/checkout@v2 wants git >=2.18
# centos:7 has 1.8
if: matrix.image=='centos:7'
- name: "Fix repo URLs on CentOS-8"
# centos:8 is frozen, repos are in the vault
if: matrix.image=='centos:8'
run: |
yum -y install curl make gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
curl https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.29.0.tar.gz | tar -xz
cd git-*
make -j2 prefix=/usr/local all
make prefix=/usr/local install
cd ..
rm -rf git-*
type -a git
git --version
sed -i -e "s|mirrorlist=|#mirrorlist=|" \
-e "s|#baseurl=http://mirror|baseurl=http://vault|" \
/etc/yum.repos.d/CentOS-Linux-{BaseOS,AppStream,Extras,Plus}.repo
- name: "Redhat setup"
run: |
dnfyum() {
dnf -y "$@" || yum -y "$@"
return $?
}
dnfyum install python3 gdb make perl gcc-c++ glibc-devel readline-devel ncurses-devel perl-devel perl-Test-Simple
git --version || dnfyum install git
# rather than just bite the bullet and link python3 -> python,
# people would rather just break all existing scripts...
[ -e /usr/bin/python ] || ln -sf python3 /usr/bin/python
python --version
dnf -y install python3 gdb make perl gcc-c++ glibc-devel readline-devel ncurses-devel perl-devel perl-Test-Simple
git --version || dnf -y install git
python3 --version
- uses: actions/checkout@v4
with:
submodules: true
- name: Automatic core dumper analysis
uses: mdavidsaver/ci-core-dumper@master
if: matrix.image!='centos:7'
- name: Automatic core dumper analysis
uses: mdavidsaver/ci-core-dumper@node16
if: matrix.image=='centos:7'
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
run: python3 .ci/cue.py prepare
- name: Build main module
run: python .ci/cue.py build
run: python3 .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py -T 20M test
run: python3 .ci/cue.py -T 20M test
- name: Upload tapfiles Artifact
if: ${{ always() }}
uses: actions/upload-artifact@v4
@@ -305,4 +292,55 @@ jobs:
if-no-files-found: ignore
- name: Collect and show test results
if: ${{ always() }}
run: python .ci/cue.py -T 5M test-results
run: python3 .ci/cue.py -T 5M test-results
build-docker:
name: Docker CentOS-7
runs-on: ubuntu-latest
env:
CMP: gcc
BCFG: default
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Run...
run: |
env > env.list
cat <<EOF > runit.sh
#!/bin/sh
set -e -x
cd /io
id
sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo
sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo
sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo
yum -y install epel-release
yum -y install \
curl make gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker \
python3 gdb make perl gcc-c++ glibc-devel readline-devel ncurses-devel perl-devel perl-Test-Simple \
libevent-devel sudo re2c
[ -e /usr/bin/python ] || ln -sf /usr/bin/python3 /usr/bin/python
# fake out cue.py
ln -s /bin/true /usr/bin/apt-get
# quiet warnings spam from perl
export LANG=C
python --version
python .ci/cue.py prepare
python .ci/cue.py build
python .ci/cue.py -T 15M test
python .ci/cue.py test-results
EOF
chmod +x runit.sh
docker run --rm --quiet \
--pull=always \
--env-file env.list \
-v `pwd`:/io \
centos:7 \
/io/runit.sh

4
.gitignore vendored
View File

@@ -19,7 +19,3 @@ O.*/
.*.swp
.DS_Store
.iocsh_history
RPMS
SRPMS
BUILDROOT
*.rpm

6
.gitmodules vendored
View File

@@ -1,7 +1,6 @@
[submodule "modules/pvData"]
path = modules/pvData
# url = https://github.com/epics-base/pvDataCPP
url = git@git.psi.ch:epics_base/pvData.git
url = https://github.com/epics-base/pvDataCPP
branch = master
[submodule "modules/pvAccess"]
path = modules/pvAccess
@@ -27,6 +26,3 @@
path = .ci
url = https://github.com/epics-base/ci-scripts
branch = master
[submodule "modules/pcas"]
path = modules/pcas
url = https://github.com/epics-modules/pcas

View File

@@ -23,13 +23,3 @@ DIRS += modules
modules_DEPEND_DIRS = src
include $(TOP)/configure/RULES_TOP
UNINSTALL_DIRS += $(INSTALL_LOCATION)/src
copysrc:
tar cf - --exclude-vcs --exclude-backups --exclude=O.* modules/*/src | tar xf - -C $(INSTALL_LOCATION)
tar:
tar cfjP epics_base-$(EPICS_VERSION_NUMBER).tar.bz2 $(INSTALL_LOCATION)
rpm:
rpmbuild -bb epics-base.spec

View File

@@ -48,11 +48,11 @@ EPICS_VERSION = 7
EPICS_REVISION = 0
# EPICS_MODIFICATION must be a number >=0 and <256
EPICS_MODIFICATION = 8
EPICS_MODIFICATION = 9
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
# Not included in the official EPICS version number if zero
EPICS_PATCH_LEVEL = 2
EPICS_PATCH_LEVEL = 1
# Immediately after an official release the EPICS_PATCH_LEVEL is incremented
# and the -DEV suffix is added (similar to the Maven -SNAPSHOT versions)
@@ -71,6 +71,3 @@ endif
EPICS_SHORT_VERSION=$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)$(EPICS_PATCH_VSTRING)
EPICS_VERSION_NUMBER=$(EPICS_SHORT_VERSION)$(EPICS_DEV_SNAPSHOT)$(EPICS_SITE_VSTRING)
EPICS_VERSION_STRING="EPICS Version $(EPICS_VERSION_NUMBER)"
# Provide this in case anyone is still using the old name
COMMIT_DATE="-no-date-"

View File

@@ -2,7 +2,7 @@
EPICS_CA_MAJOR_VERSION = 4
EPICS_CA_MINOR_VERSION = 14
EPICS_CA_MAINTENANCE_VERSION = 4
EPICS_CA_MAINTENANCE_VERSION = 6
# Development flag, set to zero for release versions

View File

@@ -1,7 +1,7 @@
# Version number for the database APIs and shared library
EPICS_DATABASE_MAJOR_VERSION = 3
EPICS_DATABASE_MINOR_VERSION = 23
EPICS_DATABASE_MINOR_VERSION = 24
EPICS_DATABASE_MAINTENANCE_VERSION = 1
# Development flag, set to zero for release versions

View File

@@ -1,7 +1,7 @@
# Version number for the libcom APIs and shared library
EPICS_LIBCOM_MAJOR_VERSION = 3
EPICS_LIBCOM_MINOR_VERSION = 23
EPICS_LIBCOM_MINOR_VERSION = 24
EPICS_LIBCOM_MAINTENANCE_VERSION = 1
# Development flag, set to zero for release versions

View File

@@ -157,9 +157,7 @@ USE_POSIX_THREAD_PRIORITY_SCHEDULING = YES
# Site version number, if set will append '-' and this string to the
# EPICS version number string that is reported by many tools.
ifeq ($(INSTALL_LOCATION),$(EPICS_BASE))
EPICS_SITE_VERSION=$(shell $(PERL) -MPOSIX -e 'print strftime "%Y-%m-%d", localtime')
endif
EPICS_SITE_VERSION =
# For GNU compiler, use pipes rather than temporary files for
# communication between the various stages of compilation.

View File

@@ -92,3 +92,6 @@ EPICS_IOC_LOG_FILE_NAME=
EPICS_IOC_LOG_FILE_COMMAND=
EPICS_IOC_LOG_FILE_LIMIT=1000000
# Set to 'YES' to call abort() rather than suspend the current thread
# when an assert() fails
EPICS_ABORT_ON_ASSERT=NO

View File

@@ -101,23 +101,6 @@ include $(CONFIG)/RULES_FILE_TYPE
include $(CONFIG)/RULES.Db
#---------------------------------------------------------------
# Do not build anything if current path matches SKIP_BUILDS
ifneq (,$(strip $(SKIP_BUILDS)))
CURRENT_MODULE=$(subst modules/,,$(subst $(realpath $(TOP)/..)/,,$(subst $(realpath $(dir $(lastword $(MAKEFILE_LIST)))..)/,,$(realpath ..))))
ifneq ($(filter $(SKIP_BUILDS) $(addsuffix /%,$(SKIP_BUILDS)),$(CURRENT_MODULE)),)
$(info Skipping $(CURRENT_MODULE) for $(T_A))
PROD=
TESTPROD=
LIBRARY=
TESTLIBRARY=
LOADABLE_LIBRARY=
TESTS=
SRC_FILES=
endif
endif
#---------------------------------------------------------------
# Include defines and rules for prod, library and test* targets
@@ -244,7 +227,7 @@ $(LOADABLE_SHRLIBNAME): FINAL_DIR=$(INSTALL_SHRLIB)
$(TESTPRODNAME) $(PRODNAME): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS)
$(TESTPRODNAME) $(PRODNAME): %$(EXE):
$(TESTPRODNAME) $(PRODNAME): %$(EXE): | $(INSTALL_LIB)
@$(RM) $@
$(LINK.cpp)
$(MT_EXE_COMMAND)
@@ -347,6 +330,10 @@ $(LOADABLE_SHRLIBNAME): $(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX):
$(LINK.shrlib)
$(MT_DLL_COMMAND)
$(LIBNAME) $(SHRLIBNAME) $(LOADABLE_SHRLIBNAME): | $(INSTALL_LIB)
$(INSTALL_LIB):
@$(MKDIR) $@
#---------------------------------------------------------------
# C++ munching for VxWorks
@@ -515,13 +502,6 @@ ifneq (,$(strip $(SHRLIB_VERSION)))
@$(RM) $(subst $(SHRLIB_SUFFIX),$(SHRLIB_SUFFIX_BASE),$@)
ln -s $< $(subst $(SHRLIB_SUFFIX),$(SHRLIB_SUFFIX_BASE),$@)
endif # SHRLIB_VERSION
else # SHRLIB_SUFFIX
ifeq ($(BUILD_CLASS),HOST)
ifneq (,$(strip $(SHRLIB_VERSION)))
@$(RM) $@.$(SHRLIB_VERSION)
ln -s $< $@.$(SHRLIB_VERSION)
endif # HOST
endif # SHRLIB_VERSION
endif # SHRLIB_SUFFIX
ifneq ($(INSTALL_TCLLIB),$(INSTALL_BIN))

View File

@@ -1,8 +0,0 @@
# Include definitions common to linux pentium targets
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
TOOLSET_LOCATION = /opt/rh
TOOLSET = devtoolset-12
STD_CXXFLAGS = -std=c++20

View File

@@ -1,3 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.linux-clang
BUILD_CLASS = HOST

View File

@@ -1,20 +0,0 @@
# Include definitions common to linux pentium targets
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
TOOLSET_LOCATION = /opt/rh
TOOLSET = gcc-toolset-12
STD_CXXFLAGS = -std=c++20
# Fix bug in gcc-toolset-11 calling the old assembler
ifneq ($(filter %-11,$(TOOLSET)),)
TARGET_CPPFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
TARGET_LDFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
endif
ifneq (($(TOOLSET)),)
# Perl requests (native) annobin incompatible with the annobin from any TOOLSET
# Disable Perl specific CFLAGS
override Cap5_CFLAGS=
endif

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.linux-clang
BUILD_CLASS = HOST
STD_CXXFLAGS = -std=c++2a

View File

@@ -1,20 +0,0 @@
# Include definitions common to linux pentium targets
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
TOOLSET_LOCATION = /opt/rh
TOOLSET = gcc-toolset-12
STD_CXXFLAGS = -std=c++20
# Fix bug in gcc-toolset-11 calling the old assembler
ifneq ($(filter %-11,$(TOOLSET)),)
TARGET_CPPFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
TARGET_LDFLAGS += $(TOOLSET_DIR:%=-B$(SYSROOT)%/bin)
endif
ifneq (($(TOOLSET)),)
# Perl requests (native) annobin incompatible with the annobin from any TOOLSET
# Disable Perl specific CFLAGS
override Cap5_CFLAGS=
endif

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.linux-clang
BUILD_CLASS = HOST
STD_CXXFLAGS = -std=c++2a

View File

@@ -1,2 +0,0 @@
RTEMS_VERSION = 4.9
include $(CONFIG)/os/CONFIG.Common.RTEMS-pc386

View File

@@ -1,2 +0,0 @@
RTEMS_VERSION = 5
include $(CONFIG)/os/CONFIG.Common.RTEMS-pc686

View File

@@ -1,8 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 5.5.1
WIND_BASE = /opt/VxWorks/Tornado2.2.1
#there is a problem with our ccppc and optimization
# -O0 works, -O and -O1 and higher are buggy
OPT_CFLAGS_YES = -O0
OPT_CXXFLAGS_YES = -O0

View File

@@ -8,7 +8,7 @@
#-------------------------------------------------------
# Unix valid build types
VALID_BUILDS = $(if $(filter HOST,$(BUILD_CLASS)),Host) Ioc Command
VALID_BUILDS = Host Ioc Command
#-------------------------------------------------------
# Unix prefix and suffix definitions

View File

@@ -1,2 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 6.2

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc603_long
VXWORKS_VERSION = 6.3
# Buggy "uninitialized variable" warning produces many false positives
ARCH_DEP_CXXFLAGS += -Wno-uninitialized

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 6.3
# Buggy "uninitialized variable" warning produces many false positives
ARCH_DEP_CXXFLAGS += -Wno-uninitialized

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 6.4
# Buggy "uninitialized variable" warning produces many false positives
ARCH_DEP_CXXFLAGS += -Wno-uninitialized

View File

@@ -1,2 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc603_long
VXWORKS_VERSION = 6.6

View File

@@ -1,2 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 6.6

View File

@@ -1,8 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 6.7
# needed when including memPartLib.h, e.g. through moduleLib.h or loadLib.h
ARCH_DEP_CFLAGS += -D_VSB_CONFIG_FILE='<../lib/h/config/vsbConfig.h>'
# compiler tries to access license server (even though no license isneeded)
export LM_LICENSE_FILE=37000@lic-windriver.psi.ch

View File

@@ -1,3 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc32
VXWORKS_VERSION = 6.9
#export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH:%=%:)$(WIND_BASE)/lmapi-5.0/$(WIND_HOST_TYPE)/lib

View File

@@ -1,6 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.vxWorks-ppc604_long
VXWORKS_VERSION = 6.9
#export LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH:%=%:)($(WIND_BASE)/lmapi-5.0/$(WIND_HOST_TYPE)/lib
# -fno-implicit-fp causes error: "unable to find a register to spill in class 'FLOAT_REGS'"
ARCH_DEP_CFLAGS = -mcpu=604 -mstrict-align

View File

@@ -1,16 +0,0 @@
# Debian 10
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
STD_CXXFLAGS = -std=c++17
ifneq ($(EPICS_HOST_ARCH),$(T_A))
# Cross compile
GNU_DIR = /opt/xgcc/gcc-8.3.0-deb10
GNU_TARGET = x86_64-deb10-linux-gnu
SYSROOT = $(GNU_DIR)/$(GNU_TARGET)/sys-root
CMPLR_PREFIX = $(GNU_TARGET)-
endif

View File

@@ -1,17 +0,0 @@
# Debian 12
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
STD_CXXFLAGS = -std=c++17
ifneq ($(EPICS_HOST_ARCH),$(T_A))
# Cross compile
GNU_DIR = /opt/xgcc/gcc-12.2.0-deb12
GNU_TARGET = x86_64-deb12-linux-gnu
SYSROOT = $(GNU_DIR)/$(GNU_TARGET)/sys-root
CMPLR_PREFIX = $(GNU_TARGET)-
ARCH_DEP_LDFLAGS+=-Wl,-rpath-link,$(SYSROOT)/lib/x86_64-linux-gnu
endif

View File

@@ -1,28 +0,0 @@
# DeltaTau PowerPMAC with ELDK 4.2
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
COMMANDLINE_LIBRARY = READLINE_NCURSES
ARCH_CLASS = ppc
ELDK=/opt/eldk-4.2
GNU_TARGET=ppc_4xxFP
GNU_DIR=$(ELDK)/usr
# This cross tool chain is installed in a somehow weired way
# Without the following lines it does not work on RHEL7
# but it worked on SL6
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2/powerpc-linux
ARCH_DEP_CXXFLAGS += -I $(ELDK)/$(GNU_TARGET)/usr/include/c++/4.2.2/backward
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(ELDK)/$(GNU_TARGET)/lib
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(ELDK)/$(GNU_TARGET)/usr/lib
# have no C++11
STD_CXXFLAGS =
# suppress strict alias warnings
CODE_CPPFLAGS += -fno-strict-aliasing

View File

@@ -1,17 +0,0 @@
# Virtex FPGA embedded Processor with ELDK 5.1
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = ppc
SDK = eldk
SDK_DIR = /opt/eldk-5.1
SDK_HOST_ARCH = $(GNU_HOST_ARCH)-$(SDK)-$(GNU_HOST_OS)
GNU_TARGET = powerpc-4xx-softfloat
GNU_ARCH = ppc405-linux
GNU_DIR = $(SDK_DIR)/$(GNU_TARGET)/sysroots/$(SDK_HOST_ARCH)/usr
GNU_BIN = $(GNU_DIR)/bin/$(GNU_ARCH)
# have no full C++11
STD_CXXFLAGS = -std=c++0x

View File

@@ -1,18 +0,0 @@
# IOxOS IFC1210 with ELDK 5.2
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = ppc
SDK = eldk
SDK_DIR = /opt/eldk-5.2
SDK_HOST_ARCH = $(GNU_HOST_ARCH)-$(SDK)-$(GNU_HOST_OS)
GNU_TARGET = powerpc-e500v2
GNU_ARCH = ppce500v2-linux-gnuspe
GNU_DIR = $(SDK_DIR)/$(GNU_TARGET)/sysroots/$(SDK_HOST_ARCH)/usr
GNU_BIN = $(GNU_DIR)/bin/$(GNU_ARCH)
GNU_TARGET_INCLUDE_DIR =
# have no full C++11
STD_CXXFLAGS = -std=c++0x

View File

@@ -1,20 +0,0 @@
# DeltaTau PowerPMAC with ELDK 5.3
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = ppc
SDK = eldk
SDK_DIR = /opt/eldk-5.3
SDK_HOST_ARCH = $(GNU_HOST_ARCH)-$(SDK)-$(GNU_HOST_OS)
GNU_ARCH = ppc440e-linux
SDKTARGETSYSROOT=$(SDK_DIR)/powerpc-4xx/sysroots
GNU_DIR = $(SDKTARGETSYSROOT)/$(SDK_HOST_ARCH)/usr
GNU_BIN = $(GNU_DIR)/bin/$(GNU_ARCH)
GNU_TARGET_INCLUDE_DIR =
GNU_TARGET=powerpc-linux
SYSROOT = $(SDKTARGETSYSROOT)/$(GNU_ARCH)
ARCH_DEP_CPPFLAGS = -m32 -mcpu=440fp -mhard-float
AS=$(GNU_BIN)/$(GNU_TARGET)-as

View File

@@ -1,17 +0,0 @@
# IOxOS IFC1211 with Freescale QorIQ 2.0 toolchain
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = ppc
SDK = fslsdk
SDK_DIR = /opt/fsl-qoriq/2.0
SDK_HOST_ARCH = $(GNU_HOST_ARCH_64)-$(SDK)-$(GNU_HOST_OS)
SDK_TARGET = ppc64e6500-fsl-linux
GNU_TARGET = powerpc64-fsl-linux
SYSROOT = $(SDK_DIR)/sysroots/$(SDK_TARGET)
GNU_DIR = $(SDK_DIR)/sysroots/$(SDK_HOST_ARCH)/usr
GNU_BIN = $(GNU_DIR)/bin/$(GNU_TARGET)
ARCH_DEP_CFLAGS = -mcpu=e6500 -m64 -mhard-float

View File

@@ -1,14 +0,0 @@
# DeltaTau PowerPMAC with gcc 8.5
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = ppc
GNU_DIR = /opt/xgcc/gcc-8.5.0
GNU_TARGET = powerpc-ppmac-linux-gnu
ARCH_DEP_CPPFLAGS = -m32 -mcpu=440fp -mhard-float
ARCH_DEP_LDFLAGS += -Wl,-rpath-link,$(GNU_DIR)/$(GNU_TARGET)/sys-root/lib/powerpc-linux-gnu
STD_CXXFLAGS = -std=c++17

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG.Common.linuxCommon
GNU = NO
CMPLR_CLASS = clang
CC = clang
CCC = clang++

View File

@@ -24,13 +24,13 @@ STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
# Set runtime path for shared libraries if LINKER_USE_RPATH=YES
SHRLIBDIR_RPATH_LDFLAGS_YES = $(subst $(abspath $(LINKER_ORIGIN_ROOT)),$(FINAL_LOCATION),$(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)) $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath-link,%)
SHRLIBDIR_RPATH_LDFLAGS_YES = $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)
SHRLIBDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(SHRLIB_DEPLIB_DIRS))
SHRLIBDIR_LDFLAGS += \
$(SHRLIBDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
# Set runtime path for products if LINKER_USE_RPATH=YES
PRODDIR_RPATH_LDFLAGS_YES = $(subst $(abspath $(LINKER_ORIGIN_ROOT)),$(FINAL_LOCATION),$(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)) $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath-link,%)
PRODDIR_RPATH_LDFLAGS_YES = $(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)
PRODDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(PROD_DEPLIB_DIRS))
PRODDIR_LDFLAGS += \
$(PRODDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))

View File

@@ -1,25 +0,0 @@
# Moxa DA-66x with SDK 4.2 and ARM7 processor
# Include definitions common to all Linux ARM targets
include $(CONFIG)/os/CONFIG.Common.linux-arm
GNU_DIR=/opt/moxa/arm-linux-4.4.2-v4
GNU_TARGET=arm
ARCH_DEP_LDFLAGS+=-Wl,-rpath-link,$(GNU_DIR)/arm-none-linux-gnueabi/lib
COMMANDLINE_LIBRARY = READLINE_NCURSES
# suppress note "the mangling of 'va_list' has changed in GCC 4.4"
ARCH_DEP_CXXFLAGS += -Wno-psabi
ARCH_DEP_CFLAGS += -funwind-tables
# have no full C++11
STD_CXXFLAGS = -std=c++0x
# suppress strict alias warnings
CODE_CPPFLAGS += -fno-strict-aliasing
# accept4() exists but does not work
# Give fake __rtems__ macro to posix/osdSock.c because that disables accept4()
osdSock_CFLAGS += -D__rtems__

View File

@@ -1,18 +0,0 @@
# Moxa DA-66x with Montavista Linux 4.0
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
COMMANDLINE_LIBRARY = READLINE_CURSES
ARCH_CLASS = xscale
GNU_DIR=/opt/moxa/xscale_be/armv5teb-montavista-linuxeabi
ARCH_DEP_CFLAGS += -funwind-tables
# have no C++11
STD_CXXFLAGS =
# Cannot build PVA because of missing boost support
SKIP_BUILDS = pv% normativeTypes

View File

@@ -1,21 +0,0 @@
# National Instruments CompactRIO running LabView RT 19.5.1
# requires RPM gcc-c++-arm-linux-gnu
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = arm
GNU_TARGET = arm-linux-gnu
SYSROOT = /opt/LabVIEW-RT-19.5.1/arm/sysroots/armv7a-vfp-neon-nilrt-linux-gnueabi
GNU_BIN = /opt/RHEL7/bin
# Needed on RHEL9:
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)/usr/$$LIB:/opt/RHEL7/$$LIB
ARCH_DEP_CPPFLAGS += -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon
ARCH_DEP_CXXFLAGS += -I=/usr/include/c++/4.7.2/arm-nilrt-linux-gnueabi
ARCH_DEP_CXXFLAGS += -I=/usr/include/c++/4.7.2
COMMANDLINE_LIBRARY = READLINE_NCURSES

View File

@@ -1,44 +0,0 @@
# RaspberryPi with github.com/raspberrypi/tools toolchain
# Tested on:
# * Raspberry 3B+ Raspbian 9
# * Raspberry 2 Raspbian 7
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
# Using readline:
# Due to missing/messed up libs in the toolchain, readline needs copies of
# libtinfo.so.5.9 and libreadline.so.6.2 from a Raspbian 7 rootfs
# /lib/arm-linux-gnueabihf/ to the toolchain, e.g.
# $(SDK_DIR)/$(SDK_TARGET)/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/
# and manually created links libtinfo.so.5 and libreadline.so.
# For gcc-linaro-arm-linux-gnueabihf-raspbian, an existing incompatible
# libtinfo.so.5 is in the way. Remove it.
# (Built with glibc 2.16 like installed on Raspbian 9 but toolchain uses glibc 2.13.)
# Also copy /usr/include/readline/ directory from some readline 6 installation
# to $(SDK_DIR)/$(SDK_TARGET)/arm-linux-gnueabihf/libc/usr/include/
ARCH_CLASS = arm
SDK_DIR = /opt/raspberrypi/arm-bcm2708
# Available SDK_TARGETs:
# gcc 4.8.3 for 32 bit hosts with GLIBC 2.3 or higher
# SDK_TARGET = gcc-linaro-arm-linux-gnueabihf-raspbian
# gcc 4.8.3 for 64 bit hosts with GLIBC 2.14 or higher
SDK_TARGET = gcc-linaro-arm-linux-gnueabihf-raspbian-x64
# gcc 4.7.1 for 64 bit hosts with GLIBC 2.8 or higher
# SDK_TARGET = arm-linux-gnueabihf
# gcc 4.7.1 for 32 bit hosts with GLIBC 2.4 or higher
# SDK_TARGET = arm-bcm2708hardfp-linux-gnueabi
# SDK_TARGET = arm-bcm2708-linux-gnueabi
# gcc 4.9.3 for 64 bit hosts
# arm-rpi-4.9.3-linux-gnueabihf
GNU_DIR = $(SDK_DIR)/$(SDK_TARGET)
GNU_TARGET = $(if $(filter arm-bcm2708%,SDK_TARGET),$(SDK_TARGET),arm-linux-gnueabihf)

View File

@@ -1,15 +0,0 @@
# XILINX Zynq with Yocto 2.1 / Petalinux toolchain
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = arm64
SDK = petalinux
SDK_DIR = /opt/petalinux-gfa/2018.1
SDK_HOST_ARCH = $(GNU_HOST_ARCH_64)-$(SDK)-$(GNU_HOST_OS)
SDK_TARGET = aarch64-xilinx-linux
GNU_TARGET = $(SDK_TARGET)
SYSROOT = $(SDK_DIR)/sysroots/$(SDK_TARGET)
GNU_DIR = $(SDK_DIR)/sysroots/$(SDK_HOST_ARCH)/usr
GNU_BIN = $(GNU_DIR)/bin/$(GNU_TARGET)

View File

@@ -1,19 +0,0 @@
# XILINX Zynq with Yocto 4.0 toolchain
# Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = arm64
SDK = pokysdk
SDK_DIR = /opt/yocto40-aarch64
SDK_HOST_ARCH = $(GNU_HOST_ARCH_64)-$(SDK)-$(GNU_HOST_OS)
SDK_TARGET = cortexa53-poky-linux
GNU_TARGET = aarch64-poky-linux
SYSROOT = $(SDK_DIR)/sysroots/$(SDK_TARGET)
GNU_DIR = $(SDK_DIR)/sysroots/$(SDK_HOST_ARCH)/usr
GNU_BIN = $(GNU_DIR)/bin/$(GNU_TARGET)
ARCH_DEP_CPPFLAGS = -mcpu=cortex-a53 -march=armv8-a+crc
STD_CXXFLAGS = -std=c++23

View File

@@ -1,10 +0,0 @@
include $(CONFIG)/os/CONFIG.windows-x64.windows-x64
VALID_BUILDS = Ioc Command
MSVC_VERSION ?= 2019
PATH := /opt/gfa-wine/bin:/opt/wine-msvc-$(MSVC_VERSION)/bin/x64:$(PATH)
export WINEPREFIX = $(HOME)/.wine-$(EPICS_HOST_ARCH)
export WINEDEBUG=fixme-all
export WINEDLLOVERRIDES="mscoree,mshtml="
export WINE = wine64

View File

@@ -1,3 +0,0 @@
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
#Include definitions common to linux hosts
include $(CONFIG)/os/CONFIG.linux-x86_64.Common

View File

@@ -1,2 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86

View File

@@ -1,3 +0,0 @@
# MSVC_VERSION 2019 in wine 4 for on RHEL7 would require winetricks
MSVC_VERSION = 2017
include $(CONFIG)/os/CONFIG.Linux.windows-x64

View File

@@ -1,3 +0,0 @@
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
#Include definitions common to linux hosts
include $(CONFIG)/os/CONFIG.linux-x86_64.Common

View File

@@ -1,25 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
# "Cross compile" for RHEL7-x86_64
# Expects RHEL7 RPMs c++ and readline-devel installed
# in $(SYSROOT)
# This can be installed on RHEL7 with:
# yum install --installroot=$(SYSROOT) <packages>
# (Assuming $(SYSROOT) is on a shared network volume.)
# Optionally use a newer TOOLSET (installed on $(SYSROOT)).
SYSROOT = /opt/RHEL7
# "Cross" TOOLSET progs need to find their libraries
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(TOOLSET_DIR:%=$(SYSROOT)%/usr/$$LIB)
# The linker has problems to find indirectly referenced libraries
ARCH_DEP_LDFLAGS+=-Wl,-rpath-link,$(INSTALL_LIB)
# These programs have library problems when using them
# from SYSROOT but without TOOLSET.
# But provinding LD_LIBRARY PATH crashes other progams.
# Our host versions work just fine.
AR = ar -rc
RANLIB = ranlib

View File

@@ -1,2 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86

View File

@@ -1 +0,0 @@
include $(CONFIG)/os/CONFIG.Linux.windows-x64

View File

@@ -1,3 +0,0 @@
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
#Include definitions common to linux hosts
include $(CONFIG)/os/CONFIG.linux-x86_64.Common

View File

@@ -1,18 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
# "Cross compile" for RHEL7-x86_64
# Expects RHEL7 RPMs c++ and readline-devel installed
# in $(SYSROOT)
# This can be installed on RHEL7 with:
# yum install --installroot=$(SYSROOT) <packages>
# (Assuming $(SYSROOT) is on a shared network volume.)
# Optionally use a newer TOOLSET (installed on $(SYSROOT)).
SYSROOT = /opt/RHEL7
# "Cross" TOOLSET progs need to find their libraries
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(TOOLSET_DIR:%=$(SYSROOT)%/usr/$$LIB:)/usr/$$LIB:$(SYSROOT)/usr/$$LIB
# The linker has problems to find indirectly referenced libraries
PROD_LDLIBS += $(LDLIBS)

View File

@@ -1,22 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
# "Cross compile" for RHEL8-x86_64
# Expects RHEL8 RPMs gcc-toolset-12-gcc-c++ and readline-devel
# to be installed in $(SYSROOT)
# These can be installed on RHEL8 with:
# yum install --installroot=$(SYSROOT) <packages>
# (Assuming $(SYSROOT) is on a shared network volume.)
SYSROOT = /opt/RHEL8
# "Cross" TOOLSET progs need to find their libraries.
# But linker gets confused with LD_LIBRARY_PATH.
# Thus only wrap the compiler.
WRAPPER = -wrapper env,LD_LIBRARY_PATH=$(TOOLSET_DIR:%=$(SYSROOT)%/usr/lib64:)/usr/lib64:$(SYSROOT)/usr/lib64
TARGET_CPPFLAGS += $(WRAPPER)
# These programs as cross tools would also need LD_LIBRARY_PATH.
# But but our host versions work just fine.
AR = ar -rc
RANLIB = ranlib

View File

@@ -1,2 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86

View File

@@ -1 +0,0 @@
include $(CONFIG)/os/CONFIG.Linux.windows-x64

View File

@@ -0,0 +1,11 @@
# CONFIG.darwin-aarch64-debug.Common
#
# Definitions for darwin-aarch64-debug host builds - darwin-aarch64 target build with debug compiler flags
# Sites may override these definitions in CONFIG_SITE.darwin-aarch64-debug.Common
#-------------------------------------------------------
include $(CONFIG)/os/CONFIG.darwin-aarch64.Common
# Removes -O optimization and adds -g compile option
HOST_OPT=NO

View File

@@ -0,0 +1,14 @@
# CONFIG.darwin-aarch64.darwin-aarch64-debug
#
# Definitions for darwin-aarch64 host - darwin-aarch64-debug target build with debug compiler flags
# Sites may override these definitions in CONFIG_SITE.darwin-aarch64.darwin-aarch64-debug
#-------------------------------------------------------
-include $(CONFIG)/os/CONFIG.Common.darwin-aarch64
-include $(CONFIG)/os/CONFIG.darwin-aarch64.darwin-aarch64
-include $(CONFIG)/os/CONFIG_SITE.Common.darwin-aarch64
-include $(CONFIG)/os/CONFIG_SITE.darwin-aarch64.darwin-aarch64
BUILD_CLASS=HOST
HOST_OPT = NO

View File

@@ -0,0 +1,11 @@
# CONFIG.darwin-x86-debug.Common
#
# Definitions for darwin-x86-debug host builds - darwin-x86 target build with debug compiler flags
# Sites may override these definitions in CONFIG_SITE.darwin-x86-debug.Common
#-------------------------------------------------------
include $(CONFIG)/os/CONFIG.darwin-x86.Common
# Removes -O optimization and adds -g compile option
HOST_OPT=NO

View File

@@ -1,3 +0,0 @@
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
#Include definitions common to linux hosts
include $(CONFIG)/os/CONFIG.linux-x86_64.Common

View File

@@ -1,3 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
GNU_DIR=/usr

View File

@@ -1,3 +0,0 @@
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
#Include definitions common to linux hosts
include $(CONFIG)/os/CONFIG.linux-x86_64.Common

View File

@@ -1,3 +0,0 @@
# Include common linux definitions
include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
GNU_DIR=/usr

View File

@@ -24,9 +24,6 @@
#RTEMS_VERSION = 5
#RTEMS_BASE = /usr/local/vw/rtems/rtems-5.1
# PSI:
RTEMS_BASE = /opt/rtems/$(RTEMS_VERSION)
# Cross-compile toolchain in $(RTEMS_TOOLS)/bin
#
RTEMS_TOOLS = $(RTEMS_BASE)

View File

@@ -1,2 +0,0 @@
# Debian 10
COMMANDLINE_LIBRARY=READLINE_NCURSES

View File

@@ -1,2 +0,0 @@
# Debian 10
COMMANDLINE_LIBRARY=READLINE

View File

@@ -1,2 +0,0 @@
# DeltaTau PowerPMAC with gcc
COMMANDLINE_LIBRARY=READLINE

View File

@@ -8,18 +8,3 @@
# They must be set in the host+target specific file instead:
# CONFIG_SITE.<linux-arch>.<linux-arch>
COMMANDLINE_LIBRARY = READLINE
USR_CXXFLAGS += $(STD_CXXFLAGS)
STD_CXXFLAGS = -std=c++11
TOOLSET_DIR = $(TOOLSET:%=$(TOOLSET_LOCATION)/%/root)
GNU_DIR = $(SYSROOT)$(TOOLSET_DIR)
TARGET_CPPFLAGS += $(SYSROOT:%=--sysroot=%)
TARGET_LDFLAGS += $(SYSROOT:%=--sysroot=%)
# backward compatibility: Keep unversioned libs
# in order to prevent dynamic linking problems
# when minor changes increment *_MAINTENANCE_VERSION
SHRLIB_SUFFIX = $(SHRLIB_SUFFIX_BASE)
LOADABLE_SHRLIB_SUFFIX = $(SHRLIB_SUFFIX_BASE)

View File

@@ -21,9 +21,5 @@ VXWORKS_VERSION = 6.9
# WIND_BASE is where you installed the Wind River software.
#WIND_BASE = /usr/local/vw/tornado22-$(ARCH_CLASS)
#WIND_BASE = /usr/local/vw/vxWorks-$(VXWORKS_VERSION)
WIND_BASE = /usr/local/vw/vxWorks-$(VXWORKS_VERSION)
#WIND_BASE = /ade/vxWorks/$(VXWORKS_VERSION)
WIND_BASE = /opt/VxWorks/VxWorks$(VXWORKS_VERSION)
# For the license counter
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(WIND_BASE)/lmapi-5.0/$(WIND_HOST_TYPE)/lib

View File

@@ -1,5 +0,0 @@
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
# Improved error checking with clang
CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64-clang
CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64-clang

View File

@@ -1,7 +0,0 @@
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
# Improved error checking with clang
CROSS_COMPILER_TARGET_ARCHS += RHEL8-x86_64-clang
# Build for old RHEL7 64 bit
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64

View File

@@ -1,10 +0,0 @@
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
# Improved error checking with clang
CROSS_COMPILER_TARGET_ARCHS += RHEL9-x86_64-clang
# Build for old RHEL8 64 bit
CROSS_COMPILER_TARGET_ARCHS += RHEL8-x86_64
# Build for old RHEL7 64 bit
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64

View File

@@ -1,5 +0,0 @@
# Make sure hosts tools find their libraries during build
# even if FINAL_LOCATION differs from INSTALL_LOCATION
ifneq ($(FINAL_LOCATION:$(INSTALL_LOCATION)=),)
export LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH:%=%:)$(INSTALL_HOST_LIB)
endif

View File

@@ -5,46 +5,3 @@
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32
#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100 RTEMS-pc386-qemu
INSTALL_LOCATION=/usr/local/epics/base-$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
GNU_HOST_ARCH=i686
GNU_HOST_OS=linux
# vxWorks for MVxxxx boards
#CROSS_COMPILER_TARGET_ARCHS += T2-ppc604
#CROSS_COMPILER_TARGET_ARCHS += V67-ppc604
CROSS_COMPILER_TARGET_ARCHS += V69-ppc604
#CROSS_COMPILER_TARGET_ARCHS += V69-ppc32
# NI compact RIO
#CROSS_COMPILER_TARGET_ARCHS += V63-ppc603
# MOXA montavista linux (No PVA because of missing boost support)
CROSS_COMPILER_TARGET_ARCHS += mvl40-xscale_be
# MOXA SDK 4.2
CROSS_COMPILER_TARGET_ARCHS += moxa42-armv6l
# Virtex embedded PPC
CROSS_COMPILER_TARGET_ARCHS += eldk51-ppc4xxSF
# IOxOS IFC1210
CROSS_COMPILER_TARGET_ARCHS += eldk52-e500v2
# DeltaTau PowerPMAC
CROSS_COMPILER_TARGET_ARCHS += eldk42-ppc4xxFP
CROSS_COMPILER_TARGET_ARCHS += eldk53-ppc4xxFP
# Test other vxWorks versions
#CROSS_COMPILER_TARGET_ARCHS += V66-ppc603
#CROSS_COMPILER_TARGET_ARCHS += V66-ppc604
#CROSS_COMPILER_TARGET_ARCHS += V63-ppc604
#CROSS_COMPILER_TARGET_ARCHS += V64-ppc604
# (No PVA because of old compiler)
#CROSS_COMPILER_TARGET_ARCHS += V62-ppc604
# RTEMS (Can only have 1 RTEMS major version in 1 EPICS installation
# because they overwrite their header files.)
#CROSS_COMPILER_TARGET_ARCHS += RTEMS49-pc386
CROSS_COMPILER_TARGET_ARCHS += RTEMS51-pc686

View File

@@ -4,5 +4,5 @@
#-------------------------------------------------------
# Needed by gcc
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)$(RTEMS_BASE)/lib
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(RTEMS_BASE)/lib

View File

@@ -7,29 +7,3 @@
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100
include $(CONFIG)/os/CONFIG_SITE.linux-x86.Common
GNU_HOST_ARCH_64=x86_64
# Windows cross builds using Wine
CROSS_COMPILER_TARGET_ARCHS += windows-x64
# IOxOS IFC1211
#CROSS_COMPILER_TARGET_ARCHS += fslqoriq20-e6500_64
# Zynq
#CROSS_COMPILER_TARGET_ARCHS += yocto21-aarch64
CROSS_COMPILER_TARGET_ARCHS += yocto40-aarch64
# Debian
CROSS_COMPILER_TARGET_ARCHS += deb10-x86_64
CROSS_COMPILER_TARGET_ARCHS += deb12-x86_64
# Newer DeltaTau PowerPMAC
CROSS_COMPILER_TARGET_ARCHS += gcc8-ppc4xxFP
# Raspberry Pi
CROSS_COMPILER_TARGET_ARCHS += raspbian-arm
# NI Linux Real-Time 7.x
CROSS_COMPILER_TARGET_ARCHS += nilrt7-armv7a

View File

@@ -64,7 +64,3 @@ COMMANDLINE_LIBRARY ?= EPICS
#else
COMMANDLINE_LIBRARY ?= $(strip $(if $(wildcard $(if $(GNU_DIR),$(GNU_DIR)/include/readline/readline.h)), READLINE, EPICS))
#endif
#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE>2
OP_SYS_CPPFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
#endif

View File

@@ -8,41 +8,163 @@ under the 3.15 release to which they were originally committed.** Thus it is
important to read more than just the first section to understand everything that
has changed in each release.
The PVA submodules each have their own individual sets of release notes which
should also be read to understand what has changed since earlier releases:
The external PVA submodules each have their own individual release notes files.
However the entries describing changes included in those submodules since EPICS
7.0.5 have now been copied into the appropriate place of this file.
- [normativeTypes](https://github.com/epics-base/normativeTypesCPP/blob/master/documentation/RELEASE_NOTES.md)
- [pvAccess](http://epics-base.github.io/pvAccessCPP/pvarelease_notes.html)
- [pvData](http://epics-base.github.io/pvDataCPP/release_notes.html)
- [pvDatabase](https://github.com/epics-base/pvDatabaseCPP/blob/master/documentation/RELEASE_NOTES.md)
- [pva2pva](https://epics-base.github.io/pva2pva/release_notes.html)
- [pvaClient](https://github.com/epics-base/pvaClientCPP/blob/master/documentation/RELEASE_NOTES.md)
__This version of EPICS has not been released yet.__
**This version of EPICS has not been released yet.**
## Changes made on the 7.0 branch since 7.0.9
## Changes made on the 7.0 branch since 7.0.8.1
__Add new items below here__
### DBE_PROPERTY event rate changed
### Reduce symbol and macro pollution from epicsAtomic.h on WIN32
Updating property fields now only post DBE_PROPERTY events if the
`epicsAtomic.h` no longer pulls in as many unneeded declarations and macros from
`windows.h`. Prior to this change, including `epicsAtomic.h` at the wrong time
could result in unexpected compiler errors. Due to the nature of `windows.h`,
some unneeded declarations are still pulled in, however the number is greatly reduced.
Code that needs these declarations should explicitly include `windows.h` before `epicsAtomic.h`.
### epicsExport simplifications
`epicsExportAddress()`, `epicsExportRegistrar()` and `epicsRegisterFunction()`
no longer require to be wrapped in `extern "C" { }` in C++ code.
### New `dbServerStats()` API for iocStats
A new routine provides the ability to request channel and client counts from
named server layers that implement the `stats()` method, or to get a summary
of the counts from all registered server layers. A preprocessor macro
`HAS_DBSERVER_STATS` macro is defined in the `dbServer.h` header file to
simplify code that needs to support older versions of Base as well.
-----
## EPICS Release 7.0.9
### Core documentation published at ReadTheDocs
The `documentation` directory's `Makefile` can now run various publication scripts including Sphinx and Doxygen to generate formatted documentation that is now being published
[at docs.epics-controls.org](https://docs.epics-controls.org/projects/base/en/latest/index.html)
and integrated into the main [EPICS Documentation website](https://docs.epics-controls.org/en/latest/index.html).
The best place to find out more about these mechanisms is the
[Contribution Guide](https://docs.epics-controls.org/en/latest/CONTRIBUTING.html)
although it doesn't currently cover the new processes added to epics-base.
Much of the documentation generated from .dbd.pod files at build time is now
also being converted into MarkDown (.md) files and installed into the top-level
`doc` directory. Some users might find it quicker to look up information about a
record type by opening these files in a text editor intead of opening a browser
and loading the HTML versions or finding and opening the files from the EPICS
Documentation site.
### Post monitors from compress record when it's reset
Writing into a compress record's `RES` field now posts a monitor event instead
of only changing `VAL`. Monitor clients will therefore receive an empty array.
### The AMSG error message propagates through MSS links
A database link with the MSS attribute will now propagate not only SEVR and
STAT, but also AMSG. This field contains additional information that complements
STAT. Links with MS or MSI attributes do not propagate STAT, and therefore do
not propagate AMSG, either.
Channel Access links do not propagate AMSG, regardless of the MSS attribute,
because the message is not available as Channel metadata.
### Reloading record aliases
Aliases can now be defined more than once as long as they still refer to the
same record, unless the global variable `dbRecordsOnceOnly` is non-zero.
This allows database files to be loaded multiple times, even if they contain
alias definitions.
### `DBE_PROPERTY` event rate changed
Updating property fields now only posts `DBE_PROPERTY` events if the
field actually changed.
### Changes to msi related to include paths
There are two changes to `msi` included here.
`msi` now treats files included by .template or .substutiions files in a more
consistent way: for relative paths, it will always look relative to the current
working directory if no `-I` flags are passed, and if they are passed then it
will search for the _relative_ path from each of those flags. That is, the
following will now find the file `bar.template` located at
`/some/path/rel/path/bar.template`
```
$ cat foo.substitutions
file rel/path/bar.template {
# contents
}
$ msi -I /some/path foo.substitutions
```
Note that this does provide one change from previous behaviour: when opening a
file from the command line, `msi` will not use the `-I`-specified paths to
search for the file, but will only work relative to the current working
directory, consistent with most commandline utilities.
### Allow users to delete previously created records from the database
From this release, record instances and aliases that have already been loaded
by an IOC can be removed from the database again before the call to iocInit
by loading a second instance of the named records but using `"#"` in place of
the record type. Values for the fields are not required or advised, just use
an empty record body { }. This is useful when a template defines records that
an empty record body `{}`. This is useful when a template defines records that
are not wanted in some IOCs, without having to split or duplicate the original
template.
For example this will remove the record named "unwanted":
```
record("#", "unwanted") { }
record("#", "unwanted") {}
```
### Only keep readline history for interactive sessions
Previously, all IOCsh commands were persisited in the libreadline history
(when readline support is included).
Going forward, only interactive commands are saved.
### Type change to asTrap serverSpecific data
Change `void*` to `dbChannel*` in `asTrapWriteBeforeWithData()` and
`asTrapWriteMessage::serverSpecific` to reflect the reality since
the `dbAddr*` to `dbChannel*` migration.
External code wishing to support both before and after 3.15 should
already be conditionally casting to/from the appropriate type.
### Fix issues with `_FORTIFY_SOURCE=3`
This release fixes the false positives failures whhen building with `_FORTIFY_SOURCE` level 3.
The override introduced in 7.0.8.1 has been removed.
### Other
- genVersionHeader: work with git submodules and worktrees.
- avoid UB with self `pthread_join()`
- freebsd: Add support for x86 and amd64 builds
- Clear AMSG when SEVR becomes zero.
- `seqRecord` fix support for link `DLY0`
- Add `ABORT_ON_ASSERT` flag to `CONFIG_SITE_ENV`
- rationalize osdMutex
### Submodule updates
The pvDatabase module was updated to version 4.7.2:
* Resolved issue with changed field set in the case where the top level (master)
field ("_") is not requested by the client, but the master field callback causes
all fields to be marked as updated, rather than only those fields that have
actually been modified.
-----
## EPICS Release 7.0.8.1
### Limit to `_FORTIFY_SOURCE=2`
@@ -280,6 +402,50 @@ The floating point modulo function `FMOD(NUM,DEN)` has been added to the CALC
expression engine and is available to all software using that (calc and calcout
record types, access security library and some extensions).
### Submodule updates
The pvData module was updated to version 8.0.6:
- Compatible changes
- Actually enable JSON-5 output in PVStructure::Formatter::JSON when available.
- Fix unaligned access issues for some ARM/Linux targets.
The pvAccess module was updated to version 7.1.7:
- Changes
- Registering the PVA server with the IOC now sets the `PVAS_SERVER_PORT`
variable in the environment.
The pva2pva module was updated to version 1.4.1:
- Bug Fixes
- `dbLoadGroup` was fixed
- Additions
- Support for "meta" member at top of array of structs
The pvDatabase module was updated to version 4.7.1:
* Added data distributor plugin which can be used for distributing data between
a group of clients. The plugin is triggered by the request string of the
form:
`_[distributor=group:<group id>;set:<set_id>;trigger:<field_name>;updates:<n_updates>;mode:<update_mode>]`
The plugin parameters are optional and are described bellow:
- group: this parameter indicates a group that client application belongs to (default value: "default"); groups of clients are completely independent of each other
- set: this parameter designates a client set that application belongs to within its group (default value: "default")
- trigger: this is the PV structure field that distinguishes different channel updates (default value: "timeStamp"); for example, for area detector images one could use the "uniqueId" field of the NTND structure
- updates: this parameter configures how many sequential updates a client (or a set of clients) will receive before the data distributor starts updating the next one (default value: "1")
- mode: this parameter configures how channel updates are to be distributed between clients in a set:
- one: update goes to one client per set
- all: update goes to all clients in a set
- default is "one" if client set id is not specified, and "all" if set id is specified
-----
## EPICS Release 7.0.7
@@ -358,10 +524,10 @@ changed to `(p)->dtor`.
The order over operations when processing a waveformRecord is adjusted
so that updates to NORD is posted with the correct timestamp.
### Automatic COMMANDLINE_LIBRARY w/ newer compilers
### Automatic `COMMANDLINE_LIBRARY` with newer compilers
When built with a compiler supporting `__has_include<>`, the presence
of the `<readline/readline.h>` will be used to automatically determine
of a `readline/readline.h` header will be used to automatically determine
a default value for `COMMANDLINE_LIBRARY`.
Mingw builds with readline support now link `-ltermcap` instead of `-lcurses`.
@@ -530,6 +696,44 @@ or if unsupported (`$TERM` not set, or Windows < 10).
The `dbnd` server side filter now passes through alarm and property
change events, even when not exceeding the deadband.
### Submodule updates
The pvData module was updated to version 8.0.5:
- Compatible changes
- Internal changes to use the YAJL API for generating JSON and JSON-5 output.
The pvAccess module was updated to version 7.1.6:
- Changes to caProvider
- Bug fix related to enum values.
- More internal changes to improve performance when connecting tens of
thousands of CA channels.
- Several minor internal improvements.
The pva2pva module was updated to version 1.4.0:
- Bug Fixes
- Apply ACF when writing to atomic group
- Additions
- Add new "structure" to @ref qsrv_group_map_types
- Changes
- Add Access Security hooks for single and group writes.
- Enable "Async Soft Channel" for output links
- When built against Base 7.0.6.1, set timeStamp.userTag from UTAG field.
- Add DTYP="QSRV Set UTag" for longin, which sets UTAG=VAL.
The pvDatabase module was updated to version 4.7.0:
* Added support for the whole structure (master field) server side plugins.
The whole structure is identified as the `_` string, and a pvRequest string
that applies a plugin to it takes the form:
`field(_[XYZ=A:3;B:uniqueId])`
where `XYZ` is the name of a specific filter plugin that takes parameters
`A` and `B` with values `3` and `uniqueId` respectively.
-----
## EPICS Release 7.0.6.1
@@ -596,6 +800,15 @@ This was done to simplify the code and may have improved performance slightly fo
Many of the built-in record types have had improvements to their documentation with additional fields added to the tables, rewrites of descriptions and links to other documents added or fixed.
### Submodule updates
The pvAccess module was updated to version 7.1.4:
- Changes to caProvider
- Resolve issues with pv structures that don't have a value field
- Add NULL checks for handling unusual structures
- Speed up channel creation when using large numbers of channels
-----
## EPICS Release 7.0.6
@@ -606,7 +819,7 @@ These target architectures have been removed:
+ darwin-ppc, darwin-ppcx86
+ linux-386, linux-486, linux-586, linux-686, linux-athlon (cross-build)
+ linux-cris, linux-cris_v10, linux-cris_v32 (cross-build)
+ linux-cris, linux-cris\_v10, linux-cris\_v32 (cross-build)
+ RTEMS-at91rm9200ek, RTEMS-gen68360, RTEMS-mcp750, RTEMS-mvme167,
RTEMS-psim (cross-build)
@@ -624,9 +837,9 @@ running on RTEMS 5:
- RTEMS-beagleboneblack
- RTEMS-pc686
- RTEMS-qoriq_e500 (MVME2500)
- RTEMS-xilinx_zynq_a9_qemu
- RTEMS-xilinx_zynq_zedboard
- RTEMS-qoriq\_e500 (MVME2500)
- RTEMS-xilinx\_zynq\_a9\_qemu
- RTEMS-xilinx\_zynq\_zedboard
The EPICS support for RTEMS 4 has always relied on RTEMS-specific
kernel APIs which cannot be used on an SMP system, so a new port was
@@ -638,7 +851,7 @@ to run `make distclean` if switching a single source tree from one
to the other (both header files and dependency files are different
between the two and must be cleaned out).
The configuration variable RTEMS_VERSION in the EPICS config file
The configuration variable `RTEMS_VERSION` in the EPICS config file
`configure/os/CONFIG_SITE.Common.RTEMS` must be set to the full 3-
part version number for RTEMS 4 releases, e.g. `4.9.1`, `4.10.2`
but for RTEMS 5.1 and later it must only contain the major version
@@ -836,6 +1049,39 @@ Test programs written directly in Perl as a `.plt` script should implement a
similar timeout for themselves. The "netget" test in Base does this in a way
that works on Windows as well as Unix-like hosts.
### Submodule updates
The pvAccess module was updated to version 7.1.4:
- Changes
- Adjust argument parsing with pvput (Jesus Vasquez).
The pva2pva module was updated to version 1.3.1:
- Bug Fixes
- Correct handling for server side filters.
- Changes
- Syncing softMain.cpp with epics-base
The pvDatabase module was updated to version 4.6.0:
* Access Security is now supported.
* <b>special</b> has been revised and extended.
* addRecord, removeRecord, processRecord, and traceRecord are replaced by pvdbcr versions.
* <b>support</b> is DEPRECATED
The pvaClient module was updated to version 4.8.0:
* `PvaClientNTMultiData::getChannelChangeFlags` is a new method. It fixes
issue #66.
* Fix for issue #68. Both `PvaClientArray` and `PvaClientField` are not longer
present. Neither was previously implemented.
* Several public methods are now protected. They were never meant to be called
by clients.
* Issue #70 has been fixed.
* Changes was made to increase the performance of `pvaMultiChannel`.
* doxygen changes were made.
-----
## EPICS Release 7.0.5
@@ -873,7 +1119,7 @@ compile device supports as loadable modules.
### Priority inversion safe Posix mutexes
On Posix systems, epicsMutex now support priority inheritance if available.
The IOC needs to run with SCHED_FIFO engaged to use these.
The IOC needs to run with `SCHED_FIFO` engaged to use these.
Support for Posix implementations before POSIX.1-2001 (`_XOPEN_SOURCE < 500`,
glibc version &lt; 2.3.3) has been dropped.
@@ -1006,14 +1252,14 @@ properly handle zero-length arrays. The `caget`, `caput` and `camonitor`
client programs are known to work with empty arrays as long as they were
built with this or a later version of EPICS.
#### Change to the db_access.h `dbr_size_n(TYPE, COUNT)` macro
#### Change to the db\_access.h `dbr_size_n(TYPE, COUNT)` macro
When called with COUNT=0 this macro no longer returns the number of bytes
required for a scalar (1 element) but for an empty array (0 elements).
Make sure code that uses this doesn't call it with COUNT=0 when it really
means COUNT=1.
Note that the db_access.h header file is included by cadef.h so the change
Note that the db\_access.h header file is included by cadef.h so the change
can impact Channel Access client programs that use this macro.
#### Channel Access support for zero-length arrays
@@ -1123,6 +1369,35 @@ GNUmake added the directive `undefine` in version 3.82 to allow variables to
be undefined. Support for this has been added to the EPICS Release file parser,
so `undefine` can now be used in configure/RELEASE files to unset variables.
### Submodule updates
The pvData module was updated to version 8.0.4:
- Incompatible changes
- Remove `ByteBuffer::align()`
- Compatible changes
- Deprecate `SerializableControl::alignBuffer()` and
`DeserializableControl::alignData()`
- `shared_vector_convert<>()` fix convert of empty, untyped, array
The pvAccess module was updated to version 7.1.3:
- Bug fixes
- Increase default TCP timeout to 40 seconds.
Applies a 4/3 multiplier on `$EPICS_PVA_CONN_TMO` for compatibility.
- CA Provider implementation restructured to simplify, reduce duplication
and fix issues #163 and #165.
- Changes
- Enable building of pvtools to all except vxWorks, RTEMS and iOS.
The pva2pva module was updated to version 1.3.0:
- Changes
- Add `dbLoadGroup()` iocsh function to read group JSON definitions
from a file. Mappings in files must refer to full record names
instead of fields. eg. 'recname.VAL' instead of 'VAL'.
-----
## EPICS Release 7.0.4.1
@@ -1188,7 +1463,7 @@ The following launchpad bugs have fixes included in this release:
operators on aarch64
- [lp: 1853148](https://bugs.launchpad.net/bugs/1853148), mingw compiler
problem with printf/scanf formats
- [lp: 1852653](https://bugs.launchpad.net/bugs/1852653), USE_TYPED_DSET
- [lp: 1852653](https://bugs.launchpad.net/bugs/1852653), `USE_TYPED_DSET`
incompatible with C++
- [lp: 1862328](https://bugs.launchpad.net/bugs/1862328), Race condition on
IOC start leaves rsrv unresponsive
@@ -1198,7 +1473,7 @@ The following launchpad bugs have fixes included in this release:
- [lp: 1868680](https://bugs.launchpad.net/bugs/1868680), Access Security file
reload (asInit) fails
### \*_API macros in EPICS headers
### `*_API` macros in EPICS headers
Internally, the Com and ca libraries now express dllimport/export (Windows)
and symbol visibility (GCC) using library-specific macros (eg. `LIBCOM_API`)
@@ -1432,7 +1707,7 @@ The API functions `epicsGetExecDir()` and `epicsGetExecName()` are also
added to `osiFileName.h` to provide runtime access to the directory or
filename of the executable with which the process was started.
### Decouple LINKER_USE_RPATH and STATIC_BUILD
### Decouple `LINKER_USE_RPATH` and `STATIC_BUILD`
Previously, setting `STATIC_BUILD=NO` implied `LINKER_USE_RPATH=NO`.
This is no longer the case. Setting `LINKER_USE_RPATH=YES` will
@@ -2011,7 +2286,7 @@ number instead, like this:
Channel Access does not (and probably never will) directly support 64-bit
integer types, so the new field types are presented to the CA server as
`DBF_DOUBLE` values. This means that field values larger than 2^52
(0x10_0000_0000_0000 = 4503599627370496) cannot be transported over Channel
(0x10\_0000\_0000\_0000 = 4503599627370496) cannot be transported over Channel
Access without their least significant bits being truncated. The EPICS V4
pvAccess network protocol _can_ transport 64-bit data types however, and a
future release of the pvaSrv module will connect this ability to the fields of

View File

@@ -1,6 +0,0 @@
_OLD_EXTGLOB=$(shopt -p extglob)
shopt -s extglob
test -n "$EPICS_HOST_ARCH" || export EPICS_HOST_ARCH=$(/bin/sed "s%cpe:/o:redhat:enterprise_linux:\([0-9]*\).*%RHEL\1-`/bin/uname -m`%" /etc/system-release-cpe)
PATH=${PATH//?(:)\/usr\/local\/epics\/base-+([0-9]).+([0-9]).+([0-9])\/bin\/$EPICS_HOST_ARCH}:$EPICS_BASE/bin/$EPICS_HOST_ARCH
eval $_OLD_EXTGLOB
unset _OLD_EXTGLOB

View File

@@ -1,514 +0,0 @@
# Always make sure EpicsVersion.Version-Release matches the git tag!
%define EpicsVersion 7.0.8
Name: epics-base-%{EpicsVersion}
Summary: EPICS Base %{EpicsVersion}
Version: 2
Release: 4%{?dist}
License: EPICS Open License
Group: Development/Languages
URL: https://git.psi.ch/epics_base/base-7.0
Obsoletes: caRepeater = 1
%define module_name %{name}
%define prog_folder /usr/local/epics/base-%{EpicsVersion}
%define debug_package %{nil}
%define _build_id_links none
# do not strip libraries
%global __strip /bin/true
%undefine __brp_strip
%undefine __brp_mangle_shebangs
%undefine __brp_ldconfig
%define _binaries_in_noarch_packages_terminate_build 0
%if %{defined rhel}
%global epics_host_arch RHEL%{rhel}-%{_host_cpu}
%endif
# else define epics_host_arch as suitable
%description
EPICS is a set of Open Source software tools, libraries and applications
developed collaboratively and used worldwide to create distributed soft
real-time control systems for scientific instruments such as a particle
accelerators, telescopes and other large scientific experiments.
This RPM is a binary-only package.
###########################################
%package host-devel
Requires: make >= 3.80
BuildRequires: make >= 3.80
BuildRequires: gfa-cross-compiler-links
%if %{?rhel} >= 9
BuildRequires: gfa-wine
%else
BuildRequires: wine
%endif
Summary: Minimal stuff needed to build EPICS host apps
Requires: %{name} = %{version}-%{release}
# This EPICS installation uses the toolset 12 compiler
%if 0%{?rhel} >= 8
Requires: gcc-toolset-12-gcc-c++
BuildRequires: gcc-toolset-12-gcc-c++
%endif
# The perl stuff we need
Requires: perl-interpreter >= 5.10.1
BuildRequires: perl-interpreter >= 5.10.1
Requires: perl-File-Path perl-Getopt-Long perl-Pod-Usage perl-Time-HiRes perl-Data-Dumper perl-Scalar-List-Utils
BuildRequires: perl-File-Path perl-Getopt-Long perl-Pod-Usage perl-Time-HiRes perl-Data-Dumper perl-Scalar-List-Utils
%if 0%{?rhel} >= 8
Requires: perl-Text-Tabs+Wrap
BuildRequires: perl-Text-Tabs+Wrap
%endif
%if 0%{?rhel} >= 9
Requires: perl-File-Find perl-File-Basename perl-File-Copy perl-FindBin perl-Getopt-Std perl-POSIX
BuildRequires: perl-File-Find perl-File-Basename perl-File-Copy perl-FindBin perl-Getopt-Std perl-POSIX
%endif
# Perl auto-detection is broken
# It does not find all EPICS internal packages
%global __requires_exclude_from ^%{prog_folder}/bin/.*\\.pl$
%description host-devel
Contains headers etc to build EPICS host applications.
###########################################
%if %{?rhel} > 8
%package compat
Summary: EPICS base %{EpicsVersion} for older RHEL versions
Requires: %{name} = %{version}-%{release}
AutoReqProv: no
%description compat
Contains EPICS binaries that run on older RHEL versions.
%endif
###########################################
%package wine
Summary: EPICS base %{EpicsVersion} for wine
Requires: %{name} = %{version}-%{release}
%if %{?rhel} >= 9
Requires: gfa-wine
%else
Requires: wine
%endif
%description wine
Allows to run EPICS in wine.
###########################################
%package boot
Summary: EPICS base %{EpicsVersion} for boot servers
BuildArch: noarch
AutoReqProv: no
Prefix: /usr/local/epics
%description boot
Contains files needed on NFS server to boot EPICS targets from.
This package can be relocated.
###########################################
%package devel
Summary: EPICS base %{EpicsVersion} for development environments
Requires: %{name} = %{version}-%{release}
Requires: %{name}-host-devel = %{version}-%{release}
Requires: gfa-cross-compiler-links
BuildArch: noarch
AutoReqProv: no
%description devel
All what is needed to develop EPICS for different target architectures.
###########################################
%package devel-static
Summary: EPICS base %{EpicsVersion} for development environments including static libraries
Requires: %{name}-devel = %{version}-%{release}
BuildArch: noarch
AutoReqProv: no
%description devel-static
Contains the static libraries (*.a) for EPICS development systems.
Only needed to build statically linked applications.
###########################################
%package src
Summary: Sources code of EPICS base %{EpicsVersion}
BuildArch: noarch
AutoReqProv: no
Prefix: /usr/local/epics
%description src
The source code of EPICS base %{EpicsVersion}.
May help when debugging
###########################################
%package doc
Summary: EPICS base %{EpicsVersion} documentation
BuildArch: noarch
AutoReqProv: no
Prefix: /usr/local/epics
%description doc
The documentation of EPICS base %{EpicsVersion}.
###########################################
# Our sources are locally in this directory
# and here we also build
# RPMS will be stored here, too
%define _topdir %(pwd)
%define _sourcedir %{_topdir}
%define _builddir %{_topdir}
%prep
%{__rm} -rf %{buildroot}/usr/lib
%{__rm} -f modules/RELEASE.*.local
git submodule update --init --recursive modules
%{__mkdir_p} RPMS
%build
%if %{defined epics_host_arch}
export EPICS_HOST_ARCH=%{epics_host_arch}
%endif
%{__make} INSTALL_LOCATION=%{buildroot}%{prog_folder} FINAL_LOCATION=%{prog_folder}
%{__make} INSTALL_LOCATION=%{buildroot}%{prog_folder} copysrc
# remove files we do not need
shopt -s extglob
%{__rm} -f %{buildroot}%{prog_folder}/bin/{V,RTEMS}*/{*Harness,softIoc,softIocPVA}
%{__rm} -f %{buildroot}%{prog_folder}/bin/RTEMS*/TEMP.*
# fix permissions of caRepeater.service
%{__chmod} 644 %{buildroot}%{prog_folder}/bin/*/caRepeater.service
# install the profile script
/bin/sed 's!\$EPICS_BASE!%{prog_folder}!' epics-base.sh > %{buildroot}%{prog_folder}/bin/epics-base.sh
# copy over old libraries for compatibility
%if %{?rhel} > 8
%{__cp} /opt/RHEL8/lib64/libreadline.so.7 %{buildroot}%{prog_folder}/lib/RHEL8-x86_64
%endif
# Do not use install section because build already installed
# and install will delete our buildroot!
%clean
%{__make} INSTALL_LOCATION=%{buildroot}%{prog_folder} realclean
%{__rm} -f modules/RELEASE.*.local
%{__rm} -rf %{buildroot}
%{__cp} %{_rpmdir}/*/%{name}*%{version}-%{release}.*.rpm %{_sourcedir}
# Link caRepeater and profile script to highest installed EPICS version after install and uninstall
%post
shopt -s extglob
%{__rm} -f /etc/profile.d/epics-base.sh
%{__ln_s} "$(/usr/bin/ls -dvr1 /usr/local/epics/base-+([0-9]).+([0-9]).+([0-9])/bin/epics-base.sh | /usr/bin/head -n1)" /etc/profile.d/
SYSTEMD_DIR=$(pkg-config systemd --variable=systemdsystemunitdir)
if [ -n "$SYSTEMD_DIR" ]
then
%{__rm} -f $SYSTEMD_DIR/caRepeater.service
LATEST_REPEATER=$(/usr/bin/ls -dvr1 /usr/local/epics/base-+([0-9]).+([0-9]).+([0-9])/bin/%{epics_host_arch}/caRepeater.service | /usr/bin/head -n1)
%{__ln_s} $LATEST_REPEATER $SYSTEMD_DIR/
systemctl daemon-reload
systemctl reenable caRepeater.service
systemctl start caRepeater.service
fi
%postun
shopt -s extglob
%{__rm} -f /etc/profile.d/epics-base.sh
%{__ln_s} "$(/usr/bin/ls -dvr1 /usr/local/epics/base-+([0-9]).+([0-9]).+([0-9])/bin/epics-base.sh 2>/dev/null | /usr/bin/head -n1)" /etc/profile.d/ 2>/dev/null
SYSTEMD_DIR=$(pkg-config systemd --variable=systemdsystemunitdir)
if [ -n "$SYSTEMD_DIR" ]
then
LATEST_REPEATER=$(/usr/bin/ls -dvr1 /usr/local/epics/base-+([0-9]).+([0-9]).+([0-9])/bin/%{epics_host_arch}/caRepeater.service 2>/dev/null | /usr/bin/head -n1)
if [ -z "$LATEST_REPEATER" ]
then
systemctl disable caRepeater.service
# Do not stop or restart caRepeater.service
# because EPICS clients cannot handle that.
# Next reboot will take care of this.
fi
%{__rm} -f $SYSTEMD_DIR/caRepeater.service
if [ -n "$LATEST_REPEATER" ]
then
%{__ln_s} $LATEST_REPEATER $SYSTEMD_DIR/ 2>/dev/null
systemctl reenable caRepeater.service
fi
systemctl daemon-reload
fi
###########################################
%files
%defattr(-,root,root,-)
%dir %{prog_folder}
%dir %{prog_folder}/configure
%{prog_folder}/configure/CONFIG_BASE_VERSION
%dir %{prog_folder}/dbd
%{prog_folder}/dbd/softIoc*.dbd
%dir %{prog_folder}/bin
%dir %{prog_folder}/lib
%{prog_folder}/db
%{prog_folder}/bin/epics-base.sh
%{prog_folder}/lib/perl/EpicsHostArch.pl
%{prog_folder}/lib/perl/CA.pm
%dir %{prog_folder}/lib/perl
%dir %{prog_folder}/lib/perl/[0-9]*
%dir %{prog_folder}/lib/perl/[0-9]*/*-linux-thread-multi
%{prog_folder}/lib/perl/*/*-linux-thread-multi/libCap5.so
# Install host binaries but avoid installing *.pl scripts
# and other development tools
%dir %{prog_folder}/bin/%{epics_host_arch}*
%{prog_folder}/bin/%{epics_host_arch}*/[Scips]*[^.]??
%{prog_folder}/bin/%{epics_host_arch}*/p2p
%{prog_folder}/bin/%{epics_host_arch}*/msi
%dir %{prog_folder}/lib/%{epics_host_arch}*
%{prog_folder}/lib/%{epics_host_arch}*/*.so*
###########################################
%if %{?rhel} > 8
%files compat
%dir %{prog_folder}/bin/RHEL8*
%{prog_folder}/bin/RHEL8*/[Scips]*[^.]??
%{prog_folder}/bin/RHEL8*/p2p
%{prog_folder}/bin/RHEL8*/msi
%dir %{prog_folder}/lib/RHEL8*
%{prog_folder}/lib/RHEL8*/*.so*
%if %{?rhel} > 9
%dir %{prog_folder}/bin/RHEL9*
%{prog_folder}/bin/RHEL9*/[Scips]*[^.]??
%{prog_folder}/bin/RHEL9*/p2p
%{prog_folder}/bin/RHEL9*/msi
%dir %{prog_folder}/lib/RHEL9*
%{prog_folder}/lib/RHEL9*/*.so*
%endif
%endif
###########################################
%files wine
%{prog_folder}/bin/win*
###########################################
%files boot
# including files to build on some Linux cross archs
# hence some configure/* and lib/perl/* listed twice
%defattr(-,root,root,-)
%dir %{prog_folder}
%dir %{prog_folder}/configure
%{prog_folder}/configure/RELEASE
%{prog_folder}/configure/CONFIG*
%{prog_folder}/configure/RULES*
%dir %{prog_folder}/configure/os
%{prog_folder}/configure/os/CONFIG.Common.UnixCommon
%{prog_folder}/configure/os/CONFIG.Common.linuxCommon
%{prog_folder}/configure/os/CONFIG.Common.linux-clang
%{prog_folder}/configure/os/CONFIG.Common.linux-%{_host_cpu}*
%{prog_folder}/configure/os/CONFIG.Common.[a-z]*-*
%{prog_folder}/configure/os/CONFIG.UnixCommon.Common
%{prog_folder}/configure/os/CONFIG.[a-z]*-*.Common
%{prog_folder}/configure/os/CONFIG.[a-z]*-*.[a-z]*-*
%{prog_folder}/configure/os/CONFIG.linux-*.Common
%{prog_folder}/configure/os/CONFIG.linux-*.linux-*
%{prog_folder}/configure/os/CONFIG_SITE.Common.linuxCommon
%{prog_folder}/configure/os/CONFIG_SITE.Common.linux-*
%{prog_folder}/configure/os/CONFIG_SITE.[a-z]*-*.Common
%{prog_folder}/configure/os/CONFIG_SITE.linux-*.Common
%{prog_folder}/configure/os/CONFIG_SITE.linux-*.UnixCommon
%{prog_folder}/configure/os/CONFIG_SITE.linux-*.linux-*
%dir %{prog_folder}/include
%{prog_folder}/include/*.h
%{prog_folder}/include/compiler
%dir %{prog_folder}/include/os
%{prog_folder}/include/os/Linux/
%{prog_folder}/include/pv/
%{prog_folder}/include/pva/
%{prog_folder}/include/valgrind/
%{prog_folder}/include/flex.skel.static
%dir %{prog_folder}/dbd
%{prog_folder}/dbd/softIoc*.dbd
%{prog_folder}/db
%dir %{prog_folder}/lib
%dir %{prog_folder}/lib/[a-z]*-*
%{prog_folder}/lib/[a-z]*-*/*.so*
%dir %{prog_folder}/lib/perl
%{prog_folder}/lib/perl/[A-Z]*/
%{prog_folder}/lib/perl/DBD.pm
%dir %{prog_folder}/bin
# avoid pulling in host files again
# but get all cross architectures (mostly lower case)
# including all Windows dlls (hence listed twice: here and in wine)
%dir %{prog_folder}/bin/[a-z]*
%{prog_folder}/bin/[a-z]*/[Scips]*[^.]??
%{prog_folder}/bin/[a-z]*/p2p
%{prog_folder}/bin/[a-z]*/msi*
%{prog_folder}/bin/[a-z]*/acctst*
%{prog_folder}/bin/[a-z]*/*.dll
%{prog_folder}/bin/[a-z]*/registerRecordDeviceDriver*
# vxWorks and RTEMS
%dir %{prog_folder}/bin/V*
%{prog_folder}/bin/V*/*.munch
%{prog_folder}/bin/V*/*.o
%dir %{prog_folder}/bin/RTEMS*
%{prog_folder}/bin/RTEMS*/*.boot
###########################################
%files host-devel
%defattr(-,root,root,-)
%dir %{prog_folder}/include
%{prog_folder}/include/*.h
%{prog_folder}/include/compiler
%dir %{prog_folder}/include/os
%{prog_folder}/include/os/Linux/
%{prog_folder}/include/os/WIN32/
%{prog_folder}/include/pv/
%{prog_folder}/include/pva/
%{prog_folder}/include/valgrind/
%{prog_folder}/include/flex.skel.static
%{prog_folder}/templates
%dir %{prog_folder}/cfg
%{prog_folder}/cfg/CONFIG*
%{prog_folder}/cfg/TOOLCHAIN.%{epics_host_arch}*.%{epics_host_arch}*
%{prog_folder}/cfg/TOOLCHAIN.%{epics_host_arch}*.win*
%dir %{prog_folder}/configure
%{prog_folder}/configure/RELEASE
%{prog_folder}/configure/CONFIG*
%{prog_folder}/configure/RULES*
%dir %{prog_folder}/configure/os
%{prog_folder}/configure/os/CONFIG.Common.UnixCommon
%{prog_folder}/configure/os/CONFIG.Common.linuxCommon
%{prog_folder}/configure/os/CONFIG.Common.linux-clang
%{prog_folder}/configure/os/CONFIG.Common.linux-%{_host_cpu}*
%{prog_folder}/configure/os/CONFIG.Common.%{epics_host_arch}*
%{prog_folder}/configure/os/CONFIG.UnixCommon.Common
%{prog_folder}/configure/os/CONFIG.%{epics_host_arch}*.Common
%{prog_folder}/configure/os/CONFIG.%{epics_host_arch}*.%{epics_host_arch}*
%{prog_folder}/configure/os/CONFIG.linux-%{__isa_name}*.Common
%{prog_folder}/configure/os/CONFIG.linux-%{__isa_name}*.linux-%{__isa_name}*
%{prog_folder}/configure/os/CONFIG.linux-%{__isa_name}*.win*
%{prog_folder}/configure/os/CONFIG.Linux.win*
%{prog_folder}/configure/os/CONFIG.win*.win*
%{prog_folder}/configure/os/CONFIG_SITE.Common.linuxCommon
%{prog_folder}/configure/os/CONFIG_SITE.Common.linux-%{__isa_name}*
%{prog_folder}/configure/os/CONFIG_SITE.%{epics_host_arch}*.Common
%{prog_folder}/configure/os/CONFIG_SITE.linux-%{__isa_name}*.Common
%{prog_folder}/configure/os/CONFIG_SITE.linux-%{__isa_name}*.UnixCommon
%{prog_folder}/configure/os/CONFIG_SITE.linux-%{__isa_name}*.linux-%{__isa_name}*
%{prog_folder}/bin/%{epics_host_arch}*/[^Scips]*[^.]??
%{prog_folder}/bin/%{epics_host_arch}*/*.??
%dir %{prog_folder}/lib/pkgconfig
%{prog_folder}/lib/pkgconfig/epics-base.pc
%{prog_folder}/lib/pkgconfig/epics-base-%{epics_host_arch}*.pc
%{prog_folder}/lib/perl/[A-Z]*/
%{prog_folder}/lib/perl/DBD.pm
%{prog_folder}/dbd
###########################################
%files devel
%defattr(-,root,root,-)
%{prog_folder}/include/os/vxWorks/
%{prog_folder}/include/os/RTEMS/
%exclude %{prog_folder}/cfg/TOOLCHAIN.%{epics_host_arch}*.%{epics_host_arch}*
%exclude %{prog_folder}/cfg/TOOLCHAIN.%{epics_host_arch}*.win*
%{prog_folder}/cfg/TOOLCHAIN.*
%exclude %{prog_folder}/configure/os/CONFIG.Common.%{epics_host_arch}*
%exclude %{prog_folder}/configure/os/CONFIG.Common.UnixCommon
%exclude %{prog_folder}/configure/os/CONFIG.Common.linuxCommon
%exclude %{prog_folder}/configure/os/CONFIG.Common.linux-clang
%exclude %{prog_folder}/configure/os/CONFIG.Common.linux-%{_host_cpu}*
%exclude %{prog_folder}/configure/os/CONFIG.UnixCommon.Common
%exclude %{prog_folder}/configure/os/CONFIG.%{epics_host_arch}*.Common
%exclude %{prog_folder}/configure/os/CONFIG.%{epics_host_arch}*.%{epics_host_arch}*
%exclude %{prog_folder}/configure/os/CONFIG.linux-%{__isa_name}*.Common
%exclude %{prog_folder}/configure/os/CONFIG.linux-%{__isa_name}*.linux-%{__isa_name}*
%exclude %{prog_folder}/configure/os/CONFIG.linux-%{__isa_name}*.win*
%exclude %{prog_folder}/configure/os/CONFIG.Linux.win*
%exclude %{prog_folder}/configure/os/CONFIG.win*.win*
%exclude %{prog_folder}/configure/os/CONFIG_SITE.Common.linuxCommon
%exclude %{prog_folder}/configure/os/CONFIG_SITE.Common.linux-%{__isa_name}*
%exclude %{prog_folder}/configure/os/CONFIG_SITE.%{epics_host_arch}*.Common
%exclude %{prog_folder}/configure/os/CONFIG_SITE.linux-%{__isa_name}*.Common
%exclude %{prog_folder}/configure/os/CONFIG_SITE.linux-%{__isa_name}*.UnixCommon
%exclude %{prog_folder}/configure/os/CONFIG_SITE.linux-%{__isa_name}*.linux-%{__isa_name}*
%{prog_folder}/configure/os/
%exclude %{prog_folder}/lib/pkgconfig/epics-base.pc
%exclude %{prog_folder}/lib/pkgconfig/epics-base-%{epics_host_arch}*.pc
%{prog_folder}/lib/pkgconfig/
%exclude %{prog_folder}/bin/%{epics_host_arch}*/[^Scips]*[^.]??
%exclude %{prog_folder}/bin/%{epics_host_arch}*/*.??
%exclude %{prog_folder}/bin/*/[^Scips]*[^.]??
%exclude %{prog_folder}/bin/*/*.??
# VxWorks and RTEMS need static libs
%{prog_folder}/lib/V*
%{prog_folder}/lib/RTEMS*
# Windows needs *.lib
%{prog_folder}/lib/win*
# Basic libraries to build stand-alone clients
%exclude %{prog_folder}/lib/pkgconfig
%dir %{prog_folder}/lib/[a-z]*
%{prog_folder}/lib/[a-z]*/libCom.so*
%{prog_folder}/lib/[a-z]*/libca.so*
###########################################
%files devel-static
%defattr(-,root,root,-)
# Install bulky static libs for Linux targets only on request
%dir %{prog_folder}/lib/RHEL*
%{prog_folder}/lib/RHEL*/*.a
%dir %{prog_folder}/lib/[a-z]*
%{prog_folder}/lib/[a-z]*/*.a
###########################################
%files src
%defattr(-,root,root,-)
%dir %{prog_folder}
%{prog_folder}/modules
###########################################
%files doc
%defattr(-,root,root,-)
%dir %{prog_folder}
%docdir %{prog_folder}/html
%docdir %{prog_folder}/doc
%{prog_folder}/html
%{prog_folder}/doc

View File

@@ -1,2 +0,0 @@
SUBMODULES += pcas
pcas_DEPEND_DIRS = ca

View File

@@ -3396,7 +3396,7 @@ void verifyContextRundownChanStillExist (
showProgressEnd ( interestLevel );
}
int acctst ( const char * pName, unsigned interestLevel, unsigned channelCount,
void acctst ( const char * pName, unsigned interestLevel, unsigned channelCount,
unsigned repetitionCount, enum ca_preemptive_callback_select select )
{
chid chan;
@@ -3549,8 +3549,6 @@ int acctst ( const char * pName, unsigned interestLevel, unsigned channelCount,
printf ( "\nTest Complete\n" );
epicsExit ( EXIT_SUCCESS );
return 0;
}

View File

@@ -20,7 +20,8 @@ extern "C" {
enum appendNumberFlag {appendNumber, dontAppendNumber};
int catime ( const char *channelName, unsigned channelCount, enum appendNumberFlag appNF );
int acctst ( const char *pname, unsigned logggingInterestLevel,
EPICS_NORETURN
void acctst ( const char *pname, unsigned logggingInterestLevel,
unsigned channelCount, unsigned repetitionCount,
enum ca_preemptive_callback_select select );

View File

@@ -42,7 +42,6 @@ INC += dbState.h
INC += db_access_routines.h
INC += db_convert.h
INC += dbUnitTest.h
INC += dbCaPvt.h
# Generate menuGlobal.dbd, not really by concatenation, see RULES
DBDCAT += menuGlobal.dbd

View File

@@ -1175,6 +1175,8 @@ static long dbPutFieldLink(DBADDR *paddr,
if (!status) status = dbSetLink(plink, &link_info, new_devsup);
if (!status && special) status = dbPutSpecial(paddr, 1);
if (status) {
if (isDevLink) {
precord->dset = NULL;
@@ -1183,60 +1185,29 @@ static long dbPutFieldLink(DBADDR *paddr,
goto postScanEvent;
}
/* We need to initialize any links with a link support layer, i.e.
* any CONSTANT, JSON_LINK, or PV_LINK types. However for a PV_LINK
* when isDevLink is set (i.e. this is the record's INP or OUT link)
* we must wait until after calling dsxt->add_record(). This allows
* the Async Soft Channel input supports to change it to a PN_LINK.
* For other cases we initialize the link before the second call to
* dbPutSpecial() because some record types such as calcout need to
* be able to call link support methods from prset->special().
*/
switch (plink->type) { /* New type */
case PV_LINK:
if (isDevLink)
break;
/* else fall through */
case CONSTANT:
case JSON_LINK:
dbAddLink(&locker, plink, pfldDes->field_type, chan);
chan = NULL; /* we used it, don't clean it up */
}
if (special) status = dbPutSpecial(paddr, 1);
if (!status && isDevLink) {
if (isDevLink) {
precord->dpvt = NULL;
precord->dset = new_dset;
precord->pact = FALSE;
status = new_dsxt->add_record(precord);
}
if (status) {
if (isDevLink) {
if (status) {
precord->dset = NULL;
precord->pact = TRUE;
goto postScanEvent;
}
goto postScanEvent;
}
switch (plink->type) { /* New link type */
case CONSTANT:
case CA_LINK:
case DB_LINK:
case PN_LINK:
case JSON_LINK:
break;
case PV_LINK:
if (isDevLink) {
dbAddLink(&locker, plink, pfldDes->field_type, chan);
chan = NULL; /* we used it, don't clean it up */
}
case CONSTANT:
case JSON_LINK:
dbAddLink(&locker, plink, pfldDes->field_type, chan);
chan = NULL; /* don't clean it up */
break;
case DB_LINK:
case CA_LINK:
case MACRO_LINK:
break; /* should never get here */
@@ -1245,6 +1216,7 @@ static long dbPutFieldLink(DBADDR *paddr,
status = S_db_badHWaddr;
goto postScanEvent;
}
break;
}
db_post_events(precord, plink, DBE_VALUE | DBE_LOG);

View File

@@ -115,10 +115,9 @@ static int dbca_chan_count;
* During link modification or IOC shutdown the pca->plink pointer (guarded by caLink.lock)
* is used as a flag to indicate that a link is no longer active.
*
* References to the struct caLink are owned by the dbCaTask, and any scanOnceCallback()
* which is in progress.
* References to the struct caLink are owned by the dbCaTask.
*
* The libca and scanOnceCallback callbacks take no action if pca->plink==NULL.
* The libca callbacks take no action if pca->plink==NULL.
*
* dbCaPutLinkCallback causes an additional complication because
* when dbCaRemoveLink is called the callback may not have occured.
@@ -788,38 +787,6 @@ static long doLocked(struct link *plink, dbLinkUserCallback rtn, void *priv)
return status;
}
static void scanComplete(void *raw, dbCommon *prec)
{
caLink *pca = raw;
epicsMutexMustLock(pca->lock);
if(!pca->plink) {
/* IOC shutdown or link re-targeted. Do nothing. */
} else if(pca->scanningOnce==0) {
errlogPrintf("dbCa.c complete callback w/ scanningOnce==0\n");
} else if(--pca->scanningOnce){
/* another scan is queued */
if(scanOnceCallback(prec, scanComplete, raw)) {
errlogPrintf("dbCa.c failed to re-queue scanOnce\n");
} else
caLinkInc(pca);
}
epicsMutexUnlock(pca->lock);
caLinkDec(pca);
}
/* must be called with pca->lock held */
static void scanLinkOnce(dbCommon *prec, caLink *pca) {
if(pca->scanningOnce==0) {
if(scanOnceCallback(prec, scanComplete, pca)) {
errlogPrintf("dbCa.c failed to queue scanOnce\n");
} else
caLinkInc(pca);
}
if(pca->scanningOnce<5)
pca->scanningOnce++;
/* else too many scans queued */
}
static lset dbCa_lset = {
0, 1, /* not Constant, Volatile */
NULL, dbCaRemoveLink,
@@ -856,7 +823,9 @@ static void connectionCallback(struct connection_handler_args arg)
if (precord &&
((ppv_link->pvlMask & pvlOptCP) ||
((ppv_link->pvlMask & pvlOptCPP) && precord->scan == 0)))
scanLinkOnce(precord, pca);
{
link_action |= CA_DBPROCESS;
}
goto done;
}
pca->hasReadAccess = ca_read_access(arg.chid);
@@ -988,7 +957,9 @@ static void eventCallback(struct event_handler_args arg)
if ((ppv_link->pvlMask & pvlOptCP) ||
((ppv_link->pvlMask & pvlOptCPP) && precord->scan == 0))
scanLinkOnce(precord, pca);
{
addAction(pca, CA_DBPROCESS);
}
}
done:
epicsMutexUnlock(pca->lock);
@@ -1061,7 +1032,9 @@ static void accessRightsCallback(struct access_rights_handler_args arg)
if (precord &&
((ppv_link->pvlMask & pvlOptCP) ||
((ppv_link->pvlMask & pvlOptCPP) && precord->scan == 0)))
scanLinkOnce(precord, pca);
{
addAction(pca, CA_DBPROCESS);
}
done:
epicsMutexUnlock(pca->lock);
}
@@ -1273,6 +1246,13 @@ static void dbCaTask(void *arg)
printLinks(pca);
}
}
if (link_action & CA_DBPROCESS) {
dbCommon *prec;
epicsMutexMustLock(pca->lock);
prec = pca->plink->precord;
epicsMutexUnlock(pca->lock);
db_process(prec);
}
}
SEVCHK(ca_flush_io(), "dbCaTask");
}

View File

@@ -31,6 +31,7 @@
#define CA_MONITOR_STRING 0x20
#define CA_GET_ATTRIBUTES 0x40
#define CA_SYNC 0x1000
#define CA_DBPROCESS 0x2000
/* write type */
#define CA_PUT 0x1
#define CA_PUT_CALLBACK 0x2

View File

@@ -635,9 +635,21 @@ long dbChannelGetField(dbChannel *chan, short dbrType, void *pbuffer,
{
dbCommon *precord = chan->addr.precord;
long status = 0;
unsigned char local_fl = 0;
dbScanLock(precord);
if (!pfl && (ellCount(&chan->pre_chain) || ellCount(&chan->post_chain))) {
pfl = db_create_read_log(chan);
if (pfl) {
local_fl = 1;
pfl = dbChannelRunPreChain(chan, pfl);
pfl = dbChannelRunPostChain(chan, pfl);
}
}
status = dbChannelGet(chan, dbrType, pbuffer, options, nRequest, pfl);
if (local_fl) {
db_delete_field_log(pfl);
}
dbScanUnlock(precord);
return status;
}

View File

@@ -511,6 +511,10 @@ DBCORE_API long dbChannelGet(dbChannel *chan, short type,
* \param[in,out] nRequest Pointer to the element count.
* \param[in] pfl Pointer to a db_field_log or NULL.
* \returns 0, or an error status value.
*
* \since UNRELEASED If pfl is NULL and chan has filters, db_create_read_log() will be called
* internally to create a temporary db_field_log which is passed to dbChannelGet()
* then deallocated.
*/
DBCORE_API long dbChannelGetField(dbChannel *chan, short type,
void *pbuffer, long *options, long *nRequest, void *pfl);

View File

@@ -240,7 +240,6 @@ The B<SPVT> field is for internal use by the scanning system.
}
field(PROC,DBF_UCHAR) {
prompt("Force Processing")
asl(ASL0)
pp(TRUE)
interest(3)
}
@@ -286,7 +285,11 @@ Inf (Infinite) value. UDF defaults to TRUE but can be set in a database file.
Record and device support routines which write to the VAL field are generally
responsible for setting and clearing UDF.
=fields STAT, SEVR, AMSG, NSTA, NSEV, NAMSG, ACKS, ACKT, UDF
The B<UDFS> field specifies the alarm severity that the record will be set to
whenever its value is undefined (i.e., the UDF field is 1). This includes the
initial severity of the record being undefined after the IOC boots.
=fields STAT, SEVR, AMSG, NSTA, NSEV, NAMSG, ACKS, ACKT, UDF, UDFS
=cut

View File

@@ -24,7 +24,7 @@ typedef struct parseContext {
short dbrType;
short dbrSize;
char *pdest;
size_t elems;
int elems;
} parseContext;
static int dbcj_null(void *ctx) {
@@ -62,20 +62,19 @@ static int dbcj_double(void *ctx, double num) {
return 1;
}
static int dblsj_number(void *ctx, const char *val, size_t len) {
errlogPrintf("dbLSConvertJSON: Numeric value %.*s provided, string expected\n",
(int)len, val);
return 0; /* Illegal */
}
static int dbcj_string(void *ctx, const unsigned char *val, size_t len) {
parseContext *parser = (parseContext *) ctx;
char *pdest = parser->pdest;
if (parser->dbrType == DBF_CHAR || parser->dbrType == DBF_UCHAR) {
/* Treating char array as long string */
if (len > parser->elems)
len = parser->elems;
strncpy(pdest, (const char *) val, len);
parser->elems -= len;
parser->pdest += len;
return 1;
}
/* Not attempting to handle char-array fields here, they need more
* metadata about the field than we have available at the moment.
*/
if (parser->dbrType != DBF_STRING) {
errlogPrintf("dbConvertJSON: String \"%.*s\" provided, numeric value expected\n",
(int)len, val);
@@ -93,6 +92,21 @@ static int dbcj_string(void *ctx, const unsigned char *val, size_t len) {
return 1;
}
static int dblsj_string(void *ctx, const unsigned char *val, size_t len) {
parseContext *parser = (parseContext *) ctx;
char *pdest = parser->pdest;
if (parser->elems > 0) {
if (len > parser->dbrSize - 1)
len = parser->dbrSize - 1;
strncpy(pdest, (const char *) val, len);
pdest[len] = 0;
parser->pdest = pdest + len;
parser->elems = 0;
}
return 1;
}
static int dbcj_start_map(void *ctx) {
errlogPrintf("dbConvertJSON: Map type not supported\n");
return 0; /* Illegal */
@@ -132,11 +146,6 @@ long dbPutConvertJSON(const char *json, short dbrType,
return 0;
}
if (!jlen) {
*pnRequest = 0;
return 0;
}
parser->depth = 0;
parser->dbrType = dbrType;
parser->dbrSize = dbValueSize(dbrType);
@@ -172,10 +181,20 @@ long dbPutConvertJSON(const char *json, short dbrType,
return status;
}
static yajl_callbacks dblsj_callbacks = {
dbcj_null, dbcj_boolean, NULL, NULL, dblsj_number, dblsj_string,
dbcj_start_map, NULL, NULL,
dbcj_start_array, NULL
};
long dbLSConvertJSON(const char *json, char *pdest, epicsUInt32 size,
epicsUInt32 *plen)
{
long nRequest = size-1;
parseContext context, *parser = &context;
yajl_handle yh;
yajl_status ys;
size_t jlen = strlen(json);
long status;
if (!size) {
@@ -183,8 +202,35 @@ long dbLSConvertJSON(const char *json, char *pdest, epicsUInt32 size,
return 0;
}
status = dbPutConvertJSON(json, DBF_CHAR, pdest, &nRequest);
pdest[nRequest++] = 0;
*plen = nRequest;
parser->depth = 0;
parser->dbrType = DBF_STRING;
parser->dbrSize = size;
parser->pdest = pdest;
parser->elems = 1;
yh = yajl_alloc(&dblsj_callbacks, NULL, parser);
if (!yh) {
errlogPrintf("dbLSConvertJSON: out of memory\n");
return S_db_noMemory;
}
ys = yajl_parse(yh, (const unsigned char *) json, jlen);
switch (ys) {
case yajl_status_ok:
*plen = (char *) parser->pdest - pdest + 1;
status = 0;
break;
default: {
unsigned char *err = yajl_get_error(yh, 1,
(const unsigned char *) json, jlen);
errlogPrintf("dbLSConvertJSON: %s", err);
yajl_free_error(yh, err);
status = S_db_badField;
}
}
yajl_free(yh);
return status;
}

View File

@@ -226,9 +226,10 @@ static long dbDbGetValue(struct link *plink, short dbrType, void *pbuffer,
}
if (!status && precord != dbChannelRecord(chan))
recGblInheritSevr(plink->value.pv_link.pvlMask & pvlOptMsMode,
recGblInheritSevrMsg(plink->value.pv_link.pvlMask & pvlOptMsMode,
plink->precord,
dbChannelRecord(chan)->stat, dbChannelRecord(chan)->sevr);
dbChannelRecord(chan)->stat, dbChannelRecord(chan)->sevr,
dbChannelRecord(chan)->amsg);
return status;
}
@@ -378,8 +379,8 @@ static long dbDbPutValue(struct link *plink, short dbrType,
dbCommon *pdest = dbChannelRecord(chan);
long status = dbPut(paddr, dbrType, pbuffer, nRequest);
recGblInheritSevr(ppv_link->pvlMask & pvlOptMsMode, pdest, psrce->nsta,
psrce->nsev);
recGblInheritSevrMsg(ppv_link->pvlMask & pvlOptMsMode, pdest, psrce->nsta,
psrce->nsev, psrce->namsg);
if (status)
return status;

View File

@@ -75,21 +75,21 @@ static const iocshFuncDef dbbFuncDef = {"dbb",1,dbbArgs,
"Set Breakpoint on a record\n"
"This command spawns one breakpoint continuation task per lockset,"
" in which further record execution is run\n"};
static void dbbCallFunc(const iocshArgBuf *args) { dbb(args[0].sval);}
static void dbbCallFunc(const iocshArgBuf *args) { iocshSetError(dbb(args[0].sval));}
/* dbd */
static const iocshArg dbdArg0 = { "record name",iocshArgStringRecord};
static const iocshArg * const dbdArgs[1] = {&dbdArg0};
static const iocshFuncDef dbdFuncDef = {"dbd",1,dbdArgs,
"Remove breakpoint from a record.\n"};
static void dbdCallFunc(const iocshArgBuf *args) { dbd(args[0].sval);}
static void dbdCallFunc(const iocshArgBuf *args) { iocshSetError(dbd(args[0].sval));}
/* dbc */
static const iocshArg dbcArg0 = { "record name",iocshArgStringRecord};
static const iocshArg * const dbcArgs[1] = {&dbcArg0};
static const iocshFuncDef dbcFuncDef = {"dbc",1,dbcArgs,
"Continue processing in a lockset until next breakpoint is found.\n"};
static void dbcCallFunc(const iocshArgBuf *args) { dbc(args[0].sval);}
static void dbcCallFunc(const iocshArgBuf *args) { iocshSetError(dbc(args[0].sval));}
/* dbs */
static const iocshArg dbsArg0 = { "record name",iocshArgStringRecord};
@@ -97,12 +97,12 @@ static const iocshArg * const dbsArgs[1] = {&dbsArg0};
static const iocshFuncDef dbsFuncDef = {"dbs",1,dbsArgs,
"Step through record processing within a lockset.\n"
"If called without an argument, automatically steps with the last breakpoint.\n"};
static void dbsCallFunc(const iocshArgBuf *args) { dbs(args[0].sval);}
static void dbsCallFunc(const iocshArgBuf *args) { iocshSetError(dbs(args[0].sval));}
/* dbstat */
static const iocshFuncDef dbstatFuncDef = {"dbstat",0,0,
"Print list of suspended records, and breakpoints set in locksets.\n"};
static void dbstatCallFunc(const iocshArgBuf *args) { dbstat();}
static void dbstatCallFunc(const iocshArgBuf *args) { iocshSetError(dbstat());}
/* dbp */
static const iocshArg dbpArg0 = { "record name",iocshArgStringRecord};
@@ -119,7 +119,9 @@ static const iocshFuncDef dbpFuncDef = {
" 3 - Fields of minor interest to a System developer.\n"
" 4 - Internal record fields.\n"};
static void dbpCallFunc(const iocshArgBuf *args)
{ dbp(args[0].sval,args[1].ival);}
{
iocshSetError(dbp(args[0].sval,args[1].ival));
}
/* dbap */
static const iocshArg dbapArg0 = { "record name",iocshArgStringRecord};
@@ -127,7 +129,7 @@ static const iocshArg * const dbapArgs[1] = {&dbapArg0};
static const iocshFuncDef dbapFuncDef = {"dbap",1,dbapArgs,
"Auto Print.\n"
"Toggle automatic printing after processing a record that has a breakpoint.\n"};
static void dbapCallFunc(const iocshArgBuf *args) { dbap(args[0].sval);}
static void dbapCallFunc(const iocshArgBuf *args) { iocshSetError(dbap(args[0].sval));}
/* dbsr */
static const iocshArg dbsrArg0 = { "interest level",iocshArgInt};
@@ -150,7 +152,7 @@ static const iocshFuncDef dbcarFuncDef = {"dbcar",2,dbcarArgs,
" 2 - Shows info. for all links.\n"};
static void dbcarCallFunc(const iocshArgBuf *args)
{
dbcar(args[0].sval,args[1].ival);
iocshSetError(dbcar(args[0].sval,args[1].ival));
}
/* dbjlr */
@@ -162,7 +164,7 @@ static const iocshFuncDef dbjlrFuncDef = {"dbjlr",2,dbjlrArgs,
"List all JSON links in a record. If no record is specified, print for all\n"};
static void dbjlrCallFunc(const iocshArgBuf *args)
{
dbjlr(args[0].sval,args[1].ival);
iocshSetError(dbjlr(args[0].sval,args[1].ival));
}
/* dbel */
@@ -176,7 +178,7 @@ static const iocshFuncDef dbelFuncDef = {"dbel",2,dbelArgs,
"Example: dbel aitest 2\n"};
static void dbelCallFunc(const iocshArgBuf *args)
{
dbel(args[0].sval, args[1].ival);
iocshSetError(dbel(args[0].sval, args[1].ival));
}
/* dba */
@@ -187,7 +189,7 @@ static const iocshFuncDef dbaFuncDef = {"dba",1,dbaArgs,
"Print information in the dbAddr structure for a specific field.\n"
"If no field is specified, VAL is assumed.\n\n"
"Example: dba(\"aitest.HIGH\")\n"};
static void dbaCallFunc(const iocshArgBuf *args) { dba(args[0].sval);}
static void dbaCallFunc(const iocshArgBuf *args) { iocshSetError(dba(args[0].sval));}
/* dbl */
static const iocshArg dblArg0 = { "record type",iocshArgString};
@@ -204,7 +206,7 @@ static const iocshFuncDef dblFuncDef = {"dbl",2,dblArgs,
" dbl(\"ai\",\"HIGH LOW VAL PREC\")\n"};
static void dblCallFunc(const iocshArgBuf *args)
{
dbl(args[0].sval,args[1].sval);
iocshSetError(dbl(args[0].sval,args[1].sval));
}
/* dbnr */
@@ -213,7 +215,7 @@ static const iocshArg * const dbnrArgs[1] = {&dbnrArg0};
static const iocshFuncDef dbnrFuncDef = {"dbnr",1,dbnrArgs,
"List number of records and aliases by type.\n"
"If verbose, list all record types regardless of being instanced\n"};
static void dbnrCallFunc(const iocshArgBuf *args) { dbnr(args[0].ival);}
static void dbnrCallFunc(const iocshArgBuf *args) { iocshSetError(dbnr(args[0].ival));}
/* dbli */
static const iocshArg dbliArg0 = { "pattern",iocshArgString};
@@ -221,7 +223,7 @@ static const iocshArg * const dbliArgs[1] = {&dbliArg0};
static const iocshFuncDef dbliFuncDef = {"dbli",1,dbliArgs,
"List info() tags with names matching pattern.\n\n"
"Example: dbli(\"autosave*\")\n"};
static void dbliCallFunc(const iocshArgBuf *args) { dbli(args[0].sval);}
static void dbliCallFunc(const iocshArgBuf *args) { iocshSetError(dbli(args[0].sval));}
/* dbla */
static const iocshArg dblaArg0 = { "pattern",iocshArgStringRecord};
@@ -229,7 +231,7 @@ static const iocshArg * const dblaArgs[1] = {&dblaArg0};
static const iocshFuncDef dblaFuncDef = {"dbla",1,dblaArgs,
"List record alias()s by alias name pattern.\n\n"
"Example: dbla(\"alia*\")\n"};
static void dblaCallFunc(const iocshArgBuf *args) { dbla(args[0].sval);}
static void dblaCallFunc(const iocshArgBuf *args) { iocshSetError(dbla(args[0].sval));}
/* dbgrep */
static const iocshArg dbgrepArg0 = { "pattern",iocshArgStringRecord};
@@ -240,7 +242,7 @@ static const iocshFuncDef dbgrepFuncDef = {"dbgrep",1,dbgrepArgs,
" - \"?\", which matches 0 or one characters.\n"
" - \"*\", which matches 0 or more characters.\n\n"
"Example: dbgrep(\"*gpibAi*\")\n"};
static void dbgrepCallFunc(const iocshArgBuf *args) { dbgrep(args[0].sval);}
static void dbgrepCallFunc(const iocshArgBuf *args) { iocshSetError(dbgrep(args[0].sval));}
/* dbgf */
static const iocshArg dbgfArg0 = { "record name",iocshArgStringRecord};
@@ -250,7 +252,7 @@ static const iocshFuncDef dbgfFuncDef = {"dbgf",1,dbgfArgs,
"Print current value of record field.\n"
"If no field name is specified, VAL is assumed.\n\n"
"Example: dbgf(\"aitest.VAL\")\n"};
static void dbgfCallFunc(const iocshArgBuf *args) { dbgf(args[0].sval);}
static void dbgfCallFunc(const iocshArgBuf *args) { iocshSetError(dbgf(args[0].sval));}
/* dbpf */
static const iocshArg dbpfArg0 = { "record name",iocshArgStringRecord};
@@ -261,7 +263,7 @@ static const iocshFuncDef dbpfFuncDef = {"dbpf",2,dbpfArgs,
"Change value of record field and read it back with dbgf.\n"
"If no field is specified, VAL is assumed\n"};
static void dbpfCallFunc(const iocshArgBuf *args)
{ dbpf(args[0].sval,args[1].sval);}
{ iocshSetError(dbpf(args[0].sval,args[1].sval));}
/* dbpr */
static const iocshArg dbprArg0 = { "record name",iocshArgStringRecord};
@@ -279,14 +281,14 @@ static const iocshFuncDef dbprFuncDef = {
"Example: dbpr aitest 3\n"
};
static void dbprCallFunc(const iocshArgBuf *args)
{ dbpr(args[0].sval,args[1].ival);}
{ iocshSetError(dbpr(args[0].sval,args[1].ival));}
/* dbtr */
static const iocshArg dbtrArg0 = { "record name",iocshArgStringRecord};
static const iocshArg * const dbtrArgs[1] = {&dbtrArg0};
static const iocshFuncDef dbtrFuncDef = {"dbtr",1,dbtrArgs,
"Process record and then some fields.\n"};
static void dbtrCallFunc(const iocshArgBuf *args) { dbtr(args[0].sval);}
static void dbtrCallFunc(const iocshArgBuf *args) { iocshSetError(dbtr(args[0].sval));}
/* dbtgf */
static const iocshArg dbtgfArg0 = { "record name",iocshArgStringRecord};
@@ -296,7 +298,7 @@ static const iocshFuncDef dbtgfFuncDef = {"dbtgf",1,dbtgfArgs,
"Get and print the specified field with all possible DBR_* types\n"
"Example: dbtgf aitest\n"
"Example: dbtgf aitest.VAL\n"};
static void dbtgfCallFunc(const iocshArgBuf *args) { dbtgf(args[0].sval);}
static void dbtgfCallFunc(const iocshArgBuf *args) { iocshSetError(dbtgf(args[0].sval));}
/* dbtpf */
static const iocshArg dbtpfArg0 = { "record name",iocshArgStringRecord};
@@ -308,7 +310,7 @@ static const iocshFuncDef dbtpfFuncDef = {"dbtpf",2,dbtpfArgs,
"for all possible DBR_* types\n\n"
"Example: dbtpf aitest 5.0\n"};
static void dbtpfCallFunc(const iocshArgBuf *args)
{ dbtpf(args[0].sval,args[1].sval);}
{ iocshSetError(dbtpf(args[0].sval,args[1].sval));}
/* dbior */
static const iocshArg dbiorArg0 = { "driver name",iocshArgString};
@@ -317,7 +319,7 @@ static const iocshArg * const dbiorArgs[] = {&dbiorArg0,&dbiorArg1};
static const iocshFuncDef dbiorFuncDef = {"dbior",2,dbiorArgs,
"Driver Report.\n"};
static void dbiorCallFunc(const iocshArgBuf *args)
{ dbior(args[0].sval,args[1].ival);}
{ iocshSetError(dbior(args[0].sval,args[1].ival));}
/* dbhcr */
static const iocshFuncDef dbhcrFuncDef = {"dbhcr",0,0,
@@ -327,7 +329,7 @@ static const iocshFuncDef dbhcrFuncDef = {"dbhcr",0,0,
"Use the UNIX sort command:\n"
"dbhcr > report\n"
"sort report > report.sorted\n"};
static void dbhcrCallFunc(const iocshArgBuf *args) { dbhcr();}
static void dbhcrCallFunc(const iocshArgBuf *args) { iocshSetError(dbhcr());}
/* gft */
static const iocshArg gftArg0 = { "record name",iocshArgStringRecord};
@@ -336,7 +338,7 @@ static const iocshFuncDef gftFuncDef = {"gft",1,gftArgs,
"Report dbChannel info and value.\n"
"Example: gft aitest\n"
"Example: gft aitest.VAL\n"};
static void gftCallFunc(const iocshArgBuf *args) { gft(args[0].sval);}
static void gftCallFunc(const iocshArgBuf *args) { iocshSetError(gft(args[0].sval));}
/* pft */
static const iocshArg pftArg0 = { "record name",iocshArgStringRecord};
@@ -346,7 +348,7 @@ static const iocshFuncDef pftFuncDef = {"pft",2,pftArgs,
"dbChannel put value.\n"
"Example: pft aitest 5.0\n"};
static void pftCallFunc(const iocshArgBuf *args)
{ pft(args[0].sval,args[1].sval);}
{ iocshSetError(pft(args[0].sval,args[1].sval));}
/* dbtpn */
static const iocshArg dbtpnArg0 = { "record name",iocshArgStringRecord};
@@ -359,12 +361,12 @@ static const iocshFuncDef dbtpnFuncDef = {"dbtpn",2,dbtpnArgs,
"Example: dbtpn aitest\n"
"Example: dbtpn aitest 5.0\n"};
static void dbtpnCallFunc(const iocshArgBuf *args)
{ dbtpn(args[0].sval,args[1].sval);}
{ iocshSetError(dbtpn(args[0].sval,args[1].sval));}
/* dbNotifyDump */
static const iocshFuncDef dbNotifyDumpFuncDef = {"dbNotifyDump",0,0,
"Report status of any active async processing with completion notification.\n"};
static void dbNotifyDumpCallFunc(const iocshArgBuf *args) { dbNotifyDump();}
static void dbNotifyDumpCallFunc(const iocshArgBuf *args) { iocshSetError(dbNotifyDump());}
/* dbPutAttribute */
static const iocshArg dbPutAttrArg0 = { "record type",iocshArgString};
@@ -375,7 +377,7 @@ static const iocshArg * const dbPutAttrArgs[] =
static const iocshFuncDef dbPutAttrFuncDef = {"dbPutAttribute",3,dbPutAttrArgs,
"Set/Create record attribute.\n"};
static void dbPutAttrCallFunc(const iocshArgBuf *args)
{ dbPutAttribute(args[0].sval,args[1].sval,args[2].sval);}
{ iocshSetError(dbPutAttribute(args[0].sval,args[1].sval,args[2].sval));}
/* tpn */
static const iocshArg tpnArg0 = { "record name",iocshArgStringRecord};
@@ -385,7 +387,7 @@ static const iocshFuncDef tpnFuncDef = {"tpn",2,tpnArgs,
"Test Process Notify.\n\n"
"Example: tpn aitest 5.0\n"};
static void tpnCallFunc(const iocshArgBuf *args)
{ tpn(args[0].sval,args[1].sval);}
{ iocshSetError(tpn(args[0].sval,args[1].sval));}
/* dblsr */
static const iocshArg dblsrArg0 = { "record name",iocshArgStringRecord};
@@ -399,7 +401,7 @@ static const iocshFuncDef dblsrFuncDef = {"dblsr",2,dblsrArgs,
" 2 - Show each record and all database links in the lock set.\n\n"
"Example: dblsr aitest 2\n"};
static void dblsrCallFunc(const iocshArgBuf *args)
{ dblsr(args[0].sval,args[1].ival);}
{ iocshSetError(dblsr(args[0].sval,args[1].ival));}
/* dbLockShowLocked */
static const iocshArg dbLockShowLockedArg0 = { "interest level",iocshArgInt};
@@ -412,7 +414,7 @@ static const iocshFuncDef dbLockShowLockedFuncDef = {
"Example: dbLockShowLocked 0\n"
};
static void dbLockShowLockedCallFunc(const iocshArgBuf *args)
{ dbLockShowLocked(args[0].ival);}
{ iocshSetError(dbLockShowLocked(args[0].ival));}
/* scanOnceSetQueueSize */
static const iocshArg scanOnceSetQueueSizeArg0 = { "size",iocshArgInt};
@@ -423,7 +425,7 @@ static const iocshFuncDef scanOnceSetQueueSizeFuncDef = {"scanOnceSetQueueSize",
"Must be called before iocInit().\n"};
static void scanOnceSetQueueSizeCallFunc(const iocshArgBuf *args)
{
scanOnceSetQueueSize(args[0].ival);
iocshSetError(scanOnceSetQueueSize(args[0].ival));
}
/* scanOnceQueueShow */
@@ -444,7 +446,7 @@ static const iocshFuncDef scanpplFuncDef = {"scanppl",1,scanpplArgs,
"Print info for records with periodic scan.\n"
"If rate == 0.0, all periods are shown.\n"};
static void scanpplCallFunc(const iocshArgBuf *args)
{ scanppl(args[0].dval);}
{ iocshSetError(scanppl(args[0].dval));}
/* scanpel */
static const iocshArg scanpelArg0 = { "event name",iocshArgString};
@@ -452,7 +454,7 @@ static const iocshArg * const scanpelArgs[1] = {&scanpelArg0};
static const iocshFuncDef scanpelFuncDef = {"scanpel",1,scanpelArgs,
"Print info for records with SCAN = \"Event\".\n"};
static void scanpelCallFunc(const iocshArgBuf *args)
{ scanpel(args[0].sval);}
{ iocshSetError(scanpel(args[0].sval));}
/* postEvent */
static const iocshArg postEventArg0 = { "event name",iocshArgString};
@@ -468,7 +470,7 @@ static void postEventCallFunc(const iocshArgBuf *args)
/* scanpiol */
static const iocshFuncDef scanpiolFuncDef = {"scanpiol",0,0,
"Print info for records with SCAN = \"I/O Intr\".\n"};
static void scanpiolCallFunc(const iocshArgBuf *args) { scanpiol();}
static void scanpiolCallFunc(const iocshArgBuf *args) { iocshSetError(scanpiol());}
/* callbackSetQueueSize */
static const iocshArg callbackSetQueueSizeArg0 = { "bufsize",iocshArgInt};
@@ -479,7 +481,7 @@ static const iocshFuncDef callbackSetQueueSizeFuncDef = {"callbackSetQueueSize",
"Must be called before iocInit().\n"};
static void callbackSetQueueSizeCallFunc(const iocshArgBuf *args)
{
callbackSetQueueSize(args[0].ival);
iocshSetError(callbackSetQueueSize(args[0].ival));
}
/* callbackQueueShow */
@@ -504,7 +506,7 @@ static const iocshFuncDef callbackParallelThreadsFuncDef = {"callbackParallelThr
"or one of LOW, MEDIUM, or HIGH.\n"};
static void callbackParallelThreadsCallFunc(const iocshArgBuf *args)
{
callbackParallelThreads(args[0].ival, args[1].sval);
iocshSetError(callbackParallelThreads(args[0].ival, args[1].sval));
}
/* dbStateCreate */
@@ -514,7 +516,8 @@ static const iocshFuncDef dbStateCreateFuncDef = {"dbStateCreate", 1, dbStateCre
"Allocate new state name for \"state\" filter.\n"};
static void dbStateCreateCallFunc (const iocshArgBuf *args)
{
dbStateCreate(args[0].sval);
if (!dbStateCreate(args[0].sval))
iocshSetError(-1);
}
/* dbStateSet */
@@ -527,6 +530,8 @@ static void dbStateSetCallFunc (const iocshArgBuf *args)
if (sid)
dbStateSet(sid);
else
iocshSetError(-1);
}
/* dbStateClear */
@@ -539,6 +544,8 @@ static void dbStateClearCallFunc (const iocshArgBuf *args)
if (sid)
dbStateClear(sid);
else
iocshSetError(-1);
}
/* dbStateShow */
@@ -552,6 +559,8 @@ static void dbStateShowCallFunc (const iocshArgBuf *args)
if (sid)
dbStateShow(sid, args[1].ival);
else
iocshSetError(-1);
}
/* dbStateShowAll */

View File

@@ -391,6 +391,10 @@ typedef struct lset {
#define dbGetSevr(link, sevr) \
dbGetAlarm(link, NULL, sevr)
/** @brief Lookup link field name from pointer.
* Returns only field name. aka. value of ``dbFldDes::name``
* @since 3.16.2
*/
DBCORE_API const char * dbLinkFieldName(const struct link *plink);
DBCORE_API void dbInitLink(struct link *plink, short dbfType);

View File

@@ -127,6 +127,31 @@ int dbServerClient(char *pBuf, size_t bufSize)
return -1;
}
int dbServerStats(const char *name, unsigned *channels, unsigned *clients)
{
dbServer *psrv = (dbServer *)ellFirst(&serverList);
if (state != running || !psrv)
return -1;
unsigned tch = 0, tcl = 0, nmatch = 0;
for (; psrv; psrv = (dbServer *)ellNext(&psrv->node)) {
if (psrv->stats &&
(!name || strcmp(name, psrv->name) == 0)) {
unsigned lch = 0, lcl = 0;
psrv->stats(&lch, &lcl);
tch += lch;
tcl += lcl;
nmatch++;
if (name)
break; /* No duplicate names in serverList */
}
}
if (channels) *channels = tch;
if (clients) *clients = tcl;
return nmatch;
}
#define STARTSTOP(routine, method, newState) \
void routine(void) \
{ \

Some files were not shown because too many files have changed in this diff Show More