Compare commits

..

127 Commits

Author SHA1 Message Date
fdb0912b1e fix rpm dependencies 2026-01-27 15:17:13 +01:00
b5f73d8200 Merge branch '7.0' into PSI-7.0 2026-01-27 15:17:04 +01:00
1d835c0922 secure for non-rhel builds 2026-01-22 09:28:31 +01:00
Heinz Junkes
d3e414cbec udp socket functions with timeout 2026-01-21 10:04:48 -06:00
Michael Davidsaver
84d4627987 more doc dbEvent.h 2026-01-21 09:55:13 -06:00
Michael Davidsaver
839e7f4959 move dbUnitTest discussion to dbUnitTest.h 2026-01-21 09:55:13 -06:00
Michael Davidsaver
d724461f1c doc: remove @page directions
readthedocs build does not include these.
2026-01-21 09:55:13 -06:00
Michael Davidsaver
c52800fd4a appveyor: remove global email notification 2026-01-16 10:06:08 -06:00
Andrew Johnson
782d6bb441 Use compiler for dependencies, mkmf.pl is the last resort 2026-01-12 16:50:47 -06:00
5f3a4a01cc bump rpm version to 7.0.10.1-0 2026-01-12 15:41:20 +01:00
e84a3c203a put back strict-aliasing suppression 2026-01-12 15:41:20 +01:00
e4c06e9b93 drop 32 bit mingw 2026-01-12 10:43:43 +01:00
76a89b8cee add function attributes __malloc__ and __alloc_size__ for gcc and clang 2026-01-09 12:05:08 +01:00
9748cbd394 Fix gcc warning 'stringop-truncation' 2026-01-09 12:05:07 +01:00
422182d672 allow testing deprecating functions without warnings 2026-01-09 12:05:07 +01:00
030973c6e4 Update the __cplusplus macro to the correct value on Windows 2026-01-09 12:05:07 +01:00
f08fcfdb39 fix dir dependencies 2026-01-09 12:04:49 +01:00
Michael Davidsaver
59b595f8cf appveyor use python3.8 2026-01-08 08:46:43 -08:00
80c708fdeb add function attributes __malloc__ and __alloc_size__ for gcc and clang 2026-01-07 09:59:31 -06:00
Michael Davidsaver
b2ed8bb98d doc dbEvent.h 2026-01-07 09:54:41 -06:00
3d95dece6b Merge 7.0.10 into PSI-7.0 2026-01-06 14:57:16 +01:00
7fa82f103b upgrade to gcc 15 2026-01-06 13:57:39 +01:00
6cd4b24e8a add missing dependencies 2026-01-06 13:57:27 +01:00
f572a0f068 silent build 2026-01-06 13:56:37 +01:00
1ebf9ad567 don't build tests for rpm 2026-01-06 13:56:23 +01:00
4a5d3ddf85 fix parallel builds 2026-01-06 13:56:15 +01:00
3a8f5fa9b1 removed config files for no longer used architectures 2026-01-06 13:55:35 +01:00
Michael Davidsaver
71e4635d34 fix testdbCaWaitForEvent()
sync with CA context thread(s) as well as dbCa worker.
2026-01-01 19:07:10 -08:00
Andrew Johnson
bbc4c6358e Update modules/* submodules to HEAD 2026-01-01 15:24:23 -06:00
12c56ffc95 upcast int to size_t to prevent overflow 2025-12-17 16:34:58 -08:00
2bd148ab37 add comment why cast is needed 2025-12-17 16:34:58 -08:00
209e1f9587 remove some unnecessary casts to (const char*) too 2025-12-17 16:34:58 -08:00
6d85a36397 remove needless pointer casts 2025-12-17 16:34:58 -08:00
85347172c6 fix clang warning missing-braces
../fdManagerTest.cpp:76:29: warning: suggest braces around initialization of subobject [-Wmissing-braces]
   76 |         osiSockAddr addr = {0};
      |                             ^
      |                             {}
2025-12-15 16:17:56 -08:00
ef2260f433 gcc < 5 does not know #pragma GCC diagnostic push
But it also does not know warning -Wformat-security.
2025-12-15 16:16:53 -08:00
22347af170 use c++ style output to avoid porability problems with printf format 2025-12-15 16:15:15 -08:00
c811ce218e fix format warning on mingw
Since we use gnu_printf format on mingw, the windows "I" modifier
is no longer recognized by the format checker. Use "ll" instead.
Meanwhile, MSVC understands that as well.
2025-12-15 16:15:15 -08:00
Andrew Johnson
623409466d Updates to the Release Checklist 2025-12-15 17:17:57 -06:00
Andrew Johnson
d31568fe9a Update core version numbers after tagging 2025-12-15 17:15:40 -06:00
Andrew Johnson
bf11a0c31c Generate RELEASE-7.0.10.md notes file 2025-12-15 17:11:22 -06:00
Andrew Johnson
24d422e6c3 Set core version numbers for release 2025-12-15 17:04:57 -06:00
Andrew Johnson
a49df15d0b Another PR release note 2025-12-15 17:03:03 -06:00
Andrew Johnson
3f24e1800e Replace UNRELEASED => 7.0.10 2025-12-15 16:39:00 -06:00
Andrew Johnson
93d6137d23 Add submodule release note entries 2025-12-15 15:53:01 -06:00
Andrew Johnson
cabbc44bf9 Update git submodules for release 2025-12-15 15:46:04 -06:00
Edmund Blomley
7d6ef32502 Docs: Mention that pva is supported for JSON links 2025-12-12 18:05:08 -06:00
Andrew Johnson
644bf7dfef Convert Release Checklist to Markdown 2025-12-12 15:27:27 -06:00
Andrew Johnson
87f5e4b699 Various fixes to the new-notes files 2025-12-12 12:41:41 -06:00
Andrew Johnson
2e3938da6f Split PR-624 release notes
This removes the language specification and BNF descriptions from the
PR release notes (they're too long for that) to a separate document
in the libcom/src/as area. That should be combined into the chapter
on Access Security from the AppDevGuide someday.
2025-12-12 10:59:23 -06:00
Minijackson
4b6a6ddc7a iocsh.h: import documentation from AppDevGuide, minor tweaks
This imports the function-specifics that were documented in the
Application Developer's Guide, section "IOC Shell".

Other changes include:

- Removing unneeded "@typedef" and "@enum"
- Adding "()" and "@ref" for interlinking
- Removing duplicated documentation between
  iocsh & iocshLoad, and iocshCmd & iocshRun

Supports the PR:

https://github.com/epics-docs/epics-docs/pull/141
2025-12-08 12:14:56 -06:00
Michael Davidsaver
c2140ad0f3 doc clarify callbackRequestDelayed() timer allocation 2025-12-03 18:09:10 -08:00
Michael Davidsaver
186106cd33 process doc comments in callback.h
Also change doxygen annotation style from '\' to '@'
2025-12-03 17:23:11 -08:00
Michael Davidsaver
baa4cb5495 doc and callbackSetQueueSize sanity check 2025-12-03 17:14:10 -08:00
Michael Davidsaver
7ae3e4c2df epicsTimerTest: assert timers not expiring early 2025-12-03 17:08:48 -08:00
Michael Davidsaver
01360b2a69 Avoid early expiration of timers on !RTOS 2025-12-03 17:08:48 -08:00
Michael Davidsaver
491d532170 doc epicsSnprintf()
Document that epicsSnprintf() adds a nil on success,
capacity permitting.

Note OS specific ambiguity on error.  Linux and MSVC
inject nil for most failures (bad format).
Not clear if vxworks/fioFormatV() does.

Not clear if long description of non-compliant
return value is still accurate.
2025-12-03 10:04:33 -06:00
Michael Davidsaver
cc98ef8696 doc: epicsThread.h
Describe lifetime of epicsThreadId for a newly created thread.
2025-12-03 09:46:39 -06:00
Michael Davidsaver
1910478297 Ensure pthreadInfo->tid initialized for both creator and new thread 2025-12-03 09:46:39 -06:00
Michael Davidsaver
214b5d935b posix: correct race and mis-count in epicsThreadCreateOpt()
Corrects two issues.  012139638d
added a dec-ref in the status==EPERM path, but neglected to
add a matching inc-ref.  So if a joinable pthread_create()
actually errored with EPERM, then no reference is left for the
joiner.

Secondly, and far more suble, is a data race if pthread_create()
succeeds in starting a new thread, which ends and free()'s
pthreadInfo before pthread_create() writes pthreadInfo->tid .
2025-12-03 09:46:39 -06:00
90a727c901 Fix spelling errors
Most errors found with:

codespell -L cach,thst,odly,aslo,parm,parms,inpu,ges,prset,pevent,ptd,pring,valu,noo,noe,ned,inout,ro,siz,froms,nd,fo,singl,sart,multy,tthe,allong,ment,inate,nodel,tring,alse,ture,thi,wille,numer

Some more manually found (its -> it's)

c++20: Do not use apostrophe (e.g. can't) in unquoted #error message
2025-12-01 19:00:04 -08:00
Andrew Johnson
4f547230c4 CI - GHA Job fixes, standardize config
- Fix MSC-22 c++14 job to actually set -std:c++14
- Move job names to the first line of the job settings
- Group & reorder jobs
2025-12-01 15:45:15 -06:00
george-mcintyre
e5618326c9 Add detailed ACF forward compatibility documentation. 2025-11-23 14:03:47 -08:00
Michael Davidsaver
45e3e58a1f asLib: fix generic lexer/parser 2025-11-23 14:03:47 -08:00
Michael Davidsaver
1f4b39cd08 ascheck cleanup 2025-11-23 14:03:47 -08:00
george-mcintyre
9b532540bf Introduce Future Proofing to ACF parsing.
- Allow ACF files to contain sections that are unsupported
- introduce a pragma disable-strict-parsing to disable strict parsing and allow files to be accepted

Add tests for future proof parser functionaluty

Expanded tests for Access Security configurations to validate parsing behaviors for unsupported elements. Added detailed cases covering invalid formats, unsupported modifications, and acceptable configurations while maintaining future-proofing and backward compatibility assurances.

Refactor parser to handle generic items and floating-point tokens

Replaced "unsupported elements" with a more flexible "generic items" mechanism to enhance parser extensibility. Added support for floating-point numbers in parsing rules. Updated tests and rules to reflect these changes, ensuring better handling of nested and unknown configurations.

Add warnings for unsupported ACF elements and update tests

Introduced `yywarn` to log warnings for unsupported ACF elements, rule permissions, and conditions in `asLib.y`. Updated test configuration to replace generic placeholders with more descriptive names. Adjusted test cases and reduced the test plan count to reflect the changes.

Remove unused strictParsing logic and improve error handling.

Removed strictParsing variable and related code as it was no longer in use. Enhanced error messaging and parsing logic for handling unsupported elements. Updated test cases for better clarity and expanded coverage of edge cases.

Enhance ASLib parsing with Int64/Float64 support.

Updated ASLib to utilize 64-bit integers and floats for improved parsing precision. Replaced legacy parsing methods with epics-friendly functions, improved error handling, and adjusted tests and grammar accordingly.

Refactor AS parser to separate non-rule keywords

Introduced a new `non_rule_keyword` type and moved `tokenASG` and `tokenRULE` under it for better logical grouping. This improves parser clarity and maintains a clean separation of keyword types.

Add rule-specific parsing for generic block elements

Introduce new rules for parsing rule-specific generic block elements and their names. This enhances the grammar to handle additional cases while maintaining memory management and error handling. Adjust references to use the new rule where applicable.

Refactor grammar rules in asLib.y to remove remaining shift/reduce conflict

Reorganize and refine grammar rules for handling generic elements, blocks, and lists. Simplifies the structure while introducing clearer distinctions between different constructs. This enhances maintainability and removes ambiguities in parsing.
2025-11-23 14:03:47 -08:00
Michael Davidsaver
46ecf5d25c Revert "Fetch the custom cfg/CONFIG_* files early"
This reverts commit e4fbd83c93.
2025-11-20 14:50:16 -08:00
Michael Davidsaver
b893ae080e update GHA 2025-11-20 14:50:16 -08:00
Jerzy Jamroz
84b4a5f63c Doc: Fix array field descriptions
* fix(aao, aai): change VAL field type from DOUBLE[] to FTVL[]

* fix(aSub): change 'Input Value Fields' type from FT[A–U] to FT[A–U][NOA–NOU]

* fix(aSub): change 'Output Value Fields' type from FTV[A–U] to FTV[A–U][NOVA–NOVU]

* fix(waveform): change VAL field type from FTVL to FTVL[NELM]

* fix(aai): remove 'analog' from the record name

* fix(aao): remove 'analog' from the record name

* fix(aai,aao): remove 'Analog' from the record names
2025-11-19 10:47:23 -06:00
Ralph Lange
4acae4c602 PR #737: add Release Note snippet 2025-11-19 10:25:42 -06:00
Ralph Lange
0916cf985c libCom/posix: don't memlock() if opted out of FIFO scheduling 2025-11-19 10:25:42 -06:00
Ralph Lange
862272d666 libCom/posix: add env var to opt out of FIFO scheduling
- add EPICS_ALLOW_POSIX_THREAD_PRIORITY_SCHEDULING
  (default: YES)
- start EPICS threads with default policy
  when set to NO
2025-11-19 10:25:42 -06:00
Chris Johns
b308be3273 rtems: Add arm/xilinx-microzed configuration
- This BSP works with SMP enabled and with LibBSD.
2025-11-06 01:10:50 -06:00
6c2cbe0101 Update normativeTypes to fix NTNDArray::getValueSize (#732)
* Update normativeTypes to fix NTNDArray::getValueSize

* Update normativeTypes for Release Notes

---------

Co-authored-by: Andrew Johnson <anj@anl.gov>
2025-11-05 14:17:31 -06:00
bef86189d5 CI fix windows cplusplus
* fix misspelled MSVC command line flag

* add windows builds with updated __cplusplus macro
2025-11-05 10:13:18 -06:00
88bfd6f378 Allow hex and octal strings in dbPut and dbGet
Setting EPICS_DB_CONVERT_DECIMAL_ONLY to YES/yes change the dbPut() and dbGet()
string to integer conversions to the original decimal only policy.
2025-11-05 10:11:06 -06:00
Michael Davidsaver
e08d7310b9 posix: epicsThreadShowAll include OSD priority range and mlockall state 2025-11-05 09:59:50 -06:00
Jerzy Jamroz
d58d1420b8 docs: clarify Drive Limits behavior in aoRecord 2025-11-05 09:36:49 -06:00
Andrew Johnson
e12269c302 Include readline.h before EPICS headers 2025-10-24 13:13:03 -05:00
Andrew Johnson
8311a5b360 Disable epicsStdio.h redefinitions
readline.h uses printf in an attribute
2025-10-24 12:22:54 -05:00
Andrew Johnson
6e6cac09e1 Add module version numbers to Perl modules that might need them 2025-10-19 16:25:36 -04:00
Michael Davidsaver
3f382f6b68 Revert "dbCa: iocInit wait for local CA links to connect"
This reverts commit a46bd5ae88.
2025-10-17 14:51:46 -07:00
Michael Davidsaver
a46bd5ae88 dbCa: iocInit wait for local CA links to connect 2025-10-14 19:45:15 -07:00
Michael Davidsaver
098b3968d6 doc 2025-10-14 19:44:53 -07:00
Gustavo de Souza dos Reis
0ab956b123 Fix doc. comments in epicsEvent.h
* Fix typo in epicsEventWaitWithTimeout.

* Reword epicsEvent timeout documentation to reflect the actual behavior.

Negative values of timeout are handled the same way as zero values.
Change the documentation to reflect this behavior.
2025-10-14 08:47:59 -07:00
8041c7827e submodules migrated to gitea 2025-10-10 09:06:47 +02:00
DW
a2e01c2929 fix: stdint.h is not available before vw6.9 2025-10-08 18:40:04 -07:00
Andrew Johnson
280aa0b399 Initialize error strings before any database errors occur 2025-10-08 16:11:15 -05:00
Andrew Johnson
9af7ff3b3f Don't duplicate dbLoadRecords() error message 2025-10-08 16:10:00 -05:00
Andrew Johnson
aba6309604 Fix README.md, CA not PVA 2025-10-08 16:06:03 -05:00
Érico Nogueira
cb0688c850 Check if test was killed by signal in makeTestFile.
Tests killed by a signal should cause the .t script to exit with an
error code, otherwise its exit code will be 0, and the test harness
won't be aware of the unsuccessful exit.

This change also makes the test runner more robust, so attaching to a
running test (e.g. with gdb or strace) won't cause the .t script to
exit.
2025-10-08 10:27:55 -05:00
54ca2cb595 support menus and devsups 2025-10-08 10:14:49 -05:00
f5a5e7c5f7 more in-code documentation and STATIC_ASSERT check 2025-10-08 10:14:49 -05:00
47c263112f calm down codacy 2025-10-08 10:14:49 -05:00
a781896e28 map for fields and more 2025-10-08 10:14:49 -05:00
3600924f99 better guesses for wrong field names 2025-10-08 10:14:49 -05:00
232d9bec10 MSVC does not support designated initializers before C++20 2025-10-08 10:09:06 -05:00
Michael Davidsaver
271f20faa0 expand dbEvent synchronization
Changes method of waiting in db_flush_extra_labor_event(),
which also blocks if labor is pending.

Adds testMonitorSync()
2025-10-08 10:07:23 -05:00
bsbevins
d763541341 Allow CA clients to determine the server protocol version (#711)
* Allow CA clients to determine the server protocol version

Adds a call to the CA client API that allows a client to determine the server's
protocol minor version number. This is needed to allow the ca-nameserver to
report a server's protocol version correctly to a client.

* ca_host_minor_protocol return for disconnected channels

ca_host_minor_protocol now explicitly returns CA_UKN_MINOR_VERSION for a disconnected channel.
2025-10-08 09:57:30 -05:00
Jeremy Lorelli
eff502217c Use OP_SYS_LDFLAGS for -Wl,--gc-sections
OP_SYS_LDLIBS ends up on the GeSys object link command line, which ends
up breaking things. When linking GeSys objects, a symbol root is not
defined using -u or -e, which is required for --gc-sections to work.
2025-10-08 09:54:48 -05:00
Jeremy Lorelli
bd8c35d8e7 Implement epicsMessageQueueSend/epicsMessageQueueReceive to resolve link error
These were defined as macros in osdMessageQueue.h, but declared as
prototypes in epcisMessageQueue.h public header. We need to implement
them as C functions for these to actually be usable.
2025-10-08 09:53:33 -05:00
Evan Daykin
acd1aef2a0 Warn to stderr when discarding CPP modifier for outlink (#608)
* warn to stderr when un-setting inapplicable CPP flag on output links

* Warn and unset CP flag for output links

* use errlogprintf instead of fprintf for dbParseLink CP/CPP warning

* Pass source record name to dbParseLink for debug information when modifier is discarded

* make CP/CPP discard warning less verbose

* Include field name of affected record when warning of CP/CPP discard
2025-10-08 09:44:27 -05:00
Jeremy Lorelli
d00ce1bc0a gitignore cleanup + comments 2025-10-08 09:40:21 -05:00
Sky Brewer
4c4f2f075f Update README with quick start
Adds a quick install and run a softIoc documentation to the README

Also adds some up to date links at the top of the page.
2025-10-08 09:37:41 -05:00
Madeline Park
1cea3f1eed added prop(YES) annotations (#706)
All Base record types annotated with `prop(YES)` as appropriate.
2025-10-08 09:35:29 -05:00
Michael Davidsaver
7444936a22 colorize more errors/warnings 2025-09-20 09:42:01 -05:00
Michael Davidsaver
edd99a903b doc 2025-09-20 09:42:01 -05:00
Simon Rose
e4fbd83c93 Fetch the custom cfg/CONFIG_* files early
If you overwrite INSTALL_LOCATION in CONFIG_SITE, then it would be the case that
TOP_CFG_CONFIGS would point to those from EPICS base and not from the module
that you are loading. Fetching these earlier fixes that issue.
2025-09-10 09:36:30 -05:00
Michael Davidsaver
2e26ec09a6 posix: initialize pthread_attr for non-epics threads 2025-09-03 07:36:36 -07:00
Michael Davidsaver
9ce921f4fd fdManagerTest: quiet spurious failure
One iteration should be enough, but not always,
and not for all targets...
2025-08-28 11:16:56 -07:00
Simon Rose
187801c2e6 Fix MSI tests when INSTALL_LOCATION is set 2025-08-27 09:40:24 -05:00
c3c492d2cd test IVOA in dfanout 2025-08-13 10:02:58 -05:00
bff913e4d1 test new dfanout outputs 2025-08-13 10:02:58 -05:00
4c40b9f4bb make dfanoutTest processing synchronous 2025-08-13 10:02:58 -05:00
640ced41c3 increase number of dfanout outputs to 16
and add IVOA/IVOV fields
2025-08-13 10:02:58 -05:00
5c77c842a4 test improvements: NAN, DBR strings, floating point format
* Allow testdbGetFieldEqual to check for NAN double and float values
 * Print DBR_xxx names instead of numbers
 * use %g instead of %e to format floating point values to improve readability
2025-08-13 10:02:58 -05:00
79624b72e5 extend calc, calcout and sub records and calc expressions to inputs A - U
To accomodate for the increased number of inputs, the size of CALC and OCAL
fields has been doubled to 160 characters.
2025-08-13 09:47:40 -05:00
Andrew Johnson
15ed1643cd Convert xxxRecord to use typed dset
Fixes #574
2025-08-13 09:18:24 -05:00
007df69726 fix EPICS_PRINTF_STYLE so old mingw recognizes %ll and %z (#674)
gcc knows __gnu_printf__ since version 4.4.0, not only for MinGW but for
all targets. As we would need to check the gcc version anyway to avoid
"unrecognized format function type" errors with older MinGW versions,
we can simply use it for recent gcc versions and not depend on MinGW at all.
2025-07-30 10:23:19 -05:00
Michael Davidsaver
5ae9cc6536 gethostbyname -> getaddrinfo
Prefer reentrant DNS API
2025-07-30 10:16:23 -05:00
MarcoMontevechi
ff1fb82ef2 Add dfanout test (#660)
Add dfanout record unit tests

Authored-by: marcofilho <marco.filho@ess.eu>
2025-07-30 10:12:58 -05:00
Jerzy Jamroz
f4e1019ebe fix: ts{} {} warning: missing initializer for members
- warning: missing initializer for member ‘epicsTimeStamp::secPastEpoch’ [-Wmissing-field-initializers]
- warning: missing initializer for member ‘epicsTimeStamp::nsec’ [-Wmissing-field-initializers]
2025-07-21 10:23:12 -05:00
Andrew Johnson
f29137b985 Fixed POD file links into some epics-docs files
It seems the guides/*.html docs were moved in epics-docs.
A redirect was provided, but links into the middle of those
documents no longer pointed to the appropriate section.
2025-07-16 10:25:46 -05:00
Andrew Johnson
38c11d3afe Spellcheck, and added a Release Note entry 2025-07-16 10:25:46 -05:00
Andrew Johnson
dc776b547a Update CALC expression documentation
Doxygen changes in postfix.h mostly formatting & adding tags.
Rec-ref changes regrouped the operators to match the order in
postfix.h, formatting, and added some missing operators.

Updated description of calcout.OEVT for named events.
2025-07-16 10:25:46 -05:00
Andrew Johnson
4dd01aa9b6 Updated the Event Record reference docs
Now covers named events, not numbers.
All links to other reference docs now work.
2025-07-16 10:25:46 -05:00
Minijackson
d724779abf EpicsHostArch: also install into bin/ folder 2025-07-16 09:18:32 -05:00
Minijackson
26cb0dcbdc EpicsHostArch: add -g option to convert a GNU arch tuplet
also add Pod-based help and examples
2025-07-16 09:18:32 -05:00
402 changed files with 6097 additions and 3197 deletions

View File

@@ -82,8 +82,9 @@ matrix:
#---------------------------------#
install:
- cmd: set PATH=C:\Python38-x64;%PATH%
- cmd: git submodule update --init --recursive
- cmd: pip install git+https://github.com/mdavidsaver/ci-core-dumper#egg=ci-core-dumper
- cmd: python -m pip install git+https://github.com/mdavidsaver/ci-core-dumper#egg=ci-core-dumper
- cmd: python .ci/cue.py prepare
build_script:
@@ -121,10 +122,4 @@ on_failure:
#---------------------------------#
notifications:
- provider: Email
to:
- core-talk@aps.anl.gov
on_build_success: false
- provider: GitHubPullRequest

View File

@@ -89,8 +89,9 @@ matrix:
#---------------------------------#
install:
- cmd: set PATH=C:\Python38-x64;%PATH%
- cmd: git submodule update --init --recursive
- cmd: pip install git+https://github.com/mdavidsaver/ci-core-dumper#egg=ci-core-dumper
- cmd: python -m pip install git+https://github.com/mdavidsaver/ci-core-dumper#egg=ci-core-dumper
- cmd: python .ci/cue.py prepare
build_script:
@@ -128,10 +129,4 @@ on_failure:
#---------------------------------#
notifications:
- provider: Email
to:
- core-talk@aps.anl.gov
on_build_success: false
- provider: GitHubPullRequest

2
.ci

Submodule .ci updated: 0e93b70855...261f218e09

View File

@@ -50,9 +50,9 @@ jobs:
matrix:
# Job names also name artifacts, character limitations apply
include:
- os: ubuntu-24.04
- name: "Ub-24 gcc 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,127 +73,141 @@ jobs:
-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3'
CMD_LDFLAGS=-Wl,-z,relro"
- os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "windows-x64-mingw"
name: "Ub-22 gcc + MinGW"
- os: ubuntu-22.04
cmp: gcc
configuration: static
cross: "windows-x64-mingw"
name: "Ub-22 gcc + MinGW, static"
- os: ubuntu-22.04
- name: "Ub-22 gcc C++11, static"
os: ubuntu-22.04
cmp: gcc
configuration: static
extra: "CMD_CXXFLAGS=-std=c++11"
name: "Ub-22 gcc C++11, static"
- os: ubuntu-22.04
- name: "Ub-22 gcc u-char"
os: ubuntu-22.04
cmp: gcc
configuration: static
extra: "CMD_CFLAGS=-funsigned-char CMD_CXXFLAGS=-funsigned-char"
name: "Ub-22 gcc unsigned char"
- os: ubuntu-22.04
- name: "Ub-22 clang"
os: ubuntu-22.04
cmp: clang
configuration: default
name: "Ub-22 clang"
- os: ubuntu-22.04
- name: "Ub-22 clang C++11"
os: ubuntu-22.04
cmp: clang
configuration: default
extra: "CMD_CXXFLAGS=-std=c++11"
name: "Ub-22 clang C++11"
- os: ubuntu-22.04
- name: "MacOS clang"
os: macos-latest
cmp: clang
configuration: default
# Cross builds
- name: "Ub gcc + linux-aarch64"
os: ubuntu-latest
cmp: gcc
configuration: default
cross: "linux-aarch64"
- name: "Ub gcc + linux-arm gnueabi"
os: ubuntu-latest
cmp: gcc
configuration: default
cross: "linux-arm@arm-linux-gnueabi"
- name: "Ub gcc + linux-arm gnueabihf"
os: ubuntu-latest
cmp: gcc
configuration: default
cross: "linux-arm@arm-linux-gnueabihf"
- name: "Ub-22 gcc + MinGW"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "windows-x64-mingw"
- name: "Ub-22 gcc + MinGW, static"
os: ubuntu-22.04
cmp: gcc
configuration: static
cross: "windows-x64-mingw"
- name: "Ub-22 gcc + RT-4.9 pc386"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-pc386-qemu@4.9"
- name: "Ub-22 gcc + RT-4.10 pc386"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-pc386-qemu@4.10"
test: NO
- name: "Ub-22 gcc + RT-5.1 pc686"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-pc686-qemu@5"
name: "Ub-22 gcc + RT-5.1 pc686"
- os: ubuntu-22.04
- name: "Ub-22 gcc + RT-5.1 beatnik"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-beatnik@5"
test: NO
name: "Ub-22 gcc + RT-5.1 beatnik"
- os: ubuntu-22.04
- name: "Ub-22 gcc + RT-5.1 xilinx_zynq_a9_qemu"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-xilinx_zynq_a9_qemu@5"
test: NO
name: "Ub-22 gcc + RT-5.1 xilinx_zynq_a9_qemu"
- os: ubuntu-22.04
- name: "Ub-22 gcc + RT-5.1 uC5282"
os: ubuntu-22.04
cmp: gcc
configuration: default
cross: "RTEMS-uC5282@5"
test: NO
name: "Ub-22 gcc + RT-5.1 uC5282"
- os: ubuntu-22.04
cmp: gcc
configuration: default
name: "Ub-22 gcc + RT-4.10"
cross: "RTEMS-pc386-qemu@4.10"
test: NO
# Windows builds
- os: ubuntu-22.04
cmp: gcc
configuration: default
name: "Ub-22 gcc + RT-4.9"
cross: "RTEMS-pc386-qemu@4.9"
- os: macos-latest
cmp: clang
configuration: default
name: "MacOS clang"
- os: windows-2022
- name: "Win-22 MSC-22"
os: windows-2022
cmp: vs2022
configuration: debug
name: "Win-22 MSC-22"
extra: "CMD_CXXFLAGS=-analysis"
extra: "CMD_CXXFLAGS=-analyze"
- os: windows-2022
- name: "Win-22 MSC-22, static"
os: windows-2022
cmp: vs2022
configuration: static-debug
name: "Win-22 MSC-22, static"
extra: "CMD_CXXFLAGS=-analysis"
extra: "CMD_CXXFLAGS=-analyze"
- os: windows-2022
- name: "Win-22 MSC-22, debug"
os: windows-2022
cmp: vs2022
configuration: debug
name: "Win-22 MSC-22, debug"
- os: windows-2022
- name: "Win-22 MSC-22 c++14, debug"
os: windows-2022
cmp: vs2022
configuration: debug
extra: "CMD_CXXFLAGS='-analyze -Zc:__cplusplus -std:c++14'"
- name: "Win-22 MSC-22 c++17, debug"
os: windows-2022
cmp: vs2022
configuration: debug
extra: "CMD_CXXFLAGS='-analyze -Zc:__cplusplus -std:c++17'"
- name: "Win-22 mingw"
os: windows-2022
cmp: gcc
configuration: default
name: "Win-22 mingw"
# Cross builds
- os: ubuntu-latest
cmp: gcc
configuration: default
name: "Cross linux-aarch64"
cross: linux-aarch64
- os: ubuntu-latest
cmp: gcc
configuration: default
name: "Cross linux-arm gnueabi"
cross: linux-arm@arm-linux-gnueabi
- os: ubuntu-latest
cmp: gcc
configuration: default
name: "Cross linux-arm gnueabihf"
cross: linux-arm@arm-linux-gnueabihf
steps:
- uses: actions/checkout@v4

13
.gitignore vendored
View File

@@ -1,3 +1,5 @@
# Before adding patterns here, please read the gitignore
# documentation at https://git-scm.com/docs/gitignore
/cfg/
/bin/
/lib/
@@ -11,14 +13,13 @@
/modules/RELEASE.*.local
/modules/Makefile.local
O.*/
/QtC-*
/.qtc_*
/.vscode/
*.orig
*.log
.*.swp
.DS_Store
.iocsh_history
# Common files generated by other tools
.DS_Store
# Files created by rpmbuild
RPMS
SRPMS
BUILDROOT

