Compare commits

..

248 Commits

Author SHA1 Message Date
Janet B. Anderson
8633e72026 R3.14.4 2003-09-23 21:35:11 +00:00
Janet B. Anderson
1106ecd818 Added Registration code changed info. 2003-09-23 21:19:28 +00:00
Janet B. Anderson
6e6cd59674 More Updated for R3.14.4. 2003-09-23 21:09:31 +00:00
Janet B. Anderson
4cdc2575c5 Updated for R3.14.4. 2003-09-23 20:09:48 +00:00
Jeff Hill
9f52f7282d fixed errMessage fmt string 2003-09-23 16:52:59 +00:00
Janet B. Anderson
ed882fe82d Updated for R3.14.4. 2003-09-23 16:15:08 +00:00
W. Eric Norum
d0e58f9aa7 Add format string checking. 2003-09-21 21:44:48 +00:00
Janet B. Anderson
2c13aa03e2 Added JAR_PACKAGES and changes JAR command. 2003-09-21 21:42:09 +00:00
Janet B. Anderson
3717607892 Added release file names and cvs export command. 2003-09-19 18:36:54 +00:00
Janet B. Anderson
cb72210d45 Added RULES_PYTHON. 2003-09-19 18:05:57 +00:00
Janet B. Anderson
92d01c0e5f Initial version. 2003-09-19 16:12:33 +00:00
Janet B. Anderson
42506d8c1c Updated JAVA and PYTHON definitions. 2003-09-19 16:08:05 +00:00
W. Eric Norum
dfccee739f Clean up 'truncated' message.
Ensure that truncated errrlogMessage output is reported as such.
2003-09-17 19:35:45 +00:00
Jeff Hill
35d07ffbda changed the name of cxxCompilerDependencies.h to compilerDependencies.h 2003-09-17 19:25:31 +00:00
W. Eric Norum
d158974870 Use epicsVsnprintf to eliminate possibility of buffer overflows. 2003-09-17 18:51:44 +00:00
W. Eric Norum
2e922d7195 Move format-string checking conditional to cxxCompilerDependencies. 2003-09-17 14:43:26 +00:00
W. Eric Norum
e405ebbbee Merged into cxxCompilerDependencies.h 2003-09-17 14:33:08 +00:00
Janet B. Anderson
da15507f8d Added BASE_3_14 definition. 2003-09-16 20:56:22 +00:00
W. Eric Norum
8411adb987 Fix error message. 2003-09-16 18:58:59 +00:00
W. Eric Norum
c30c884687 Make arguments match format string. 2003-09-16 18:54:43 +00:00
Marty Kraimer
21fe691d96 errMessage must not get NULL argument 2003-09-16 18:43:52 +00:00
W. Eric Norum
22e21f268b Add gcc format-string checking. 2003-09-16 18:06:49 +00:00
Andrew Johnson
d45e1b13e4 Removed WIN32 getopt.* (GPL) 2003-09-16 17:56:21 +00:00
Andrew Johnson
8873934c9b These files contain GPL code, and not compatible with the EPICS Base license. I
don't care that this removal breaks the WIN32 port of EPICS, we can't legally
distribute this code as part of EPICS.  Someone will have to rewrite the getopt
functionality, or grab a version that is not GPL licensed (try BSD).
2003-09-16 17:45:19 +00:00
Marty Kraimer
c0c11c359f epicsSnprintf did not work. It is fixed. 2003-09-16 12:53:54 +00:00
Andrew Johnson
367e27d5f5 Support for configure/RELEASE.<hostarch>.<targetarch> files 2003-09-15 21:01:36 +00:00
Andrew Johnson
35bd1a76d1 Removed string calculation engine, only needed by Tim Mooney's recordtypes. 2003-09-12 19:13:54 +00:00
Jeff Hill
a887ca44d1 added two bug fix descriptions 2003-09-10 20:59:22 +00:00
Jeff Hill
dd273da508 added two bug fix descriptions 2003-09-10 20:45:56 +00:00
Jeff Hill
245cf129ff fixed disconnect callback when channel known to be disconnected 2003-09-10 17:09:25 +00:00
Jeff Hill
36b1f9e4ff fixed bug where entry was deleted from within entry's callback 2003-09-08 17:11:15 +00:00
Andrew Johnson
24a0197f88 Fix file stmt without quotes. 2003-09-05 20:54:28 +00:00
W. Eric Norum
e30e1159a2 Added note about vxWorks ledLib. 2003-09-05 18:13:25 +00:00
Andrew Johnson
42ea151881 Don't use '0' for string arguments which should be empty... 2003-09-05 16:55:05 +00:00
W. Eric Norum
ce201c6361 Use ledLib command-line editing on vxWorks. 2003-09-05 14:38:18 +00:00
Andrew Johnson
0784bbec71 Oops, missing upgrade documentation for the xxx_recordDeviceDriver routine. 2003-09-04 23:09:50 +00:00
Janet B. Anderson
84f9a59759 Updated release to R3.14.3. 2003-09-04 20:25:35 +00:00
Janet B. Anderson
1f3ea0308f Updated host type definition. 2003-09-04 20:20:13 +00:00
Andrew Johnson
cd5a4be610 Linux WRS cross-compiler architecture fix 2003-09-04 19:57:34 +00:00
Andrew Johnson
6560a3b0e8 3.14.2 => 3.14.3
Added Release Approval line to checklist.
2003-09-04 19:52:08 +00:00
Janet B. Anderson
b74ad51972 Updated text to R3.14.3 2003-09-04 19:37:08 +00:00
Janet B. Anderson
28ee04091d R3.14.3 2003-09-04 18:29:57 +00:00
Jeff Hill
0dd7efb4a2 fixed potential race during init 2003-09-03 22:52:48 +00:00
Jeff Hill
e7d51c5e30 documented level required to get a channel dump 2003-09-03 22:44:20 +00:00
Jeff Hill
0758661a87 mentioned that CA port numbers have been registered with iana 2003-09-03 22:31:48 +00:00
Janet B. Anderson
5622816a92 Initial version. 2003-09-03 19:21:42 +00:00
Janet B. Anderson
9bf6bef12e Moved JAVA_DIR to extensions/configure/os 2003-09-03 19:15:09 +00:00
Janet B. Anderson
9f95921260 Moved JAVA_DIR definition to extensions/configure/os. 2003-09-03 19:12:09 +00:00
Janet B. Anderson
bc0a241192 Moved JAVA_DIR definition to extensions/configure/os. 2003-09-03 19:05:18 +00:00
Janet B. Anderson
89717c16f4 Added ifdef JAVA. 2003-09-03 16:28:24 +00:00
Ralph Lange
20565b03eb Check and update (email) 2003-09-03 14:19:11 +00:00
Ralph Lange
0e2eddbcdb Bugfix for hpux-parisc (ARFLAGS defaults were creating problems) 2003-09-03 14:08:51 +00:00
Ralph Lange
b68112ba6a Enabled mixed building mode (see bug report [EPICS Base R3.14.x 0000040]) 2003-09-02 20:51:38 +00:00
Janet B. Anderson
dbbb6af9fd Get loadable prefix and suffix from UnixCommon. 2003-09-02 20:51:26 +00:00
Janet B. Anderson
49d2ce69fb Set loadable lib prefix to lib. 2003-09-02 20:45:53 +00:00
W. Eric Norum
26a6df0652 Clean up handling of redefinitions. 2003-09-02 20:07:18 +00:00
Janet B. Anderson
4675c84bff Set loadable library prefix to lib. 2003-09-02 19:41:29 +00:00
Jeff Hill
d5de77bc5a fixed false error detected by old gnu compiler 2003-09-02 16:22:29 +00:00
Andrew Johnson
cce78f0ec5 Added putenv lines to cdCommands output (Mark Rivers). 2003-09-02 15:56:09 +00:00
Andrew Johnson
9c99a40de2 Added envPaths to clean rule (Mark Rivers) 2003-09-02 15:38:33 +00:00
Ralph Lange
d6ab506379 Fixed HP aCC warnings 2003-09-01 20:05:12 +00:00
W. Eric Norum
e3c514ea9e Add *all* iocsh variables, not just the first.
A tip of the hat to Mark Rivers for fixing this.
2003-09-01 14:05:47 +00:00
Janet B. Anderson
fd33cf444e Added win32 comments. 2003-08-29 19:04:38 +00:00
Janet B. Anderson
abb03fdfdf Added changes for static build and loadable libraries. 2003-08-29 19:03:09 +00:00
Janet B. Anderson
6edd359e47 Removed references to *Obj.lib files. 2003-08-29 18:57:07 +00:00
Janet B. Anderson
bded68e14e Removed references to LIB_EXT. 2003-08-29 18:56:18 +00:00
Janet B. Anderson
eacaf67101 Syntax change for CONFIG definition. Added RELEASE.host.target include. 2003-08-28 18:40:39 +00:00
Janet B. Anderson
e35c8d0774 Used INSTALL_LIBRARY script to install loadable shared libraries. 2003-08-27 15:29:29 +00:00
Janet B. Anderson
b9b48dfa77 Fixed LOADABLE_LIBRARY rules. 2003-08-27 15:26:48 +00:00
Jeff Hill
fef72a5948 fixed borland build issues 2003-08-26 17:57:44 +00:00
Jeff Hill
48c4992799 made compatible with borlan bcc 2003-08-26 00:37:08 +00:00
Jeff Hill
ac13592d0a cosmetic 2003-08-25 21:07:10 +00:00
Marty Kraimer
c4184be87c get rid of lazt init for SMP safe 2003-08-25 19:42:59 +00:00
Jeff Hill
4472f60249 explicit templ instantiation for acient tornado compiler 2003-08-25 18:48:29 +00:00
Robert Soliday
088c35da63 Updated to work with Kylix. 2003-08-21 21:47:36 +00:00
Robert Soliday
bb0affc5ee Updated to workaround issue with Kylix. 2003-08-21 21:47:03 +00:00
Jeff Hill
44a9b25392 restructured osi socket interface to support address reuse variations
on darwin and win32
2003-08-21 18:33:58 +00:00
Jeff Hill
582a1aa0b5 restructured osi socket interface to support address reuse variations
on darwin and win32
2003-08-21 18:27:00 +00:00
Jeff Hill
3053584b56 doc for rh 7.3 process rundown bug 2003-08-21 16:04:32 +00:00
Jeff Hill
6c4c063692 workaround for bug in RH 7.3 Linux 2003-08-21 00:18:31 +00:00
Jeff Hill
038ef5db8d removed virtual destructor when there are no virtual functions 2003-08-20 16:14:39 +00:00
Jeff Hill
bf51f20126 upgraded ipAddrToAscii API and improved shutdown procedures 2003-08-20 16:12:46 +00:00
Jeff Hill
d2ac73f3ae upgraded ipAddrToAscii API and improved shutdown procedures 2003-08-20 16:07:20 +00:00
Jeff Hill
ef9ed01e0c upgraded ipAddrToAscii API and improved shutdown procedures 2003-08-20 15:59:30 +00:00
Jeff Hill
3035e9393c upgraded API and improved shutdown procedures 2003-08-20 15:57:38 +00:00
Jeff Hill
f7e9c7e1a1 upgraded API 2003-08-20 15:57:08 +00:00
Janet B. Anderson
2d50b04ca0 Added COMMON_DIR to JAVA_INCLUDES. 2003-08-15 14:43:59 +00:00
Janet B. Anderson
ce8fb13fe4 Create headers in O.Common. Make headers precious. 2003-08-15 14:41:38 +00:00
Janet B. Anderson
8c6d2ba91a Fixed create INSTALL_JAVA dir. Create header files in O.Common dir. 2003-08-15 14:05:17 +00:00
W. Eric Norum
7231e60a60 Add default JAVA_DIR. Can be overridden by CONFIG_SITE. 2003-08-14 21:17:10 +00:00
Janet B. Anderson
56fc694513 Updates and bug fixes. 2003-08-14 20:10:02 +00:00
Andrew Johnson
519f3d29cf Set PACT if error occurred during record init 2003-08-12 22:18:46 +00:00
Andrew Johnson
2f5b606d4a TPRO output 2003-08-12 22:11:14 +00:00
Andrew Johnson
89addc09d7 Enhanced the TPRO trace output to include the executing thread name 2003-08-12 21:53:14 +00:00
Andrew Johnson
3b796aaf2d Added makeBaseApp reminders. 2003-08-12 15:53:22 +00:00
W. Eric Norum
7fc94de997 Quick hack to avoid compiling this for machines other than the one Till's
now using.  Definitely needs to be fixed properly 'some day'.
2003-08-12 15:39:48 +00:00
Andrew Johnson
e967392227 Removed device entries from base.dbd into their own .dbd files.
Devices for TestAsyn support are not included by base.dbd, but have
their own devTestAsyn.dbd file if required.
2003-08-11 22:22:39 +00:00
Janet B. Anderson
e31993bb84 Changed template in macro name to all caps TEMPLATE. 2003-08-11 15:39:58 +00:00
Jeff Hill
4fb36b3104 made some improvements for SMP systems which are a good conservative design
but may not have been necessary
2003-08-09 00:02:11 +00:00
Marty Kraimer
cc06a46407 make it synchronou is delay <=0 2003-08-08 20:05:34 +00:00
Jeff Hill
6f330ed44b added another instantiation 2003-08-07 16:02:03 +00:00
Jeff Hill
95f694cfe7 fixed redundant logFdAdd deadlock message 2003-08-06 21:59:56 +00:00
Jeff Hill
5b1b3e80d8 improved the ca_task_exit() trest 2003-08-06 21:24:57 +00:00
Marty Kraimer
fbc524d308 more bug changes 2003-08-06 18:18:40 +00:00
Marty Kraimer
00c9d22936 suppress extra console message from logMsg 2003-08-06 18:17:30 +00:00
Marty Kraimer
31faca4b3d fix bad commit 2003-08-06 18:16:47 +00:00
Jeff Hill
78b532ee75 fixed race condition in virtual circuit shutdown sequence 2003-08-06 18:11:34 +00:00
Jeff Hill
ecc3206e11 allow freeList template arguments to be specified 2003-08-06 17:43:18 +00:00
Jeff Hill
4359938ed6 added virtual circuit free list and fixed race condition in virtual circuit shutdown sequence 2003-08-06 17:42:55 +00:00
Jeff Hill
1fb594833b added virtual circuit free list 2003-08-06 17:41:40 +00:00
Jeff Hill
4202695246 added test to detect ca context run down problems 2003-08-06 17:01:53 +00:00
Jeff Hill
5184d1807a added test to detect ca context run down problems 2003-08-06 16:47:59 +00:00
Marty Kraimer
9d14ea1a24 more changes for 3.14.3 2003-08-05 19:02:25 +00:00
Marty Kraimer
300af9164a src/vxWorks/src to libCom/osi/os/vxWorks; devLib works on vxWorks and RTEMS 2003-08-05 18:48:31 +00:00
Marty Kraimer
5d13666e7b devLib now works on RTEMS 2003-08-05 18:47:58 +00:00
Marty Kraimer
da00278de6 moved stuff to src/libCom/osi/os/vxWorks 2003-08-05 18:38:19 +00:00
cvs2svn
087f0afafb This commit was manufactured by cvs2svn to create branch 'B3.14'. 2003-08-05 18:38:18 +00:00
Marty Kraimer
f973722d5a suppress warning mesage if no record/device/driver support 2003-08-05 18:03:31 +00:00
Marty Kraimer
cd10c21647 Previously if a dbGetLink failed on one of the input links, dbGetLink was not called for the remaining links. Now it is 2003-08-05 18:01:43 +00:00
Marty Kraimer
6ea736d0ed put notify did not act properly if a record had disp=TRUE 2003-08-05 16:03:02 +00:00
Marty Kraimer
ad9f577faf fix bad comments 2003-08-05 15:21:15 +00:00
Janet B. Anderson
a892dffd12 Only build OBJS for vxWorks. 2003-08-04 21:42:39 +00:00
Janet B. Anderson
8a65a17f68 Added definitions for static build. 2003-08-04 18:40:20 +00:00
Janet B. Anderson
0fc52db97b Always build dynamic library search paths into executable. 2003-08-04 18:35:50 +00:00
Janet B. Anderson
54868e8723 Added linker options for static builds. 2003-08-04 18:25:32 +00:00
Robert Soliday
73b8c02bae Updated so it can now build SDDS in extensions. 2003-08-04 15:46:23 +00:00
Robert Soliday
ce29455411 Minor changes added for Borland's C++ compiler on Linux 2003-08-01 19:13:39 +00:00
Robert Soliday
2b85746e23 Added config files for Borland's C++ compiler on Linux. 2003-08-01 18:46:01 +00:00
Jeff Hill
8d2b3ce0ea improved warning message 2003-07-31 19:38:14 +00:00
Jeff Hill
4f9530500b improved warning message 2003-07-31 18:58:54 +00:00
W. Eric Norum
af35fa7eb8 Get things to build on RTEMS. 2003-07-31 16:52:32 +00:00
W. Eric Norum
b99238b93c Removing -ansi causes *lots* of other problems, so back out previous change. 2003-07-31 16:34:16 +00:00
Jeff Hill
e00b773830 set close-on-exec flag 2003-07-30 23:19:16 +00:00
Jeff Hill
d7b3f30111 avoid bracketing includes with 'extern "C"' to avoid unanticipated side effects 2003-07-30 23:18:09 +00:00
Jeff Hill
8439f488f0 fixed spelling 2003-07-30 23:13:06 +00:00
W. Eric Norum
ec11da3a05 RTEMS header files have just too many functions whose prototypes are removed
when -ansi is specified.
2003-07-30 21:42:54 +00:00
Andrew Johnson
09d50b3213 Export RELEASE entries in environment for tools (MSI in particular) 2003-07-30 21:35:30 +00:00
W. Eric Norum
12842d80dc Ensure that va_list typedef is in scope. 2003-07-30 21:19:37 +00:00
Jeff Hill
e69481d196 added wrapper around tmpfile so that we can have a windows specific
implementation
2003-07-30 19:11:31 +00:00
Jeff Hill
c1f1511fac fixed func name 2003-07-30 16:12:23 +00:00
Jeff Hill
e80f7b4ce1 added wrapper around tmpfile so that we can have a windows specific
implementation
2003-07-30 16:02:58 +00:00
Jeff Hill
fecb32a960 use epicsTempFile in libCom to get around weaknesses in the win32 tmpfile 2003-07-30 16:01:28 +00:00
Jeff Hill
1184e2ab21 now dependent on epicsTempFile in libCom 2003-07-30 16:00:43 +00:00
Jeff Hill
0f74d195e1 moved extern "C" down so that it does not have unanticipated side effects on
the included header files
2003-07-30 15:59:47 +00:00
Jeff Hill
44d234535e reorganized so that we maintain only one interface specification 2003-07-30 15:58:24 +00:00
Jeff Hill
d719a6859c reorganized so that we maintain only one interface specification - this
makes the posix implementation slightly slower, but these arealready
very slow routines so there shouldnt be any noticable impact.
2003-07-30 15:57:20 +00:00
Jeff Hill
19dba4225a toolsComm now calls libCom so there is a new build order 2003-07-30 15:53:25 +00:00
Andrew Johnson
a50b83b918 Documented env macros stuff better. 2003-07-29 23:31:16 +00:00
Andrew Johnson
b27dc431c8 Allow quoted filenames, needed if they contain any ${ENVMACRO}s 2003-07-29 22:44:27 +00:00
Andrew Johnson
a31f5e166c Expand environment variable macros in filenames 2003-07-29 20:25:37 +00:00
Andrew Johnson
e5f47d5807 Made various input arguments and internal variables const char*. 2003-07-29 19:50:31 +00:00
W. Eric Norum
098d421a56 Update README file to reflect some recent changes. 2003-07-29 18:02:42 +00:00
Jeff Hill
8faa55056d fixed visual c++ 6.0 build 2003-07-28 18:38:59 +00:00
Jeff Hill
e186fde80c removed logFdAdd from logClient 2003-07-25 22:11:38 +00:00
Jeff Hill
c811a766a2 removed logFdAdd 2003-07-25 21:27:35 +00:00
W. Eric Norum
a48245d385 RTEMS now provides the getprotobyXXX routines. 2003-07-25 21:12:35 +00:00
W. Eric Norum
6c9d48b8ff Ensure that tasks get at least RTEMS_MINIMUM_STACK_SIZE. 2003-07-25 21:05:51 +00:00
Jeff Hill
0034119588 installed logMsgToErrlog.cpp 2003-07-25 20:53:08 +00:00
Jeff Hill
3412fc65be installed 2003-07-25 20:52:06 +00:00
cvs2svn
d1d2a1bac8 This commit was manufactured by cvs2svn to create branch 'B3.14'. 2003-07-25 19:43:41 +00:00
W. Eric Norum
0c8d2336b7 Echo lines read from scripts after macro expansion has completed. 2003-07-25 15:31:43 +00:00
Andrew Johnson
360c3f4a36 Fixed small bug which also allows the script to run properly on RH9.0
(I'm not sure why it wouldn't run before though)
2003-07-25 15:17:57 +00:00
W. Eric Norum
7e1db8bc95 Clean up example code. 2003-07-25 15:05:17 +00:00
Janet B. Anderson
e536c949e1 Fixed typo. 2003-07-25 14:53:08 +00:00
Janet B. Anderson
13fcc63153 Added fix for full path name when in cygwin shell. 2003-07-24 20:11:37 +00:00
W. Eric Norum
af073e289d Use explicit callback so that this code matches the Application
Developer's Guide description.
2003-07-24 19:37:51 +00:00
Jeff Hill
14d410cddb fixed redundant event queue wakeup 2003-07-24 00:07:16 +00:00
Andrew Johnson
b9fb6caffb Added envPaths functionality, and using these variables in st.cmd files 2003-07-23 22:08:50 +00:00
Andrew Johnson
9b2d79a5c8 Added double support to variable keywords. 2003-07-23 22:00:19 +00:00
Andrew Johnson
b0d5f21a87 Modify DBD variable keyword to allow both int and double variables. 2003-07-23 21:53:20 +00:00
Andrew Johnson
952387a9dc Install files listed in INC_vxWorks into include/os/vxWorks etc. 2003-07-23 20:19:36 +00:00
Andrew Johnson
c4bf96b4f8 registerRecordDeviceDriver.h no longer needed/appropriate. 2003-07-23 18:54:49 +00:00
Andrew Johnson
956ddf6695 Rename the registerRecordDeviceDriver routine. 2003-07-23 18:36:26 +00:00
Andrew Johnson
803f0bccbb Name the registerRecordDeviceDriver subroutine after the dbd file it was
created from; allows applications to be split up and loaded separately.
2003-07-22 19:48:35 +00:00
Andrew Johnson
f24895c325 Name the registerRecordDeviceDriver subroutine after the dbd file it was
created from; allows applications to be split up and loaded separately.
2003-07-22 15:36:29 +00:00
Andrew Johnson
e38db3e6d3 Documented the dbExpand -o option. 2003-07-22 14:59:38 +00:00
Janet B. Anderson
d96c061366 Build object files for vxWorks only. 2003-07-22 14:54:54 +00:00
Andrew Johnson
7bff35a687 Changed dbExpand rules to use new -o option to specifiy the output filename 2003-07-21 23:08:36 +00:00
Andrew Johnson
9991b7300f Added a -o outfile option (Bug #28)
Tidied up internals.
2003-07-21 23:01:43 +00:00
Andrew Johnson
b17bb61e68 First published version. 2003-07-21 15:34:51 +00:00
Andrew Johnson
55b72128e4 Added dbd variable keyword.
Reorganized the later parts of the file, which were not well-structured HTML
and which were causing problems with different versions of Amaya.
2003-07-18 16:11:24 +00:00
Jeff Hill
7455d3df07 code to remove channel from the event queue when it is deleted 2003-07-18 15:48:28 +00:00
Jeff Hill
a2d4436b83 doc 2003-07-18 15:48:08 +00:00
Andrew Johnson
e13dafb8af dbGetInfoPointer should return void*, not const char*
Short-circuit return in dbGetInfo if no item
2003-07-18 14:58:40 +00:00
W. Eric Norum
6661789143 Efficiency improvements. Cut down on copy operations. 2003-07-18 12:33:44 +00:00
Jeff Hill
a02b3b243e use close on exec option for sock 2003-07-16 23:28:02 +00:00
Jeff Hill
4428ca3661 fixed base to use close on exec options whenever creating a socket
on posix compliant systems
2003-07-16 23:22:22 +00:00
Jeff Hill
9dc92c9b03 turn on close on exec option 2003-07-16 22:09:58 +00:00
Jeff Hill
bb92682ed1 fixed base to use close on exec options whenever creating a socket
on posix compliant systems
2003-07-16 22:05:54 +00:00
Andrew Johnson
faf5bc3b0e Added variable keyword example.
What is this App directory supposed to be for?
2003-07-16 21:28:43 +00:00
Andrew Johnson
10414b4429 Added a debug variable to the example mySub routines,
making this settable from the ioc shell.
2003-07-16 21:20:45 +00:00
Andrew Johnson
44031b3e94 Renamed the support library to xxxSupport, to match previous tidy-up. 2003-07-16 20:10:50 +00:00
Andrew Johnson
7cf94abe78 Tidying up various things:
Made the support library contain only the xxxRecord and device support,
then renamed _APPNAME_Support.dbd to xxxSupport.dbd to reflect this.
Actually I should rename the library to libxxxSupport, but I didn't yet.

Now we link the dbSubExample.o code directly to the application,
renamed the registrar routine inside this to mySubRegistrar,
and also moved the registrar() dbd entry into _APPNAME_Include.dbd.
2003-07-16 20:03:52 +00:00
Andrew Johnson
025a73ca42 Added dbDumpVariable command 2003-07-16 19:32:20 +00:00
Andrew Johnson
da56d5e2b8 Added support for new variable dbd keyword, integers only so far. 2003-07-16 18:35:26 +00:00
Andrew Johnson
067c0a3db1 Added support for the new variable dbd keyword, converts to iocshVarDef 2003-07-16 18:24:17 +00:00
Jeff Hill
84666e054e fixed include 2003-07-16 18:03:02 +00:00
Jeff Hill
b697fc2acc fixed base to use close on exec options whenever creating a socket
on posix compliant systems
2003-07-16 17:45:09 +00:00
W. Eric Norum
a907bc4df3 Expand line *before* breaking into arguments.
a) Much more efficient
    b) Allows expansion to multiple arguments.