17
.gitmodules vendored
View File

@@ -1,32 +1,31 @@
[submodule "modules/pvData"]
path = modules/pvData
# url = https://github.com/epics-base/pvDataCPP
url = ./pvData.git
url = https://gitea.psi.ch/epics/pvData
branch = master
[submodule "modules/pvAccess"]
path = modules/pvAccess
url = https://github.com/epics-base/pvAccessCPP
url = https://gitea.psi.ch/epics/pvAccess
branch = master
[submodule "modules/normativeTypes"]
path = modules/normativeTypes
url = https://github.com/epics-base/normativeTypesCPP
url = https://gitea.psi.ch/epics/normativeTypes
branch = master
[submodule "modules/pvaClient"]
path = modules/pvaClient
url = https://github.com/epics-base/pvaClientCPP
url = https://gitea.psi.ch/epics/pvaClient
branch = master
[submodule "modules/pvDatabase"]
path = modules/pvDatabase
url = https://github.com/epics-base/pvDatabaseCPP
url = https://gitea.psi.ch/epics/pvDatabase
branch = master
[submodule "modules/pva2pva"]
path = modules/pva2pva
url = https://github.com/epics-base/pva2pva
url = https://gitea.psi.ch/epics/pva2pva
branch = master
[submodule ".ci"]
path = .ci
url = https://github.com/epics-base/ci-scripts
url = https://gitea.psi.ch/epics/ci-scripts
branch = master
[submodule "modules/pcas"]
path = modules/pcas
url = https://github.com/epics-modules/pcas
url = https://gitea.psi.ch/epics/pcas