2003-07-16 12:35:33 +00:00
Andrew Johnson
835edde87d Added iocshRegisterVariable 2003-07-15 22:32:09 +00:00
Andrew Johnson
ac4890e5c9 Fixed locking problem in new iocshRegisterVariable routine. 2003-07-15 22:13:23 +00:00
W. Eric Norum
a4c82bfd9f Touch up previous fix. 2003-07-15 21:17:29 +00:00
W. Eric Norum
417dfcc191 Declare proper linkage for varCallFunc(). 2003-07-15 20:47:22 +00:00
W. Eric Norum
86158b907d Add support for environment variable macro expansion. 2003-07-15 20:38:09 +00:00
Andrew Johnson
d777dc654d Fixing Eric's rogue checkins from the main trunk. 2003-07-15 19:50:25 +00:00
W. Eric Norum
e70dba5bf9 Macro expansion using environment variables as macro definitions. 2003-07-15 19:04:29 +00:00
W. Eric Norum
3f61b69fa3 var, maclib, etc. 2003-07-15 19:00:09 +00:00
W. Eric Norum
1e2a950e0b Add support for simple variable set/show. 2003-07-15 18:55:14 +00:00
W. Eric Norum
a2b2ef414d Add registryChange function. 2003-07-15 18:52:30 +00:00
Jeff Hill
fb3dfef5e8 fixed build errors 2003-07-15 16:03:36 +00:00
cvs2svn
1fef904a9e This commit was manufactured by cvs2svn to create branch 'B3.14'. 2003-07-15 15:56:33 +00:00
W. Eric Norum
6ee9656f43 Add iocshArgPersistentString type. 2003-07-08 20:30:20 +00:00
W. Eric Norum
ac128fc048 Add iocshArgPersistentString type. 2003-07-08 20:14:54 +00:00
W. Eric Norum
7f56802052 Add epicsStrDup(). 2003-07-08 19:35:28 +00:00
Jeff Hill
ad6be99ae4 added notes on fixes to the ASCII error logging system 2003-07-08 19:14:16 +00:00
Jeff Hill
1ac82bb6bd fixed problem occurring when a message w/o a CR arrives and a CR from an old
message is found.
2003-07-08 18:36:23 +00:00
Jeff Hill
d97ca30986 fixed problems occurring when message size exceeds the buffer size 2003-07-08 18:32:04 +00:00
Jeff Hill
cd8b21fafc removed use of stdio due to win32 portability problems 2003-07-08 00:08:06 +00:00
Ralph Lange
ccd94cd911 Added PATH_FILTER to calls of tools (allows building in DOS-Box) 2003-07-07 08:24:53 +00:00
Janet B. Anderson
c6464b8797 Added loadable library definitions and rules 2003-07-03 16:17:38 +00:00
Jeff Hill
03e7db8ff0 improved port default 2003-07-03 15:17:11 +00:00
Jeff Hill
c8a106a50d fixed syntax error 2003-07-03 15:11:03 +00:00
Jeff Hill
773c12becc improved disconnect search interval 2003-07-03 15:07:51 +00:00
Jeff Hill
37476c6482 improved port default 2003-07-03 15:07:26 +00:00
Andrew Johnson
5f61e9c2fc Fractional seconds need leading 0s and all 9 digits
Changed timestamp output format to one that can be easily parsed
Added flush after each anomaly to stop pipes from buffering output
2003-06-27 15:06:46 +00:00
W. Eric Norum
6463589276 Simplify SHRLIB_SUFFIX. 2003-06-23 19:25:33 +00:00
Janet B. Anderson
ee4b51b2f9 Added OP_SYS_LDFLAGS. 2003-06-19 20:47:07 +00:00
Janet B. Anderson
1a9f922454 Added comments. 2003-06-19 17:35:11 +00:00
Janet B. Anderson
29aad6c0c0 Initial version 2003-06-19 17:33:51 +00:00
cvs2svn
686990ccfa This commit was manufactured by cvs2svn to create branch 'B3.14'. 2003-06-19 17:33:30 +00:00
Janet B. Anderson
004b21a7a5 Updated comments. 2003-06-19 17:29:38 +00:00
Janet B. Anderson
884514bb7a Included the gnu file. 2003-06-19 17:29:16 +00:00
Janet B. Anderson
7b5ad4c8f2 Initial version. 2003-06-19 17:25:51 +00:00
cvs2svn
d25ea19815 This commit was manufactured by cvs2svn to create branch 'B3.14'. 2003-06-19 17:24:51 +00:00
Andrew Johnson
c606ecf428 Fixed problems when instantiating several iterator functions.
Shouldn't test code at least ensure that all compile properly?
2003-06-19 15:26:47 +00:00
Jeff Hill
8b0e1c88c4 fixed usage printf 2003-06-05 15:01:19 +00:00
Jeff Hill
83753fb9e6 converted pure vf to ordinary vf to avoid undefined behavior when
eventSignal is called in the destructor
2003-06-04 00:17:23 +00:00
Janet B. Anderson
8ecceef706 Get template file from INSTALL_TEMPLATES dir. 2003-06-03 20:06:48 +00:00
Janet B. Anderson
d5020308aa Added SHRLIB_ALLOW_UNDEFINEDS to allow undefined symbols. 2003-06-03 19:54:33 +00:00
Jeff Hill
fee9dce2a0 removed junk 2003-05-30 23:16:10 +00:00
Jeff Hill
5a9320525c moved udp deamon priority to below that of the beacon generator priority 2003-05-30 23:04:02 +00:00
Andrew Johnson
8a6cbfde20 Driver support names are const char* 2003-05-29 21:20:02 +00:00
Andrew Johnson
a063a2f0a9 s/Destroy/Delete/ in name of vxWorks routine. 2003-05-29 21:03:39 +00:00
W. Eric Norum
2612b722fa RTEMS can't use code compiled with -fPIC. 2003-05-29 21:03:38 +00:00
W. Eric Norum
12e97d5e91 Fix typo. 2003-05-29 18:27:37 +00:00
W. Eric Norum
78313c62f9 API change to epicsMessageQueue. 2003-05-29 13:18:26 +00:00
W. Eric Norum
1e84246cb7 Add 'size' argument to all epicsMessageQueue receive routines. 2003-05-29 03:10:16 +00:00
Jeff Hill
6d5061781c fixed race condition at thread exit 2003-05-23 00:11:59 +00:00
327 changed files with 6143 additions and 6239 deletions

View File

@@ -21,7 +21,8 @@ include $(EPICS_BASE)/config/CONFIG.Host.UnixCommon
SHRLIB_SUFFIX = .sl
AR = ar -rc
AR = ar
ARFLAGS = -rc
# Configure OS vendor C compiler
ACC = cc

View File

@@ -45,7 +45,7 @@ ACC_SFLAGS_NO=
ACC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic
ACC_SLIBS_NO=
ACC_SHRLIB_CFLAGS_YES =
ACC_SHRLIB_LDFLAGS_YES = -G -h $@ -z ignore -z combreloc -z lazyload
ACC_SHRLIB_LDFLAGS_YES = -G -h $@
# Configure OS vendor C++ compiler
CCC = $(SPARCWORKS)/bin/CC
@@ -63,7 +63,7 @@ CCC_SLIBS_YES= -lw -lintl -Bdynamic -ldl -Bstatic
CCC_SLIBS_NO=
CCC_DEPENDS_FLAG = -xM1
CCC_SHRLIB_CFLAGS_YES =
CCC_SHRLIB_LDFLAGS_YES = -G -h $@ -z ignore -z combreloc -z lazyload
CCC_SHRLIB_LDFLAGS_YES = -G -h $@
SOLARIS_VERSION = $(subst 5.,,$(shell uname -r))
ARCH_DEP_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
@@ -83,4 +83,6 @@ SYS_DLL_LIBS_solaris += posix4 pthread $(SYS_DLL_LIBS_solaris_$(SOLARIS_VERSION)
RUNTIME_LDFLAGS =$(addprefix -R,$(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)\
$(EPICS_EXTENSIONS)/lib/$(EPICS_HOST_ARCH))
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload

View File

@@ -7,24 +7,8 @@
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
TOP=../../..
include $(TOP)/configure/CONFIG
# $Id$
INC += camacLib.h
INC += fast_lock.h
INC += drvTS.h
INC += devLib.h
INC += epicsDynLink.h
INC += module_types.h
INC += task_params.h
# solaris-sparc is the new name for solaris
-include $(EPICS_BASE)/config/CONFIG.Host.solaris
SRCS += drvTS.c
SRCS += devLib.c
SRCS += devLibVxWorks.c
SRCS += veclist.c
SRCS += epicsDynLink.c
OBJLIB_vxWorks += vxCom
OBJLIB_SRCS = $(SRCS)
include $(TOP)/configure/RULES

View File

@@ -0,0 +1,14 @@
#*************************************************************************
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# $Id$
# solaris-sparc is the new name for solaris
-include $(EPICS_BASE)/config/CONFIG.Host.solaris

View File

@@ -0,0 +1,13 @@
#*************************************************************************
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# $Id$
# vxWorks-ppc603 is the new R3.14 name for ppc603
include $(EPICS_BASE)/config/CONFIG.Vx.ppc603_long

View File

@@ -0,0 +1,13 @@
#*************************************************************************
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# $Id$
# vxWorks-ppc604 is the new R3.14 name for ppc604
include $(EPICS_BASE)/config/CONFIG.Vx.ppc604_long

View File

@@ -18,7 +18,7 @@
EPICS_VERSION=3
EPICS_REVISION=14
EPICS_MODIFICATION=2
EPICS_MODIFICATION=4
EPICS_UPDATE_NAME=
EPICS_UPDATE_LEVEL=0

View File

@@ -15,6 +15,8 @@
#Syntax:
# ARCH_<host_arch> = <epics_host_arch>
ARCH_solarisGnu = solaris-sparc-gnu
#ARCH_solaris = solaris-sparc-static
#ARCH_solaris = solaris-sparc-debug
ARCH_solaris = solaris-sparc
ARCH_sun4 = sun4-sparc
ARCH_Linux = linux-x86

View File

@@ -0,0 +1,13 @@
#*************************************************************************
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# $Id$
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris

View File

@@ -9,5 +9,5 @@
#*************************************************************************
# $Id$
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solarisGnu

View File

@@ -0,0 +1,13 @@
#*************************************************************************
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
# EPICS BASE Versions 3.13.7
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# $Id$
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris

View File

@@ -1,4 +1,4 @@
# $Id$
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solaris
-include $(EPICS_BASE)/config/CONFIG_HOST_ARCH.solarisGnu

View File

@@ -1,4 +1,4 @@
# CONFIG_HOST_ARCH.solaris
# CONFIG_HOST_ARCH.solarisGnu
#
# Override values in CONFIG.Vx

View File

@@ -24,6 +24,7 @@
# solarisGnu (GNU compiler)
# solaris-x86
# sun4
#
# HOST_ARCH now an environment variable
# HOST_ARCH=$(shell /usr/local/epics/startup/HostArch)
@@ -31,29 +32,18 @@ ifndef HOST_ARCH
HOST_ARCH=unsupported
endif
# The architectures to build EPICS for
# The R3.14 architectures to build EPICS for
#
# Currently Supporting:
# frc40
# frc5ce
# hkbaja47
# hkv2f
# mv147
# mv1604
# mv162
# mv162lc
# mv167
# mv177
# mv2700
# niCpu030
# pc486
# ppc603
# ppc604
# ppc603_long (over 32MB)
# ppc604_long (over 32MB)
# sbs_pc6
# vxipc
#
# vxWorks-486
# vxWorks-68040
# vxWorks-68040lc
# vxWorks-68060
# vxWorks-ppc603
# vxWorks-ppc604
# vxWorks-ppc603_long
# vxWorks-ppc604_long
CROSS_COMPILER_TARGET_ARCHS=

View File

@@ -0,0 +1,4 @@
# $Id$
# solaris-sparc is the new name for solaris
-include $(EPICS_BASE)/config/CONFIG_SITE.Host.solaris

View File

@@ -0,0 +1,4 @@
# $Id$
# solaris-sparc is the new name for solaris
-include $(EPICS_BASE)/config/CONFIG_SITE.Host.solaris

View File

@@ -204,7 +204,7 @@ ifdef DBDEXPAND
$(DBDNAME): ../$(DBDEXPAND)
@echo "Expanding dbd"
@$(RM) $@
$(DBEXPAND) $(DBDFLAGS) $< > $@
$(DBEXPAND) $(DBDFLAGS) -o $@ $<
endif
##################################################### Dependencies

View File

@@ -463,10 +463,12 @@ endif #ifdef PROD
# Java classes and packages
#
ifdef JAVA
DIRECTORY_TARGETS += $(INSTALL_JAVA)
ifdef PACKAGE
DIRECTORY_TARGETS += $(INSTALL_JAVA)/$(PACKAGE)
endif
endif
vpath %.class $(INSTALL_JAVA)/$(PACKAGE)
@@ -722,7 +724,7 @@ ifdef DBDEXPAND
$(DBDNAME): ../$(DBDEXPAND)
@echo Expanding dbd
@$(RM) $@
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) $< > $@
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) -o $@ $<
ifneq (,$(wildcard ../base.dbd))
$(DBDNAME): ../base.dbd

View File

@@ -221,7 +221,7 @@ ifdef DBDEXPAND
$(DBDNAME): ../$(DBDEXPAND)
@echo expanding dbd
@$(RM) $@
$(EPICS_BASE_HOST_BIN)/dbExpand $(DBDFLAGS) $< > $@
$(EPICS_BASE_HOST_BIN)/dbExpand $(DBDFLAGS) -o $@ $<
ifneq (,$(wildcard ../base.dbd))
$(DBDNAME): ../base.dbd

View File

@@ -248,7 +248,7 @@ ifdef DBDEXPAND
$(DBDNAME): ../$(DBDEXPAND)
@echo Expanding dbd
@$(RM) $@
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) $< > $@
$(EPICS_BASE_HOST_BIN)/dbExpand$(EXE) $(DBDFLAGS) -o $@ $<
endif
$(LIBNAME): $(LIBOBJS)

View File

@@ -17,14 +17,14 @@
# Common build definitions
#
ifndef CONFIG
CONFIG = $(TOP)/configure
endif
CONFIG ?= $(TOP)/configure
-include $(CONFIG)/os/CONFIG_COMPAT
-include $(CONFIG)/RELEASE
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)
-include $(CONFIG)/RELEASE.Common.$(T_A)
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
include $(CONFIG)/CONFIG_COMMON

View File

@@ -57,6 +57,8 @@
# LIBRARY products to build and install
# LIBRARY_HOST products to build and install
# LIBRARY_IOC products to build and install
# LOADABLE_LIBRARY module to build and install
# LOADABLE_LIBRARY_HOST module to build and install
# SCRIPTS scripts and install
# SCRIPTS_HOST host system scripts to install
# SCRIPTS_IOC ioc system scripts to install
@@ -169,17 +171,6 @@ LIB_LDFLAGS+=$(LIB_LDFLAGS_DEFAULT)
endif
endif
# check for special includes:
#
ifneq ($(strip $(INC_$(OS_CLASS))),)
# os-specific includes go to the include/os-directory:
INC += $(subst -nil-,,$(INC_$(OS_CLASS)))
else
ifdef INC_DEFAULT
INC += $(INC_DEFAULT)
endif
endif
# concat specific library contents (if defined)
#
ifneq ($(strip $(LIBSRCS_$(OS_CLASS))),)
@@ -326,6 +317,22 @@ LIBRARY_HOST+=$(LIBRARY_HOST_DEFAULT)
endif
endif
ifneq ($(strip $(LOADABLE_LIBRARY_$(OS_CLASS))),)
LOADABLE_LIBRARY+=$(subst -nil-,,$(LOADABLE_LIBRARY_$(OS_CLASS)))
else
ifneq (,$(strip $(LOADABLE_LIBRARY_DEFAULT)))
LOADABLE_LIBRARY+=$(LOADABLE_LIBRARY_DEFAULT)
endif
endif
ifneq ($(strip $(LOADABLE_LIBRARY_HOST_$(OS_CLASS))),)
LOADABLE_LIBRARY_HOST+=$(subst -nil-,,$(LOADABLE_LIBRARY_HOST_$(OS_CLASS)))
else
ifneq (,$(strip $(LOADABLE_LIBRARY_HOST_DEFAULT)))
LOADABLE_LIBRARY_HOST+=$(LOADABLE_LIBRARY_HOST_DEFAULT)
endif
endif
ifneq ($(strip $(PROD_LIBS_$(OS_CLASS))),)
PROD_LIBS += $(subst -nil-,,$(PROD_LIBS_$(OS_CLASS)))
else

View File

@@ -56,15 +56,15 @@ BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))
#---------------------------------------------------------------
# Epics base build tools and tool flags
MAKEBPT = $(EPICS_BASE_HOST_BIN)/makeBpt$(HOSTEXE)
DBEXPAND = $(EPICS_BASE_HOST_BIN)/dbExpand$(HOSTEXE)
DBTORECORDTYPEH = $(EPICS_BASE_HOST_BIN)/dbToRecordtypeH$(HOSTEXE)
DBTOMENUH = $(EPICS_BASE_HOST_BIN)/dbToMenuH$(HOSTEXE)
MAKEBPT = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/makeBpt$(HOSTEXE))
DBEXPAND = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/dbExpand$(HOSTEXE))
DBTORECORDTYPEH = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/dbToRecordtypeH$(HOSTEXE))
DBTOMENUH = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/dbToMenuH$(HOSTEXE))
REGISTERRECORDDEVICEDRIVER = $(PERL) $(EPICS_BASE_HOST_BIN)/registerRecordDeviceDriver.pl
# private versions of lex/yacc from EPICS
EYACC = $(EPICS_BASE_HOST_BIN)/antelope$(HOSTEXE)
ELEX = $(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE) -S$(EPICS_BASE)/include/flex.skel.static
EYACC = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/antelope$(HOSTEXE))
ELEX = $(call PATH_FILTER, $(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE)) -S$(EPICS_BASE)/include/flex.skel.static
YACC = $(EYACC)
LEX = $(ELEX)

View File

@@ -18,7 +18,7 @@
EPICS_VERSION=3
EPICS_REVISION=14
EPICS_MODIFICATION=2
EPICS_MODIFICATION=4
EPICS_UPDATE_NAME=
EPICS_UPDATE_LEVEL=0
@@ -27,3 +27,4 @@ EPICS_VERSION_STRING="EPICS Version ${EPICS_VERSION}.${EPICS_REVISION}.${EPICS_M
CVS_DATE="\$$Date$$"
CVS_TAG="\$$Name$$"
BASE_3_14=YES

View File

@@ -319,6 +319,7 @@ INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)
INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)
INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
INSTALL_DLL_LINK_LIBS=$(DLL_LINK_LIBNAME:%=$(INSTALL_LIB)/%)
INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
@@ -352,6 +353,7 @@ INSTALL_INC += $(foreach inc, $(INC), \
$(OS_INSTALL_INC) \
$(GENERIC_INSTALL_INC) \
$(GENERATED_INSTALL_INC) ) )
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )
#
# Rule 1

View File

@@ -98,12 +98,15 @@ CXXCMPLR=STRICT
# NOTE: os/CONFIG.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files and
# os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(EPICS_HOST_ARCH) files may override
#
# NOTE WIN32: YES results in a DLL.
# NOTE WIN32: YES results in a DLL. Valid settings are
# SHARED_LIBRARIES=YES and STATIC_BUILD=NO
# SHARED_LIBRARIES=NO and STATIC_BUILD=YES
#
SHARED_LIBRARIES=YES
# Build client objects statically ?
# must be either YES or NO
#
STATIC_BUILD=NO
# Should header dependancy files be automatically generated

View File

@@ -211,8 +211,7 @@ $(COMMON_DIR)/%.dbd: %Include.dbd
@$(DBDDEPENDS_CMD)
@echo "Expanding dbd"
@$(RM) $@
$(DBEXPAND) $(DBDFLAGS) $< > dbExpand.tmp
$(MV) dbExpand.tmp $@
$(DBEXPAND) $(DBDFLAGS) -o $@ $<
$(INSTALL_DBD)/%: %
@echo "Installing dbd file $@"
@@ -277,7 +276,7 @@ dbInstalls: $(DB_INSTALLS)
%_registerRecordDeviceDriver.cpp: %.dbd
@$(RM) $@
$(REGISTERRECORDDEVICEDRIVER) $< > $@
$(REGISTERRECORDDEVICEDRIVER) $< $(basename $@) > $@
.PRECIOUS: %_registerRecordDeviceDriver.cpp

View File

@@ -15,7 +15,7 @@ install: buildInstall
buildInstall: $(TARGETS)
cdCommands: $(wildcard $(TOP)/configure/RELEASE*) \
envPaths cdCommands: $(wildcard $(TOP)/configure/RELEASE*) \
$(TOP)/configure/CONFIG $(TOP)/bin
@$(RM) $@
ifeq ($(IOCS_APPL_TOP),)
@@ -25,5 +25,5 @@ else
endif
clean:
@$(RM) cdCommands
@$(RM) cdCommands envPaths

View File

@@ -36,6 +36,7 @@ include $(CONFIG)/CONFIG_ADDONS
ifeq ($(findstring Host,$(VALID_BUILDS)),Host)
LIBRARY += $(LIBRARY_HOST)
LOADABLE_LIBRARY += $(LOADABLE_LIBRARY_HOST)
OBJS += $(OBJS_HOST)
PROD += $(PROD_HOST)
SCRIPTS += $(SCRIPTS_HOST)
@@ -74,15 +75,15 @@ endif
#---------------------------------------------------------------
# Create included Makefile for prod,testprod, and library targets
ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY)))
ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY) $(LOADABLE_LIBRARY)))
MakefileInclude: ../Makefile
@$(RM) $@
@$(PERL) $(TOOLS)/makeMakefileInclude.pl $(PROD) $(TESTPROD) $(LIBRARY) $@
@$(PERL) $(TOOLS)/makeMakefileInclude.pl $(PROD) $(TESTPROD) $(LIBRARY) $(LOADABLE_LIBRARY) $@
-include MakefileInclude
endif # PROD, TESTPROD, or LIBRARY defined
endif # PROD, TESTPROD, LIBRARY, or LOADABLE_LIBRARY defined
#---------------------------------------------------------------
# Products and Object libraries
@@ -93,10 +94,10 @@ PRODTARGETS += $(PRODNAME) $(MUNCHNAME) $(CTDT_SRCS) $(CTDT_OBJS) $(NMS)
# Libraries
#
LIBTARGETS += $(LIBNAME)
LIBTARGETS += $(INSTALL_LIBS)
LIBTARGETS += $(SHRLIBNAME) $(INSTALL_SHRLIBS) \
$(DLL_LINK_LIBNAME) $(INSTALL_DLL_LINK_LIBS)
LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS) \
$(SHRLIBNAME) $(INSTALL_SHRLIBS) \
$(DLL_LINK_LIBNAME) $(INSTALL_DLL_LINK_LIBS) \
$(LOADABLE_SHRLIBNAME) $(INSTALL_LOADABLE_SHRLIBS)
#---------------------------------------------------------------
ifneq ($(CONFIG),$(TOP)/configure)
@@ -137,7 +138,7 @@ clean::
@echo "Cleaning"
@$(RM) *.i *$(OBJ) *.a $(TESTPRODNAME) $(LIBNAME) $(SHRLIBNAME)\
$(INC) *$(RES) $(TARGETS) $(DLL_LINK_LIBNAME) $(TDS) \
*.out MakefileInclude \
*.out MakefileInclude $(LOADABLE_SHRLIBNAME) \
$(COMMON_INC) $(HDEPENDS_FILES) $(PRODTARGETS)
ifdef BAF
@$(RM) $(PROD_BAF) $(LIB_BAF) *$(BOF)
@@ -268,6 +269,10 @@ $(SHRLIBNAME):$(LIB_PREFIX)%$(SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS) $(
@$(RM) $@
$(LINK.shrlib)
$(LOADABLE_SHRLIBNAME):$(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX): $(LIBRARY_OBJS) $(LIBRARY_RESS) $(SHRLIB_DEPLIBS)
@$(RM) $@
$(LINK.loadable_shrlib)
# C++ munching for VxWorks
%.nm : %$(EXE)
@$(RM) $@
@@ -340,6 +345,10 @@ $(INSTALL_TCLLIB)/%: ../%
@$(INSTALL) -d -m 555 $< $(INSTALL_TCLLIB)
endif
$(INSTALL_LOADABLE_SHRLIBS): $(INSTALL_SHRLIB)/%: %
@echo "Installing loadable shared library $@"
@$(INSTALL_LIBRARY) -d -m 555 $< $(INSTALL_SHRLIB)
$(INSTALL_CONFIG)/%: %
@echo "Installing config file $@"
@$(INSTALL) -d -m 644 $< $(@D)

View File

@@ -16,11 +16,11 @@
JAVA_INC = $(JAVA_DIR)/include
JAVA_BIN = $(JAVA_DIR)/bin
JAVA_INCLUDES += -I${JAVA_INC} -I${JAVA_INC}/${OS_CLASS}
JAVA_INCLUDES += -I$(JAVA_INC) -I$(JAVA_INC)/$(OS_CLASS) -I$(COMMON_DIR)
JAVACCMD = $(subst \,/,$(JAVA_BIN)/javac$(EXE) $(CLASSPATH) $(SOURCEPATH) $(JAVACFLAGS))
JAVAHCMD = $(subst \,/,$(JAVA_BIN)/javah$(EXE) -d $(COMMON_DIR) -force $(CLASSPATH) $(JAVAHFLAGS))
JARCMD = $(subst \,/,$(JAVA_BIN)/jar$(EXE) $(JAR_OPTIONS) $(COMMON_JAR) $(JARINPUT))
JARCMD = $(subst \,/,$(JAVA_BIN)/jar$(EXE) $(JAR_OPTIONS) $(COMMON_JAR) $(JARINPUT) $(JARPACKAGES))
#-------------------------------------------------------
vpath %.java ..
@@ -28,13 +28,20 @@ vpath %.java ..
CLASSPATH=-classpath $(INSTALL_JAVA)$(addprefix :,$(USR_CLASSPATH))
SOURCEPATH=-sourcepath .:..:../..
#-------------------------------------------------------
# Java directory
ifdef JAVA
JAVA_DIRECTORY_TARGETS += $(INSTALL_JAVA)
endif
#-------------------------------------------------------
# Java native method C header files
JAVAHFLAGS += $(USR_JAVAHFLAGS)
COMMON_JAVAINC += $(addprefix $(COMMON_DIR)/,$(JAVAINC))
JAVAINC_CLASSFILES += $(addprefix $(INSTALL_JAVA)/,$(subst _,/,$(subst .h,.class,$(JAVAINC))))
JAVAINC_CLASSNAMES += $(subst _,.,$(subst .h,,$(JAVAINC)))
COMMON_JAVAINC += $(addprefix $(COMMON_DIR)/,$(JAVAINC))
#-------------------------------------------------------
# Java class files
@@ -53,9 +60,11 @@ DEPTESTJAVA += $(subst .class,.java,$(TESTCLASSES))
COMMON_JAR += $(addprefix $(COMMON_DIR)/,$(JAR))
INSTALL_JAR =$(addprefix $(INSTALL_JAVA)/,$(JAR))
JARMANIFEST += $(firstword $(trim $(MANIFEST) $(JAR_MANIFEST)))
JARMANIFEST += $(firstword $(MANIFEST) $(JAR_MANIFEST))
JARINPUT += $(subst .java,.class,$(JAR_INPUT))
JARDEPFILES += $(JARINPUT) $(JARMANIFEST)
JARDEPFILES += $(addprefix $(INSTALL_JAVA)/,$(subst .java,.class,$(JAVA))) $(JARINPUT)
JARPACKAGES += $(foreach pkg,$(JAR_PACKAGES),-C $(INSTALL_JAVA) $(subst .,/,$(pkg)))
ifneq ($(JARMANIFEST),)
JAR_OPTIONS = cvmf $(JARMANIFEST)
else
@@ -64,10 +73,10 @@ endif
#-------------------------------------------------------
# Java doc definitions
ifeq ($(JAVADOC),YES)
ifdef JAVADOC
JAVADOCFLAGS += $(USR_JAVADOCFLAGS)
JAVADOCCMD = $(subst \,/,$(JAVA_BIN)/javadoc$(EXE) $(CLASSPATH) $(SOURCEPATH) $(JAVADOCFLAGS))
INSTALL_JAVADOC = $(CLASSES:%.class=$(INSTALL_HTML)/%.html)
INSTALL_JAVADOC = $(addprefix $(INSTALL_HTML)/,$(JAVADOC))/index.html
endif
#-------------------------------------------------------
@@ -81,7 +90,7 @@ buildInstall : build
rebuild: clean install
inc: $(INSTALL_CLASSES) $(COMMON_JAVAINC)
inc: $(JAVA_DIRECTORY_TARGETS) $(INSTALL_CLASSES) $(COMMON_JAVAINC)
build: inc
@@ -95,8 +104,10 @@ clean::
@$(RM) $(INSTALL_JAR) $(INSTALL_JAVADOC)
@$(RM) $(COMMON_TESTCLASSES) $(COMMON_JAR) $(COMMON_JAVAINC)
$(INSTALL_JAVA):
ifdef JAVA_DIRECTORY_TARGETS
$(JAVA_DIRECTORY_TARGETS):
$(MKDIR) -p $@
endif
$(COMMON_JAVAINC):$(JAVAINC_CLASSFILES)
@echo Creating header files $(COMMON_JAVAINC)
@@ -108,23 +119,26 @@ $(COMMON_TESTCLASSES): $(addprefix ../,$(DEPTESTJAVA))
@$(RM) $@
$(JAVACCMD) -d $(COMMON_DIR) $^
$(INSTALL_CLASSES): $(INSTALL_JAVA) $(addprefix ../,$(DEPJAVA))
$(INSTALL_CLASSES): $(addprefix ../,$(DEPJAVA))
@echo Creating java class files
@$(RM) $@
$(JAVACCMD) -d $(INSTALL_JAVA) $^
$(INSTALL_JAVADOC): $(INSTALL_JAVA) $(addprefix ../,$(DEPJAVA))
@echo Creating java class files
$(INSTALL_JAVADOC): $(addprefix ../,$(JAVA))
@echo Creating java doc files
@$(RM) $@
$(JAVADOCCMD) -d $(INSTALL_JAVA) $^
$(JAVADOCCMD) -d $(addprefix $(INSTALL_HTML)/,$(JAVADOC)) $^
$(COMMON_DIR)/%.jar: $(JARDEPFILES)
@echo Creating java jar file $@
@$(RM) $@
$(JARCMD)
$(INSTALL_JAVA)/%.jar: $(INSTALL_JAVA) $(COMMON_DIR)/%.jar
$(INSTALL_JAVA)/%.jar: $(COMMON_DIR)/%.jar
@echo "Installing java jar file $@"
@$(INSTALL) -d -m 644 $< $(@D)
.PHONY: all install buildInstall rebuild clean build inc
.PRECIOUS: $(COMMON_JAVAINC)

View File

@@ -68,6 +68,7 @@ $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) $(USR_CPPFLAGS) $(ARCH_DEP_CPPFLAGS)\
# Although RTEMS uses gcc, it wants to use gcc its own way
CROSS_CPPFLAGS =
CROSS_LDFLAGS =
SHRLIB_CFLAGS =
#--------------------------------------------------
# operating system class (include/os/<os_class>)

View File

@@ -24,6 +24,8 @@ OBJ = .o
LIB_PREFIX = lib
LIB_SUFFIX = .a
SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
LOADABLE_SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
LOADABLE_SHRLIB_PREFIX = lib
#-------------------------------------------------------
# names of libraries to build
@@ -31,19 +33,18 @@ SHRLIB_SUFFIX = .so$(addprefix .,$(SHRLIB_VERSION))
LIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(LIB_SUFFIX))
# <lib> -> lib<lib>.so.<version>
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(SHRLIB_SUFFIX))
LOADABLE_SHRLIBNAME = $(LOADABLE_BUILD_LIBRARY:%=$(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX))
#-------------------------------------------------------
# shrlib: DEPLIBS, LDFLAGS, and LDLIBS definitions
LIB_EXT = $(LIB_SUFFIX)
# SHRLIB_LIBS deprecated
LIB_LIBS += $(SHRLIB_LIBS)
SHRLIB_DEPLIBS=$(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).*, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
SHRLIB_LDLIBS = $(addprefix -l, $($*_LDLIBS) $(LIB_LIBS) $(USR_LIBS) \
@@ -58,7 +59,7 @@ SHRLIBDIR_LDFLAGS += $(sort $(SHRLIB_DEPLIB_DIRS:%=-L%))
PROD_DEPLIBS=$(foreach lib,$(PROD_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).*, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
PROD_LDLIBS = $(addprefix -l, $($*_LDLIBS) $(PROD_LIBS) $(USR_LIBS)\
@@ -78,6 +79,8 @@ LINK.cpp = $(CCC) -o $@ $(STATIC_LDFLAGS) $(PRODDIR_LDFLAGS) $(LDFLAGS)
LINK.cpp += $(PROD_LDFLAGS) $(PROD_LD_OBJS) $(PROD_LD_RESS) $(PROD_LDLIBS)
LINK.shrlib = $(CCC) -o $@ $(SHRLIB_LDFLAGS) $(SHRLIBDIR_LDFLAGS) $(LDFLAGS)
LINK.shrlib += $(LIB_LDFLAGS) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
LINK.loadable_shrlib = $(CCC) -o $@ $(LOADABLE_SHRLIB_LDFLAGS) $(SHRLIBDIR_LDFLAGS) $(LDFLAGS)
LINK.loadable_shrlib += $(LIB_LDFLAGS) $(LIBRARY_LD_OBJS) $(LIBRARY_LD_RESS) $(SHRLIB_LDLIBS)
#--------------------------------------------------
# Operating system definitions

View File

@@ -0,0 +1,25 @@
# CONFIG.Common.aix-ppc
#
# This file is maintained by the build community.
#
# Definitions for aix-ppc target builds
# Sites may override these definitions in CONFIG_SITE.Common.aix-ppc
#-------------------------------------------------------
# Include definitions common to all Unix targets
include $(CONFIG)/os/CONFIG.Common.UnixCommon
#
# Set OS-specific information
#
OS_CLASS = AIX
ARCH_CLASS = ppc
CODE_CPPFLAGS = -D_REENTRANT
POSIX_CPPFLAGS_YES = -D_POSIX_C_SOURCE=199506L -D_POSIX_THREADS -D_XOPEN_SOURCE=500 -D_ALL_SOURCE
POSIX_CPPFLAGS_NO =
POSIX_LDLIBS_YES = -lpthread
#SHARED_LIBRARIES=NO

View File

@@ -0,0 +1,11 @@
# CONFIG.Common.aix-ppc-gnu
#
# This file is maintained by the build community.
#
# Definitions for aix-ppc target builds
# Sites may override these definitions in CONFIG_SITE.Common.aix-ppc
#-------------------------------------------------------
# Include definitions common to all aix-ppc target archs
include $(CONFIG)/os/CONFIG.Common.aix-ppc

View File

@@ -55,3 +55,4 @@ LDLIBS_READLINE = -lreadline
# line in CONFIG_SITE.darwin-ppc.Common to use GNU readline
# command-line editing:
#COMMANDLINE_LIBRARY=READLINE

View File

@@ -21,12 +21,13 @@ OP_SYS_CFLAGS = -D_HPUX_SOURCE
OP_SYS_CXXFLAGS =
SHRLIB_SUFFIX = .sl$(addprefix .,$(SHRLIB_VERSION))
LOADABLE_SHRLIB_SUFFIX = .sl$(addprefix .,$(SHRLIB_VERSION))
LOADABLE_SHRLIB_PREFIX =
# Set runtime path for shared libraries
empty:= # trick from the make docs...
space:= $(empty) $(empty)
RUNTIME_LDFLAGS_YES = -Wl,+b$(subst $(space),:,$(sort $(SHRLIB_SEARCH_DIRS))),+s
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
RUNTIME_LDFLAGS = -Wl,+b$(subst $(space),:,$(sort $(SHRLIB_SEARCH_DIRS))),+s
ifdef CROSS
GNU_TARGET=parisc-hp-unix

View File

@@ -27,8 +27,7 @@ OP_SYS_LDLIBS = -lrt
#ARCH_DEP_CPPFLAGS += -D_X86_
# Set runtime path for shared libraries
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
ifdef CROSS
GNU_TARGET=ppc_82xx

View File

@@ -28,8 +28,7 @@ ARCH_DEP_CPPFLAGS += -D_X86_
ARCH_DEP_CFLAGS += -mcpu=pentium
# Set runtime path for shared libraries
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-Wl,-rpath,%)
ifdef CROSS
GNU_TARGET=i586-pc-linux-gnu

View File

@@ -0,0 +1,33 @@
# CONFIG.Common.linux-x86-borland
#
# $Id$
# This file is maintained by the build community.
#
# Definitions for linux-x86 target builds
# Sites may override these definitions in CONFIG_SITE.Common.linux-x86-borland
#-------------------------------------------------------
# Include definitions common to all Unix targets
include $(CONFIG)/os/CONFIG.Common.UnixCommon
OS_CLASS = Linux
ARCH_CLASS = x86
POSIX_CPPFLAGS_NO =
POSIX_LDLIBS_YES = libpthread.so
OP_SYS_CPPFLAGS += -D_BSD_SOURCE -D_SVID_SOURCE
OP_SYS_CPPFLAGS += -Dlinux
OP_SYS_LDLIBS = libc.so libm.so libdl.so librt.so
ARCH_DEP_CPPFLAGS += -D_X86_
ARCH_DEP_CFLAGS += -mcpu=pentium
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
ifdef CROSS
GNU_TARGET=i586-pc-linux-gnu
CMPLR_SUFFIX=
CMPLR_PREFIX=$(addsuffix -,$(GNU_TARGET))
endif

View File

@@ -28,8 +28,7 @@ POSIX_LDLIBS_YES += -lposix4 -lpthread $(POSIX_LDLIBS_YES_$(SOLARIS_VERSION))
OP_SYS_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
# Set runtime path for shared libraries
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-R%)
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-R%)
ifdef CROSS
GNU_TARGET=sparc-sun-solaris2

View File

@@ -29,8 +29,7 @@ OP_SYS_CPPFLAGS += -DSOLARIS=$(SOLARIS_VERSION)
ARCH_DEP_CPPFLAGS = -D_X86_
# Set runtime path for shared libraries
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-R%)
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-R%)
ifdef CROSS
GNU_TARGET=x86-sun-solaris2

View File

@@ -24,8 +24,7 @@ OP_SYS_CPPFLAGS = -DSUNOS4
ARCH_DEP_CPPFLAGS += -D_X86_
# Set runtime path for shared libraries
RUNTIME_LDFLAGS_YES = $(SHRLIB_SEARCH_DIRS:%=-R%)
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(SHARED_LIBRARIES))
RUNTIME_LDFLAGS = $(SHRLIB_SEARCH_DIRS:%=-R%)
ifdef CROSS
GNU_TARGET=x86-sun-sunos4

View File

@@ -21,7 +21,6 @@ EXE =
OBJ = .o
LIB_PREFIX =lib
LIB_SUFFIX = .a
LIB_EXT = .a
MUNCH_SUFFIX = .munch
#-------------------------------------------------------
@@ -34,7 +33,7 @@ LIBNAME = $(BUILD_LIBRARY:%=$(LIB_PREFIX)%$(LIB_SUFFIX))
PROD_DEPLIBS=$(foreach lib,$(PROD_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).*, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))

View File

@@ -0,0 +1,12 @@
# CONFIG.aix-ppc-gnu.Common
#
# $Id$
# This file is maintained by the build community.
#
# Definitions for aix-ppc gnu compiler host builds
# Sites may override these definitions in CONFIG_SITE.aix-ppc-gnu.Common
#-------------------------------------------------------
#Include definitions common to aix-ppc hosts
include $(CONFIG)/os/CONFIG.aix-ppc.Common

View File

@@ -0,0 +1,22 @@
# CONFIG.aix-ppc.aix-ppc
#
#
# Definitions for aix-ppc host - aix-ppc target builds
# Sites may override these definitions in CONFIG_SITE.aix-ppc.aix-ppc
#-------------------------------------------------------
# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
GNU_DIR = /usr/common/usg/gcc/3.2.1
CC = $(GNU_BIN)/gcc
CCC = $(GNU_BIN)/g++
AR = ar
ARFLAGS = rcv
RANLIB = ranlib -t
SHRLIB_LDFLAGS = -shared
LOADABLE_SHRLIB_LDFLAGS = -shared

View File

@@ -0,0 +1,10 @@
# CONFIG.aix-ppc.Common
#
# This file is maintained by the build community.
#
# Definitions for aix-ppc host builds
# Sites may override these definitions in CONFIG_SITE.aix-ppc.Common
#-------------------------------------------------------
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common

View File

@@ -21,9 +21,11 @@ SHRLIB_LDFLAGS = -dynamiclib -flat_namespace -undefined suppress \
-install_name $(firstword $(SHRLIB_SEARCH_DIRS))/$@ \
-compatibility_version $(EPICS_VERSION).$(EPICS_REVISION) \
-current_version $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
SHRLIB_SUFFIX = $(addprefix .,$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)).dylib
SHRLIB_SUFFIX = .$(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION).dylib
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
LOADABLE_SHRLIB_LDFLAGS = -bundle -flat_namespace -undefined suppress
#
# Position-independent code is the default on Darwin.
#

View File