10
README
View File

@@ -13,15 +13,7 @@ this distribution.
---------------------------------------------------------
Installation and release information can be found in the
various files in the documentation subdirectory.
Additional information about EPICS including mailing list
archives and subscription instructions, documentation and
training materials, additional components, links to other
websites etc. is available on the EPICS home page at
https://epics.anl.gov/
For more information, see the README.md file.
$Format:%cD$
$Format:%H$
https://code.launchpad.net/epics-base

64
README.md Normal file
View File

@@ -0,0 +1,64 @@
# EPICS Base
EPICS (Experimental Physics and Industrial Control System) is a set of software
tools and applications which provide a software infrastructure for use in
building distributed control systems to operate devices such as Particle
Accelerators, Large Experiments and major Telescopes. EPICS Base is the central
core of the control system toolkit. More details can be found at the
[About page of the official website](https://epics-controls.org/about-epics/)
## Links
- [Official Website](https://epics-controls.org/)
- [Original Website](https://epics.anl.gov/)
- [Repository](https://github.com/epics-base/epics-base)
### Documentation
- [Documentation](https://docs.epics-controls.org/en/latest/)
- [Documentation Repository](https://github.com/epics-docs/epics-docs)
### Community Communication
- [Tech-Talk Mailing List](https://epics.anl.gov/tech-talk/)
- [Matrix Rooms](https://matrix.to/#/#epics:epics-controls.org)
- [News](https://epics-controls.org/news-and-events/)
## Quick Install
Download a release from the
[Downloads page](https://epics-controls.org/resources-and-support/base/downloads)
and unpack it. Inside the unpacked folder run:
```bash
make
```
For more information on how to install on your system see the
[Installation page](https://docs.epics-controls.org/en/latest/getting-started/installation.html)
of the documentation.
### Quick run a softIOC
After building, you can run an example soft-IOC (Input/Output Controller)
which runs a Channel Access server.
```bash
./bin/*/softIoc -x first
```
Run the `dbl` command to list the records it provides:
```bash
epics> dbl
first:BaseVersion
first:exit
epics>
```
## License
EPICS Base is distributed subject to a Software License
Agreement found in the file [LICENSE](./LICENSE) that is included with
this distribution.

View File

@@ -65,7 +65,7 @@ LOADABLE_SHRLIB_LDFLAGS = -shared -fPIC -Wl,-h$@
GNU_LDLIBS_YES = -lgcc
# Use compiler flags to generate header dependancies files
# Use compiler flags to generate header dependencies files
HDEPENDS_METHOD = COMP
HDEPENDS_COMPFLAGS = -MM -MF $@

View File

@@ -17,14 +17,14 @@ ARCMD = $(MSVC_PREFIX)lib$(MSVC_SUFFIX) -nologo -verbose -out:$@ $(LIB_OPT_LDFLA
CC = cl
# OS vendor c preprocessor
CPP = $(CC) -nologo -C -E
CPP = $(CC) -C -E
# Configure OS vendor C++ compiler
#
# -EHsc - generate code for exceptions
# -GR - generate code for run time type identification
#
CCC = $(CC) -EHsc -GR
CCC = $(CC) -EHsc -GR -Zc:__cplusplus
# Override CONFIG.gnuCommon settings for cross builds.
GNU = NO

View File

@@ -24,7 +24,7 @@
# These rules apply to these Makefile-variables:
# USR_CFLAGS C flags
# USR_CXXFLAGS C++ flags
# USR_CPPFLAGS c preprocesser flags
# USR_CPPFLAGS c preprocessor flags
# SRCS source files for building libraries and prods
# USR_SRCS source files for building libraries and prods
# PROD_SRCS source files for building prods

View File

@@ -48,7 +48,7 @@ EPICS_VERSION = 7
EPICS_REVISION = 0
# EPICS_MODIFICATION must be a number >=0 and <256
EPICS_MODIFICATION = 9
EPICS_MODIFICATION = 10
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
# Not included in the official EPICS version number if zero

View File

@@ -1,8 +1,8 @@
# Version number for the Channel Access API and shared library
EPICS_CA_MAJOR_VERSION = 4
EPICS_CA_MINOR_VERSION = 14
EPICS_CA_MAINTENANCE_VERSION = 6
EPICS_CA_MINOR_VERSION = 15
EPICS_CA_MAINTENANCE_VERSION = 1
# Development flag, set to zero for release versions

View File

@@ -147,7 +147,7 @@ CMPLR_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \
ALL_SRC_DIRS = $(CMPLR_SRC_DIRS) $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)
#--------------------------------------------------
# Directory for OS independant build created files
# Directory for OS independent build created files
COMMON_DIR = ../O.Common
# compile line include directories

View File

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

View File

@@ -53,3 +53,5 @@ EPICS_IOC_IGNORE_SERVERS=""
# EPICS_IOC_LOG_PORT Log server port number etc.
EPICS_IOC_LOG_PORT=7004
# Posix priority scheduling
EPICS_ALLOW_POSIX_THREAD_PRIORITY_SCHEDULING=YES

View File

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

View File

@@ -55,7 +55,7 @@ DBD += $(foreach type, $(CROSS_TARGET_OS_TYPES), $(DBD_$(type)))
# DBD_solaris += abcSolaris.dbd
#
# ---------------------------------------------------
# DBD concatination files
# DBD concatenation files
COMMON_DBDCATS += $(addprefix $(COMMON_DIR)/,$(DBDCAT))
DBDCAT_SOURCES += $(foreach file, $($*_DBD), $(DBDCAT_SOURCE) )
@@ -194,7 +194,7 @@ ifneq (,$(strip $(DBDDEPENDS_FILES)))
endif
#---------------------------------------------------------------
# build dependancies, clean rule
# build dependencies, clean rule
inc: $(COMMON_INC) $(INSTALL_INC) $(COMMON_DBDS) $(COMMON_DBDCATS) \
$(INSTALL_DBDS) $(INSTALL_DBD_INSTALLS) $(COMMON_DOCS)

View File

@@ -32,7 +32,7 @@ ifneq ($(RELEASE_CFG_DIR_RULES),)
include $(RELEASE_CFG_DIR_RULES)
endif
# Create EPICS_HOST_ARCH dependancies for GNU make -j option.
# Create EPICS_HOST_ARCH dependencies for GNU make -j option.
# Needed in dirs where EPICS_HOST_ARCH build creates a tool used in
# cross arch builds

View File

@@ -214,7 +214,7 @@ $(sort $(DIRECTORY_TARGETS)):
$(MKDIR) $@
# Install LIB_INSTALLS libraries before linking executables
$(TESTPRODNAME) $(PRODNAME): | $(INSTALL_LIB_INSTALLS)
$(TESTPRODNAME) $(PRODNAME): | $(INSTALL_LIB_INSTALLS) $(TESTSHRLIBNAME)
# Install built libraries too, unless Makefile says to wait
ifneq ($(DELAY_INSTALL_LIBS),YES)

View File

@@ -44,7 +44,7 @@ $(foreach dir, $(DIRS), $(dir)$(DIVIDER)install): \
rebuild: $(foreach dir, $(DIRS), $(dir)$(DIVIDER)install)
endif
# Create directory dependancies lines for GNU make -j option
# Create directory dependencies lines for GNU make -j option
# Only works with GNU make 3.81 or later (uses eval function)
define DEP_template1
$(1): $$($(1)_DEPEND_DIRS)

View File

@@ -82,7 +82,7 @@ INC = file.h
# Platform specific files can also be put in
# separate os/OS_CLASS directories!
#
# For almost every file the seach order is:
# For almost every file the search order is:
# ./os/OS_CLASS
# ./os/generic
# .
@@ -136,11 +136,11 @@ PROD_SRCS = ppp.c qqq.c
a_file_SRCS = aa.c bb.c
#
# EPICS libs needed to link PROD, TESTPROD and sharable library
# EPICS libs needed to link PROD, TESTPROD and shareable library
#
# note that DLL_LIBS (the libraries needed to link a shareable
# library) is created by default from the PROD/SYS libraries specified
# below minus the name of the sharable library (LIBRARY)
# below minus the name of the shareable library (LIBRARY)
#
#
# ---------- libraries for a specific product pppp
@@ -169,7 +169,7 @@ USR_LIBS_DEFAULT = foolib
USR_LIBS_WIN32 = -nil-
foolib_DIR = $(FOO_LIB)
# system libs needed to link PROD, TESTPROD and sharable library
# system libs needed to link PROD, TESTPROD and shareable library
#
# ---------- system libraries for all products
# for all systems:

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

@@ -4,8 +4,9 @@ include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
TOOLSET_LOCATION = /opt/rh
TOOLSET = gcc-toolset-12
TOOLSET = gcc-toolset-15
STD_CXXFLAGS = -std=c++20
STD_CFLAGS = -std=c17
# Fix bug in gcc-toolset-11 calling the old assembler
ifneq ($(filter %-11,$(TOOLSET)),)

View File

@@ -4,8 +4,9 @@ include $(CONFIG)/os/CONFIG.Common.linux-x86_64
BUILD_CLASS = HOST
TOOLSET_LOCATION = /opt/rh
TOOLSET = gcc-toolset-12
TOOLSET = gcc-toolset-15
STD_CXXFLAGS = -std=c++20
STD_CFLAGS = -std=c17
# Fix bug in gcc-toolset-11 calling the old assembler
ifneq ($(filter %-11,$(TOOLSET)),)

View File

@@ -9,7 +9,7 @@ RTEMS_BSP = beagleboneblack
RTEMS_TARGET_CPU = arm
GNU_TARGET = arm-rtems
OP_SYS_LDLIBS += -Wl,--gc-sections
OP_SYS_LDFLAGS += -Wl,--gc-sections
ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/beagleboneblack/lib/
include $(CONFIG)/os/CONFIG.Common.RTEMS

View File

@@ -20,7 +20,6 @@ define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< $@
endef
OP_SYS_LDLIBS += -Wl,--gc-sections
ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/pc686/lib/
include $(CONFIG)/os/CONFIG.Common.RTEMS
@@ -28,7 +27,7 @@ include $(CONFIG)/os/CONFIG.Common.RTEMS
#
# Put text segment where it will work with etherboot
#
OP_SYS_LDFLAGS += -Wl,-Ttext,0x100000
OP_SYS_LDFLAGS += -Wl,-Ttext,0x100000 -Wl,--gc-sections
# This check must appear after the above include

View File

@@ -20,7 +20,7 @@ ARCH_DEP_CFLAGS += -DRTEMS_HAS_ALTIVEC
#ARCH_DEP_CFLAGS += -I$(RTEMS_BASE)/powerpc-rtems5/qoriq_e500/lib/include
#OP_SYS_LDLIBS += -lbspExt #does not use posix stuff ... want to ignore
OP_SYS_LDLIBS += -Wl,--gc-sections
OP_SYS_LDFLAGS += -Wl,--gc-sections
#ARCH_DEP_LDFLAGS = -mcpu=8540 -meabi -msdata=sysv -mstrict-align -mspe -mabi=spe -mfloat-gprs=double
ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/$(RTEMS_BSP)/lib

View File

@@ -12,7 +12,7 @@ GNU_TARGET = arm-rtems
#use dhcp/bootp
ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
OP_SYS_LDLIBS += -Wl,--gc-sections
OP_SYS_LDFLAGS += -Wl,--gc-sections
ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/xilinx_zynq_a9_qemu/lib/

View File

@@ -0,0 +1,16 @@
#
# CONFIG.Common.RTEMS-xilinx_zynq_microzed
# Author: Chris Johns <chris@contemporary.software>
#
# All RTEMS targets use the same Makefile fragment
#
#EXE = .elf
RTEMS_BSP = xilinx_zynq_microzed
RTEMS_TARGET_CPU = arm
GNU_TARGET = arm-rtems
OP_SYS_LDLIBS += -Wl,--gc-sections
ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/xilinx_zynq_microzed/lib/
include $(CONFIG)/os/CONFIG.Common.RTEMS

View File

@@ -9,7 +9,7 @@ RTEMS_BSP = xilinx_zynq_zedboard
RTEMS_TARGET_CPU = arm
GNU_TARGET = arm-rtems
OP_SYS_LDLIBS += -Wl,--gc-sections
OP_SYS_LDFLAGS += -Wl,--gc-sections
ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/xilinx_zynq_zedboard/lib/

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

@@ -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

@@ -11,13 +11,6 @@ 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

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

@@ -91,11 +91,6 @@ vpath %.m $(USR_VPATH) $(ALL_SRC_DIRS)
%.o: %.m
$(COMPILE.c) -c $<
#--------------------------------------------------
# Header dependency file generation
#
HDEPENDS_METHOD = MKMF
#--------------------------------------------------
# Allow site overrides
-include $(CONFIG)/os/CONFIG_SITE.Common.iosCommon

View File

@@ -11,6 +11,9 @@ GNU_DIR=/opt/moxa/xscale_be/armv5teb-montavista-linuxeabi
ARCH_DEP_CFLAGS += -funwind-tables
# suppress strict alias warnings
CODE_CPPFLAGS += -fno-strict-aliasing
# have no C++11
STD_CXXFLAGS =

View File

@@ -9,10 +9,10 @@ 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
GNU_DIR = /opt/RHEL7
# Needed on RHEL9:
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)/usr/$$LIB:/opt/RHEL7/$$LIB
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH:%=%:)/usr/$$LIB:$(GNU_DIR)/$$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

View File

@@ -145,12 +145,6 @@ CODE_CXXFLAGS = $(CODE_CXXFLAGS_$(VXWORKS_MAJOR_VERSION))
SHRLIB_CFLAGS =
SHRLIB_LDFLAGS =
#--------------------------------------------------
# Don't use gcc 2.x for dependency generation
HDEPENDS_METHOD_2 = MKMF
HDEPENDS_METHOD = $(firstword $(HDEPENDS_METHOD_$(VX_GNU_MAJOR_VERSION)) COMP)
#--------------------------------------------------
# osithead use default stack, YES or NO override
OSITHREAD_USE_DEFAULT_STACK = NO

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,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,28 +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
# Allow to run cross-tests which expect different lib versions
export LD_PRELOAD=$(SYSROOT)/lib64/libreadline.so

View File

@@ -1 +0,0 @@
include $(CONFIG)/os/CONFIG.linux-x86_64.win32-x86-mingw

View File

@@ -1,9 +1,3 @@
#CONFIG.$(EPICS_HOST_ARCH).Common is required by build system
#Include definitions common to linux hosts
include $(CONFIG)/os/CONFIG.linux-x86_64.Common
# Windows 32 bit cross builds using mingw
# (broken on RHEL8)
CROSS_COMPILER_TARGET_ARCHS += win32-x86-mingw
CROSS_COMPILER_RUNTEST_ARHCS += win32-x86-mingw

View File

@@ -1,21 +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)
# Allow to run cross-tests which expect different lib versions
export LD_PRELOAD=$(SYSROOT)/lib64/libreadline.so

View File

@@ -1 +0,0 @@
include $(CONFIG)/os/CONFIG.linux-x86_64.win32-x86-mingw

View File

@@ -82,11 +82,6 @@ vpath %.m $(USR_VPATH) $(ALL_SRC_DIRS)
%.o: %.m
$(COMPILE.c) -c $<
#
# Header dependency file generation
#
HDEPENDS_METHOD = MKMF
#--------------------------------------------------
# Allow site overrides
-include $(CONFIG)/os/CONFIG_SITE.darwinCommon.darwinCommon

View File

@@ -12,6 +12,7 @@ COMMANDLINE_LIBRARY = READLINE
USR_CXXFLAGS += $(STD_CXXFLAGS)
STD_CXXFLAGS = -std=c++11
USR_CFLAGS += $(STD_CFLAGS)
TOOLSET_DIR = $(TOOLSET:%=$(TOOLSET_LOCATION)/%/root)
GNU_DIR = $(SYSROOT)$(TOOLSET_DIR)

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

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

View File

@@ -1 +0,0 @@
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.win32-x86-mingw

View File

@@ -7,7 +7,3 @@ CROSS_COMPILER_RUNTEST_ARCHS += RHEL9-x86_64-clang
# Build for old RHEL8 64 bit
CROSS_COMPILER_TARGET_ARCHS += RHEL8-x86_64
CROSS_COMPILER_RUNTEST_ARCHS += RHEL8-x86_64
# Build for even older RHEL7 64 bit
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64
#CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64

View File

@@ -1 +0,0 @@
include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.win32-x86-mingw

View File

@@ -12,13 +12,7 @@ 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
@@ -36,14 +30,6 @@ CROSS_COMPILER_TARGET_ARCHS += eldk52-e500v2
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

View File

@@ -3,7 +3,7 @@
# Site specific definitions for linux-x86 host - linux-x86 target builds
#-------------------------------------------------------
# Uncomment the followings lines to build with CLANG instead of GCC.
# Uncomment the following lines to build with CLANG instead of GCC.
#
#GNU = NO
#CMPLR_CLASS = clang

View File

@@ -14,7 +14,7 @@
#GNU_DIR = /usr/local
# Different distribution cross-build packages use different prefixes:
# Ubuntu, RHEL7:
# Ubuntu, RHEL:
CMPLR_PREFIX = i686-w64-mingw32-
# RHEL6:
#CMPLR_PREFIX = i686-pc-mingw32-

View File

@@ -19,11 +19,7 @@ CROSS_COMPILER_RUNTEST_ARCHS += windows-x64
CROSS_COMPILER_TARGET_ARCHS += windows-x64-mingw
CROSS_COMPILER_RUNTEST_ARCHS += windows-x64-mingw
# IOxOS IFC1211
#CROSS_COMPILER_TARGET_ARCHS += fslqoriq20-e6500_64
# Zynq
#CROSS_COMPILER_TARGET_ARCHS += yocto21-aarch64
CROSS_COMPILER_TARGET_ARCHS += yocto40-aarch64
# Debian

View File

@@ -3,7 +3,7 @@
# Site specific definitions for linux-x86_64 host - linux-x86_64 target builds
#-------------------------------------------------------
# Uncomment the followings lines to build with CLANG instead of GCC.
# Uncomment the following lines to build with CLANG instead of GCC.
#
#GNU = NO
#CMPLR_CLASS = clang

View File

@@ -1105,7 +1105,7 @@ HTML_STYLESHEET =
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefor more robust against future updates.
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra stylesheet files is of importance (e.g. the last
# stylesheet in the list overrules the setting of the previous ones in the
@@ -1648,8 +1648,8 @@ EXTRA_PACKAGES =
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
# for the replacement values of the other commands the user is refered to
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty string,
# for the replacement values of the other commands the user is referred to
# HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.

View File

@@ -21,6 +21,7 @@ RTD_SRC = $(COMMON_DIR)/rtd-src
DOCS += README.md
DOCS += ca-cli.md
DOCS += ReleaseChecklist.md
OLD_NOTES = $(wildcard ../RELEASE-*.md)
DOCS += $(OLD_NOTES:../%=%)

View File

@@ -64,10 +64,12 @@ ca_HEADERS += caerr
ca_HEADERS += caeventmask
ca_HEADERS += db_access
database_HEADERS += callback
database_HEADERS += chfPlugin
database_HEADERS += dbChannel
database_HEADERS += dbCommon
database_HEADERS += dbDefs
database_HEADERS += dbEvent
database_HEADERS += dbExtractArray
database_HEADERS += dbLink
database_HEADERS += dbServer

View File

@@ -191,7 +191,7 @@ parameter with one called `EPICS_TZ` and a routine for VxWorks that calculates
the `TIMEZONE` environment variable from the current `TZ` value. This routine
will be run once at start-up, when the EPICS clock has synchronized to its NTP
server. The calculations it contains were worked out and donated to EPICS by
Larry Hoff in 2009; it is unforunate that it has taken 10 years for them to be
Larry Hoff in 2009; it is unfortunate that it has taken 10 years for them to be
integrated into Base.
The default value for the `EPICS_TZ` environment parameter is set in the Base
@@ -521,7 +521,7 @@ a Windows system and an IOC or PCAS server is started, the IOC's attempt to
bind a TCP socket to the CA server port number fails, but Windows returns a
different error status value than the IOC is expecting in that circumstance
(because the National Instruments code requests exclusive use of that port,
unlike the EPICS code) so the IOC fails to start properly. The relevent EPICS
unlike the EPICS code) so the IOC fails to start properly. The relevant EPICS
bind() checks have now been updated so the IOC will request that a dynamic port
number be allocated for this TCP socket instead when this happens.
@@ -619,7 +619,7 @@ static versions of the compiler support libraries have now been moved into the
The `iocInit` code now performs a sanity check of the current time
returned by the generalTime subsystem and will print a warning if the wall-clock
time returned has not been initialized yet. This is just a warning message; when
a time provider does synchonize the IOC will subsequently pick up and use the
a time provider does synchronize the IOC will subsequently pick up and use the
correct time. This check code also primes the registered event system provider
if there is one so the `epicsTimeGetEventInt()` routine will work on IOCs
that ask for event time within an interrupt service routine.
@@ -642,7 +642,7 @@ change will not cause the IOC to see time going backwards.
### Microsoft Visual Studio builds
The build configuration files for builds using the Microsoft compilers have been
updated, although there should be no noticable difference at most sites. One
updated, although there should be no noticeable difference at most sites. One
extra compiler warning is now being suppressed for C++ code, `C4344: behavior
change: use of explicit template arguments results in ...` which is gratuitous
and was appearing frequently in builds of the EPICS V4 modules.

View File

@@ -661,7 +661,7 @@ the `DB_OPT` build configuration variable.
The compressRecord has a new field `BALG` which can select between FIFO
(append) and LIFO (prepend) ordering for insertion of new elements. FIFO
ordering is the default, matching the behviour of previous versions.
ordering is the default, matching the behaviour of previous versions.
### Valgrind Instrumentation

View File

@@ -59,7 +59,7 @@ been split into 4 separate Git repositories. External modules should build
against this new structure with little or no changes needed, except that some
allowance may be needed for the merging of the V4 modules.
There should be rather more description and documantation of these changes
There should be rather more description and documentation of these changes
than is currently available, but as developers we generally much prefer to
write code than documentation. Send questions to the tech-talk mailing list
and we'll be happy to try and answer them!

View File

@@ -0,0 +1,431 @@
# Release Notes
This document describes the changes that were included in the release of EPICS
noted below. Release entries are now provided in a separate document for each
version in the EPICS 7 series, but all are combined into a single page for
publishing on the EPICS website. Separate release documents are also included
from the older Base 3.15 and 3.16 series.
The external PVA submodules continue to maintain their own release notes files
as before, but the entries describing changes in those submodules since version
7.0.5 have been copied into the associated EPICS Release Notes files; they will
also be manually added to new EPICS Release Notes published in the future.
## EPICS Release 7.0.10
### Reduce symbol and macro pollution from epicsAtomic.h on WIN32
`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`.
### New `afterIocRunning` IOC Shell Command Added
This release incorporates [PR #558](https://github.com/epics-base/epics-base/pull/558) which added a new IOC shell command `afterIocRunning`. This command allows startup scripts to schedule arbitrary commands to be executed automatically after the IOC initialization phase (`iocInit`).
`afterIocRunning` allows you to write better-structured IOC shell files to include in your startup scripts without tracking where `iocInit` is located (and how IOC is deployed) e.g.:
- to achieve the best maintainability (e.g. encapsulation of the context into one file),
- to improve writing boot sequences,
- to improve IOC startup flexibility and scripting capabilities,
- it replaces the community [`afterInit`](https://github.com/paulscherrerinstitute/iocsh_utilities/blob/master/afterInit.c) and [`doAfterIocInit`](https://github.com/epics-modules/std/blob/master/stdApp/src/delayCmd.cpp) IOC shell commands,
- community usage examples:
- [`pf4filters.iocsh`](https://github.com/epics-modules/optics/blob/master/opticsApp/iocsh/pf4filters.iocsh) - enable/disable with a single comment ([full description](https://github.com/epics-base/epics-base/pull/558#issuecomment-2430057167))
- [ALS-U autosave management](https://github.com/epics-base/epics-base/pull/558#issuecomment-2430447220)
#### Features
- Define commands that run after IOC initialization completes.
- Executes following `iocInit` and `autosave` initialization (important for proper PV configuration).
- Supports any valid IOC shell command as an argument.
- Example usages:
- `afterIocRunning "dbpf <PV> <VAL>"`
- `afterIocRunning "date"`
- `afterIocRunning "dbpf $(P)EvtClkSource-Sel 'Upstream (fanout)'"`
- `afterIocRunning "dbpf $(P)Enable-Sel Enabled"`
### fdManager file descriptor limit removed
In order to support file descriptors above 1023, fdManager now uses
`poll()` instead of `select()` on all architectures that support it
(Linux, MacOS, Windows, newer RTEMS).
### 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.
### epicsExport simplifications
`epicsExportAddress()`, `epicsExportRegistrar()` and `epicsRegisterFunction()`
no longer require to be wrapped in `extern "C" { }` in C++ code.
### Support for multiline strings in iocsh files
GitHub [PR #603](https://github.com/epics-base/epics-base/pull/603)
This update introduces support for multiline strings in IOC shell (iocsh) files.
Previously, string values in iocsh files were limited to a single line, making
it difficult to include longer or formatted text. With this change, users can
now define strings that span multiple lines, improving readability and
flexibility when configuring IOC shell scripts.
To create a multiline string, end a line with a backslash (`\`). The following
line, including any leading whitespace, will be joined to the previous line.
If the backslash is immediately followed by any character other than a newline,
it will not be treated as a multiline continuation.
### Enhancement to IOC `dbgrep` command
`dbgrep` now takes an optional second string argument consisting of a list of field names
separated by spaces, e.g. `dbgrep "*PRESSURE*", "VAL DESC"`
### ACF Syntax Forward Compatibility
This release modifies the Access Security Configuration File (ACF) parser to
**standardize the ACF grammar for forward compatibility**.
It does not change the syntax that was accepted by earlier versions of the parser,
so **existing access security configuration files will not need to be modified.**
All ACF definitions will adhere to a consistent syntax format,
which will allow future additions to the access security language
without breaking existing configurations.
In practice, this means the structure of ACF files is now formally defined
and will remain stable going forward,
so any new grammar features will fit into the same pattern.
(Existing ACF files continue to work as-is under the new parser,
so no changes are required for legacy configurations or tools.).
**Generic ACF Syntax:**
The ACF file consists of definitions for User Access Groups (UAG),
Host Access Groups (HAG),
and Access Security Groups (ASG),
using the following general format
(angle brackets below denote placeholders):
```text
UAG(<name>) [{ <user> [, <user> ...] }]
...
HAG(<name>) [{ <host> [, <host> ...] }]
...
ASG(<name>) [{
[INP<index>(<pvname>)
...]
RULE(<level>, NONE | READ | WRITE [, NOTRAPWRITE | TRAPWRITE]) {
[UAG(<name> [, <name> ...])]
[HAG(<name> [, <name> ...])]
[CALC(<calculation>)]
}
...
}]
...
```
Under this schema each definition comprises a keyword,
a name in parentheses,
and (optionally) a braced block of contents.
This uniform structure ensures that
**future keywords or sections**
can be introduced in the same form,
maintaining compatibility with the parser.
For example, if a new type of condition or group is added in a later release,
it would follow the `KEYWORD(name) { ... }` pattern,
so 7.0.10-era parsers can handle or ignore it gracefully
instead of failing on unknown syntax.
**Supported Syntax in EPICS 7.0.10:**
The current release defines the following specific elements
within the above generic format:
- **UAG** -- *User Access Group*.
Defines a group of user names.
- **HAG** -- *Host Access Group*.
Defines a group of host names
(or IP addresses) that clients can connect from.
- **ASG** -- *Access Security Group*.
Defines a security group which records can be assigned to.
An ASG entry may contain a block with input definitions and access rules.
For example:
```text
ASG(MyGroup) {
INPA(myPV1)
INPB(myPV2)
RULE(1, WRITE) { ... }
RULE(1, READ) { ... }
}
```
If no rules are defined for an ASG,
the access permissions default to always allowed.
- **INP<index>(<pvname>)** -- *Input link*.
Declares an input process variable whose value can be used in a CALC condition.
- **RULE(<level>, <permission> [, <logOption>]) { ... }** --
Defines an access rule for the ASG.
Inside the curly braces of a RULE,
**optional conditions** can restrict when that rule applies.
All conditions that are present must be satisfied
(they function as a logical AND):
- **UAG(<name>, ...)** -- User-group condition.
The rule only applies if the Channel Access client's user
is a member of one of the listed UAGs.
- **HAG(<name>, ...)** -- Host-group condition.
The rule only applies if the client's host
(as determined by its IP or hostname) is in one of the listed HAGs
- **CALC("<expression>")** -- Calculation condition.
The rule only applies if the given expression evaluates to true (non-zero).
**Special Semantics for RULEs:**
Rules will continue to allow the prescribed access if and only if
all the predicates the rule contains are satisfied.
- If the rule contains predicates that are unknown to the parser
(indicating future functionality),
then the rule will NOT not match,
but no syntax error will be reported as long as the syntax is correct.
- If the rule contains predicates that the parser does not recognise
which are malformed (e.g. missing parentheses),
then the rule will not match and the parser will report a syntax error.
- In this way rules can be extended with new predicates
without breaking older clients or giving those older clients elevated privileges.
**Special Semantics for unrecognised ACF file elements:**
Any elements that are included in an ACF file will be ignored silently
by a parser that does not understand them.
- If an element is seen in an ACF file that is not understood by the parser,
the parser will simply ignore it silently,
without reporting an error,
as long as its syntax is correct.
- If elements are added to the ACF file that are malformed
(e.g. missing parentheses),
the parser will report a syntax error.
- Thus new elements can be added to ACF files in new EPICS releases
without breaking older clients that loads those files.
In summary, **ACF forward compatibility**
means that from EPICS 7.0.10 onward,
any new access security features will use this established syntax.
The parser will recognize new group types or rule options using the same
`<KEYWORD>(...) { ... }` convention,
ensuring they can be used in files loaded by IOCs running EPICS 7.0.10 or later
without breaking those IOCs or requiring their parser to be modified.
This change **does not require any modifications to existing ACF files
or downstream tools** -- all legacy syntax remains valid,
and the new standardized grammar provides a robust foundation for future extensions.
A full EBNF grammar for the new syntax can be found in the
[IOC Access Security](ACF-Language.md) document added to this release.
### Add `dbglob` to replace `dbgrep`
A new IOC shell command, `dbglob` has been added, with `dbgrep` becoming
an alias of this new function, with the intent of deprecating it in a
future release.
### Conflict-free release note entries for GitHub pull requests
GitHub [PR #628](https://github.com/epics-base/epics-base/pull/628)
This release replaces the developer-edited `documentation/RELEASE_NOTES.md`
source file in the EPICS tree with a process which generates that file from a
series of individual files added for each changeset in the release, thus
preventing merge conflicts when entries are added by many different pull
requests.
For this new approach each pull request must add its own Markdown file to the
`documentation/new-notes` directory, using a unique filename.
When a release is made, all these files will be combined into a single
`RELEASE-<version>.md` file and the `new-notes` directory emptied to prepare
for development of the next release.
Developers can generate the `RELEASE_NOTES.md` file by running `make` in the
`documentation` directory, which will install the result in the `doc` top-level
directory along with the `RELEASE-<version>.md` files describing older EPICS
releases going back to 3.15.
The `documentation/Makefile` provides some other targets which can also be
requested, but they require additional non-EPICS software such as Doxygen and
Sphinx to have been installed first.
Between releases the generated `RELEASE_NOTES.md` file contains the text from
any `new-notes` files added to document changes already merged.
It also provides links to the older `RELEASE-<version>.md` files, so it remains
the starting point for documentation on all release changes.
Detailed instructions on creating new entries are provided in a `README.txt`
file in the `documentation/new-notes` directory.
The release-time process that generates a new `RELEASE-<version>.md` file is
described in the developers' [Release Checklist](ReleaseChecklist.md).
### Add support for `EPICS_DB_INCLUDE_PATH` to `dbLoadTemplate`
GitHub [PR #636](https://github.com/epics-base/epics-base/pull/636)
Allow finding the substitution file through a path in `EPICS_DB_INCLUDE_PATH` or
an additional parameter to the iocsh `dbLoadTemplate` command.
### Expand the use of colour in the IOCs output
This release includes various changes to iocsh.cpp and elsewhere to add and
expand the use of color:
- When loading a startup script, the IOC Shell now displays comment lines in
blue, and uses bold to make command lines stand out from other text.
- The `softIoc -v` output also uses the above color scheme for the commands it
prints.
- The default IOC Shell prompt is now displayed in green; this color can be
modified in the `configure/CONFIG_SITE_ENV` file for all targets, or set for
a specific target by adding a `configure/os/CONFIG_SITE_ENV.<arch>` file.
The value of the `IOCSH_PS1` environment parameter in those files can use the
`ANSI_ENV_*` and `ANSI_*()` color macros found in errlog.h to configure the
appearance of the prompt. The C string literal concatenation syntax can be
used to construct the prompt string:
```Makefile
IOCSH_PS1 = ANSI_ESC_RED "e" ANSI_ESC_YELLOW "p" ANSI_ESC_GREEN "i" \
ANSI_ESC_CYAN "c" ANSI_BLUE("s") "> "
```
- More error messages printed by IOC Shell commands now appear in red, or use
the red `ERROR` prefix that was introduced in previous releases.
- The word "Illegal" has been replaced with "Invalid" in several Shell error
messages.
- The iocsh `var` command now shows the data type of the registered variables
as well as their values.
### Documentation Updates
The reference documentation for the [event](eventRecord.md) record type
has been updated to cover the use of named events which were added in Base
3.14.12.3 and 3.15.1.
Documentation for CALC expression evaluation has been updated for format
enhancements and to add some missing operators.
The best documentation for these expressions can be found in the
[postfix.h](postfix_h.md) header in libCom, but both the
[calc](calcRecord.md) and [calcout](calcoutRecord.md) record reference
pages also cover the infix expressions supported.
### Records calc, calcout and sub extended
The record types calc, calcout and sub have been extended from 12 inputs
A - L to 21 inputs A - U.
The macro `CALCPERFORM_NARGS` reflects this change.
The new inputs can be used in calc links and access security as well.
The size of CALC and OCAL fields has been doubled to 160 chars.
### Allow hex and octal strings in dbPut and dbGet
It is now possible to convert hex and octal strings to integer fields
with `dbPut()`, `dbGet()` and related functions like the iocsh command
`dbpf` or through database links.
Possible incompatibility: Up to now, leading `0`s have been ignored,
now they switch to octal mode.
For backward compatibility, this behavior can be switched off, returning
to the old decimal only conversions, by setting the environment variable
`EPICS_DB_CONVERT_DECIMAL_ONLY` to `YES` (case insensitive) before `iocInit`.
### `dfanout` improvements
The [dfanout](dfanoutRecord.md) record now has invalid output handling with the usual fields
`IVOA` and `IVOV` just like many other output record types.
The number of output links has also been increased from 8 to 16.
### CA Client Library Enhancement
GitHub [PR #711](https://github.com/epics-base/epics-base/pull/711)
* Allow CA clients to determine a server's protocol version.
Adds a call to the CA client API that allows a client to determine the
server's protocol minor version number.
This is needed to allow the ca-nameserver to report a server's protocol
version correctly to a client.
* `ca_host_minor_protocol()` return for disconnected channels
`ca_host_minor_protocol()` now explicitly returns `CA_UKN_MINOR_VERSION`
for a disconnected channel.
### Add environment variable to opt out of POSIX Real-Time scheduling
On POSIX systems, processes with real-time capabilities can opt out of using
Posix thread priority scheduling and memory locking.
Set `EPICS_ALLOW_POSIX_THREAD_PRIORITY_SCHEDULING=NO` to achieve this.
### Avoid early expiration of timers on non-RTOS IOCs
Previously the epicsTimer code rounded down user requested delays
by subtracting one half of the sleep "quantum".
On RTEMS and vxWorks,
this allowed periodic timers which expired on every tick.
However this also resulted in timers expiring slightly
[earlier than requested](https://github.com/epics-base/epics-base/issues/106).
With [PR 744](https://github.com/epics-base/epics-base/pull/744)
rounding is only done for RTEMS and vxWorks, which still have tick timers.
This affects several facilities which use epicsTimer,
including record delays.
For example, `calcout.ODLY` becomes more
[accurate](https://github.com/epics-base/epics-base/issues/106#issuecomment-1260232765)
on non-RTOS IOCs.
### normativeTypes Module
Changes to this module since the previous release:
#### Release 6.0.2
- Fix potential NULL pointer dereference in `NTNDArray::getValueSize()`
### pvAccess Module
Changes to this module since the previous release:
#### Release 7.1.8
- Compatible changes
- Capped the number and age of PVA beacons to avoid a resource leak. Beacons
older than 360 seconds will be destroyed automatically, new beacons will be
ignored if >=2048 exist already.
- Various Clang, MSVC and GCC compiler warnings cleaned up.
### pvData Module
Changes to this module since the previous release:
#### Release 8.0.7
- Compatible changes
- Allow epics::pvData::Timer to be cancelled during callback execution.
- Clang compiler warnings cleaned up.
- Limit periodic timers to one catch-up after missing many events.
### pvaClient Module
Changes to this module since the previous release:
## Release 4.8.1
* Fix error message generation code.

View File

@@ -56,7 +56,7 @@ A suggested form for IOC shell commands is:
### Relocatable Builds
Allows built trees to be copied or moved without invalidating RPATH entires.
Allows built trees to be copied or moved without invalidating RPATH entries.
The `LINKER_USE_RPATH` Makefile variable (see `configure/CONFIG_SITE`) may be
set to `YES`, `NO`, and a new third option `ORIGIN`. This is limited to

View File

@@ -147,7 +147,7 @@ This also fixes [lauchpad bug #1714455](https://bugs.launchpad.net/bugs/1714455)
declared in epicsString.h no longer accept octal escaped characters such as
`\123` or `\41`.
- The routine `epicsStrnEscapedFromRaw()` now generates hex
excaped characters for unprintable characters such as `\x1f`.
escaped characters for unprintable characters such as `\x1f`.
- Hex escape character sequences `\xXX` must now contain exactly 2 hex digits.
- An escape sequence `\0` now generates a zero byte in the raw string, but the
other digits `1-9` should not appear after a back-slash.

View File

@@ -117,7 +117,7 @@ with the TCP port number selected.
DBD files generated by the `dbdExpand.pl` script are now sorted within each
item type by the primary name of the item. The result should resolve any
issues with reproducable builds. No option is provided to prevent the sorting,
issues with reproducible builds. No option is provided to prevent the sorting,
previously the order was essentially random and varied each time.
### `dbExpand.pl` sorts records by name

View File

@@ -35,7 +35,7 @@ record(bi, "bit1") {
### ANSI escapes in stderr
ANSI escape charactor sequences may now be printed to the stderr stream.
ANSI escape character sequences may now be printed to the stderr stream.
These escapes will appear in logs captured from that stream.
Tools which parse and/or render these logs may need to be adjusted to
either strip out the escapes, or to translate them into markup.
@@ -227,7 +227,7 @@ The pvDatabase module was updated to version 4.7.1:
`_[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:
The plugin parameters are optional and are described below:
- group: this parameter indicates a group that client application belongs to (default value: "default"); groups of clients are completely independent of each other

View File

@@ -25,7 +25,7 @@ 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
record type by opening these files in a text editor instead of opening a browser
and loading the HTML versions or finding and opening the files from the EPICS
Documentation site.
@@ -97,7 +97,7 @@ record("#", "unwanted") {}
### Only keep readline history for interactive sessions
Previously, all IOCsh commands were persisited in the libreadline history
Previously, all IOCsh commands were persisted in the libreadline history
(when readline support is included).
Going forward, only interactive commands are saved.
@@ -111,7 +111,7 @@ 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.
This release fixes the false positives failures when building with `_FORTIFY_SOURCE` level 3.
The override introduced in 7.0.8.1 has been removed.
### Other

View File

@@ -1,492 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>EPICS Release Procedures &amp; Checklist</title>
<style type="text/css" media="print">
<!--
body {
font: 10.5pt/12pt Arial, Helvetica, sans-serif;
}
table {
border-collapse: collapse;
border: thin solid black;
}
tt {
font: 9pt/11pt "Courier New", fixed;
}
td,th {
padding: 2pt 4pt;
vertical-align: top
}
td blockquote {
page-break-inside: avoid;
margin-right: 0;
}
-->
</style>
</head>
<body>
<h1>EPICS Base Release Procedures &amp; Checklist</h1>
<p>This document describes the procedures and provides a checklist of tasks
that should be performed when creating production releases of EPICS Base.</p>
<h3>The Release Process</h3>
<p>We used to have one written down here, but we weren't following it very
closely so now the decision to make a new release is taken during the Core
Developers bi-weekly meetings in an informal manner. The steps detailed below
were written to remind Andrew (or anyone else who does the release) about
everything that has to be done since it's so easy to miss steps.</p>
<h3>Roles</h3>
<p>The following roles are used below:</p>
<dl>
<dt><strong>Release Manager</strong></dt>
<dd>Responsible for managing and tagging the release</dd>
<dt><strong>Core Developers</strong></dt>
<dd>Responsible for maintaining the EPICS software</dd>
<dt><strong>Website Editors</strong></dt>
<dd>Responsible for the EPICS websites</dd>
</dl>
<form>
<table border="1" width="100%">
<tbody>
<tr>
<th>Check</th>
<th>Who</th>
<th>Description</th>
</tr>
<tr>
<th colspan="3">Preparing for a release</th>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Notify core developers about the upcoming release and ask about any
remaining tasks that must be finished.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>All developers</td>
<td>Check the bug tracker for any outstanding items and handle
appropriately.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Set a Feature Freeze date, by which time all Git branches for
enhancements and new functionality should have been merged. After this
date, commits and merges should only be made to fix problems that show
up during testing.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager<br>
&amp; all developers</td>
<td>Request that documentation be updated and information about new
features be added before the release date:
<ul>
<li>Release Notes</li>
<li>Doxygen annotations</li>
<li>Other documents on
<a href="https://docs.epics-controls.org/en/latest/">
docs.epics-controls.org</a></li>
</ul>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Review and update this checklist for the upcoming release.
Update the release version number in the tags and messages below.</td>
</tr>
<tr>
<th colspan="3">Testing</th>
</tr>
<tr>
<td>&nbsp;</td>
<td>Platform Developers</td>
<td>Run the internal test programs on all appropriate platforms.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Platform Developers</td>
<td>Check that all makeBaseApp templates build and run properly, all
<i>xxxApp</i> and <i>xxxBoot</i> types and any internal options, e.g.
setting <tt>STATIC_BUILD=YES</tt> or using a different
<tt>INSTALL_LOCATION</tt> in configure/CONFIG_SITE.</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>Release Manager</td>
<td>Check that documentation has been updated:
<ul>
<li>Release Notes</li>
<li>Doxygen annotations</li>
<li>Other documents on
<a href="https://docs.epics-controls.org/en/latest/">
docs.epics-controls.org</a></li>
</ul>
</td>
</tr>
<tr>
<th colspan="3" id="ReleaseApproval">
Release Approval</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Core Developers</td>
<td>Reach a consensus that the software is ready to release.</td>
</tr>
<tr>
<th colspan="3">Creating the final release version</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>
<h4>For each external submodule to be tagged</h4>
<ol>
<li><tt>cd base-7.0/modules/&lt;module&gt;; git grep UNRELEASED</tt>
and insert the submodule's version number into any doxygen
annotations that have a <tt>@since&nbsp;UNRELEASED</tt> comment.
Commit (don't push yet).</li>
<li>Check that the submodule's Release Notes have been updated to
cover all changes; add missing items as necessary, and set the
module version number and release date if appropriate.<br>
Commit the changes to the submodule's Notes file (don't push).</li>
<li>Copy the new submodule version number and Release Notes entries
into a new file named <tt><i>module</i>-<i>release</i></tt> in the
<tt>base-7.0/documentation/new-notes</tt> directory.</li>
<li>Edit the module's release version file
<tt>configure/CONFIG_<i>module</i>_VERSION</tt> and the
<tt>Doxyfile</tt>s in the top-level and/or documentation
directories. In these, set <tt>DEVELOPMENT_FLAG=0</tt> and remove
<tt>-dev</tt> from the <tt>PROJECT_NUMBER</tt> string. Commit these
changes (don't push):
<blockquote><tt>
git commit -m 'Final commit for &lt;submodule-version&gt;'
</tt></blockquote>
</li>
<li>Tag the submodule:
<blockquote><tt>
git tag -m 'ANJ: Tag for EPICS 7.0.9.1' &lt;submodule-version&gt;
</tt></blockquote>
</li>
<li>Generate documentation for modules with <tt>release_notes.dox</tt>
files. Prepare to update the github-pages website as follows:
<blockquote><tt>
cd base-7.0/modules/&lt;module&gt;/documentation<br>
make commit<br>
git push --force upstream gh-pages
</tt></blockquote>
<i>Q: Delay this <tt>git push</tt> until later?</i></li>
<li>Update the Git submodule on the Base-7.0 branch to the
newly-tagged version, check the module's status matches the tag:
<blockquote><tt>
cd base-7.0/modules<br>
git add &lt;module&gt;<br>
git submodule status --cached
</tt></blockquote>
Don't commit the submodule updates yet.
</li>
<li>Edit the module's release version file
<tt>configure/CONFIG_<i>module</i>_VERSION</tt> and its top-level
<tt>Doxyfile</tt>; increment the <tt>MAINTENANCE_VERSION</tt>, set
the <tt>DEVELOPMENT_FLAG</tt> value to 1, and update the
<tt>PROJECT_NUMBER</tt> string, appending <tt>-dev</tt> to the new
module version number. Commit changes.</li>
<li>Push commits and the new tag to the submodule's GitHub repository
(assumed to be the <tt>upstream</tt> remote):
<blockquote><tt>
cd base-7.0/modules/&lt;module&gt;<br>
git push --follow-tags upstream master
</tt></blockquote>
</li>
</ol></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>
<h4>After all submodules have been updated:</h4>
<ol>
<li> Commit the submodule updates which were added for each submodule
in step 7 above to the 7.0 branch (don't push):
<blockquote><tt>
cd base-7.0/modules<br>
git commit -m "Update git submodules for release"
</tt></blockquote></li>
<li>Make sure that the output from
<tt>git submodule status --cached</tt> only shows the appropriate
version tags in the right-most parenthesized column with no
<tt>-<i>n</i>-g<i>xxxxxxx</i></tt> suffix.</li>
<li>Add and commit the new Release Note entry files that were created
for each submodule in step 3 above (don't push):
<blockquote><tt>
cd base-7.0/documentation<br>
git add new-notes<br>
git commit -m "Add submodule release note entries"
</tt></blockquote></li>
</ol>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>
<h4>In the main epics-base repository</h4>
<ol>
<li><tt>cd base-7.0; git grep UNRELEASED</tt> and insert the release
version to any doxygen annotations that have a
<tt>@since&nbsp;UNRELEASED</tt> comment. Commit (don't push).</li>
<li>Edit the main EPICS Base version file and the built-in module
version files:
<ul>
<li><tt>configure/CONFIG_BASE_VERSION</tt></li>
<li><tt>configure/CONFIG_LIBCOM_VERSION</tt></li>
<li><tt>configure/CONFIG_CA_VERSION</tt></li>
<li><tt>configure/CONFIG_DATABASE_VERSION</tt></li>
</ul>
</li>
<li>Version numbers should be set according to the level of changes
made since the last release. Note that the
<tt>MAINTENANCE_VERSION</tt> or <tt>PATCH_LEVEL</tt> value will have
been incremented immediately after the previous release tag was
applied, so don't double-increment them. Set all
<tt>DEVELOPMENT_FLAG</tt> values to 0 and set the
<tt>EPICS_DEV_SNAPSHOT</tt> to an empty string (no quotes).</li>
<li>Commit the above changes (don't push):
<blockquote><tt>
cd base-7.0<br>
git add configure/CONFIG_*_VERSION<br>
git commit -m "Set core version numbers for release"
</tt></blockquote></li>
<li><p>When <tt>EPICS_DEV_SNAPSHOT</tt> is empty because a release is
being created, the <tt>documentation/Makefile</tt> supports a build
target <tt>release</tt> for creating a new release notes file
<tt>documentation/RELEASE-<i>version</i>.md</tt> from the Markdown
files in the <tt>documentation/new-notes</tt> directory. When run,
it copies the notes entries from all the <tt>new-notes/*.md</tt>
files, then deletes the files and prepares a Git commit to apply
those changes permanently to the repository.</p>
<p>Run these commands to generate the <tt>RELEASE-7.0.9.1.md</tt>
file and remove the individual release note entry files:</p>
<blockquote><tt>
cd base-7.0/documentation<br>
make
</tt></blockquote></li>
<li>The <tt>make release</tt> command add some changes into the Git
index but didn't commit them. These commands let you check what
was done and commit the result (don't push yet!):
<blockquote><tt>
git status<br>
git diff --staged<br>
git commit -m "Generate RELEASE-7.0.9.1.md notes file"
</tt></blockquote>
To undo those Git actions and confirm that happened, run these:
<blockquote><tt>
make unrelease<br>
git status
</tt></blockquote></li>
</ol>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Tag the epics-base module in Git:
<blockquote><tt>
cd base-7.0<br>
git tag -m 'ANJ: Tagged for release' R7.0.9.1
</tt></blockquote>
<p>Don't push to GitHub yet.</p>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td><h4>After tagging the release</h4>
Edit the main EPICS Base version file and the built-in module version
files:
<ul>
<li><tt>configure/CONFIG_BASE_VERSION</tt></li>
<li><tt>configure/CONFIG_LIBCOM_VERSION</tt></li>
<li><tt>configure/CONFIG_CA_VERSION</tt></li>
<li><tt>configure/CONFIG_DATABASE_VERSION</tt></li>
</ul>
<p>Version numbers should be set for the next expected patch/maintenance
release by incrementing the MAINTENANCE_VERSION or PATCH_LEVEL value
in each file. Set all <tt>DEVELOPMENT_FLAG</tt> values to 1 and
<tt>EPICS_DEV_SNAPSHOT</tt> to "-DEV".</p>
<p>Set up the headings in the Release Notes for the next release
version number and restore the warning about this being an unreleased
version of EPICS.</p>
<p>Commit these changes (don't push).</p>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Export the tagged version into a tarfile. The <tt>make-tar.sh</tt>
script generates a gzipped tarfile directly from the tag, excluding the
files and directories that are only used for continuous integration:
<blockquote><tt>
cd base-7.0<br>
./.tools/make-tar.sh R7.0.9.1 ../base-7.0.9.1.tar.gz base-7.0.9.1/
</tt></blockquote>
Create a GPG signature file of the tarfile as follows:
<blockquote><tt>
cd ..<br>
gpg --armor --sign --detach-sig base-7.0.9.1.tar.gz
</tt></blockquote>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Test the tar file by extracting its contents and building it on at
least one supported platform. If this succeeds the commits and new git
tag can be pushed to the GitHub repository's 7.0 branch (assumed to be
the <tt>upstream</tt> remote):
<blockquote><tt>
git push --follow-tags upstream 7.0
</tt></blockquote>
</td>
</tr>
<tr>
<th colspan="3">Publish to epics.anl.gov</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Copy the tarfile and its signature to the Base download area of the
website.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Add the new release tar file to the website Base download index
page.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Create or update the website subdirectory that holds the release
documentation, and copy in the files to be published with this
release version.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Update the webpage for the new release with links to the release
documents and tar file.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Link to the release webpage from other relevent areas of the
website - update front page and sidebars.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Add an entry to the website News page, linking to the new version
webpage.</td>
</tr>
<tr>
<th colspan="3">Publish to epics-controls.org</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td>Upload the tar file and its <tt>.asc</tt> signature file to the
epics-controls web-server.
<blockquote><tt>
scp base-7.0.9.1.tar.gz base-7.0.9.1.tar.gz.asc epics-controls:download/base<br>
</tt></blockquote>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Website Editor</td>
<td><p>Follow instructions on
<a href="https://epics-controls.org/resources-and-support/documents/epics-website-documentation/adding-a-page-for-a-new-release/">
Add a page for a new release</a> to create a new release webpage (not
required for a patch release, just edit the existing page). Update the
TablePress "Point Releases" table and add the new download, and adjust
the Html Snippet for the series download.</p>
<p>Not covered in those instructions: Go to Posts, find a previous
release and use "Duplicate Post", then edit the result and publish it.
This generates the News item.
</p></td>
</tr>
<tr>
<th colspan="3">Publish to GitHub</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Go to the GitHub
<a href="https://github.com/epics-base/epics-base/releases/new?tag=R7.0.9.1">
Create release from tag R7.0.9.1</a> page.
Upload the tar file and its <tt>.asc</tt> signature file to the new
GitHub release page, or just drag-n-drop them into the page.
Copy/paste the text from the previous release and edit. Submit.</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>We used to close out bug reports in Launchpad at release-time, this
would be the time to do that if we have an equivalent on GitHub.</td>
</tr>
<tr>
<th colspan="3">Make Announcement</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>Release Manager</td>
<td>Announce the release on the tech-talk mailing list.</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

View File

@@ -0,0 +1,390 @@
# EPICS Base Release Procedures & Checklist
This document describes the procedures and provides a checklist of tasks
that should be performed when creating production releases of EPICS
Base.
## The Release Process
The decision to make a new release is taken during the
Core Developers bi-weekly meetings in an informal manner. The steps
detailed below were written to remind Andrew (or whoever does
the release) exactly what has to be done, since it's so easy to
miss steps.
### Roles
The following roles are used below:
**Release Manager**
Responsible for managing and tagging the release
**Core Developers**
Responsible for maintaining the EPICS software
**Website Editors**
Responsible for the EPICS websites
<table data-border="1" width="100%">
<colgroup>
<col style="width: 20%" />
<col style="width: 80%" />
</colgroup>
<tbody>
<tr>
<th>Who</th>
<th>Description</th>
</tr>
<tr>
<th colspan="3">Preparing for a release</th>
</tr>
<tr>
<td>Release Manager</td>
<td>Notify core developers about the upcoming release and ask about any
remaining tasks that must be finished.</td>
</tr>
<tr>
<td>All developers</td>
<td>Check the bug tracker for any outstanding items and handle
appropriately.</td>
</tr>
<tr>
<td>Release Manager</td>
<td>Set a Feature Freeze date, by which time all Git branches for
enhancements and new functionality should have been merged. After this
date, commits and merges should only be made to fix problems that show
up during testing.</td>
</tr>
<tr>
<td>Release Manager<br />
&amp; all developers</td>
<td>Request that documentation be updated and information about new
features be added before the release date:
<ul>
<li>Release Notes</li>
<li>Doxygen annotations</li>
<li>Other documents on
<a href="https://docs.epics-controls.org/en/latest/">
docs.epics-controls.org</a></li>
</ul></td>
</tr>
<tr>
<td>Release Manager</td>
<td>Review and update this checklist for the upcoming release. Update
the release version number in the tags and messages below.</td>
</tr>
<tr>
<td colspan="2">Testing</td>
</tr>
<tr>
<td>Platform Developers</td>
<td>Run the internal test programs on all appropriate platforms.</td>
</tr>
<tr>
<td>Platform Developers</td>
<td>Check that all makeBaseApp templates build and run properly, all
<em>xxxApp</em> and <em>xxxBoot</em> types and any internal options,
e.g. setting <code>STATIC_BUILD=YES</code> or using a different
<code>INSTALL_LOCATION</code> in configure/CONFIG_SITE.</td>
</tr>
<tr>
<td>Release Manager</td>
<td>Check that documentation has been updated:
<ul>
<li>Release Notes</li>
<li>Doxygen annotations</li>
<li>Other documents on
<a href="https://docs.epics-controls.org/en/latest/">
docs.epics-controls.org</a></li>
</ul></td>
</tr>
<tr>
<td colspan="2" id="ReleaseApproval">Release Approval</td>
</tr>
<tr>
<td>Core Developers</td>
<td>Reach a consensus that the software is ready to release.</td>
</tr>
<tr>
<td colspan="2">Creating the final release version</td>
</tr>
<tr>
<td>Release Manager</td>
<td><h4 id="for-each-external-submodule-to-be-tagged">For each external
submodule to be tagged</h4>
<ol>
<li><code>cd base-7.0/modules/&lt;module&gt;; git grep UNRELEASED</code>
and insert the submodule's version number into any doxygen annotations
that have a <code>@since&nbsp;UNRELEASED</code> comment. Commit (don't push
yet).</li>
<li>Check that the submodule's Release Notes have been updated to cover
all changes; add missing items as necessary, and set the module version
number and release date if appropriate.<br />
Commit the changes to the submodule's Notes file (don't push).</li>
<li>Copy the new submodule version number and Release Notes entries into
a new file named
<em><code>module</code></em><code>-</code><em><code>release</code></em>
in the <code>base-7.0/documentation/new-notes</code> directory.</li>
<li><p>Edit the module's release version file
<code>configure/CONFIG_</code><em><code>module</code></em><code>_VERSION</code>
and the <code>Doxyfile</code>s in the top-level and/or documentation
directories. In these, set <code>DEVELOPMENT_FLAG=0</code> and remove
<code>-dev</code> from the <code>PROJECT_NUMBER</code> string. Commit
these changes (don't push):</p>
<blockquote>
<code> git commit -m 'Final commit for &lt;submodule-version&gt;' </code>
</blockquote></li>
<li><p>Tag the submodule:</p>
<blockquote>
<code> git tag -m 'ANJ: Tag for EPICS 7.0.10' &lt;submodule-version&gt; </code>
</blockquote></li>
<li><p>Generate documentation for modules with
<code>release_notes.dox</code> files. Prepare to update the github-pages
website as follows:</p>
<blockquote>
<code> cd base-7.0/modules/&lt;module&gt;/documentation</code><br />
<code>make commit</code><br />
<code>git push --force upstream gh-pages </code>
</blockquote>
<p><em>Q: Delay this <code>git push</code> until later?</em></p></li>
<li><p>Update the Git submodule on the Base-7.0 branch to the
newly-tagged version, check the module's status matches the tag:</p>
<blockquote>
<code> cd base-7.0/modules</code><br />
<code>git add &lt;module&gt;</code><br />
<code>git submodule status --cached </code>
</blockquote>
<p>Don't commit the submodule updates yet.</p></li>
<li>Edit the module's release version file
<code>configure/CONFIG_</code><em><code>module</code></em><code>_VERSION</code>
and its top-level <code>Doxyfile</code>; increment the
<code>MAINTENANCE_VERSION</code>, set the <code>DEVELOPMENT_FLAG</code>
value to 1, and update the <code>PROJECT_NUMBER</code> string, appending
<code>-dev</code> to the new module version number. Commit changes.</li>
<li><p>Push commits and the new tag to the submodule's GitHub repository
(assumed to be the <code>upstream</code> remote):</p>
<blockquote>
<code> cd base-7.0/modules/&lt;module&gt;</code><br />
<code>git push --follow-tags upstream master </code>
</blockquote></li>
</ol></td>
</tr>
<tr>
<td>Release Manager</td>
<td><h4 id="after-all-submodules-have-been-updated">After all submodules
have been updated:</h4>
<ol>
<li><p>Commit the submodule updates which were added for each submodule
in step 7 above to the 7.0 branch (don't push):</p>
<blockquote>
<code> cd base-7.0/modules</code><br />
<code>git commit -m "Update git submodules for release" </code>
</blockquote></li>
<li>Make sure that the output from
<code>git submodule status --cached</code> only shows the appropriate
version tags in the right-most parenthesized column with no
<code>-</code><em><code>n</code></em><code>-g</code><em><code>xxxxxxx</code></em>
suffix.</li>
<li><p>Add and commit the new Release Note entry files that were created
for each submodule in step 3 above (don't push):</p>
<blockquote>
<code> cd base-7.0/documentation</code><br />
<code>git add new-notes</code><br />
<code>git commit -m "Add submodule release note entries" </code>
</blockquote></li>
</ol></td>
</tr>
<tr>
<td>Release Manager</td>
<td><h4 id="in-the-main-epics-base-repository">In the main epics-base
repository</h4>
<ol>
<li><code>cd base-7.0; git grep UNRELEASED</code> and insert the release
version to any doxygen annotations that have a
<code>@since&nbsp;UNRELEASED</code> comment. Commit (don't push).</li>
<li>Edit the main EPICS Base version file and the built-in module
version files:
<ul>
<li><code>configure/CONFIG_BASE_VERSION</code></li>
<li><code>configure/CONFIG_LIBCOM_VERSION</code></li>
<li><code>configure/CONFIG_CA_VERSION</code></li>
<li><code>configure/CONFIG_DATABASE_VERSION</code></li>
</ul></li>
<li>Version numbers should be set according to the level of changes made
since the last release. Note that the <code>MAINTENANCE_VERSION</code>
or <code>PATCH_LEVEL</code> value will have been incremented immediately
after the previous release tag was applied, so don't double-increment
them. Set all <code>DEVELOPMENT_FLAG</code> values to 0 and set the
<code>EPICS_DEV_SNAPSHOT</code> to an empty string (no quotes).</li>
<li><p>Commit the above changes (don't push):</p>
<blockquote>
<code> cd base-7.0</code><br />
<code>git add configure/CONFIG_*_VERSION</code><br />
<code>git commit -m "Set core version numbers for release" </code>
</blockquote></li>
<li><p>When <code>EPICS_DEV_SNAPSHOT</code> is empty because a release
is being created, the <code>documentation/Makefile</code> supports a
build target <code>release</code> for creating a new release notes file
<code>documentation/RELEASE-</code><em><code>version</code></em><code>.md</code>
from the Markdown files in the <code>documentation/new-notes</code>
directory. When run, it copies the notes entries from all the
<code>new-notes/*.md</code> files, then deletes the files and prepares a
Git commit to apply those changes permanently to the repository.</p>
<p>Run these commands to generate the <code>RELEASE-7.0.10.md</code>
file and remove the individual release note entry files:</p>
<blockquote>
<code> cd base-7.0/documentation</code><br />
<code>make release</code>
</blockquote></li>
<li><p>The <code>make release</code> command add some changes into the
Git index but didn't commit them. These commands let you check what was
done and commit the result (don't push yet!):</p>
<blockquote>
<code> git status</code><br />
<code>git diff --staged</code><br />
<code>git commit -m "Generate RELEASE-7.0.10.md notes file" </code>
</blockquote>
<p>To undo those Git actions and confirm that happened, run these:</p>
<blockquote>
<code> make unrelease</code><br />
<code>git status </code>
</blockquote></li>
</ol></td>
</tr>
<tr>
<td>Release Manager</td>
<td>Tag the epics-base module in Git:
<blockquote>
<code> cd base-7.0</code><br />
<code>git tag -m 'ANJ: Tagged for release' R7.0.10 </code>
</blockquote>
<p>Don't push to GitHub yet.</p></td>
</tr>
<tr>
<td>Release Manager</td>
<td><h4 id="after-tagging-the-release">After tagging the release</h4>
Edit the main EPICS Base version file and the built-in module version
files:
<ul>
<li><code>configure/CONFIG_BASE_VERSION</code></li>
<li><code>configure/CONFIG_LIBCOM_VERSION</code></li>
<li><code>configure/CONFIG_CA_VERSION</code></li>
<li><code>configure/CONFIG_DATABASE_VERSION</code></li>
</ul>
<p>Version numbers should be set for the next expected patch/maintenance
release by incrementing the MAINTENANCE_VERSION or PATCH_LEVEL value in
each file. Set all <code>DEVELOPMENT_FLAG</code> values to 1 and
<code>EPICS_DEV_SNAPSHOT</code> to "-DEV".</p>
<p>Commit these changes (don't push).</p></td>
</tr>
<tr>
<td>Release Manager</td>
<td>Export the tagged version into a tarfile. The
<code>make-tar.sh</code> script generates a gzipped tarfile directly
from the tag, excluding the files and directories that are only used for
continuous integration:
<blockquote>
<code> cd base-7.0</code><br />
<code>./.tools/make-tar.sh R7.0.10 ../base-7.0.10.tar.gz base-7.0.10/ </code>
</blockquote>
Create a GPG signature file of the tarfile as follows:
<blockquote>
<code> cd ..</code><br />
<code>gpg --armor --sign --detach-sig base-7.0.10.tar.gz </code>
</blockquote></td>
</tr>
<tr>
<td>Release Manager</td>
<td>Test the tar file by extracting its contents and building it on at
least one supported platform. If this succeeds the commits and new git
tag can be pushed to the GitHub repository's 7.0 branch (assumed to be
the <code>upstream</code> remote):
<blockquote>
<code> git push --follow-tags upstream 7.0 </code>
</blockquote></td>
</tr>
<tr>
<td colspan="2">Publish to epics.anl.gov</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Copy the tarfile and its signature to the Base download area of the
website.</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Add the new release tar file to the website Base download index
page.</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Create or update the website subdirectory that holds the release
documentation, and copy in the files to be published with this release
version.</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Update the webpage for the new release with links to the release
documents and tar file.</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Link to the release webpage from other relevant areas of the website
- update front page and sidebars.</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Add an entry to the website News page, linking to the new version
webpage.</td>
</tr>
<tr>
<td colspan="2">Publish to epics-controls.org</td>
</tr>
<tr>
<td>Website Editor</td>
<td>Upload the tar file and its <code>.asc</code> signature file to the
epics-controls web-server.
<blockquote>
<code> scp base-7.0.10.tar.gz base-7.0.10.tar.gz.asc epics-controls:download/base</code><br />
</blockquote></td>
</tr>
<tr>
<td>Website Editor</td>
<td><p>Follow instructions on
<a href="https://epics-controls.org/resources-and-support/documents/epics-website-documentation/adding-a-page-for-a-new-release/">
Add a page for a new release</a>
to create a new release webpage (not
required for a patch release, just edit the existing page). Update the
TablePress "Point Releases" table and add the new download, and adjust
the Html Snippet for the series download.</p>
<p>Not covered in those instructions: Go to Posts, find a previous
release and use "Duplicate Post", then edit the result and publish it.
This generates the News item.</p></td>
</tr>
<tr>
<td colspan="2">Publish to GitHub</td>
</tr>
<tr>
<td>Release Manager</td>
<td>Go to the GitHub
<a href="https://github.com/epics-base/epics-base/releases/new?tag=R7.0.10">
Create
release from tag R7.0.10</a> page. Upload the tar file and its
<code>.asc</code> signature file to the new GitHub release page, or just
drag-n-drop them into the page. Copy/paste the text from the previous
release and edit. Submit.</td>
</tr>
<tr>
<td>Release Manager</td>
<td>We used to close out bug reports in Launchpad at release-time, this
would be the time to do that if we have an equivalent on GitHub.</td>
</tr>
<tr>
<td colspan="2">Make Announcement</td>
</tr>
<tr>
<td>Release Manager</td>
<td>Announce the release on the tech-talk mailing list.</td>
</tr>
</tbody>
</table>

View File

@@ -13,6 +13,7 @@ EPICS Base Documentation
README
RELEASE_NOTES
ACF-Language
.. toctree::
:maxdepth: 2

View File

@@ -1,7 +0,0 @@
### Reduce symbol and macro pollution from epicsAtomic.h on WIN32
`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`.

View File

@@ -1,23 +0,0 @@
### New `afterIocRunning` IOC Shell Command Added
This release incorporates [PR #558](https://github.com/epics-base/epics-base/pull/558) which added a new IOC shell command `afterIocRunning`. This command allows startup scripts to schedule arbitrary commands to be executed automatically after the IOC initialization phase (`iocInit`).
`afterIocRunning` allows you to write better-structured IOC shell files to include in your startup scripts without tracking where `iocInit` is located (and how IOC is deployed) e.g.:
- to achieve the best maintainability (e.g. encapsulation of the context into one file),
- to improve writing boot sequences,
- to improve IOC startup flexibility and scripting capabilities,
- it replaces the community [`afterInit`](https://github.com/paulscherrerinstitute/iocsh_utilities/blob/master/afterInit.c) and [`doAfterIocInit`](https://github.com/epics-modules/std/blob/master/stdApp/src/delayCmd.cpp) IOC shell commands,
- community usage examples:
- [`pf4filters.iocsh`](https://github.com/epics-modules/optics/blob/master/opticsApp/iocsh/pf4filters.iocsh) - enable/disable with a single comment ([full description](https://github.com/epics-base/epics-base/pull/558#issuecomment-2430057167))
- [ALS-U autosave managment](https://github.com/epics-base/epics-base/pull/558#issuecomment-2430447220)
#### Features
- Define commands that run after IOC initialization completes.
- Executes following `iocInit` and `autosave` initialization (important for proper PV configuration).
- Supports any valid IOC shell command as an argument.
- Example usages:
- `afterIocRunning "dbpf <PV> <VAL>"`
- `afterIocRunning "date"`
- `afterIocRunning "dbpf $(P)EvtClkSource-Sel 'Upstream (fanout)'"`
- `afterIocRunning "dbpf $(P)Enable-Sel Enabled"`

View File

@@ -1,5 +0,0 @@
### fdManager file descriptor limit removed
In order to support file descriptors above 1023, fdManager now uses
`poll()` instead of `select()` on all architectures that support it
(Linux, MacOS, Windows, newer RTEMS).

View File

@@ -1,7 +0,0 @@
### 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.

View File

@@ -1,4 +0,0 @@
### epicsExport simplifications
`epicsExportAddress()`, `epicsExportRegistrar()` and `epicsRegisterFunction()`
no longer require to be wrapped in `extern "C" { }` in C++ code.

View File

@@ -1,14 +0,0 @@
### Support for multiline strings in iocsh files
GitHub [PR #603](https://github.com/epics-base/epics-base/pull/603)
This update introduces support for multiline strings in IOC shell (iocsh) files.
Previously, string values in iocsh files were limited to a single line, making
it difficult to include longer or formatted text. With this change, users can
now define strings that span multiple lines, improving readability and
flexibility when configuring IOC shell scripts.
To create a multiline string, end a line with a backslash (`\`). The following
line, including any leading whitespace, will be joined to the previous line.
If the backslash is immediately followed by any character other than a newline,
it will not be treated as a multiline continuation.

View File

@@ -1,4 +0,0 @@
### Enhancement to IOC `dbgrep` command
`dbgrep` now takes an optional second string argument consisting of a list of field names
separated by spaces, e.g. `dbgrep "*PRESSURE*", "VAL DESC"`

View File

@@ -1,5 +0,0 @@
*** Add `dbglob` to replace `dbgrep`
A new IOC shell command, `dbglob` has been added, with `dbgrep` becoming
an alias of this new function, with the intent of deprecating it in a
future release.

View File

@@ -1,33 +0,0 @@
### Conflict-free release note entries for GitHub pull requests
GitHub [PR #628](https://github.com/epics-base/epics-base/pull/628)
This release replaces the developer-edited `documentation/RELEASE_NOTES.md`
source file in the EPICS tree with a process which generates that file from a
series of individual files added for each changeset in the release, thus
preventing merge conflicts when entries are added by many different pull
requests.
For this new approach each pull request must add its own Markdown file to the
`documentation/new-notes` directory, using a unique filename.
When a release is made, all these files will be combined into a single
`RELEASE-<version>.md` file and the `new-notes` directory emptied to prepare
for development of the next release.
Developers can generate the `RELEASE_NOTES.md` file by running `make` in the
`documentation` directory, which will install the result in the `doc` top-level
directory along with the `RELEASE-<version>.md` files describing older EPICS
releases going back to 3.15.
The `documentation/Makefile` provides some other targets which can also be
requested, but they require additional non-EPICS software such as Doxygen and
Sphinx to have been installed first.
Between releases the generated `RELEASE_NOTES.md` file contains the text from
any `new-notes` files added to document changes already merged.
It also provides links to the older `RELEASE-<version>.md` files, so it remains
the starting point for documentation on all release changes.
Detailed instructions on creating new entries are provided in a `README.txt`
file in the `documentation/new-notes` directory.
The release-time process that generates a new `RELEASE-<version>.md` file is
described in the `documentation/ReleaseChecklist.html` file.

View File

@@ -1,6 +0,0 @@
### Add support for EPICS_DB_INCLUDE_PATH to dbLoadTemplate
GitHub [PR #636](https://github.com/epics-base/epics-base/pull/636)
Allow finding the substitution file using path in `EPICS_DB_INCLUDE_PATH` or
an additional parameter to `dbLoadTemplate`.

View File

@@ -1,32 +0,0 @@
### Expand the use of colour in the IOCs output
This release includes various changes to iocsh.cpp and elsewhere to add and
expand the use of color:
- When loading a startup script, the IOC Shell now displays comment lines in
blue, and uses bold to make command lines stand out from other text.
- The `softIoc -v` output also uses the above color scheme for the commands it
prints.
- The default IOC Shell prompt is now displayed in green; this color can be
modified in the `configure/CONFIG_SITE_ENV` file for all targets, or set for
a specific target by adding a `configure/os/CONFIG_SITE_ENV.<arch>` file.
The value of the `IOCSH_PS1` environment paremeter in those files can use the
`ANSI_ENV_*` and `ANSI_*()` color macros found in errlog.h to configure the
appearance of the prompt. The C string literal concatenation syntax can be
used to construct the prompt string:
```Makefile
IOCSH_PS1 = ANSI_ESC_RED "e" ANSI_ESC_YELLOW "p" ANSI_ESC_GREEN "i" \
ANSI_ESC_CYAN "c" ANSI_BLUE("s") "> "
```
- More error messages printed by IOC Shell commands now appear in red, or use
the red `ERROR` prefix that was introduced in previous releases.
- The word "Illegal" has been replaced with "Invalid" in several Shell error
messages.
- The iocsh `var` command now shows the data type of the registered variables
as well as their values.

View File

@@ -34,7 +34,7 @@ where nnn is the number of the pull request. If you haven't created the pull
request yet you can use the number from a related GitHub issue, or use some
other name, then rename and push it after the PR has been created.
The file should start with a level-3 Markdown title for the entry, like this:
The file *must* start with a level-3 Markdown title for the entry, like this:
### Conflict-free release note entries for GitHub pull requests
@@ -46,6 +46,9 @@ The file should start with a level-3 Markdown title for the entry, like this:
(followed by a blank line to separate it from the next paragraph), or a
link to the PR may be integrated into the text that follows.
* Use blank lines between paragraphs of text, and code-blocks for examples.
* I recommend using [semantic line-breaks](https://sembr.org/) in Markdown
files, it makes editing easier and reduces the number of lines that change
in most commits. This README.txt file isn't formatted as Markdown.
Release note entries are not intended to provide full documentation of major
features. For small features or changes though, they may provide all the

View File

@@ -1,11 +1,11 @@
# Always make sure EpicsVersion.Version-Release matches the git tag!
%define EpicsVersion 7.0.9
%define EpicsVersion 7.0.10
Name: epics-base-%{EpicsVersion}
Summary: EPICS Base %{EpicsVersion}
Version: 1
Release: 4%{?dist}
Release: 1%{?dist}
License: EPICS Open License
Group: Development/Languages
URL: https://git.psi.ch/epics_base/base-7.0
@@ -43,20 +43,14 @@ 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
# This EPICS installation uses the toolset 15 compiler
%if 0%{?rhel} >= 8
Requires: gcc-toolset-12-gcc-c++
BuildRequires: gcc-toolset-12-gcc-c++
Requires: gcc-toolset-15-gcc-c++
BuildRequires: gcc-toolset-15-gcc-c++
%endif
# The perl stuff we need
@@ -84,7 +78,7 @@ Contains headers etc to build EPICS host applications.
###########################################
%if %{?rhel} > 8
%if 0%{?rhel} > 8
%package compat
Summary: EPICS base %{EpicsVersion} for older RHEL versions
Requires: %{name} = %{version}-%{release}
@@ -99,7 +93,7 @@ Contains EPICS binaries that run on older RHEL versions.
%package wine
Summary: EPICS base %{EpicsVersion} for wine
Requires: %{name} = %{version}-%{release}
%if %{?rhel} >= 9
%if 0%{?rhel} >= 9
Requires: gfa-wine
%else
Requires: wine
@@ -127,9 +121,26 @@ Summary: EPICS base %{EpicsVersion} for development environments
Requires: %{name} = %{version}-%{release}
Requires: %{name}-host-devel = %{version}-%{release}
Requires: gfa-cross-compiler-links
BuildRequires: gfa-cross-compiler-links
Requires: mingw64-gcc-c++
BuildRequires: mingw64-gcc-c++
BuildArch: noarch
AutoReqProv: no
# For Windows cross build with wine:
BuildRequires: gfa-cross-compiler-links
%if 0%{?rhel} >= 9
BuildRequires: gfa-wine
Requires: gfa-wine
%else
BuildRequires: wine
Requires: wine
%endif
# For some 32 bit cross compilers
BuildRequires: /lib/libc.so.6
Requires: /lib/libc.so.6
%description devel
All what is needed to develop EPICS for different target architectures.
@@ -187,7 +198,8 @@ git submodule update --init --recursive modules
%if %{defined epics_host_arch}
export EPICS_HOST_ARCH=%{epics_host_arch}
%endif
%{__make} INSTALL_LOCATION=%{buildroot}%{prog_folder} FINAL_LOCATION=%{prog_folder}
%make_build -s INSTALL_LOCATION=%{buildroot}%{prog_folder} FINAL_LOCATION=%{prog_folder} \
TESTS= TESTPROD= TESTLIBRARY= TESTFILES= PROD_RTEMS=-nil- PROD_vxWorks=-nil-
%{__make} INSTALL_LOCATION=%{buildroot}%{prog_folder} copysrc
# remove files we do not need
@@ -202,7 +214,7 @@ shopt -s extglob
/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
%if 0%{?rhel} > 8
%{__cp} /opt/RHEL8/lib64/libreadline.so.7 %{buildroot}%{prog_folder}/lib/RHEL8-x86_64
%endif
@@ -210,7 +222,7 @@ shopt -s extglob
# and install will delete our buildroot!
%clean
%{__make} INSTALL_LOCATION=%{buildroot}%{prog_folder} realclean
%make_build INSTALL_LOCATION=%{buildroot}%{prog_folder} realclean
%{__rm} -f modules/RELEASE.*.local
%{__rm} -rf %{buildroot}
%{__cp} %{_rpmdir}/*/%{name}*%{version}-%{release}.*.rpm %{_sourcedir}
@@ -290,7 +302,7 @@ fi
###########################################
%if %{?rhel} > 8
%if 0%{?rhel} > 8
%files compat
%dir %{prog_folder}/bin/RHEL8*
@@ -300,7 +312,7 @@ fi
%dir %{prog_folder}/lib/RHEL8*
%{prog_folder}/lib/RHEL8*/*.so*
%if %{?rhel} > 9
%if 0%{?rhel} > 9
%dir %{prog_folder}/bin/RHEL9*
%{prog_folder}/bin/RHEL9*/[Scips]*[^.]??
%{prog_folder}/bin/RHEL9*/p2p

View File

@@ -17,7 +17,7 @@ database_DEPEND_DIRS = ca
# Submodules for bundle build
SUBMODULES += pvData
pvData_DEPEND_DIRS = libcom
pvData_DEPEND_DIRS = libcom database
SUBMODULES += pvAccess
pvAccess_DEPEND_DIRS = pvData database

View File

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

View File

@@ -103,7 +103,7 @@ in the file LICENSE that is included with this distribution.</span></p>
<ul>
<li><a href="#Broadcast">Client and Server Broadcast Addresses Don't
Match</a></li>
<li><a href="#Client">Client Isnt Configured to Use the Server's
<li><a href="#Client">Client Isn't Configured to Use the Server's
Port</a></li>
<li><a href="#Unicast">Unicast Addresses in the EPICS_CA_ADDR_LIST Does
not Reliably Contact Servers Sharing the Same UDP Port on the Same
@@ -759,7 +759,7 @@ to respect the EPICS_CA_MAX_ARRAY_BYTES setting as described below instead.</p>
<p>Starting with version R3.14 the environment variable
EPICS_CA_MAX_ARRAY_BYTES determines the size of the largest array that may pass
through CA. Prior to this version only arrays smaller than 16k bytes could be
transfered. The CA libraries maintains a free list of 16384 byte network
transferred. The CA libraries maintains a free list of 16384 byte network
buffers that are used for ordinary communication. If EPICS_CA_MAX_ARRAY_BYTES
is larger than 16384 then a second free list of larger data buffers is
established and used only after a client send its first large array request.</p>
@@ -1085,7 +1085,7 @@ to standard out.</p>
<p>If a value is specified it is written to the PV. Next, the current value of
the PV is converted to each of the many external data type that can be
specified at the CA client library interface, and each of these is formated and
specified at the CA client library interface, and each of these is formatted and
then output to the console.</p>
<hr>
@@ -1631,7 +1631,7 @@ stdout.</p>
<p>The -s option allows to specify an interest level for calling Channel
Access' internal report function <code>ca_client_status()</code>, that prints lots of
internal informations on stdout, including environment settings, used CA ports
internal information on stdout, including environment settings, used CA ports
etc.</p>
<table border="1">
@@ -1969,7 +1969,7 @@ that the request is sent call <code>ca_flush_io()</code> followed by
<h3><a name="Problems">ENOBUFS Messages</a></h3>
<p>Many Berkley UNIX derived Internet Protocol (IP) kernels use a memory
<p>Many Berkeley UNIX derived Internet Protocol (IP) kernels use a memory
management scheme with a fixed sized low level memory allocation quantum called
an "mbuf". Messages about "ENOBUFS" are an indication that your IP kernel is
running low on mbuf buffers. An IP kernel mbuf starvation situation may lead to

View File

@@ -65,7 +65,7 @@ const char * ca_message_text []
"Sorry, that feature is planned but not supported at this time",
"The supplied string is unusually large",
"The request was ignored because the specified channel is disconnected",
"The data type specifed is invalid",
"The data type specified is invalid",
"Remote Channel not found",
"Unable to locate all user specified channels",
@@ -94,7 +94,7 @@ const char * ca_message_text []
"The supplied string is empty",
"Unable to spawn the CA repeater thread- auto reconnect will fail",
"No channel id match for search reply- search reply ignored",
"Reseting dead connection- will try to reconnect",
"Resetting dead connection- will try to reconnect",
"Server (IOC) has fallen behind or is not responding- still waiting",
"No internet interface with broadcast available",
@@ -196,7 +196,7 @@ int epicsStdCall ca_context_create (
return ECA_ALLOCMEM;
}
epicsThreadPrivateSet ( caClientContextId, (void *) pcac );
epicsThreadPrivateSet ( caClientContextId, pcac );
}
catch ( ... ) {
return ECA_ALLOCMEM;
@@ -381,11 +381,11 @@ int epicsStdCall ca_clear_channel ( chid pChan )
}
else {
//
// we will definately stall out here if all of the
// we will definitely stall out here if all of the
// following are true
//
// o user creates non-preemptive mode client library context
// o user doesnt periodically call a ca function
// o user doesn't periodically call a ca function
// o user calls this function from an auxiliary thread
//
CallbackGuard cbGuard ( cac.cbMutex );
@@ -717,6 +717,18 @@ int epicsStdCall ca_context_status ( ca_client_context * pcac, unsigned level )
return ECA_NORMAL;
}
extern "C"
LIBCA_API
void dbCaSyncLocal(void);
void dbCaSyncLocal(void)
{
if(struct ca_client_context * ctxt = ca_current_context()) {
// bounce for access to private data member
ctxt->sync();
}
}
/*
* ca_current_context ()
*

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