@@ -16,10 +16,11 @@ AR = ar -rc
RANLIB=
LD = ld -r
# Always keep libc shared to force using the one supplied with the
# target machine (HP system and libc must match - important e.g. for
# multi-CPU-systems)
STATIC_LDFLAGS_YES = -static -l:libc.sl
STATIC_LDFLAGS_YES= -Wl,-a,archive
STATIC_LDFLAGS_NO =
STATIC_LDLIBS_YES = -Wl,-a,default
STATIC_LDLIBS_NO =
# Switch explicitly from default DCE threads to posix threads
POSIX_CPPFLAGS_YES += -D_REENTRANT -D_PTHREADS -D_POSIX_C_SOURCE=199506L
@@ -27,3 +28,4 @@ USR_SYS_LIBS += pthread
# C++ templates need PIC definition also in link phase
SHRLIB_LDFLAGS += -shared -fPIC
LOADABLE_SHRLIB_LDFLAGS += $(SHRLIB_LDFLAGS)

View File

@@ -43,15 +43,13 @@ WARN_CXXFLAGS_NO =
OPT_CXXFLAGS_YES = +O3
OPT_CXXFLAGS_NO = -g
# Always keep libc shared to force using the one supplied with the
# target machine (HP system and libc must match - important e.g. for
# multi-CPU-systems)
STATIC_LDFLAGS_YES= -Wl,-a,archive -l:libc.sl
STATIC_LDFLAGS_YES= -Wl,-a,archive
STATIC_LDFLAGS_NO =
STATIC_LDLIBS_YES =
STATIC_LDLIBS_YES = -Wl,-a,default
STATIC_LDLIBS_NO =
TARGET_LDFLAGS += -AA -mt
SHRLIB_LDFLAGS = -b
LOADABLE_SHRLIB_LDFLAGS = $(SHRLIB_LDFLAGS)

View File

@@ -11,3 +11,12 @@ GNU_DIR = /usr
CC = $(GNU_BIN)/gcc
CCC = $(GNU_BIN)/g++
STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_LDFLAGS += -shared -z defs
LOADABLE_SHRLIB_LDFLAGS = -shared

View File

@@ -0,0 +1,13 @@
# CONFIG.linux-x86-borland.Common
#
# $Id$
# This file is maintained by the build community.
#
# Definitions for linux-x86-borland host builds
# Sites may override these definitions in CONFIG_SITE.linux-x86-borland.Common
#-------------------------------------------------------
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
WIND_HOST_TYPE = x86-linux

View File

@@ -0,0 +1,223 @@
# CONFIG.linux-x86-borland.linux-x86-borland
#
# $Id$
#
# Definitions for linux-x86-borland host - linux-x86-borland target builds
# Sites may override these definitions in CONFIG_SITE.linux-x86-borland.linux-x86-borland
#-------------------------------------------------------
# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
SHRLIB_CFLAGS =
GNU_DIR = /usr
KYLIX=1
BORLAND_INC_STLPORT = $(BORLAND)/include/stlport
BORLAND_INC = $(BORLAND)/include
BORLAND_LIB = $(BORLAND)/lib
BORLAND_BIN = $(BORLAND)/bin
WINLINK = $(BORLAND_BIN)/ilink -q
#
# Configure Borland C compiler
# -q suppress compiler identification banner
# -a8 quad word alignment
#CCLINKOPT = -q -a8 -I/usr/include
CCLINKOPT = -q -a8
CC = $(BORLAND_BIN)/bc++ $(CCLINKOPT)
LD = $(BORLAND_BIN)/bc++ -r
#
# __STDC__=0 works but not as cleanly as with
# Microsoft Visual C++.
# The Borland header files use ifdef __STDC__
# to disable many nice things. This is overridden
# by defining NO_BORLAND_STDC in the Makefile.
#
ifdef NO_BORLAND_STDC
CONFORM_CFLAGS_ANSI =
CONFORM_CFLAGS_STRICT =
else
CONFORM_CFLAGS_ANSI = -D__STDC__=0
CONFORM_CFLAGS_STRICT = -D__STDC__=0
endif
CONFORM_CFLAGS_TRAD =
# -w display warnings on
# -g0 no limit to warning messages
# some warning message here are always disabled because they are
# trivial and numerous
# -w-8012 Comparing signed and unsigned values
# -w-8060 Possibly incorrect assignment
# -w-8071 Conversion may lose significant digits
WARN_CFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-dup
# -w- display warnings off
WARN_CFLAGS_NO = -w-
#
# -k- turn off standard stack frame
# -H- turn off precompiled headers
# -R- don't include browser info in .obj files
# -O1 optimization for size
# -v- turn off source debugging
# -vi control expansion of inline functions
OPT_CFLAGS_YES = -k- -H- -R- -O1 -v- -vi
#
OPT_CFLAGS_NO =
# OS vendor c preprocessor
CPP = $(BORLAND_BIN)/bcpp
# Configure OS vendor C++ compiler
#
# __STDC__=0 works but not as cleanly as with
# Microsoft Visual C++.
# The Borland header files use ifdef __STDC__
# to disable many nice things. This is overridden
# by defining NO_BORLAND_STDC in the Makefile.
#
CCC = $(BORLAND_BIN)/bc++ $(CCLINKOPT)
ifndef NO_BORLAND_STDC
CONFORM_CXXFLAGS_NORMAL = -D__STDC__=0
CONFORM_CXXFLAGS_STRICT = -D__STDC__=0
endif
# -w display warnings on
# -g0 no limit to warning messages
# -w-8012 Comparing signed and unsigned values
# -w-8060 Possibly incorrect assignment
# -w-8071 Conversion may lose significant digits
# -w-8008 Condition is always true or always false (compile time
# know template parameters causes this to spew garbage)
# -w-8027 Functions containing reserved words are not expanded inline
# (Some compilers are better than others with inline)
# -w-8066 Unreachable code (compile time know template parameters
# causes this to spew garbage)
# -w-8080 'identifier' declared but never used
# (instantiating unused static const external parameters is
# anachronistic compiler practice)
# -w-8004 'identifier' is assigned a value that is never used
# (compile time know template parameters
# causes this to spew garbage)
# -w-8026 Functions with exception specifications are not expanded inline
#
WARN_CXXFLAGS_YES = -w -g0 -w-8012 -w-8060 -w-8071 -w-8008 -w-8027 -w-8066 -w-8080 -w-8004 -w-8026
# -w- display warnings off
WARN_CXXFLAGS_NO = -w-
#
# -k- turn off standard stack frame
# -H- Turn off precompiled headers
# -R- Don't include browser info in .obj files
# -O1 optimization for size
# -v- turn off source debugging
# -vi control expansion of inline functions
OPT_CXXFLAGS_YES = -k- -H- -R- -O1 -v- -vi
#
OPT_CXXFLAGS_NO =
# -c case sensitive linking
# -C clear state before linking
# -Gi generate import library
# -Gn no state files
# -Tpd targets a Windows .DLL file
# -x no map
# -w display warnings on
#LINK_OPT_FLAGS_YES = -c -C -Gi -Gn -Tpd -x -w
#LINK_OPT_FLAGS_NO = -c -C -Gi -Gn -Tpd -x -w-
#Linux_DLLFLAGS = $(LINK_OPT_FLAGS_$(HOST_OPT)) $(TARGET_LDFLAGS) $(LIB_LDFLAGS)
OPT_LDFLAGS =
ARCH_DEP_CFLAGS=
# to identify the general architecture class:
# should be BSD, SYSV, WIN32, ...
# is: WIN32, sun4, hpux, linux, ...
#
OS_CLASS=Linux
OBJ=.o
# Problem: BorlandC does not recognize *.cc as C++ source,
# we have to compile xx.cc using the flag -P xx.cc,
SOURCE_CXXFLAG = -P
# Operating system flags
OP_SYS_CFLAGS =
#
# Borland specific include files
#
OP_SYS_INCLUDES = -I/usr/include
#
#-------------------------------------------------------
# Prod: DEPLIBS, LDFLAGS, and LDLIBS definitions
PROD_DEPLIBS= $(foreach lib,$(PROD_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).so, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).a, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
SHRLIB_DEPLIBS= $(foreach lib,$(LIB_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).so, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(wildcard $(addsuffix /$(LIB_PREFIX)$(lib).a, \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
PROD_SYS_DEPLIBS= $(foreach lib,$(PROD_SYS_LIBS), \
$(firstword $(wildcard \
/lib/$(LIB_PREFIX)$(lib).so \
/lib/$(LIB_PREFIX)$(lib).a \
/usr/lib/$(LIB_PREFIX)$(lib).so \
/usr/lib/$(LIB_PREFIX)$(lib).a) \
$(lib)))
PROD_LDLIBS = $(addprefix lib, $($*_LDLIBS)) \
$(notdir $(PROD_DEPLIBS)) \
$(notdir $(PROD_SYS_DEPLIBS)) \
$(addprefix lib, $($*_SYS_LIBS) $(USR_SYS_LIBS))
SHRLIB_LDLIBS = $(addprefix lib, $($*_LDLIBS)) \
$(notdir $(SHRLIB_DEPLIBS)) \
$(addprefix lib, $($*_SYS_LIBS) $(LIB_SYS_LIBS) $(USR_SYS_LIBS)) $(LDLIBS)
LDLIBS_STATIC_YES = LDLIBS
LDLIBS_SHARED_NO = LDLIBS
LDLIBS_SHARED_YES = LDLIBS
PROD_LDLIBS += $($(firstword $(LDLIBS_STATIC_$(STATIC_BUILD)) \
$(LDLIBS_SHARED_$(SHARED_LIBRARIES))))
empty:=
space:= $(empty) $(empty)
PROD_DEPLIB_DIRS = $(dir $($*_DEPLIBS)) $(dir $(PROD_DEPLIBS))
SHRLIB_DEPLIB_DIRS = $(dir $($*_DEPLIBS)) $(dir $(SHRLIB_DEPLIBS))
PRODDIR_LDFLAGS = -L$(subst $(space),:,$(sort $(PROD_DEPLIB_DIRS) $(BORLAND_LIB)))
SHRLIBDIR_LDFLAGS = -L$(subst $(space),:,$(sort $(SHRLIB_DEPLIB_DIRS) $(BORLAND_LIB)))
# -c case sensitive linking
# -C clear state before linking
# -Gn no state files
# -Tpe targets a Windows .EXE file
# -x no map
# -w display warnings on
LDFLAGS += -c -C -Gn -x -w
LINKLIBS=rtl.a visualclx.a rtle.a libborcrtl.a libborstl.a libborunwind.a
LINK.cpp = $(WINLINK) $(STATIC_LDFLAGS) $(PRODDIR_LDFLAGS) $(LDFLAGS) -Tpe -w-dup
LINK.cpp += $(PROD_LDFLAGS) borinit.o /usr/lib/crt1.o $(PROD_LD_OBJS)
LINK.cpp += , $@ ,,$(LINKLIBS) $(PROD_LDLIBS)
LINK.shrlib = $(WINLINK) $(STATIC_LDFLAGS) $(SHRLIBDIR_LDFLAGS) $(LDFLAGS) -Tpd -Gi
LINK.shrlib+= $(LIB_LDFLAGS) borinitso.o $(LIBRARY_LD_OBJS)
LINK.shrlib+= , $@ ,,$(LINKLIBS) $(SHRLIB_LDLIBS)

View File

@@ -10,4 +10,4 @@
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
WIND_HOST_TYPE = i386-linux2
WIND_HOST_TYPE = x86-linux

View File

@@ -14,4 +14,11 @@ GNU_DIR = /usr
CC = $(GNU_BIN)/gcc
CCC = $(GNU_BIN)/g++
STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_LDFLAGS += -shared -z defs
LOADABLE_SHRLIB_LDFLAGS = -shared

View File

@@ -41,6 +41,7 @@ STATIC_LDLIBS_YES= -Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_LDFLAGS = -shared
LOADABLE_SHRLIB_LDFLAGS = $(SHRLIB_LDFLAGS)
############# ???????????
#####ACC_SFLAGS_YES= -non_shared

View File

@@ -18,11 +18,12 @@ AR = ar -rc
RANLIB=
LD = ld -r
STATIC_LDFLAGS_YES= -Bstatic
STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Bdynamic
STATIC_LDLIBS_YES= -Wl,-Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_LDFLAGS = -G -h $@ -z ignore -z combreloc -z lazyload
SHRLIB_LDFLAGS += -z defs
LOADABLE_SHRLIB_LDFLAGS = -G -h $@ -z ignore -z combreloc -z lazyload

View File

@@ -52,9 +52,8 @@ STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_CFLAGS += -KPIC
SHRLIB_LDFLAGS += -G -h $@
SHRLIB_LDFLAGS += -z defs
SHRLIB_LDFLAGS += -z defs -KPIC -G -h $@
LOADABLE_SHRLIB_LDFLAGS += -KPIC -G -h $@
OP_SYS_LDFLAGS += -z ignore -z combreloc -z lazyload

View File

@@ -18,8 +18,8 @@ AR = ar -rc
RANLIB=
LD = ld -r
SHRLIB_LDFLAGS = -G -h $@
SHRLIB_LDFLAGS += -z defs
SHRLIB_LDFLAGS = -z defs -G -h $@
LOADABLE_SHRLIB_LDFLAGS += -G -h $@
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload

View File

@@ -51,9 +51,8 @@ STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_CFLAGS += -KPIC
SHRLIB_LDFLAGS = -G -h $@
SHRLIB_LDFLAGS += -z defs
SHRLIB_LDFLAGS = -z defs -KPIC -G -h $@
LOADABLE_SHRLIB_LDFLAGS = -KPIC -G -h $@
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload
OP_SYS_LDFLAGS = -z ignore -z combreloc -z lazyload

View File

@@ -45,4 +45,5 @@ STATIC_LDLIBS_YES= -Bdynamic
STATIC_LDLIBS_NO=
SHRLIB_LDFLAGS = -assert pure-text -h $@
LOADABLE_SHRLIB_LDFLAGS = -assert pure-text -h $@

View File

@@ -13,6 +13,8 @@ VALID_BUILDS = Host Ioc
#-------------------------------------------------------
BUILD_LIBRARY += $(LOADABLE_BUILD_LIBRARY)
BORLAND_INC = $(BORLAND)\\include
BORLAND_LIB = $(BORLAND)\\lib
BORLAND_BIN = $(BORLAND)\\bin
@@ -185,12 +187,12 @@ OP_SYS_INCLUDES = -I$(BORLAND_INC)
# specify dll .def file only if it exists
#
#DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
DLL_DEF_FLAG = $(subst /,\\,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
DLL_DEF_FLAG = $(subst /,\\,$(wildcard ../$(addsuffix .def,$*)))
#
# A WIN32 dll has three parts:
# x.dll: the real dll (SHRLIBNAME)
# x.lib: what you link to progs that use the dll (LIBNAME)
# x.lib: what you link to progs that use the dll (DLL_LINK_LIBNAME)
# x.exp: what you need to build the dll (in no variable)
#
LINK.shrlib = $(WINLINK) $(WIN32_DLLFLAGS) -L$(BORLAND_LIB) -L$(BORLAND_LIB)\\Psdk c0d32.obj
@@ -207,29 +209,19 @@ SHRLIB_SUFFIX=.dll
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
#
# Under WIN32 we have the unique situation where the DLL link creates the
# DLL link library xxx.lib and we need to be very careful to avoid replacing
# the xxx.lib created by the dll link with an xxx.lib created by $(AR).
# Therefore, the object library is named xxxObj.lib
#
# SHARED_LIBRARIES is YES if we are building a DLL and NO if we aren't
# When SHARED_LIBRARIES is YES we are building a DLL link library
# and when SHARED_LIBRARIES is NO we are building an object library
#
DLL_LINK_LIBNAME_YES = $(BUILD_LIBRARY:%=%.lib)
DLL_LINK_LIBNAME = $(DLL_LINK_LIBNAME_$(SHARED_LIBRARIES))
LIB_PREFIX=
LIB_SUFFIX=Obj.lib
LIBNAME = $(BUILD_LIBRARY:%=%$(LIB_SUFFIX))
LIB_SUFFIX=.lib
LIBNAME_NO = $(BUILD_LIBRARY:%=%.lib)
LIBNAME = $(LIBNAME_$(SHARED_LIBRARIES))
# dll install location
INSTALL_SHRLIB = $(INSTALL_BIN)
#--------------------------------------------------
# Object lib name suffix
LIB_EXT_YES = Obj.lib # object library extension for static build
LIB_EXT_NO = .lib # library extension for dynamic build
LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
#--------------------------------------------------
# Products dependancy definitions
@@ -237,9 +229,9 @@ LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
# Use PROD_SYS_LIBS
PROD_DEPLIBS=$(foreach lib, $(PROD_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
PROD_LDLIBS += $($*_DEPLIBS) $(PROD_DEPLIBS)
@@ -265,9 +257,9 @@ LIB_SYS_LIBS += $(SYS_DLL_LIBS)
# (it isnt necessary to rebuild the dll if these change)
SHRLIB_DEPLIBS += $(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
SHRLIB_LDLIBS += $($*_DLL_DEPLIBS) $($*_DEPLIBS) $(SHRLIB_DEPLIBS)

View File

@@ -16,6 +16,8 @@ PATH_FILTER = $(subst /,\\,$(1))
#-------------------------------------------------------
BUILD_LIBRARY += $(LOADABLE_BUILD_LIBRARY)
#
# "\ " forces gnu make to keep this as one token
#
@@ -200,12 +202,12 @@ WIN32_DLLFLAGS = /subsystem:windows /dll $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(LIB_
#
# specify dll .def file only if it exists
#
DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$(LIBRARY))))
DLL_DEF_FLAG = $(addprefix /def:,$(wildcard ../$(addsuffix .def,$*)))
#
# A WIN32 dll has three parts:
# x.dll: the real dll (SHRLIBNAME)
# x.lib: what you link to progs that use the dll (LIBNAME)
# x.lib: what you link to progs that use the dll (DLL_LINK_LIBNAME)
# x.exp: what you need to build the dll (in no variable)
#
LINK.shrlib = $(WINLINK) /nologo $(WIN32_DLLFLAGS) /implib:$*.lib /out:$*.dll $(DLL_DEF_FLAG)
@@ -222,27 +224,19 @@ SHRLIB_SUFFIX=.dll
SHRLIBNAME_YES = $(BUILD_LIBRARY:%=%$(SHRLIB_SUFFIX))
#
# Under WIN32 we have the unique situation where the DLL link creates the
# DLL link library xxx.lib and we need to be very careful to avoid replacing
# the xxx.lib created by the dll link with an xxx.lib created by $(AR).
# Therefore, the object library is named xxxObj.lib
#
# SHARED_LIBRARIES is YES if we are building a DLL and NO if we aren't
# When SHARED_LIBRARIES is YES we are building a DLL link library
# and when SHARED_LIBRARIES is NO we are building an object library
#
DLL_LINK_LIBNAME_YES = $(BUILD_LIBRARY:%=%.lib)
DLL_LINK_LIBNAME = $(DLL_LINK_LIBNAME_$(SHARED_LIBRARIES))
LIB_PREFIX=
LIB_SUFFIX=Obj.lib
LIBNAME = $(BUILD_LIBRARY:%=%$(LIB_SUFFIX))
LIB_SUFFIX=.lib
LIBNAME_NO = $(BUILD_LIBRARY:%=%.lib)
LIBNAME = $(LIBNAME_$(SHARED_LIBRARIES))
# dll install location
INSTALL_SHRLIB = $(INSTALL_BIN)
#--------------------------------------------------
# Object lib name suffix
LIB_EXT_YES = Obj.lib # object library extension for static build
LIB_EXT_NO = .lib # object library extension for dynamic build
LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
#--------------------------------------------------
# Products dependancy definitions
@@ -251,9 +245,9 @@ LIB_EXT = $(LIB_EXT_$(STATIC_BUILD))
# Use PROD_SYS_LIBS
PROD_DEPLIBS=$(foreach lib, $(PROD_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
PROD_LDLIBS += $($*_DEPLIBS) $(PROD_DEPLIBS)
@@ -279,9 +273,9 @@ LIB_SYS_LIBS += $(SYS_DLL_LIBS)
# (it isnt necessary to rebuild the dll if these change)
SHRLIB_DEPLIBS += $(foreach lib, $(LIB_LIBS) $(USR_LIBS), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(firstword $(wildcard $(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$($(lib)_DIR) $(SHRLIB_SEARCH_DIRS))) \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_EXT), \
$(addsuffix /$(LIB_PREFIX)$(lib)$(LIB_SUFFIX), \
$(firstword $($(lib)_DIR) $(INSTALL_LIB)))))
SHRLIB_LDLIBS += $($*_DLL_DEPLIBS) $($*_DEPLIBS) $(SHRLIB_DEPLIBS)

View File

@@ -0,0 +1,11 @@
# CONFIG_SITE.darwin-ppc.Common
#
# $Id$
# This file is maintained by the build community.
#
# Site override definitions for darwin-ppc host builds
#-------------------------------------------------------
# JBA test override values
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040

View File

@@ -0,0 +1,12 @@
# CONFIG_SITE.linux-x86-borland.Common
#
# $Id$
# This file is maintained by the build community.
#
# Site override definitions for linux-x86-borland host builds
#-------------------------------------------------------
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
BORLAND = /share2/kylix3

View File

@@ -39,9 +39,12 @@ $hostarch = $opt_h if ($opt_h);
# Find $top from current path; NB only works under iocBoot/* and configure/*
$top = $cwd;
$top =~ s/^\/cygdrive\/(\w)\//$1:\//;
#$top =~ s/^\/cygdrive\/(\w)\//$1:\//;
$top =~ s/\/iocBoot.*$//;
$top =~ s/\/configure.*$//;
if ($^O eq "cygwin") {
chomp($top = `cygpath -m $top`);
}
# The IOC may need a different path to get to $top
if ($opt_t) {
@@ -59,7 +62,8 @@ unless (@ARGV == 1) {
print "Usage: convertRelease.pl [-a arch] [-h hostarch] [-t ioctop] outfile\n";
print " where outfile is be one of:\n";
print "\tcheckRelease - checks consistency with support apps\n";
print "\tcdCommands - generate cd path strings for IOC use\n";
print "\tcdCommands - generate cd path strings for vxWorks IOCs\n";
print "\tenvPaths - generate epicsEnvSet commands for other IOCs\n";
print "\tCONFIG_APP_INCLUDE - additional build variables\n";
print "\tRULES_INCLUDE - supports installable build rules\n";
exit 2;
@@ -76,8 +80,16 @@ die "Can't find configure/RELEASE file" unless (-r $relfile);
&readRelease($relfile, \%macros, \@apps);
if ($hostarch) {
$relfile .= ".$hostarch";
&readRelease($relfile, \%macros, \@apps) if (-r $relfile);
my ($hrelfile) = "$relfile.$hostarch";
&readRelease($hrelfile, \%macros, \@apps) if (-r $hrelfile);
}
if ($arch) {
my ($crelfile) = "$relfile.Common.$arch";
&readRelease($crelfile, \%macros, \@apps) if (-r $crelfile);
if ($hostarch) {
my ($arelfile) = "$relfile.$hostarch.$arch";
&readRelease($arelfile, \%macros, \@apps) if (-r $arelfile);
}
}
&expandRelease(\%macros, \@apps);
@@ -87,6 +99,7 @@ for ($outfile) {
/CONFIG_APP_INCLUDE/ and do { &configAppInclude; last; };
/RULES_INCLUDE/ and do { &rulesInclude; last; };
/cdCommands/ and do { &cdCommands; last; };
/envPaths/ and do { &envPaths; last; };
/checkRelease/ and do { &checkRelease; last; };
die "Output file type \'$outfile\' not supported";
}
@@ -155,6 +168,10 @@ sub configAppInclude {
print OUT "# be lost when the application is next rebuilt.\n\n";
if ($arch) {
print OUT "export TOP\n";
foreach $app (@includes) {
print OUT "export ${app}\n";
}
foreach $app (@includes) {
$path = $macros{$app};
next unless (-d "$path/bin/$hostarch");
@@ -224,19 +241,41 @@ sub cdCommands {
open(OUT,">$outfile") or die "$! creating $outfile";
$startup = $cwd;
$startup =~ s/^$root/$iocroot/ if ($opt_t);
$startup =~ s/^$root/$iocroot/o if ($opt_t);
print OUT "startup = \"$startup\"\n";
foreach $app (@includes) {
$iocpath = $path = $macros{$app};
$iocpath =~ s/^$root/$iocroot/ if ($opt_t);
$iocpath =~ s/^$root/$iocroot/o if ($opt_t);
$app_lc = lc($app);
print OUT "$app_lc = \"$iocpath\"\n" if (-d $path);
$app_uc = uc($app);
print OUT "$app_lc = \"$iocpath\"\n" if (-d $path);
print OUT "putenv \"$app_uc=$iocpath\"\n" if (-d $path);
print OUT "${app_lc}bin = \"$iocpath/bin/$arch\"\n" if (-d "$path/bin/$arch");
}
close OUT;
}
sub envPaths {
die "Architecture not set (use -a option)" unless ($arch);
@includes = grep !/^TEMPLATE_TOP$/, @apps;
unlink($outfile);
open(OUT,">$outfile") or die "$! creating $outfile";
$ioc = $cwd;
$ioc =~ s/^.*\///;
print OUT "epicsEnvSet(ARCH,\"$arch\")\n";
print OUT "epicsEnvSet(IOC,\"$ioc\")\n";
foreach $app (@includes) {
$iocpath = $path = $macros{$app};
$iocpath =~ s/^$root/$iocroot/o if ($opt_t);
print OUT "epicsEnvSet($app,\"$iocpath\")\n" if (-d $path);
}
close OUT;
}
sub checkRelease {
$status = 0;
delete $macros{TOP};

View File

@@ -101,12 +101,13 @@ foreach $name ( @nameList ) {
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\\\n";
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_EXT),\\\n";
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
print OUT "${name}\$(EXE): \$(${name}_OBJSNAME) \$(${name}_RESS) \$(${name}_DEPLIBS)\n";
print OUT "endif\n";
print OUT "\n";
print OUT "ifeq (\$(filter ${name},\$(LIBRARY)),${name})\n";
print OUT "ifneq (\$(filter ${name},\$(LOADABLE_LIBRARY)),${name})\n";
print OUT "ifneq (,\$(strip \$(${name}_OBJS) \$(LIBRARY_OBJS)))\n";
print OUT "BUILD_LIBRARY += ${name}\n";
print OUT "endif\n";
@@ -120,7 +121,7 @@ foreach $name ( @nameList ) {
print OUT "${name}_DLL_DEPLIBS=\$(foreach lib, \$(${name}_DLL_LIBS),\\\n";
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_EXT),\\\n";
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
print OUT "\$(LIB_PREFIX)${name}\$(LIB_SUFFIX):\$(${name}_OBJSNAME) \$(${name}_RESS)\n";
print OUT "\$(LIB_PREFIX)${name}\$(LIB_SUFFIX):\$(${name}_DEPLIBS)\n";
@@ -128,6 +129,27 @@ foreach $name ( @nameList ) {
print OUT "\$(LIB_PREFIX)${name}\$(SHRLIB_SUFFIX):\$(${name}_DEPLIBS)\n";
print OUT "\$(LIB_PREFIX)${name}\$(SHRLIB_SUFFIX):\$(${name}_DLL_DEPLIBS)\n";
print OUT "endif\n";
print OUT "endif\n";
print OUT "ifeq (\$(filter ${name},\$(LOADABLE_LIBRARY)),${name})\n";
print OUT "ifneq (,\$(strip \$(${name}_OBJS) \$(LIBRARY_OBJS)))\n";
print OUT "LOADABLE_BUILD_LIBRARY += ${name}\n";
print OUT "endif\n";
print OUT "${name}_RESS+=\$(addsuffix \$(RES),\$(basename \$(${name}_RCS)))\n";
print OUT "${name}_OBJSNAME+=\$(addsuffix \$(OBJ),\$(basename \$(${name}_OBJS)))\n";
print OUT "${name}_DEPLIBS=\$(foreach lib, \$(${name}_LDLIBS),\\\n";
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
print OUT "${name}_DLL_DEPLIBS=\$(foreach lib, \$(${name}_DLL_LIBS),\\\n";
print OUT " \$(firstword \$(wildcard \$(addsuffix /\$(LIB_PREFIX)\$(lib)\*,\\\n";
print OUT " \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS)))\\\n";
print OUT " \$(addsuffix /\$(LIB_PREFIX)\$(lib)\$(LIB_SUFFIX),\\\n";
print OUT " \$(firstword \$(\$(lib)_DIR) \$(SHRLIB_SEARCH_DIRS))\/)))\n";
print OUT "\$(LOADABLE_SHRLIB_PREFIX)${name}\$(LOADABLE_SHRLIB_SUFFIX):\$(${name}_OBJSNAME) \$(${name}_RESS)\n";
print OUT "\$(LOADABLE_SHRLIB_PREFIX)${name}\$(LOADABLE_SHRLIB_SUFFIX):\$(${name}_DEPLIBS)\n";
print OUT "\$(LOADABLE_SHRLIB_PREFIX)${name}\$(LOADABLE_SHRLIB_SUFFIX):\$(${name}_DLL_DEPLIBS)\n";
print OUT "endif\n";
print OUT "\n";
}
close OUT or die "Cannot close $outfile: $!";

View File

@@ -102,8 +102,8 @@ from the st.cmd files in the iocBoot subdirectories.
<p>Remove</p>
<pre>ld &lt; iocCore
</pre>
<p>Immediately after the dbLoadDatabase command add</p>
<pre>registerRecordDeviceDriver(pdbbase)
<p>Immediately after the dbLoadDatabase(xxx.dbd) command add</p>
<pre>xxx_registerRecordDeviceDriver(pdbbase)
</pre>
</li>
</ul>

View File

@@ -10,12 +10,12 @@
<body>
<center>
<h2>Converting an EPICS R3.13 application to R3.14.2</h2>
<h2>Converting an EPICS R3.13 application to R3.14.4</h2>
</center>
<p><br>
This document describes how to convert a R3.13 vxWorks application so that it
builds with release R3.14.2.  It describes procedures such that:</p>
builds with release R3.14.4.  It describes procedures such that:</p>
<ul>
<li>The application uses the configure rules which are new to R3.14.</li>
</ul>
@@ -50,7 +50,7 @@ If sequence programs (*.st or *.stt files) exist in your application, add the
SNCSEQ location definition for the R3.14 seq external module</p>
<p><tt>SNCSEQ =&lt;full path to seq module top&gt;</tt></p>
The R3.14 seq module must exist and be built with EPICS base R3.14.2
The R3.14 seq module must exist and be built with EPICS base R3.14.4
<h3>Modify the Makefiles in &lt;top&gt;/*App directories.</h3>
@@ -167,6 +167,134 @@ example_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary
<p>After these changes are made the following files are no longer needed:
baseLIBOBS, Makefile.Host, and Makefile.Vx</p>
<h3>File base.dbd no longer needed</h3>
<blockquote>
You now can add the line include "base.dbd" to your
&lt;appname&gt;Include.dbd file and remove the file
&lt;name&gt;App/src/base.dbd from your src directory. The base.dbd from
base/dbd will be included. However, if you only want a subset of
record definitions from base you should keep your base.dbd
file.</blockquote>
<h3>Record support</h3>
<blockquote>
Add the following line after all existing #includes
<blockquote>
<pre>#include "epicsExport.h"</pre>
</blockquote>
The structure rset is now a typedef so change
<blockquote>
<pre>struct rset <recordname>RSET={ ...</pre>
</blockquote>
to
<blockquote>
<pre>rset <recordname>RSET={ ...</pre>
</blockquote>
and add the following line after the "rset &lt;recordname&gt;RSET="
definition.
<blockquote>
<pre>epicsExportAddress(rset,xxxRSET);</pre>
</blockquote>
</blockquote>
<h3>Device support</h3>
<blockquote>
Add the following line after all existing #includes
<blockquote>
<pre>#include "epicsExport.h"</pre>
</blockquote>
and add the following line after the dset dev&lt;devname&gt; definition
<blockquote>
<pre>epicsExportAddress(dset,dev&lt;devname&gt;);</pre>
</blockquote>
</blockquote>
<h3>Driver support</h3>
<blockquote>
Add the following line after all existing #includes
<blockquote>
<pre>#include "epicsExport.h"</pre>
</blockquote>
and add the following line after the drvet dev&lt;devname&gt; definition
<blockquote>
<pre>epicsExportAddress(drvet,drv&lt;devname&gt;);</pre>
</blockquote>
</blockquote>
<h3>Registration code changed</h3>
<blockquote>
Registration code for application specific functions, e.g. subroutine
record init and process functions, has been changed as follows
<p>1) Include the registration support header files:</p>
<blockquote>
<pre>#include "dbDefs.h"
#include "registryFunction.h"</pre>
</blockquote>
2) Include the export definitions header file after including all other
header files:
<blockquote>
<pre>#include "epicsExport.h"</pre>
</blockquote>
3) Make the application specific functions static functions, e.g.
<blockquote>
<pre>static long mySubInit(subRecord *precord,processMethod process)
static long mySubProcess(subRecord *precord)</pre>
</blockquote>
4) Define a registryFunctionRef array of the application specific functions
to be registered, e.g.
<blockquote>
<pre>static registryFunctionRef mySubRef[] = {
{"mySubInit",(REGISTRYFUNCTION)mySubInit},
{"mySubProcess",(REGISTRYFUNCTION)mySubProcess}
};</pre>
</blockquote>
5) Add a new function to do the registration of the registryFunctionRef
array elements, e.g.
<blockquote>
<pre>void mySub(void)
{
registryFunctionRefAdd(mySubRef,NELEMENTS(mySubRef));
}</pre>
</blockquote>
6) Call the epicsExportRegistrar with the new registration function: e.g.
<blockquote>
<pre>epicsExportRegistrar(mySub);</pre>
</blockquote>
7) Remove the existing function lines in &lt;appname&gt;Include.dbd: e.g.
remove
<blockquote>
<pre>function("mySubInit")
function("mySubProcess")</pre>
</blockquote>
8) Add a registrar statement to &lt;name&gt;Include.dbd with the new
registration function as parameter: e.g. add
<blockquote>
<pre>registrar("mySub")</pre>
</blockquote>
</blockquote>
<h3>Modify the Makefiles in &lt;top&gt;/iocBoot directory.</h3>
<p>Change " i<tt>nclude $(TOP)/config/CONFIG_APP" </tt>to "<tt>include
@@ -196,7 +324,11 @@ $(TOP)/configure/RULES.ioc"</tt></p>
<p>If it exists remove the line</p>
<p><tt>buildInstall: cdCommands</tt></p>
<p><tt>buildInstall: cdCommands </tt></p>
<p>Add the line</p>
<p><tt>TARGETS = cdCommands</tt></p>
<p>befor the include for RULES.ioc line.</p>
<h3>Modify st.cmd in &lt;top&gt;/iocBoot/ioc* directories.</h3>
@@ -207,13 +339,17 @@ ld &lt; iocCore</pre>
<p>Change "<tt>ld &lt; &lt;libname&gt;Lib</tt>" to "<tt>ld &lt;
&lt;libname&gt;.munch"</tt></p>
<p>Change "<tt>cd appbin</tt>" to "<tt>cd topbin</tt>"</p>
<p>Change the statement:</p>
<p><tt>dbLoadDatabase("../../dbd/exampleApp.dbd")</tt> <br>
</p>
to
<pre>dbLoadDatabase("../../dbd/&lt;name&gt;.dbd")
registerRecordDeviceDriver(pdbbase)</pre>
&lt;name&gt;_registerRecordDeviceDriver(pdbbase)</pre>
<p>where &lt;name&gt; is replaced with the name of your dbd file.</p>
<h3>recGbl calls</h3>
@@ -230,18 +366,13 @@ base.dbd. If these record types are used at your site, they
downloaded and built with base R3.14 by your EPICS administrator. To update
the R3.14 location of these record types in your application you must  add
appropriate module definitions to your application's config/RELEASE file and
change the <tt>LIBOBJS</tt> definitions.</p>
add <tt>LIBOBJS</tt> definitions to the src Makefile.</p>
<p>For example add</p>
<p>         <tt>PID=&lt;full path to modules directory&gt;/pid</tt></p>
<p>to config/RELEASE. <br>
Remove</p>
<p>         <tt>LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o</tt></p>
<p>from baseLIBOBJS, and add</p>
<p>to config/RELEASE and add <br>
<p></p>
@@ -298,8 +429,7 @@ administrator. dbLoadTemplate is still supported on iocs.
application, db files are created from template and substitution files you
should  add the definition</p>
<p><tt>EPICS_EXTENSIONS=&lt;full path name to epics extensions
directory&gt;</tt></p>
<p><tt>MSI=&lt;full path name to msi executable&gt;</tt></p>
<p>to your application config/RELEASE file.</p>
<br>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="jba">
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]"></head>
<body>
<center>
<h2>Converting an EPICS R3.14.2 application to R3.14.3</h2></center>
<p>This document describes how to convert a R3.14.2 application
so that it builds and runs properly with release R3.14.3.</p>
<h3>registerRecordDeviceDriver Name Change</h3>
<p>All application iocBoot/iocxxx/st.cmd files must be modified for R3.14.3 as
the generated routine that registers record device and driver support has been
renamed to incorporate the name of the dbd file it came from. The change to
the startup script is straightforward; any pair of lines like this:</p>
<blockquote>
<pre>dbLoadDatabase("dbd/<i>something</i>.dbd",0,0)
registerRecordDeviceDriver(pdbbase)</pre>
</blockquote>
<p>must have the second line changed so the result looks like this:</p>
<blockquote>
<pre>dbLoadDatabase("dbd/<i>something</i>.dbd",0,0)
<i>something</i>_registerRecordDeviceDriver(pdbbase)</pre>
</blockquote>
<p>There may be other pathname components in the dbLoadDatabase line which
should remain exactly as before.</p>
</body>
</html>

View File

@@ -0,0 +1,17 @@
<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="jba">
<meta name="GENERATOR" content="Mozilla/4.77 [en] (X11; U; SunOS 5.8 sun4u) [Netscape]"></head>
<body>
<center>
<h2>Converting an EPICS R3.14.3 application to R3.14.4</h2></center>
<p>This document describes how to convert a R3.14.3 application
so that it builds and runs properly with release R3.14.4.</p>
</p><h3>No changes required.</h3>
</body>
</html>

View File

@@ -8,10 +8,10 @@
<meta name="GENERATOR" content="amaya 5.1" />
</head>
<h4> April 5, 2003</h4>
<body>
<h1 style="text-align: center">EPICS base R3.14.2: Known Problems</h1>
<h1 style="text-align: center">EPICS base R3.14.4: Known Problems</h1>
<h3>Known Bugs</h3>
</body>
</html>

View File

@@ -4,7 +4,7 @@ README.1st
EPICS base
Release 3.14.2
Release 3.14.4
What is EPICS base?
@@ -440,11 +440,12 @@ Example application and extension
install location bin/<hostarch> directory during the base build.
Instructions for building and executing the 3.14 example application
can be found in the section "Example Application" of Chapter 2, "Getting
Started", in the "IOC Application Developer's Guide R3.14.2". The
"Example IOC Application" section briefly explains how to create and
build an example application in a user created <top> directory. It also
explains how to run the example application on a vxWorks ioc or a host
system and run an example channel access client on the host system.
can be found in the section "Example Application" of Chapter 2,
"Getting Started", in the "IOC Application Developer's Guide" for this
release. The "Example IOC Application" section briefly explains how to
create and build an example application in a user created <top>
directory. It also explains how to run the example application on a
vxWorks ioc or a host system and run an example channel access client
on the host system.

View File

@@ -2,7 +2,7 @@ Compiling EPICS and Building IOC Applications on HPUX 11 (hpux-parisc)
======================================================================
Please mail questions, comments, corrections, additional examples, etc.
to Ralph.Lange@mail.bessy.de
to Ralph.Lange@bessy.de
NOTE: 3.14 will ONLY compile on HPUX 11 systems. HPUX 10 does not have
the necessary posix thread support and will never ever be

View File

@@ -17,7 +17,7 @@ EPICS base</h2></center>
<center>
<h2>
Release 3.14.2</h2></center>
Release 3.14.4</h2></center>
<h3>
What is EPICS base?</h3>
@@ -590,13 +590,13 @@ scripts are installed into the install location bin/&lt;hostarch> directory
during the base build.</blockquote>
<blockquote>
Instructions for building and executing the 3.14 example application
can be found in the section "Example Application" of Chapter 2, "Getting
Started", in the "IOC Application Developer's Guide R3.14.2". The
"Example IOC Application" section briefly explains how to create and
build an example application in a user created <top> directory. It also
explains how to run the example application on a vxWorks ioc or a host
system and run an example channel access client on the host system.
Instructions for building and executing the 3.14 example application can be
found in the section "Example Application" of Chapter 2, "Getting Started", in
the "IOC Application Developer's Guide" for this release. The "Example IOC
Application" section briefly explains how to create and build an example
application in a user created &lt;top&gt; directory. It also explains how to
run the example application on a vxWorks ioc or a host system and run an
example channel access client on the host system.
</blockquote>
</body>

View File

@@ -3,90 +3,353 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>EPICS Release baseR3.14 </title>
<title>EPICS Base Release R3.14.4</title>
</head>
<body lang="en">
<center>
<h1>EPICS Release base 3.14.2</h1>
<h1>EPICS Base Release 3.14.4</h1>
<h1>May 21 2003</h1>
<h1>????4 September 2003</h1>
</center>
<center>
<h2>Changes since 3.14.3</h2>
</center>
<h4>Format string checking</h4</h4>
<p>'printf-style' functions like errlogPrintf have their arguments verified
against their format string when compiled with gcc.</p>
<h4>IOC shell command-line editing on vxWorks</h4>
<p>The IOC shell now uses the vxWorks ledLib routines so command-line editing
is now the same in the IOC shell as it is in the vxWorks shell.</p>
<h4>CA client library crashes when the same PV name is on multiple
servers</h4>
<p>If the CA client library was searching for a PV name that was hosted on
more than one server a segmentation violation occurred when printing a
diagnostic message resulting in a failure of the CA client library. The bug
was introduced in R3.14.3. The code was tested on WIN32 prior to release, but
the problem has so far been reproduced only on Linux.</p>
<p>Thanks to Ernest Williams at the SNS for discovering and helping to
diagnose the problem.</p>
<h4>Disconnection callback function called when CA channel known to be
disconnected</h4>
<p>If a CA circuit timed out during the connect sequence then the CA client
library called the applications's disconnect callback function indicating a
disconnect state transition when the channel was already known to be
disconnected. This has caused the sequencer to improperly maintain its
connected channel count. Other CA client side tools may also be impacted.</p>
<p>Recent versions of vxWorks appear to experience a connect failure if the
vxWorks IP kernel reassigns the same ephemeral TCP port number as was
assigned during a previous lifetime. The IP kernel on the vxWorks system
hosting the CA server might have a stale entry for this ephemeral port that
has not yet timed out which prevents the client from connecting with the
ephemeral port assigned by the IP kernel. Eventually, after EPICS_CA_CONN_TMO
seconds, the TCP connect sequence is aborted and the client library closes
the socket, opens a new socket, receives a new ephemeral port assignment, and
successfully connects.</p>
<p>Thanks to Mark Rivers for initially reporting the bug and energetically
assisting with identifying the cause.</p>
<center>
<h2>Changes since 3.14.2</h2>
</center>
<h4>TPRO output</h4>
<p>The record processing trace output generated when the <code>.TPRO</code>
field of a record is non-zero now includes the name of the thread that is
actually doing the processing.</p>
<h4>calcRecord and calcoutRecord</h4>
<p>Previously if a dbGetLink failed on one of the input links, dbGetLink was
not called for the remaining links. Now it is.</p>
<h4>put notify</h4>
<p>put notify did not act properly if a record had disp=TRUE, i.e. if puts
are disabled. It now returns putNotifyPutDisabled.</p>
<h4>fastlock.h</h4>
<p>This is no longer supported</p>
<h4>devLib</h4>
<p>devLib is now supported on vxWorks and RTEMS. It has been moved from
src/vxWorks/src to src/libCom/osi. devLibVirtualOS has been extended to
support allocating A24 addresss and an init method.</p>
<h4>vxWorks dependent modules moved</h4>
The following have been moved from src/vxWorks/src to
src/libCom/osi/os/vxWorks: camacLib.h, drvTS.c, drvTS.h, epicsDynLink.c,
epicsDynLink.h, module_types.h, task_params.h, veclist.c. Brief documentation
has been added to the Application Developer's Guide.
<h4>Close-On-Exec flag set for all sockets created in EPICS base</h4>
<p>On POSIX systems if a Channel Access application spawns off 3rd party
software with an exec() call then all open file desriptors are inherited
unless the close-on-exec flag is set for each file descriptor. A new wrapper
function was created so that all sockets created in EPICS base will have the
close-on-exec flag set on POSIX systems. The function which spawns the CA
repeater with exec() used to close all open files except stdin/stdout/stderr.
This step was no longer required and therefore was removed from the code.</p>
<h4>Temporary Files on Windows</h4>
<p>The tmpfile() function on windows requires that all temporary files be
stored in the root folder. The antelope (yacc) tool in base was calling
tmpfile() and this was causing problems at sites where win32 systems use
remotely mounted secure file systems. A wrapper function called "FILE *
epicsTempFile()" that creates a temporary file on WIN32 with a name epicsNNN
using one of the following paths was installed into libCom. It searches
starting with (1) below and stops when it finds a specified path that exists.
On POSIX systems, and systems that default to POSIX behavior, epicsTempFile()
simply calls tmpfile().</p>
<ol>
<li>where the TMP environment variable specifies</li>
<li>in c:\tmp</li>
<li>in the current working directory</li>
</ol>
<h4>envPaths file</h4>
<p>For operating systems other than vxWorks, there is now a target file
created in each <code>iocBoot/ioc</code> directory called
<code>envPaths</code>, which performs the same functions as the
<code>cdCommands</code> file in vxWorks but using environment variables. The
entries in <code>envPaths</code> are derived from the contents of the
application's <code>configure/RELEASE</code> file.</p>
<h4>Macros in database filenames</h4>
<p>Database (<code>.db</code> and <code>.dbd</code>) filenames passed to
<code>dbLoadDatabase</code>, <code>dbLoadRecords</code> and inside
<code>dbLoadTemplate</code> substitutions files will now have environment
variable macros expanded before opening. These are expressed using the
standard <code>${MACRO}</code> syntax. Inside a template substitutions file
the filename must be enclosed in double quotation marks if macros are
used.</p>
<h4>registerRecordDeviceDriver output subroutine renamed</h4>
<p>The registration routine generated by the registerRecordDeviceDriver.pl
perl script now includes the name of the application, thus requiring a
one-line change to any IOC startup files produced with earlier R3.14 releases
of base. The actual name is taken from a second command line argument
supplied to the script by the modified make rules, and is derived from the
name of the fully expanded dbd file from which the necessary information is
extracted. The change needed to every startup script involves using this new
name in place of the old <code>registerRecordDeviceDriver</code>. Assuming
that your application's fully expanded dbd file is called
<code>example.dbd</code> you would modify the lines</p>
<blockquote>
<pre>dbLoadDatabase("dbd/example.dbd",0,0)
registerRecordDeviceDriver(pdbbase)</pre>
</blockquote>
<p>to become</p>
<blockquote>
<pre>dbLoadDatabase("dbd/example.dbd",0,0)
example_registerRecordDeviceDriver(pdbbase)</pre>
</blockquote>
<h4>dbExpand <code>-o outfile</code> option</h4>
<p>A commandline option <code>-o</code> has been added to the dbExpand
program to allow the name of its output file to be specified. If there are
any errors in the input file(s) the output file will not be generated or
modified at all. The rules to expand DBD files have been changed to make use
of this.</p>
<h4>New keyword <code>variable()</code> supported in dbd files</h4>
<p>Database definition (.dbd) files can now contain declarations of simple
static variables, a facility intended for driver debugging purposes. These
<code>variable(name)</code> or <code>variable(name,type)</code> declarations
are preserved by dbExpand (<code>type</code> is <code>int</code> if omitted),
and will be converted by registerRecordDeviceDriver.pl into code that
registers them with iocsh. The variables themselves must be defined in some
existing C or C++ code and marked using the macro
<code>epicsExportAddress(type,name)</code>. Only plain <code>int</code> and
<code>double</code> types are supported.</p>
<p><strong>macEnvExpand</strong></p>
<p>A facility for performing macro expansion using environment variables as
macro definitions has been added to libCom/macLib. The ioc shell now performs
macro expansion using this on all input lines (other than comments) before
printing and executing the line.</p>
<p><strong>iocsh var command</strong></p>
<p>For simple applications such as controlling the value of debugging flags.
Devlopers with more complex expression handling requirements should consider
use of the <strong>cexp</strong> package. The available variables are defined
by the new <code>variable</code> dbd file keyword.</p>
<p><strong>iocshArgPersistentString</strong></p>
<p>Tell iocsh to make a copy of the argument string before passing it to the
handler function.</p>
<p><strong>epicsStrDup</strong></p>
<p>Operating-system independent replacement for strdup().</p>
<p><strong>epicsMessageQueue</strong></p>
<p>The epicsMessageQueue API has been changed. All functions and methods to
receive a message now have an additional argument which specifies the size of
the receiver buffer. The receive functions/methods return -1 and the
received message is discarded if the received message will not fit in the
buffer. See the Application Developer's Guide (libCom OSI) for details.</p>
<p>This is an incompatible change. All R3.14.2 applications which use
epicsMessageQueue must be modified before they can be compiled and used with
R3.14.3</p>
<h4>Error Message Logging</h4>
<p>A bug occurring only in Microsoft Windows port of the error message
logging client was fixed. The symptoms were problems getting a Microsoft
Windows based IOC to make entries in the log file.</p>
<p>A bug occurring in the error message logging server where a partial
message arrives w/o a &lt;CR&gt; and then a &lt;CR&gt; from a previous
message was found in the input buffer was fixed. The problem must have
existed for a long time but probably was not occurring frequently. The
symptom was garbled output in the log file.</p>
<p>An IP kernel deadlock vulnerability occurring when vxWorks's tNetTask
calls logMsg because of a transient mbuf starvation situation has been fixed.
The fix was to not call logFdAdd for the log client's socket and instead
create a specialized vxWorks device driver which calls errlogPrintf for each
incoming message and then call logFdAdd for a file descriptor opened with
that device driver. The desirable functional change being errlogPrintf's
capability to discard messages when it gets behind (because of a transient
mbuf starvation situation). The fix also means that any code that calls
errlogAddListener on vxWorks, e.g. CMLOG, will now receive the logMsg
messages.</p>
<h4>Channel Access Client Library Client Context Cleanup Race Condition</h4>
<p>The symptom is a CA client program that fails with a segmentation
violation on Linux shortly after calling ca_task_exit()or
ca_context_destroy(). A fix will show up in R3.14.3. Regression tests were
updated to detect this type of problem.</p>
<h4>Red Hat 7.3 Linux Process Rundown Bug</h4>
<p>There appears to be a bug in the Red Hat 7.3 process rundown where posix
thread support is defective when file scope destructors are being run. The
symptom was a hang during process exit. A workaround was installed.</p>
<h4>Multiple CA Servers on MAC OSX</h4>
<p>A patch was made to allow multiple CA servers on MAC OSX. OSX is a recent
branch off of BSD and therefore requires socket option SO_REUSEPORT.</p>
<center>
<h2>Changes since 3.14.1</h2>
</center>
<p><strong>Build System</strong></p>
<p>Major changes have been made to the build system.
The good news is that the rules for support and ioc applications
are now greatly simplified. The bad news is that it does mean
changes for existing 3.14.1 applications. Please see:</p>
<p><a href="ConvertingR3.14.1AppsToR3.14.2.html">ConvertingR3.14.1AppsToR3.14.2</a></p>
<p>for details. If you are using the <strong>function</strong> DBD keyword it no
longer exists. Please read this conversion document for details.</p>
<p>Major changes have been made to the build system. The good news is that
the rules for support and ioc applications are now greatly simplified. The
bad news is that it does mean changes for existing 3.14.1 applications.
Please see:</p>
<p><a
href="ConvertingR3.14.1AppsToR3.14.2.html">ConvertingR3.14.1AppsToR3.14.2</a></p>
<p>for details. If you are using the <strong>function</strong> DBD keyword it
no longer exists. Please read this conversion document for details.</p>
<p><strong>Application Developer's Guide</strong></p>
<p>The old chapter "New Feature's for 3.14" has been replaced by
a new chapter "Getting Started". Please read it. It provides
a simplified set of rules that can be used to build most
support and ioc applications. Many minor changes have also been made.</p>
<p>The old chapter "New Feature's for 3.14" has been replaced by a new
chapter "Getting Started". Please read it. It provides a simplified set of
rules that can be used to build most support and ioc applications. Many minor
changes have also been made.</p>
<p><strong>dbGetLink</strong></p>
<p>A bug in dbGetLink resulted in nRequest not being given the value 0
if the link is a constant link. This in turn caused the waveform
record to always set NORD=NELEM. Thus if an application trys
to write a waveform via the steps:</p>
<pre>
prset->get_array_info(paddr,&no_elements,&offset);
<< write nNew elements into array >>
prset->put_array_info(paddr,nNew);
</pre>
<p>This sets NORD = nNew.
But because of the dbGetLink bug, the soft device support attached to
the waveform record sets NORD to NELM.</p>
<p>A bug in dbGetLink resulted in nRequest not being given the value 0 if the
link is a constant link. This in turn caused the waveform record to always
set NORD=NELEM. Thus if an application trys to write a waveform via the
steps:</p>
<pre> prset-&gt;get_array_info(paddr,&amp;no_elements,&amp;offset);
write nNew elements into array &gt;&gt;
prset-&gt;put_array_info(paddr,nNew);</pre>
<p>This sets NORD = nNew. But because of the dbGetLink bug, the soft device
support attached to the waveform record sets NORD to NELM.</p>
<p>This problem is fixed. The actual bug was in macros in dbAccessDefs.h</p>
<p><strong>Access Security</strong></p>
<p>The host names are now converted to lower case.
This fixes incompatibilities between various platforms.</p>
<p>The host names are now converted to lower case. This fixes
incompatibilities between various platforms.</p>
<p><strong>string records</strong></p>
<p>Both the stringin and stringout records have two new DBF_MENU fields:
APST and MPST. These control whether CA monitors are fired if the new VAL
field string is identical to the old one. The default (zero) menu value is
"On Change" with behaviour identical to before,
set to "Always" if you want a record to fire monitors every time the record
is processed (analagous to setting ADEL/MDEL=-1 for numeric record types).</p>
<p>Both the stringin and stringout records have two new DBF_MENU fields: APST
and MPST. These control whether CA monitors are fired if the new VAL field
string is identical to the old one. The default (zero) menu value is "On
Change" with behaviour identical to before, set to "Always" if you want a
record to fire monitors every time the record is processed (analagous to
setting ADEL/MDEL=-1 for numeric record types).</p>
<p><strong>epicsMessageQueue</strong></p>
<p>A new facility that provides the capabilities of vxWorks msgQLib.
See the Application Developer's Guide (libCom OSI) for details.</p>
<p>A new facility that provides the capabilities of vxWorks msgQLib. See the
Application Developer's Guide (libCom OSI) for details.</p>
<p><strong>epicsStdio and errlogPrintf</strong></p>
<p>A new facility has been added to libCom described by epicsStdio.h.
It contains the functions epicsSnprintf and epicsVsnprintf.
These are like the C99 functions snprintf and vsnprintf,
which are like sprintf and vsprintf except that they accept a argument
limiting the number of characters written.</p>
<p>The errlogPrintf facility has been modified to use this facility.
Thus it is not longer subject to a possible buffer overflow.</p>
<p>A new facility has been added to libCom described by epicsStdio.h. It
contains the functions epicsSnprintf and epicsVsnprintf. These are like the
C99 functions snprintf and vsnprintf, which are like sprintf and vsprintf
except that they accept a argument limiting the number of characters
written.</p>
<p>The errlogPrintf facility has been modified to use this facility. Thus it
is not longer subject to a possible buffer overflow.</p>
<p><strong>scanPeriod</strong></p>
<p>This is a new function provided by the Database Scanning facility.
Given an index for the choices defined by menuScan.h, it returns
the scan period in seconds. The argument can just be the scan field
of a database record. If the index is not associated with a periodic
scan rate, the value 0.0 is returned.</p>
<p>This is a new function provided by the Database Scanning facility. Given
an index for the choices defined by menuScan.h, it returns the scan period in
seconds. The argument can just be the scan field of a database record. If the
index is not associated with a periodic scan rate, the value 0.0 is
returned.</p>
<p><strong>New epicsString.h function</strong></p>
<p>A new function epicsStrCaseCmp has been added. It is like strcmp
except that it ignores case.</p>
<p>A new function epicsStrCaseCmp has been added. It is like strcmp except
that it ignores case.</p>
<p><strong>macLib</strong></p>
<p>macParseDefns did not check for handle==NULL.
The documentation for macParseDefns was not correct.</p>
<p>macParseDefns did not check for handle==NULL. The documentation for
macParseDefns was not correct.</p>
<center>
<h2>Changes since beta2</h2>
@@ -97,12 +360,12 @@ The documentation for macParseDefns was not correct.</p>
<p>dbStaticLib and related programs now accept a new keyword in DBD files:</p>
<pre>function(name)</pre>
<p>Where '<span style="font-family: courier">name</span>' is the name of a
function with "C" linkage that is included in the IOC binary. This function
will be automatically registered with the registry at the same time as the
record/device/driver tables, and is intended to make using subroutine records
much easier on non-vxWorks systems.. Prior R3.14 releases required there to
be a static registration routine for such subroutines.</p>
<p>Where <code>name</code> is the name of a function with "C" linkage that is
included in the IOC binary. This function will be automatically registered
with the registry at the same time as the record/device/driver tables, and is
intended to make using subroutine records much easier on non-vxWorks
systems.. Prior R3.14 releases required there to be a static registration
routine for such subroutines.</p>
<p>dbStaticLib has two additional routines to support this, dbDumpFunction()
and dbWriteFunctionFP(). dbDumpFunction has been added to the iocsh command
@@ -116,8 +379,8 @@ errors are being reported.</p>
<p><strong>Solaris build requirement</strong></p>
<p><span style="font-family: courier">uname</span> must be defined for builds
on solaris hosts because it is used to determine the solaris version.</p>
<p><code>uname</code> must be defined for builds on solaris hosts because it
is used to determine the solaris version.</p>
<p><strong>Linux build note</strong></p>
@@ -129,13 +392,9 @@ such absolute paths to the new make variable SHRLIB_SEARCH_DIRS
<p><strong>RULES.Db</strong></p>
<p>A <span style="font-family: courier">*[</span><span
style="font-family: courier">nn</span><span
style="font-family: courier">].</span><span
style="font-family: courier">db</span> file will be created from an <span
style="font-family: courier">*.template</span> and a <span
style="font-family: courier">*[nn].substitutions</span> file ,where <span
style="font-family: courier">nn</span> has a value between 0 and 99.</p>
<p>A <code>*[nn].db</code> file will be created from an
<code>*.template</code> and a <code>*[nn].substitutions</code> file ,where
<code>nn</code> has a value between 0 and 99.</p>
<p><strong>Support for 64 bit long</strong></p>
@@ -373,9 +632,9 @@ value recGblSetSevr(psel,SOFT_ALARM,MAJOR_ALARM) is called.</p>
<p><strong>cdCommands file</strong></p>
<p>Fixed a bug and revised the use of the IOCS_APPL_TOP setting in an
application's <top>/configure/CONFIG file (which specifies the path to
<top>as seen by the IOC) to apply the same modifications to all paths output
in the cdCommands file.</p>
application's &lt;top&gt;/configure/CONFIG file (which specifies the path to
&lt;top&gt; as seen by the IOC) to apply the same modifications to all paths
output in the cdCommands file.</p>
<p><strong>dbStaticLib</strong></p>
@@ -435,130 +694,140 @@ release.</p>
Build modifications in alpha2 require the following changes to existing R3.14
applications.
<ul>
<li>&nbsp;Remove the now unused RULES files</li>
<li><ul>
./configure/RULES.Db <br>
./configure/RULES.registerRecordDeviceDriver <br>
&nbsp;</ul>
<li>Remove the now unused RULES files
<blockquote>
./configure/RULES.Db<br>
./configure/RULES.registerRecordDeviceDriver</blockquote>
</li>
<li>Delete the following line in ./configure/RULES
<ul>
&nbsp; <br>
include $(TOP)/configure/RULES.registerRecordDeviceDriver</ul>
</li>
</ul>
<ul>
<li>&nbsp; In &lt;top&gt;/configure/Makefile change
<ul>
&nbsp; <br>
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(T_A) $@ $(TOP)</ul>
</li>
to
<ul>
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@
$(TOP) <br>
&nbsp;</ul>
and add the line
<ul>
&nbsp; <br>
depends: install <br>
&nbsp;</ul>
to the bottom of the Makefile.
<ul>
&nbsp;</ul>
</ul>
<ul>
<li>In all *App/*Db/Makefileschange
<ul>
&nbsp; <br>
include $(TOP)/configure/RULES.Db</ul>
</li>
to
<ul>
include $(TOP)/configure/RULES</ul>
<li>In all *App/src/Makefile files
<ul>
&nbsp;</ul>
</li>
change&nbsp;&nbsp;&nbsp; DBDNAME = &lt;name&gt;App&nbsp;&nbsp;&nbsp;
to&nbsp;&nbsp;&nbsp; DBD += &lt;name&gt;
<ul>
&nbsp;</ul>
and remove the line <br>
&nbsp;
<ul>
DBDEXPAND = &lt;name&gt;Include.dbd <br>
&nbsp;</ul>
NOTE: If any of your *App/*Db/Makefiles contain "DBDNAME =" lines you
should make these same changes in that *Db dirctory. <br>
&nbsp;
<ul>
<li>In all *App/src/Makefile Makefiles</li>
</ul>
<ul>
&nbsp;</ul>
change&nbsp;&nbsp;&nbsp; RECTYPES=&lt;name&gt;.h&nbsp;&nbsp;&nbsp;
to&nbsp;&nbsp;&nbsp; DBDINC+=&lt;name&gt;
<ul>
&nbsp;</ul>
change&nbsp;&nbsp;&nbsp; MENUS=&lt;name&gt;.h&nbsp;&nbsp;&nbsp;
to&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBDINC+=&lt;name&gt;</ul>
<ul>
change&nbsp;&nbsp;&nbsp; BPTS&nbsp;&nbsp;&nbsp;&nbsp;
to&nbsp;&nbsp;&nbsp;&nbsp; DBD
<p>change&nbsp;&nbsp;&nbsp;&nbsp; INSTALLDB&nbsp;&nbsp;&nbsp;&nbsp;
to&nbsp;&nbsp;&nbsp; DB</p>
<blockquote>
include $(TOP)/configure/RULES.registerRecordDeviceDriver</blockquote>
</li>
<li>In &lt;top&gt;/configure/Makefile change
<p>change&nbsp;&nbsp;&nbsp; DBDINSTALL&nbsp;&nbsp;&nbsp;
to&nbsp;&nbsp;&nbsp;&nbsp; DBD <br>
&nbsp;</p>
<blockquote>
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(T_A) $@ $(TOP)</blockquote>
to
<blockquote>
@$(PERL) $(TOOLS)/makeConfigAppInclude.pl $(EPICS_HOST_ARCH) $(T_A) $@
$(TOP)</blockquote>
and add the line
<blockquote>
depends: install</blockquote>
to the bottom of the Makefile.</li>
<li>In all *App/*Db/Makefiles change
<blockquote>
include $(TOP)/configure/RULES.Db</blockquote>
to
<blockquote>
include $(TOP)/configure/RULES</blockquote>
</li>
<li>In all *App/src/Makefile files change
<blockquote>
DBDNAME = &lt;name&gt;App</blockquote>
to
<blockquote>
DBD += &lt;name&gt;</blockquote>
and remove the line<br>
<blockquote>
DBDEXPAND = &lt;name&gt;Include.dbd &nbsp;</blockquote>
NOTE: If any of your *App/*Db/Makefiles contain "DBDNAME =" lines you
should make these same changes in that *Db dirctory.</li>
<li>In all *App/src/Makefile Makefiles change
<blockquote>
RECTYPES=&lt;name&gt;.h &nbsp;</blockquote>
to
<blockquote>
DBDINC+=&lt;name&gt; &nbsp;</blockquote>
change
<blockquote>
MENUS=&lt;name&gt;.h &nbsp;</blockquote>
to
<blockquote>
DBDINC+=&lt;name&gt; &nbsp;</blockquote>
change
<blockquote>
BPTS &nbsp;</blockquote>
to
<blockquote>
DBD &nbsp;</blockquote>
change
<blockquote>
INSTALLDB &nbsp;</blockquote>
to
<blockquote>
DB &nbsp;</blockquote>
change
<blockquote>
DBDINSTALL &nbsp;</blockquote>
to
<blockquote>
DBD &nbsp;</blockquote>
</li>
<li>In all example *App/src/Makefile files change
<ul>
&nbsp; <br>
example_SRCS_DEFAULT += registerRecordDeviceDriver.c</ul>
<blockquote>
example_SRCS_DEFAULT += registerRecordDeviceDriver.c &nbsp;</blockquote>
to
<blockquote>
example_SRCS_DEFAULT += &lt;name&gt;_registerRecordDeviceDriver.cpp
&nbsp;</blockquote>
where &lt;name&gt; is the base name of a &lt;name&gt;.dbd file which was
created from a &lt;name&gt;Include.dbd file and which will be loaded in a
st.cmd or stcmd.host script (e.g. example).</li>
<li>In ./iocBoot/ioc&lt;name&gt;/st.cmd files change
<blockquote>
dbLoadDatabase("dbd/exampleApp.dbd") &nbsp;</blockquote>
to
<blockquote>
dbLoadDatabase("dbd/example.dbd") &nbsp;</blockquote>
</li>
to
<ul>
example_SRCS_DEFAULT += &lt;name&gt;_registerRecordDeviceDriver.cpp <br>
&nbsp;</ul>
where &lt;name&gt; is the base name of a &lt;name&gt;.dbd file which was
created from a &lt;name&gt;Include.dbd file and which will be loaded in a
st.cmd or stcmd.host script (e.g. example). <br>
&nbsp;
<ul>
<li>In ./iocBoot/ioc&lt;name&gt;/st.cmd files change</li>
</ul>
<br>
&nbsp;
<ul>
dbLoadDatabase("dbd/exampleApp.dbd")</ul>
to
<ul>
dbLoadDatabase("dbd/example.dbd") <br>
&nbsp;</ul>
<li>In &lt;top&gt;/iocBoot/ioc&lt;name&gt;/stcmd.host files change
<ul>
&nbsp; <br>
dbLoadDatabase("../../dbd/exampleApp.dbd",0,0)</ul>
<blockquote>
dbLoadDatabase("../../dbd/exampleApp.dbd",0,0)</blockquote>
to
<blockquote>
dbLoadDatabase("../../dbd/example.dbd",0,0)</blockquote>
</li>
to
<ul>
dbLoadDatabase("../../dbd/example.dbd",0,0)</ul>
</ul>
<h3>EPICS_HOST_ARCH changes</h3>
GNU compiler builds are now determined by the value of EPICS_HOST_ARCH and
<p>GNU compiler builds are now determined by the value of EPICS_HOST_ARCH and
are no longer specified in CONFIG_SITE.&nbsp; All references to the ANSI
(ACC/GCC) and CPLUSPLUS (CCC/G++) macros have been removed. <br>
&nbsp;
(ACC/GCC) and CPLUSPLUS (CCC/G++) macros have been removed.</p>
<h3>libCom</h3>
Most of the library routines and files starting with the prefix osi have been
changed to start with epics. Several also had major changes to their user
interface. See the latest version of the Application Developer's Guide for
details. <br>
&nbsp;
<p>Most of the library routines and files starting with the prefix osi have
been changed to start with epics. Several also had major changes to their
user interface. See the latest version of the Application Developer's Guide
for details.</p>
<center>
<h2>EPICS Release base 3.14.0alpha1 Notes</h2>
@@ -572,35 +841,44 @@ iocCore on platforms besides vxWorks.</p>
<p>iocCore is now supported on the following platforms:</p>
<ul>
<li>vxWorks</li>
<br>
Tornado II is required.
<ul>
<li>RTEMS</li>
</ul>
<br>
An open source real time operating system. It has been tested on MVME167
and MC68360 processors. RTEMS also supports powerPC.
<ul>
<li>solaris</li>
</ul>
<br>
Has been tested on solaris 2.6 and solaris 8 with Sun workshop 6.0 (C++
5.2). Sun workshop 5.0 (C++ 5.0) will not compile this version of EPICS.
<ul>
<li>Linux</li>
</ul>
<br>
Has been tested on Redhat x86 platforms.
<ul>
<li>winNT</li>
</ul>
<br>
Testing has been done with visual C++ 6.0.</ul>
A new version of the Application Developers Guide is available. The following
gives links to the new Application Developer's Guide and to RTEMS information.
<li>vxWorks
<p>http://www.aps.anl.gov/epics/modules/base/R3-14.php</p>
<blockquote>
Tornado II is required.</blockquote>
</li>
<li>RTEMS
<blockquote>
An open source real time operating system. It has been tested on
MVME167 and MC68360 processors. RTEMS also supports
powerPC.</blockquote>
</li>
<li>solaris
<blockquote>
Has been tested on solaris 2.6 and solaris 8 with Sun workshop 6.0 (C++
5.2). Sun workshop 5.0 (C++ 5.0) will not compile this version of
EPICS.</blockquote>
</li>
<li>Linux
<blockquote>
Has been tested on Redhat x86 platforms.</blockquote>
</li>
<li>winNT
<blockquote>
Testing has been done with visual C++ 6.0.</blockquote>
</li>
</ul>
<p>A new version of the Application Developers Guide is available. The
following gives links to the new Application Developer's Guide and to RTEMS
information.</p>
<blockquote>
<a
href="http://www.aps.anl.gov/epics/modules/base/R3-14.php">http://www.aps.anl.gov/epics/modules/base/R3-14.php</a></blockquote>
<p>Most of the Application Developer's Guide has only minor changes. The
following are new.</p>
@@ -621,7 +899,8 @@ It must be emphasized that this is an alpha release.</p>
<li>HPUX - No support currently because we could not find good support for
multithreading.</li>
</ul>
Building Applications
<h4>Building Applications</h4>
<ul>
<li>For new applications see Chapters 2 (New Features) and Chapter 4 (Build
Facility) of the Application Developer's Guide.</li>

View File

@@ -0,0 +1,216 @@
<?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 Checklist</title>
</head>
<body>
<h1>EPICS Base Release Procedures Checklist</h1>
<blockquote>
<p>$Id$</p>
</blockquote>
<p>This document is a checklist of things that must be done when creating a
new release of EPICS Base. Additions and ammendments to this list are
welcome.</p>
<p>The following roles are used, in addition to the names of individuals who
have been responsible for specific tasks in the past:</p>
<dl>
<dt><strong>Release Manager</strong></dt>
<dd>Responsible for the release</dd>
<dt><strong>Platform Developers</strong></dt>
<dd>Responsible for individual operating system platforms</dd>
</dl>
<p></p>
<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> </td>
<td>Marty Kraimer</td>
<td>Email all developers about the upcoming release and ask for a list
of remaining jobs that must be finished.</td>
</tr>
<tr>
<td> </td>
<td>All developers</td>
<td>Check the Mantis bug tracker for any outstanding items and handle
appropriately. All bugs that have been fixed should have been marked
as resolved.</td>
</tr>
<tr>
<td> </td>
<td>Marty Kraimer</td>
<td>Set a date by which all CVS commits must be done, after which
commits should only be to fix problems that show up during Final
Testing.</td>
</tr>
<tr>
<td> </td>
<td>Release Manager</td>
<td>Ensure that documentation will be updated before the release date:
<ul>
<li>Application Developers Guide</li>
<li>Release Notes</li>
<li>Known Problems</li>
<li>Other documents</li>
</ul>
</td>
</tr>
<tr>
<td> </td>
<td>?</td>
<td>...</td>
</tr>
<tr>
<th colspan="3">Final testing</th>
</tr>
<tr>
<td> </td>
<td>Platform Developers</td>
<td>Run the Soft IOC tests in mrkSoftTest on all available
platforms.</td>
</tr>
<tr>
<td> </td>
<td>Platform Developers</td>
<td>Check that all makeBaseApp templates build and run properly, all
xxxApp and xxxBoot types and any internal options, e.g. standalone
sncExample appliction, STATIC_BUILD=YES.</td>
</tr>
<tr>
<td> </td>
<td>Marty Kraimer</td>
<td>Run the VME I/O tests in mrkHwdTest on all available vxWorks VME
platforms.</td>
</tr>
<tr>
<td> </td>
<td>Jeff Hill</td>
<td>Run the CA client side regression tests on all available host
platforms.</td>
</tr>
<tr>
<td> </td>
<td>?</td>
<td>...</td>
</tr>
<tr>
<th colspan="3">Release Approval</th>
</tr>
<tr>
<td> </td>
<td>Release Manager</td>
<td>Obtain a positive 'Ok to release' from all platform developers.</td>
</tr>
<tr>
<th colspan="3">Make the release</th>
</tr>
<tr>
<td> </td>
<td>Janet Anderson</td>
<td>Edit and commit changes to the EPICS version number files,
config/CONFIG_BASE_VERSION and configure/CONFIG_BASE_VERSION.</td>
</tr>
<tr>
<td> </td>
<td>Janet Anderson</td>
<td>Tag the module in CVS. Version tags take the form
<code>R</code><i><code>x</code></i><code>-</code><i><code>y</code></i><code>-</code><i><code>z</code></i><code>[-{alpha,beta,</code><i><code>n</code></i><code>}]</code></td>
</tr>
<tr>
<td> </td>
<td>Janet Anderson</td>
<td>Export the tagged version, "cvs export -kv -d base-x.y.z
-r Rx-y-zepics/base", and create the
baseR<i>x.y.z</i>[{alpha,beta}<i>n</i>].tar.gz file of the result</td>
</tr>
<tr>
<td> </td>
<td>Janet Anderson</td>
<td>Test the tar file by extracting its contents and building it on at
least one supported platform</td>
</tr>
<tr>
<td> </td>
<td>Janet Anderson</td>
<td>Copy the tar file to the Base download area of the website</td>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Create a new website subdirectory to hold the release
documentation, and copy in the files from the base/documentation
directory of the tarfile</td>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Create a webpage for the new release with links to the release
documents and tar file</td>
</tr>
<tr>
<td> </td>
<td>?</td>
<td>...</td>
</tr>
<tr>
<th colspan="3">Announce it</th>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Add the new release tar file to the website Base download index
page</td>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Link to the release webpage from other relevent areas of the
website - update front page and sidebars</td>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Add the new Version number to the Mantis bug tracker</td>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Close all Mantis bug reports that were marked as resolved and which
have been fixed in this release</td>
</tr>
<tr>
<td> </td>
<td>Release Manager</td>
<td>Email tech-talk</td>
</tr>
<tr>
<td> </td>
<td>Andrew Johnson</td>
<td>Add an entry to the website News page, linking to the new
webpage</td>
</tr>
<tr>
<td> </td>
<td>?</td>
<td>...</td>
</tr>
</tbody>
</table>
</body>
</html>

View File

@@ -18,10 +18,10 @@ include $(TOP)/configure/CONFIG
# for c++ build add the dirs gdd and cas after ca
# (and uncomment the c++ files in src/lbCom/Makefile.Unix)
#
DIRS += toolsComm
DIRS += makeBaseApp
DIRS += makeBaseExt
DIRS += libCom
DIRS += toolsComm
DIRS += ca
DIRS += dbStatic
DIRS += registry

View File

@@ -43,40 +43,3 @@ int connectWithTimeout (int sfd,
setsockopt (sfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&sv, sizeof sv);
return ret;
}
/*
* RTEMS does not have the getprotobyXXX routines.
* Provide these simple-minded versions.
*/
static char *ip_alias[] = { "IP", NULL };
static char *icmp_alias[] = { "ICMP", NULL };
static char *tcp_alias[] = { "TCP", NULL };
static char *udp_alias[] = { "UDP", NULL };
static struct protoent prototab[] = {
{ "IP", ip_alias, IPPROTO_IP },
{ "ICMP", icmp_alias, IPPROTO_ICMP },
{ "TCP", tcp_alias, IPPROTO_TCP },
{ "UDP", udp_alias, IPPROTO_UDP },
};
struct protoent *
getprotobyname (const char *name)
{
int i;
for (i = 0 ; i < (sizeof prototab / sizeof prototab[0]) ; i++) {
if (strcasecmp (name, prototab[i].p_name) == 0)
return (struct protoent *) &prototab[i];
}
return NULL;
}
struct protoent *
getprotobynumber (int proto)
{
int i;
for (i = 0 ; i < (sizeof prototab / sizeof prototab[0]) ; i++) {
if (proto == prototab[i].p_proto)
return (struct protoent *) &prototab[i];
}
return NULL;
}

View File

@@ -1159,7 +1159,7 @@ static ASG *asAsgAdd(char *asgName)
&& ellCount(&pnext->ruleList)==0)
return(pnext);
}
errMessage(S_asLib_dupAsg,NULL);
errMessage(S_asLib_dupAsg,"asAsgAdd");
return(NULL);
}
pnext = (ASG *)ellNext((ELLNODE *)pnext);

View File

@@ -14,6 +14,7 @@
* (505) 665 1831
*/
#include <string>
#include <stdexcept>
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"

View File

@@ -359,10 +359,9 @@ completely independent control systems that will share the same network. For
instance, a site might set up an operational control system and a test
control system on the same network. In this situation it is desirable for the
test system and the operational system to use identical PV names without fear
of collision. Usually the best choice is to assign new port numbers to the
operational system&nbsp;and allow the test system to use the&nbsp;default CA
port numbers. A site might also configure the CA port numbers&nbsp;because
some other facility is already using the default port numbers.</p>
of collision. A site might also configure the CA port numbers&nbsp;because
some other facility is already using the default port numbers. The default
Channel Access port numbers have been registered with IANA.</p>
<table cellspacing="1" cellpadding="1" width="80%" border="1">
<col><tbody>

View File

@@ -89,7 +89,7 @@ PROD_LIBS = ca Com
PROD_SYS_LIBS_WIN32 = ws2_32 advapi32 user32
PROD_HOST += caRepeater catime acctst caConnTest casw caEventRate
OBJS_IOC += catime acctst caConnTest casw caEventRate
OBJS_IOC_vxWorks += catime acctst caConnTest casw caEventRate
caRepeater_SRCS = caRepeater.cpp
catime_SRCS = catimeMain.c catime.c
acctst_SRCS = acctstMain.c acctst.c

View File

@@ -22,6 +22,7 @@
*/
#include <new>
#include <float.h>
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"
@@ -41,6 +42,7 @@
#include "iocinf.h"
#include "oldAccess.h"
#include "autoPtrDestroy.h"
#include "cac.h"
epicsThreadPrivateId caClientContextId;
@@ -116,7 +118,8 @@ const char * ca_message_text []
"User destroyed channel",
"Invalid channel priority",
"Preemptive callback not enabled - additional threads may not join context",
"Client's protocol revision does not support transfers exceeding 16k bytes"
"Client's protocol revision does not support transfers exceeding 16k bytes",
"Virtual circuit connection sequence aborted"
};
static epicsThreadOnceId caClientContextIdOnce = EPICS_THREAD_ONCE_INIT;

View File

@@ -2407,10 +2407,44 @@ void verifyChannelPriorities ( const char *pName, unsigned interestLevel )
showProgressEnd ( interestLevel );
}
void verifyImmediateTearDown ()
void verifyImmediateTearDown ( const char * pName, unsigned interestLevel )
{
ca_task_initialize ();
ca_task_exit ();
unsigned i;
showProgressBegin ( "verifyImmediateTearDown", interestLevel );
for ( i = 0u; i < 1000; i++ ) {
chid chan;
int status;
double value = i;
ca_task_initialize ();
status = ca_create_channel ( pName, 0, 0, 0, & chan );
SEVCHK ( status, "immediate tear down channel create failed" );
status = ca_pend_io ( timeoutToPendIO );
SEVCHK ( status, "immediate tear down channel connect failed" );
assert ( status == ECA_NORMAL );
/*
* verify that puts pending when we call ca_task_exit()
* get flushed out
*/
if ( i > 0 ) {
double currentValue = 0.0;
status = ca_get ( DBR_DOUBLE, chan, & currentValue );
SEVCHK ( status, "immediate tear down channel get failed" );
status = ca_pend_io ( timeoutToPendIO );
SEVCHK ( status, "immediate tear down channel get failed" );
assert ( currentValue == i - 1 );
}
status = ca_put ( DBR_DOUBLE, chan, & value );
SEVCHK ( status, "immediate tear down channel put failed" );
ca_task_exit ();
epicsThreadSleep ( 1e-15 );
if ( i % 100 == 0 ) {
showProgress ( interestLevel );
}
}
showProgressEnd ( interestLevel );
}
/*
@@ -2592,7 +2626,7 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
epicsEnvSet ( "EPICS_CA_MAX_ARRAY_BYTES", tmpString );
}
verifyImmediateTearDown ();
verifyImmediateTearDown ( pName, interestLevel );
status = ca_context_create ( select );
SEVCHK ( status, NULL );
@@ -2664,7 +2698,8 @@ int acctst ( char *pName, unsigned interestLevel, unsigned channelCount,
pend_event_delay_test ( 0.25 );
/* ca_channel_status ( 0 ); */
ca_client_status ( 0u );
ca_client_status ( 0 );
/* ca_client_status ( 6u ); info about each channel */
pChans = calloc ( channelCount, sizeof ( *pChans ) );
assert ( pChans );

View File

@@ -33,16 +33,16 @@
#endif
#include "tsFreeList.h"
#include "cxxCompilerDependencies.h"
#include "compilerDependencies.h"
#ifdef autoPtrFreeListh_epicsExportSharedSymbols
# define epicsExportSharedSymbols
#endif
template < class T >
template < class T, unsigned N = 0x400, class MUTEX = epicsMutex >
class autoPtrFreeList {
public:
autoPtrFreeList ( tsFreeList < T > &, T * );
autoPtrFreeList ( tsFreeList < T, N, MUTEX > &, T * );
~autoPtrFreeList ();
T & operator * () const;
T * operator -> () const;
@@ -50,18 +50,19 @@ public:
T * release ();
private:
T * p;
tsFreeList < T > & freeList;
tsFreeList < T, N, MUTEX > & freeList;
// not implemented
autoPtrFreeList & operator = ( const autoPtrFreeList & );
autoPtrFreeList ( const autoPtrFreeList<T> & );
autoPtrFreeList ( const autoPtrFreeList < T, N, MUTEX > & );
};
template < class T >
inline autoPtrFreeList<T>::autoPtrFreeList ( tsFreeList < T > & freeListIn, T * pIn ) :
template < class T, unsigned N, class MUTEX >
inline autoPtrFreeList < T, N, MUTEX >::autoPtrFreeList (
tsFreeList < T, N, MUTEX > & freeListIn, T * pIn ) :
p ( pIn ), freeList ( freeListIn ) {}
template < class T >
inline autoPtrFreeList<T>::~autoPtrFreeList ()
template < class T, unsigned N, class MUTEX >
inline autoPtrFreeList < T, N, MUTEX >::~autoPtrFreeList ()
{
if ( this->p ) {
this->p->~T();
@@ -75,26 +76,26 @@ inline autoPtrFreeList<T>::~autoPtrFreeList ()
}
}
template < class T >
inline T & autoPtrFreeList<T>::operator * () const
template < class T, unsigned N, class MUTEX >
inline T & autoPtrFreeList < T, N, MUTEX >::operator * () const
{
return * this->p;
}
template < class T >
inline T * autoPtrFreeList<T>::operator -> () const
template < class T, unsigned N, class MUTEX >
inline T * autoPtrFreeList < T, N, MUTEX >::operator -> () const
{
return this->p;
}
template < class T >
inline T * autoPtrFreeList<T>::get () const
template < class T, unsigned N, class MUTEX >
inline T * autoPtrFreeList < T, N, MUTEX >::get () const
{
return this->p;
}
template < class T >
inline T * autoPtrFreeList<T>::release ()
template < class T, unsigned N, class MUTEX >
inline T * autoPtrFreeList < T, N, MUTEX >::release ()
{
T *pTmp = this->p;
this->p = 0;

View File

@@ -19,6 +19,7 @@
* Author: Jeff Hill
*/
#include <string>
#include <stdexcept>
#include <limits.h>
#include <float.h>

View File

@@ -31,7 +31,7 @@
#include "tsDLList.h"
#include "tsFreeList.h"
#include "epicsTime.h"
#include "cxxCompilerDependencies.h"
#include "compilerDependencies.h"
#ifdef bhehEpicsExportSharedSymbols
# define epicsExportSharedSymbols

View File

@@ -34,6 +34,7 @@
#define epicsExportSharedSymbols
#include "iocinf.h"
#include "oldAccess.h"
#include "cac.h"
extern epicsThreadPrivateId caClientContextId;
@@ -46,7 +47,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
{
static const unsigned short PORT_ANY = 0u;
this->sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
this->sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
if ( this->sock == INVALID_SOCKET ) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
@@ -64,7 +65,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
if ( status < 0 ) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
socket_close ( this->sock );
epicsSocketDestroy ( this->sock );
this->printf (
"%s: non blocking IO set fail because \"%s\"\n",
__FILE__, sockErrBuf );
@@ -84,7 +85,7 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
if ( status < 0 ) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
socket_close (this->sock);
epicsSocketDestroy (this->sock);
this->printf (
"CAC: unable to bind to an unconstrained "
"address because = \"%s\"\n",
@@ -100,12 +101,12 @@ ca_client_context::ca_client_context ( bool enablePreemptiveCallback ) :
if ( status < 0 ) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) );
socket_close ( this->sock );
epicsSocketDestroy ( this->sock );
this->printf ( "CAC: getsockname () error was \"%s\"\n", sockErrBuf );
throwWithLocation ( noSocket () );
}
if ( tmpAddr.sa.sa_family != AF_INET) {
socket_close ( this->sock );
epicsSocketDestroy ( this->sock );
this->printf ( "CAC: UDP socket was not inet addr family\n" );
throwWithLocation ( noSocket () );
}
@@ -131,7 +132,7 @@ ca_client_context::~ca_client_context ()
( *this->fdRegFunc )
( this->fdRegArg, this->sock, false );
}
socket_close ( this->sock );
epicsSocketDestroy ( this->sock );
}
void ca_client_context::destroyChannel ( oldChannelNotify & chan )
@@ -480,6 +481,7 @@ void ca_client_context::blockForEventAndEnableCallbacks (
void ca_client_context::callbackLock ()
{
// if preemptive callback is enabled then this is a noop
if ( this->pCallbackGuard.get() ) {
bool sendNeeded = false;
@@ -550,3 +552,56 @@ void ca_client_context::changeConnCallBack (
}
pConnCallBack = pfunc;
}
void ca_client_context::registerService ( cacService &service )
{
this->pClientCtx->registerService ( service );
}
cacChannel & ca_client_context::createChannel ( const char * name_str,
oldChannelNotify & chan, cacChannel::priLev pri )
{
return this->pClientCtx->createChannel ( name_str, chan, pri );
}
void ca_client_context::flushRequest ()
{
this->pClientCtx->flushRequest ();
}
unsigned ca_client_context::connectionCount () const
{
return this->pClientCtx->connectionCount ();
}
unsigned ca_client_context::beaconAnomaliesSinceProgramStart () const
{
return this->pClientCtx->beaconAnomaliesSinceProgramStart ();
}
CASG * ca_client_context::lookupCASG ( unsigned id )
{
return this->pClientCtx->lookupCASG ( id );
}
void ca_client_context::installCASG ( CASG &sg )
{
this->pClientCtx->installCASG ( sg );
}
void ca_client_context::uninstallCASG ( CASG &sg )
{
this->pClientCtx->uninstallCASG ( sg );
}
void ca_client_context::vSignal ( int ca_status, const char *pfilenm,
int lineno, const char *pFormat, va_list args )
{
this->pClientCtx->vSignal ( ca_status, pfilenm,
lineno, pFormat, args );
}
void ca_client_context::selfTest ()
{
this->pClientCtx->selfTest ();
}

View File

@@ -43,6 +43,7 @@
#include "bhe.h"
#include "net_convert.h"
#include "autoPtrDestroy.h"
#include "autoPtrFreeList.h"
static const char *pVersionCAC =
"@(#) " EPICS_VERSION_STRING
@@ -135,11 +136,11 @@ extern "C" void cacOnceFunc ( void * )
// cac::cac ()
//
cac::cac ( cacNotify & notifyIn ) :
ipToAEngine ( "dnsQuery" ),
programBeginTime ( epicsTime::getCurrent() ),
connTMO ( CA_CONN_VERIFY_PERIOD ),
cbMutex ( notifyIn ),
globalServiceList ( globalServiceListCAC.getReference () ),
ipToAEngine ( ipAddrToAsciiEngine::allocate () ),
timerQueue ( epicsTimerQueueActive::allocate ( false,
lowestPriorityLevelAbove(epicsThreadGetPrioritySelf()) ) ),
pUserName ( 0 ),
@@ -269,10 +270,15 @@ cac::~cac ()
// this will block for oustanding sends to go out so dont
// hold a lock while waiting
//
while ( this->serverList.count() ) {
this->iiuUninstall.wait ();
{
epicsGuard < cacMutex > guard ( this->mutex );
while ( this->serverList.count() ) {
epicsGuardRelease < cacMutex > unguard ( guard );
this->iiuUninstall.wait ();
}
}
if ( this->pudpiiu ) {
delete this->pudpiiu;
}
@@ -293,6 +299,8 @@ cac::~cac ()
this->timerQueue.release ();
this->ipToAEngine.release ();
errlogFlush ();
// its ok for channels and subscriptions to still
@@ -526,15 +534,13 @@ bool cac::transferChanToVirtCircuit (
return false;
}
bool v41Ok, v42Ok;
nciu *pChan;
{
epicsGuard < cacMutex > guard ( this->mutex );
/*
* ignore search replies for deleted channels
*/
pChan = this->chanTable.lookup ( cid );
nciu * pChan = this->chanTable.lookup ( cid );
if ( ! pChan ) {
return false;
}
@@ -548,8 +554,9 @@ bool cac::transferChanToVirtCircuit (
char acc[64];
pChan->getPIIU()->hostName ( acc, sizeof ( acc ) );
msgForMultiplyDefinedPV * pMsg = new ( this->mdpvFreeList )
msgForMultiplyDefinedPV ( *this, pChan->pName (), acc, addr );
pMsg->ioInitiate ( this->ipToAEngine );
msgForMultiplyDefinedPV ( this->ipToAEngine,
*this, pChan->pName (), acc );
pMsg->ioInitiate ( addr );
}
return false;
}
@@ -566,7 +573,9 @@ bool cac::transferChanToVirtCircuit (
}
else {
try {
epics_auto_ptr < tcpiiu > pnewiiu ( new tcpiiu (
autoPtrFreeList < tcpiiu, 32, epicsMutexNOOP > pnewiiu (
this->freeListVirtualCircuit,
new ( this->freeListVirtualCircuit ) tcpiiu (
*this, this->cbMutex, this->connTMO, this->timerQueue,
addr, this->comBufMemMgr, minorVersionNumber,
this->ipToAEngine, pChan->getPriority() ) );
@@ -596,36 +605,9 @@ bool cac::transferChanToVirtCircuit (
this->pudpiiu->uninstallChan ( guard, *pChan );
piiu->installChannel ( guard, *pChan, sid, typeCode, count );
v41Ok = piiu->ca_v41_ok ();
v42Ok = piiu->ca_v42_ok ();
if ( ! v42Ok ) {
if ( ! piiu->ca_v42_ok () ) {
// connect to old server with lock applied
pChan->connect ();
// resubscribe for monitors from this channel
this->connectAllIO ( guard, *pChan );
}
}
if ( ! v42Ok ) {
// channel uninstal routine grabs the callback lock so
// a channel will not be deleted while a call back is
// in progress
//
// the callback lock is also taken when a channel
// disconnects to prevent a race condition with the
// code below - ie we hold the callback lock here
// so a chanel cant be destroyed out from under us.
pChan->connectStateNotify ( cbGuard );
/*
* if less than v4.1 then the server will never
* send access rights and we know that there
* will always be access and also need to call
* their call back here
*/
if ( ! v41Ok ) {
pChan->accessRightsNotify ( cbGuard );
pChan->connect ( cbGuard, guard );
}
}
@@ -1016,7 +998,7 @@ void cac::connectAllIO ( epicsGuard < cacMutex > & guard, nciu & chan )
while ( pNetIO.valid () ) {
tsDLIter < baseNMIU > next = pNetIO;
next++;
class netSubscription *pSubscr = pNetIO->isSubscription ();
class netSubscription * pSubscr = pNetIO->isSubscription ();
// disconnected channels should have only subscription IO attached
assert ( pSubscr );
try {
@@ -1326,26 +1308,14 @@ bool cac::accessRightsRespAction (
epicsGuard < callbackMutex > & cbGuard, tcpiiu &, // X aCC 431
const epicsTime &, const caHdrLargeArray & hdr, void * /* pMsgBdy */ )
{
nciu * pChan;
{
epicsGuard < cacMutex > guard ( this->mutex );
pChan = this->chanTable.lookup ( hdr.m_cid );
if ( pChan ) {
unsigned ar = hdr.m_available;
caAccessRights accessRights (
( ar & CA_PROTO_ACCESS_RIGHT_READ ) ? true : false,
( ar & CA_PROTO_ACCESS_RIGHT_WRITE ) ? true : false);
pChan->accessRightsStateChange ( accessRights );
}
}
//
// the channel delete routine takes the call back lock so
// that this will not be called when the channel is being
// deleted.
//
epicsGuard < cacMutex > guard ( this->mutex );
nciu * pChan = this->chanTable.lookup ( hdr.m_cid );
if ( pChan ) {
pChan->accessRightsNotify ( cbGuard );
unsigned ar = hdr.m_available;
caAccessRights accessRights (
( ar & CA_PROTO_ACCESS_RIGHT_READ ) ? true : false,
( ar & CA_PROTO_ACCESS_RIGHT_WRITE ) ? true : false);
pChan->accessRightsStateChange ( accessRights, cbGuard, guard );
}
return true;
@@ -1355,33 +1325,28 @@ bool cac::claimCIURespAction (
epicsGuard < callbackMutex > &cbGuard, tcpiiu & iiu, // X aCC 431
const epicsTime &, const caHdrLargeArray & hdr, void * /* pMsgBdy */ )
{
nciu * pChan;
{
epicsGuard < cacMutex > guard ( this->mutex );
pChan = this->chanTable.lookup ( hdr.m_cid );
if ( pChan ) {
unsigned sidTmp;
if ( iiu.ca_v44_ok() ) {
sidTmp = hdr.m_available;
}
else {
sidTmp = pChan->getSID ();
}
pChan->connect ( hdr.m_dataType, hdr.m_count, sidTmp, iiu.ca_v41_ok() );
this->connectAllIO ( guard, *pChan );
}
else if ( iiu.ca_v44_ok() ) {
// this indicates a claim response for a resource that does
// not exist in the client - so just remove it from the server
iiu.clearChannelRequest ( guard, hdr.m_available, hdr.m_cid );
}
}
// the callback lock is taken when a channel is unistalled or when
// is disconnected to prevent race conditions here
epicsGuard < cacMutex > guard ( this->mutex );
nciu * pChan = this->chanTable.lookup ( hdr.m_cid );
if ( pChan ) {
pChan->connectStateNotify ( cbGuard );
unsigned sidTmp;
if ( iiu.ca_v44_ok() ) {
sidTmp = hdr.m_available;
}
else {
sidTmp = pChan->getSID ();
}
// the callback lock is taken when a channel is unistalled or when
// is disconnected to prevent race conditions here
pChan->connect ( hdr.m_dataType, hdr.m_count, sidTmp,
cbGuard, guard );
}
else if ( iiu.ca_v44_ok() ) {
// this indicates a claim response for a resource that does
// not exist in the client - so just remove it from the server
iiu.clearChannelRequest ( guard, hdr.m_available, hdr.m_cid );
}
return true;
}
@@ -1406,11 +1371,8 @@ void cac::disconnectChannel (
assert ( this->pudpiiu );
this->disconnectAllIO ( guard, chan, true );
chan.getPIIU()->uninstallChan ( guard, chan );
chan.disconnect ( *this->pudpiiu );
this->pudpiiu->installChannel ( currentTime, chan );
epicsGuardRelease < cacMutex > autoMutexRelease ( guard );
chan.connectStateNotify ( cbGuard );
chan.accessRightsNotify ( cbGuard );
chan.disconnect ( *this->pudpiiu, cbGuard, guard );
this->pudpiiu->installDisconnectedChannel ( currentTime, chan );
}
bool cac::badTCPRespAction ( epicsGuard < callbackMutex > &, tcpiiu & iiu,
@@ -1497,6 +1459,7 @@ void cac::vSignal ( int ca_status, const char *pfilenm,
void cac::selfTest () const
{
epicsGuard < cacMutex > guard ( this->mutex );
this->chanTable.verify ();
this->ioTable.verify ();
this->sgTable.verify ();
@@ -1511,48 +1474,76 @@ void cac::disconnectNotify ( tcpiiu & iiu )
void cac::initiateAbortShutdown ( tcpiiu & iiu )
{
int exception = ECA_DISCONN;
char hostNameTmp[64];
bool exceptionNeeded = false;
epicsGuard < callbackMutex > cbGuard ( this->cbMutex );
epicsGuard < cacMutex > guard ( this->mutex );
iiu.initiateAbortShutdown ( cbGuard, guard );
{
epicsGuard < cacMutex > guard ( this->mutex );
// Disconnect all channels immediately from the timer thread
// because on certain OS such as HPUX it's difficult to
// unblock a blocking send() call, and we need immediate
// disconnect notification.
if ( iiu.channelCount() ) {
char hostNameTmp[64];
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
genLocalExcep ( cbGuard, *this, ECA_DISCONN, hostNameTmp );
if ( iiu.channelCount() ) {
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
if ( iiu.connecting () ) {
exception = ECA_CONNSEQTMO;
}
exceptionNeeded = true;
}
iiu.initiateAbortShutdown ( cbGuard, guard );
// Disconnect all channels immediately from the timer thread
// because on certain OS such as HPUX it's difficult to
// unblock a blocking send() call, and we need immediate
// disconnect notification.
iiu.removeAllChannels ( cbGuard, guard, *this );
}
if ( exceptionNeeded ) {
genLocalExcep ( cbGuard, *this, exception, hostNameTmp );
}
iiu.removeAllChannels ( cbGuard, guard, *this );
}
void cac::uninstallIIU ( epicsGuard < callbackMutex > & cbGuard, tcpiiu & iiu )
void cac::destroyIIU ( tcpiiu & iiu )
{
epicsGuard < cacMutex > guard ( this->mutex );
if ( iiu.channelCount() ) {
char hostNameTmp[64];
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
genLocalExcep ( cbGuard, *this, ECA_DISCONN, hostNameTmp );
}
osiSockAddr addr = iiu.getNetworkAddress();
if ( addr.sa.sa_family == AF_INET ) {
inetAddrID tmp ( addr.ia );
bhe * pBHE = this->beaconTable.lookup ( tmp );
if ( pBHE ) {
pBHE->unregisterIIU ( iiu );
{
epicsGuard < callbackMutex > cbGuard ( this->cbMutex );
epicsGuard < cacMutex > guard ( this->mutex );
if ( iiu.channelCount() ) {
char hostNameTmp[64];
iiu.hostName ( hostNameTmp, sizeof ( hostNameTmp ) );
genLocalExcep ( cbGuard, *this, ECA_DISCONN, hostNameTmp );
}
osiSockAddr addr = iiu.getNetworkAddress();
if ( addr.sa.sa_family == AF_INET ) {
inetAddrID tmp ( addr.ia );
bhe * pBHE = this->beaconTable.lookup ( tmp );
if ( pBHE ) {
pBHE->unregisterIIU ( iiu );
}
}
assert ( this->pudpiiu );
iiu.removeAllChannels ( cbGuard, guard, *this );
}
assert ( this->pudpiiu );
iiu.removeAllChannels ( cbGuard, guard, *this );
this->serverTable.remove ( iiu );
this->serverList.remove ( iiu );
{
// this lock synchronizes with a blocking loop
// in ~cac waiting until no circuits are installed.
// After the cac lock is released here we must not
// access any part of the cac (including the
// callback lock) because ~cac is allowed to
// complete.
epicsGuard < cacMutex > guard ( this->mutex );
// signal iiu uninstal event so that cac can properly shut down
this->iiuUninstall.signal();
this->serverTable.remove ( iiu );
this->serverList.remove ( iiu );
iiu.~tcpiiu ();
this->freeListVirtualCircuit.release ( & iiu );
// signal iiu uninstal event so that cac can properly shut down
this->iiuUninstall.signal();
}
}
double cac::beaconPeriod ( const nciu & chan ) const
@@ -1575,7 +1566,7 @@ double cac::beaconPeriod ( const nciu & chan ) const
void cac::initiateConnect ( nciu & chan )
{
assert ( this->pudpiiu );
this->pudpiiu->installChannel (
this->pudpiiu->installNewChannel (
epicsTime::getCurrent(), chan );
}

View File

@@ -31,7 +31,7 @@
# undef epicsExportSharedSymbols
#endif
#include "cxxCompilerDependencies.h"
#include "compilerDependencies.h"
#include "ipAddrToAsciiAsynchronous.h"
#include "msgForMultiplyDefinedPV.h"
#include "epicsTimer.h"
@@ -49,6 +49,7 @@
#include "cacIO.h"
#include "netIO.h"
#include "localHostName.h"
#include "virtualCircuit.h"
class netWriteNotifyIO;
class netReadNotifyIO;
@@ -71,18 +72,6 @@ struct caHdrLargeArray;
extern epicsThreadPrivateId caClientCallbackThreadId;
class callbackMutex {
public:
callbackMutex ( cacNotify & );
~callbackMutex ();
void lock ();
void unlock ();
private:
cacNotify & notify;
callbackMutex ( callbackMutex & );
callbackMutex & operator = ( callbackMutex & );
};
class cacMutex {
public:
void lock ();
@@ -109,6 +98,18 @@ public:
epicsGuard < cacMutex > &, nciu & chan ) = 0;
};
class callbackMutex {
public:
callbackMutex ( cacNotify & );
~callbackMutex ();
void lock ();
void unlock ();
private:
cacNotify & notify;
callbackMutex ( callbackMutex & );
callbackMutex & operator = ( callbackMutex & );
};
class cac : private cacRecycle, private cacDisconnectChannelPrivate,
private callbackForMultiplyDefinedPV
{
@@ -133,7 +134,7 @@ public:
unsigned cid, unsigned sid,
ca_uint16_t typeCode, arrayElementCount count,
unsigned minorVersionNumber, const osiSockAddr & );
void connectAllIO ( epicsGuard < cacMutex > &, nciu & chan );
void destroyChannel ( nciu & );
cacChannel & createChannel ( const char *name_str,
cacChannelNotify &chan, cacChannel::priLev pri );
@@ -189,11 +190,10 @@ public:
static unsigned highestPriorityLevelBelow ( unsigned priority );
void initiateAbortShutdown ( tcpiiu & );
void disconnectNotify ( tcpiiu & );
void uninstallIIU ( epicsGuard < callbackMutex > &, tcpiiu & iiu );
void destroyIIU ( tcpiiu & iiu );
private:
localHostName hostNameCache;
ipAddrToAsciiEngine ipToAEngine;
cacServiceList services;
chronIntIdResTable < nciu > chanTable;
//
@@ -213,6 +213,9 @@ private:
resTable < bhe, inetAddrID > beaconTable;
resTable < tcpiiu, caServerID > serverTable;
tsDLList < tcpiiu > serverList;
tsFreeList
< class tcpiiu, 32, epicsMutexNOOP >
freeListVirtualCircuit;
tsFreeList
< class netReadNotifyIO, 1024, epicsMutexNOOP >
freeListReadNotifyIO;
@@ -239,6 +242,7 @@ private:
epicsSingleton
< cacServiceList >::reference
globalServiceList;
ipAddrToAsciiEngine & ipToAEngine;
epicsTimerQueueActive & timerQueue;
char * pUserName;
class udpiiu * pudpiiu;
@@ -251,7 +255,6 @@ private:
unsigned beaconAnomalyCount;
void run ();
void connectAllIO ( epicsGuard < cacMutex > &, nciu &chan );
void disconnectAllIO ( epicsGuard < cacMutex > & locker, nciu & chan, bool enableCallbacks );
void flushIfRequired ( epicsGuard < cacMutex > &, netiiu & );
void recycleReadNotifyIO ( netReadNotifyIO &io );

View File

@@ -55,6 +55,7 @@
#include "tsDLList.h"
#include "epicsMutex.h"
#include "epicsSingleton.h"
#ifdef cacIOh_restore_epicsExportSharedSymbols
# define epicsExportSharedSymbols
@@ -250,6 +251,7 @@ private:
};
template < class T > class epicsSingleton;
epicsShareExtern epicsSingleton < cacServiceList > globalServiceListCAC;
epicsShareFunc int epicsShareAPI ca_register_service ( cacService *pService );

View File

@@ -142,6 +142,7 @@
#define ECA_BADPRIORITY DEFMSG(CA_K_ERROR, 56)
#define ECA_NOTTHREADED DEFMSG(CA_K_ERROR, 57)
#define ECA_16KARRAYCLIENT DEFMSG(CA_K_WARNING, 58)
#define ECA_CONNSEQTMO DEFMSG(CA_K_WARNING, 59)
#ifdef __STDC__
#define CAERR_USE_FUNC_PROTO

View File

@@ -86,7 +86,7 @@ int main ( int argc, char ** argv )
}
if ( ! validCommandLine ) {
printf ( "usage: \"%s <-i interestLevel>\"", argv[0] );
printf ( "usage: casw <-i interestLevel>\n" );
return 0;
}
@@ -100,7 +100,7 @@ int main ( int argc, char ** argv )
caStartRepeaterIfNotInstalled ( repeaterPort );
sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
sock = epicsSocketCreate ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
if ( sock == INVALID_SOCKET ) {
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
@@ -119,7 +119,7 @@ int main ( int argc, char ** argv )
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
sockErrBuf, sizeof ( sockErrBuf ) );
socket_close ( sock );
epicsSocketDestroy ( sock );
errlogPrintf ( "casw: unable to bind to an unconstrained address because = \"%s\"\n",
sockErrBuf );
return -1;
@@ -131,7 +131,7 @@ int main ( int argc, char ** argv )
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
sockErrBuf, sizeof ( sockErrBuf ) );
socket_close ( sock );
epicsSocketDestroy ( sock );
errlogPrintf ( "casw: unable to set socket to nonblocking state because \"%s\"\n",
sockErrBuf );
return -1;
@@ -153,7 +153,7 @@ int main ( int argc, char ** argv )
attemptNumber++;
if ( attemptNumber > 100 ) {
socket_close ( sock );
epicsSocketDestroy ( sock );
errlogPrintf ( "casw: unable to register with the CA repeater\n" );
return -1;
}
@@ -165,7 +165,7 @@ int main ( int argc, char ** argv )
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
sockErrBuf, sizeof ( sockErrBuf ) );
socket_close ( sock );
epicsSocketDestroy ( sock );
errlogPrintf ( "casw: unable to set socket to blocking state because \"%s\"\n",
sockErrBuf );
return -1;
@@ -181,7 +181,7 @@ int main ( int argc, char ** argv )
char sockErrBuf[64];
epicsSocketConvertErrnoToString (
sockErrBuf, sizeof ( sockErrBuf ) );
socket_close ( sock );
epicsSocketDestroy ( sock );
errlogPrintf ("casw: error from recv was = \"%s\"\n",
sockErrBuf );
return -1;
@@ -247,7 +247,7 @@ int main ( int argc, char ** argv )
if ( anomaly ) {
char date[64];
currentTime.strftime ( date, sizeof ( date ),
"%a %b %d %Y %H:%M:%S.%f");
"%Y-%m-%d %T.%09f");
char host[64];
ipAddrToA ( &ina, host, sizeof ( host ) );
printf ( "%-40s %s\n",
@@ -256,6 +256,7 @@ int main ( int argc, char ** argv )
printf ( "\testimate=%f current=%f\n",
pBHE->period (), currentTime - previousTime );
}
fflush(stdout);
}
}
else {

View File

@@ -34,7 +34,7 @@
#include "tsFreeList.h"
#include "tsDLList.h"
#include "osiWireFormat.h"
#include "cxxCompilerDependencies.h"
#include "compilerDependencies.h"
static const unsigned comBufSize = 0x4000;

View File

@@ -24,6 +24,7 @@
* 505 665 1831
*/
#include <string>
#include <stdexcept>
#define epicsExportSharedSymbols

View File

@@ -24,6 +24,7 @@
* 505 665 1831
*/
#include <string>
#include <stdexcept>
#define epicsAssertAuthor "Jeff Hill johill@lanl.gov"

View File

@@ -27,14 +27,16 @@
#include <string.h>
#if 0
#include "iocinf.h"
#endif
#include "hostNameCache.h"
#include "epicsGuard.h"
hostNameCache::hostNameCache ( const osiSockAddr &addr, ipAddrToAsciiEngine &engine ) :
ipAddrToAsciiAsynchronous ( addr ),
ioComplete ( false )
hostNameCache::hostNameCache ( const osiSockAddr & addr, ipAddrToAsciiEngine & engine ) :
dnsTransaction ( engine.createTransaction() ), ioComplete ( false )
{
this->ioInitiate ( engine );
this->dnsTransaction.ipAddrToAscii ( addr, *this );
}
void hostNameCache::destroy ()
@@ -44,11 +46,14 @@ void hostNameCache::destroy ()
hostNameCache::~hostNameCache ()
{
this->dnsTransaction.release ();
}
void hostNameCache::ioCompletionNotify ( const char *pHostNameIn )
void hostNameCache::transactionComplete ( const char *pHostNameIn )
{
epicsGuard < epicsMutex > guard ( this->mutex );
if ( ! this->ioComplete ) {
this->ioComplete = true;
strncpy ( this->hostNameBuf, pHostNameIn, sizeof ( this->hostNameBuf ) );
this->hostNameBuf[ sizeof ( this->hostNameBuf ) - 1 ] = '\0';
}
@@ -56,12 +61,13 @@ void hostNameCache::ioCompletionNotify ( const char *pHostNameIn )
void hostNameCache::hostName ( char *pBuf, unsigned bufSize ) const
{
epicsGuard < epicsMutex > guard ( this->mutex );
if ( this->ioComplete ) {
strncpy ( pBuf, this->hostNameBuf, bufSize);
pBuf [ bufSize - 1u ] = '\0';
}
else {
osiSockAddr tmpAddr = this->address ();
osiSockAddr tmpAddr = this->dnsTransaction.address ();
sockAddrToDottedIP ( &tmpAddr.sa, pBuf, bufSize );
}
}

View File

@@ -33,22 +33,24 @@
#endif
#include "ipAddrToAsciiAsynchronous.h"
#include "tsFreeList.h"
#include "epicsMutex.h"
#ifdef hostNameCache_epicsExportSharedSymbols
# define epicsExportSharedSymbols
#endif
class hostNameCache : public ipAddrToAsciiAsynchronous {
class hostNameCache : public ipAddrToAsciiCallBack {
public:
hostNameCache ( const osiSockAddr &addr, ipAddrToAsciiEngine &engine );
~hostNameCache ();
void destroy ();
void ioCompletionNotify ( const char *pHostName );
void transactionComplete ( const char * pHostName );
void hostName ( char *pBuf, unsigned bufLength ) const;
private:
bool ioComplete;
char hostNameBuf [128];
mutable epicsMutex mutex;
ipAddrToAsciiTransaction & dnsTransaction;
bool ioComplete;
};
#endif // #ifndef hostNameCacheh

View File

@@ -216,6 +216,7 @@ extern "C" void epicsShareAPI configureChannelAccessAddressList
ellInit ( &bcastList ); // X aCC 392
addr.ia.sin_family = AF_UNSPEC;
osiSockDiscoverBroadcastAddresses ( &bcastList, sock, &addr );
forcePort ( &bcastList, port );
removeDuplicateAddresses ( &tmpList, &bcastList, 1 );
if ( ellCount ( &tmpList ) == 0 ) { // X aCC 392
osiSockAddrNode *pNewNode;
@@ -234,9 +235,6 @@ extern "C" void epicsShareAPI configureChannelAccessAddressList
errlogPrintf ( "configureChannelAccessAddressList(): no memory available for configuration\n" );
}
}
else {
forcePort ( &tmpList, port );
}
}
addAddrToChannelAccessAddressList ( &tmpList, &EPICS_CA_ADDR_LIST, port );

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