From da6228f1353c3a34f6e19c696b5fc6b859a0ffb7 Mon Sep 17 00:00:00 2001 From: Janet Anderson Date: Mon, 16 Dec 2013 16:16:34 -0600 Subject: [PATCH 01/16] Set snapshot to 3.14.12.4-DEV --- configure/CONFIG_BASE_VERSION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure/CONFIG_BASE_VERSION b/configure/CONFIG_BASE_VERSION index 432827e23..b4adca194 100644 --- a/configure/CONFIG_BASE_VERSION +++ b/configure/CONFIG_BASE_VERSION @@ -33,7 +33,7 @@ EPICS_MODIFICATION = 12 EPICS_PATCH_LEVEL = 4 # This will end in -DEV between official releases -#EPICS_DEV_SNAPSHOT=-DEV +EPICS_DEV_SNAPSHOT=-DEV #EPICS_DEV_SNAPSHOT=-pre1 #EPICS_DEV_SNAPSHOT=-pre1-DEV #EPICS_DEV_SNAPSHOT=-pre2 @@ -42,7 +42,7 @@ EPICS_PATCH_LEVEL = 4 #EPICS_DEV_SNAPSHOT=-rc1-DEV #EPICS_DEV_SNAPSHOT=-rc2 #EPICS_DEV_SNAPSHOT=-rc2-DEV -EPICS_DEV_SNAPSHOT= +#EPICS_DEV_SNAPSHOT= # No changes should be needed below here From bfde24907c9310ab0583a76dd0524290be487d16 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 16 Dec 2013 17:29:30 -0600 Subject: [PATCH 02/16] doc: Prepare release notes for 3.14.12.5 In case there ever is one. --- documentation/RELEASE_NOTES.html | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index 0fc7153d0..f00cabdcf 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -3,16 +3,19 @@ - EPICS Base R3.14.12.4 Release Notes + EPICS Base R3.14.12.5 Release Notes -

EPICS Base Release 3.14.12.4

+

EPICS Base Release 3.14.12.5

-

Changes between 3.14.12.3 and 3.14.12.4

+

Changes between 3.14.12.4 and 3.14.12.5

+ +

Changes between 3.14.12.3 and 3.14.12.4

+

New test for environment variables

A new test program epicsEnvTest has been added to the libCom tests which From b32127c5de8db67a9bcaaba2bf6338a12419cdfd Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 29 Jan 2014 16:52:22 -0600 Subject: [PATCH 03/16] libCom: Fix epicsTime::strftime() roll-over bug Fractional seconds could round-up to .000 without incrementing the integer seconds. We can't actually do the latter, so we prevent the roll-over and clamp at all 9's instead. Idea from Eric Norum. --- src/libCom/osi/epicsTime.cpp | 6 ++++-- src/libCom/test/epicsTimeTest.cpp | 14 +++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/libCom/osi/epicsTime.cpp b/src/libCom/osi/epicsTime.cpp index ef6437ffa..414bd5d4f 100644 --- a/src/libCom/osi/epicsTime.cpp +++ b/src/libCom/osi/epicsTime.cpp @@ -554,9 +554,11 @@ size_t epicsTime::strftime ( static_cast < unsigned long > ( 1e1 ), static_cast < unsigned long > ( 1e0 ) }; - // round and convert nanosecs to integer of correct range + // round without overflowing into whole seconds unsigned long frac = tmns.nSec + div[fracWid] / 2; - frac %= static_cast < unsigned long > ( 1e9 ); + if (frac >= nSecPerSec) + frac = nSecPerSec - 1; + // convert nanosecs to integer of correct range frac /= div[fracWid]; char fracFormat[32]; sprintf ( fracFormat, "%%0%lulu", fracWid ); diff --git a/src/libCom/test/epicsTimeTest.cpp b/src/libCom/test/epicsTimeTest.cpp index c108eca7f..83d0a8a07 100644 --- a/src/libCom/test/epicsTimeTest.cpp +++ b/src/libCom/test/epicsTimeTest.cpp @@ -48,7 +48,7 @@ MAIN(epicsTimeTest) const int wasteTime = 100000; const int nTimes = 10; - testPlan(12 + nTimes * 18); + testPlan(15 + nTimes * 18); try { const epicsTimeStamp epochTS = {0, 0}; @@ -96,6 +96,10 @@ MAIN(epicsTimeTest) et.strftime(buf, sizeof(buf), pFormat); testOk(strcmp(buf, "1990-01-01 00.098765432") == 0, "'%s' => '%s'", pFormat, buf); + pFormat = "%S.%03f"; + et.strftime(buf, sizeof(buf), pFormat); + testOk(strcmp(buf, "00.099") == 0, "'%s' => '%s'", pFormat, buf); + pFormat = "%S.%04f"; et.strftime(buf, sizeof(buf), pFormat); testOk(strcmp(buf, "00.0988") == 0, "'%s' => '%s'", pFormat, buf); @@ -113,6 +117,14 @@ MAIN(epicsTimeTest) et.strftime(smbuf, sizeof(smbuf), pFormat); testOk(strcmp(smbuf, "00.*") == 0, "'%s' => '%s'", pFormat, smbuf); + pFormat = "%S.%03f"; + (et + 0.9).strftime(buf, sizeof(buf), pFormat); + testOk(strcmp(buf, "00.999") == 0, "0.998765 => '%s'", buf); + + pFormat = "%S.%03f"; + (et + 0.901).strftime(buf, sizeof(buf), pFormat); + testOk(strcmp(buf, "00.999") == 0, "0.999765 => '%s'", buf); + pFormat = "%%S.%%05f"; et.strftime(buf, sizeof(buf), pFormat); testOk(strcmp(buf, "%S.%05f") == 0, "'%s' => '%s'", pFormat, buf); From 6ad61aea32ccb8eef710ba1313b11726d0207d0d Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 11 Feb 2014 17:44:14 -0600 Subject: [PATCH 04/16] Fix missing spaces in ADDR_LIST formats. --- src/ca/CAref.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ca/CAref.html b/src/ca/CAref.html index 9753a151d..43a4f43fa 100644 --- a/src/ca/CAref.html +++ b/src/ca/CAref.html @@ -796,7 +796,7 @@ been done to address this issue so far).

EPICS_CAS_BEACON_ADDR_LIST - {N.N.N.NN.N.N.N:P...} + {N.N.N.N N.N.N.N:P ...} EPICS_CA_ADDR_LIST1 @@ -811,12 +811,12 @@ been done to address this issue so far).

EPICS_CAS_INTF_ADDR_LIST - {N.N.N.NN.N.N.N:P...} + {N.N.N.N N.N.N.N:P ...} <none> EPICS_CAS_IGNORE_ADDR_LIST - {N.N.N.NN.N.N.N:P...} + {N.N.N.N N.N.N.N:P ...} <none> From a591857c3004cf314225dd8462de9d26638234f1 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Mon, 17 Feb 2014 10:12:53 -0600 Subject: [PATCH 05/16] configure: Fixes to iOS build rules From Tom Pelaia, these should now allow compiles for the x86-based simulator as well as for ARM-based devices. --- configure/os/CONFIG.Common.ios-arm | 2 ++ configure/os/CONFIG.Common.ios-x86 | 3 +++ configure/os/CONFIG.Common.iosCommon | 7 +++++-- configure/os/CONFIG_SITE.Common.iosCommon | 17 ++++++++++++----- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/configure/os/CONFIG.Common.ios-arm b/configure/os/CONFIG.Common.ios-arm index 26296a38c..cc297b627 100644 --- a/configure/os/CONFIG.Common.ios-arm +++ b/configure/os/CONFIG.Common.ios-arm @@ -11,6 +11,8 @@ IOS_PLATFORM = iPhoneOS OP_SYS_CFLAGS += -fno-inline-functions +OP_SYS_CFLAGS += -miphoneos-version-min=$(IOS_DEPLOYMENT_TARGET) +OP_SYS_LDFLAGS += -miphoneos-version-min=$(IOS_DEPLOYMENT_TARGET) # iOS optimization flags for arm architecture OPT_CFLAGS_YES = -O2 diff --git a/configure/os/CONFIG.Common.ios-x86 b/configure/os/CONFIG.Common.ios-x86 index 064319d2b..0c786653d 100644 --- a/configure/os/CONFIG.Common.ios-x86 +++ b/configure/os/CONFIG.Common.ios-x86 @@ -10,6 +10,9 @@ IOS_PLATFORM = iPhoneSimulator +OP_SYS_CFLAGS += -mios-simulator-version-min=$(IOS_DEPLOYMENT_TARGET) +OP_SYS_LDFLAGS += -mios-simulator-version-min=$(IOS_DEPLOYMENT_TARGET) + # # Architecture-specific information # diff --git a/configure/os/CONFIG.Common.iosCommon b/configure/os/CONFIG.Common.iosCommon index 6316eb602..df969bac4 100644 --- a/configure/os/CONFIG.Common.iosCommon +++ b/configure/os/CONFIG.Common.iosCommon @@ -40,7 +40,7 @@ ARCH_DEP_LDFLAGS += $(ARCH_DEP_FLAGS) #-------------------------------------------------- # Operating system flags -OP_SYS_CFLAGS += -isysroot $(SDK_DIR) -D__IPHONE_OS_VERSION_MIN_REQUIRED=30200 +OP_SYS_CFLAGS += -isysroot $(SDK_DIR) OP_SYS_LDFLAGS += -isysroot $(SDK_DIR) #-------------------------------------------------- @@ -104,6 +104,9 @@ HDEPENDS_METHOD = CMD -include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).iosCommon #-------------------------------------------------- -# Find the Xcode compilers for the specified SDK just once +# Find the Xcode programs for the selected SDK CC := $(shell xcrun -sdk $(XCRUN_SDK_BASE) -find $(CC_$(COMPILER))) CCC := $(shell xcrun -sdk $(XCRUN_SDK_BASE) -find $(CCC_$(COMPILER))) +AR := $(shell xcrun -sdk $(XCRUN_SDK_BASE) -find ar) -rc +LD := $(shell xcrun -sdk $(XCRUN_SDK_BASE) -find ld) -r +RANLIB := $(shell xcrun -sdk $(XCRUN_SDK_BASE) -find ranlib) diff --git a/configure/os/CONFIG_SITE.Common.iosCommon b/configure/os/CONFIG_SITE.Common.iosCommon index 7c4b528aa..17055e1dd 100644 --- a/configure/os/CONFIG_SITE.Common.iosCommon +++ b/configure/os/CONFIG_SITE.Common.iosCommon @@ -5,18 +5,25 @@ # Site-specific settings for Apple iOS builds #------------------------------------------------------- -# iOS Version number +# iOS SDK Version number (not the XCode version). +# We haven't tested our current build rules on the older +# versions of either XCode or the iOS SDK, be warned! -#IOS_VERSION = 3.2 -#IOS_VERSION = 4.1 -#IOS_VERSION = 4.2 -#IOS_VERSION = 4.3 #IOS_VERSION = 5.0 #IOS_VERSION = 5.1 #IOS_VERSION = 6.0 #IOS_VERSION = 6.1 IOS_VERSION = 7.0 +# Minimum version of iOS the executables must run on. +# Earlier versions may work, if XCode supports them. + +#IOS_DEPLOYMENT_TARGET = 5.0 +#IOS_DEPLOYMENT_TARGET = 5.1 +#IOS_DEPLOYMENT_TARGET = 6.0 +#IOS_DEPLOYMENT_TARGET = 6.1 +IOS_DEPLOYMENT_TARGET = 7.0 + # Which compiler to use: # CLANG is required for Xcode 5.0 and later From 3fd8d4515ccf5c0cc9d39a49293e50f7cc5b354d Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Thu, 20 Feb 2014 16:36:58 -0600 Subject: [PATCH 06/16] libCom/test: Finish converting blockingSockTest to epicsUnitTest Don't call assert() from a test program, it stops the tests from running if the assert fails. --- src/libCom/test/blockingSockTest.cpp | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/libCom/test/blockingSockTest.cpp b/src/libCom/test/blockingSockTest.cpp index 0dd4dc4b1..b2b537f5f 100644 --- a/src/libCom/test/blockingSockTest.cpp +++ b/src/libCom/test/blockingSockTest.cpp @@ -8,7 +8,6 @@ \*************************************************************************/ #include -#include #include #include "osiSock.h" @@ -18,9 +17,6 @@ #include "epicsUnitTest.h" #include "testMain.h" -#define verify(exp) ((exp) ? (void)0 : \ - epicsAssert(__FILE__, __LINE__, #exp, epicsAssertAuthor)) - union address { struct sockaddr_in ia; struct sockaddr sa; @@ -76,7 +72,7 @@ circuit::circuit ( SOCKET sockIn ) : recvWakeup ( false ), sendWakeup ( false ) { - verify ( this->sock != INVALID_SOCKET ); + testOk1 ( this->sock != INVALID_SOCKET ); } bool circuit::recvWakeupDetected () const @@ -92,7 +88,7 @@ bool circuit::sendWakeupDetected () const void circuit::shutdown () { int status = ::shutdown ( this->sock, SHUT_RDWR ); - verify ( status == 0 ); + testOk1 ( status == 0 ); } void circuit::signal () @@ -144,14 +140,14 @@ clientCircuit::clientCircuit ( const address & addrIn ) : address tmpAddr = addrIn; int status = ::connect ( this->sock, & tmpAddr.sa, sizeof ( tmpAddr ) ); - verify ( status == 0 ); + testOk1 ( status == 0 ); circuit * pCir = this; this->id = epicsThreadCreate ( "client circuit", epicsThreadPriorityMedium, epicsThreadGetStackSize(epicsThreadStackMedium), socketRecvTest, pCir ); - verify ( this->id ); + testOk1 ( this->id != 0 ); } @@ -169,7 +165,7 @@ server::server ( const address & addrIn ) : sock ( epicsSocketCreate ( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ), id ( 0 ), exit ( false ) { - verify ( this->sock != INVALID_SOCKET ); + testOk1 ( this->sock != INVALID_SOCKET ); // setup server side address tmpAddr = addrIn; @@ -180,7 +176,7 @@ server::server ( const address & addrIn ) : testAbort ( "Stop all CA servers before running this test." ); } status = listen ( this->sock, 10 ); - verify ( status == 0 ); + testOk1 ( status == 0 ); } void server::start () @@ -189,7 +185,7 @@ void server::start () "server daemon", epicsThreadPriorityMedium, epicsThreadGetStackSize(epicsThreadStackMedium), serverDaemon, this ); - verify ( this->id ); + testOk1 ( this->id != 0 ); } void server::daemon () @@ -200,9 +196,9 @@ void server::daemon () osiSocklen_t addressSize = sizeof ( addr ); SOCKET ns = accept ( this->sock, & addr.sa, & addressSize ); - verify ( ns != INVALID_SOCKET ); + testOk1 ( ns != INVALID_SOCKET ); circuit * pCir = new serverCircuit ( ns ); - verify ( pCir ); + testOk1 ( pCir != 0 ); } } @@ -214,7 +210,7 @@ serverCircuit::serverCircuit ( SOCKET sockIn ) : "server circuit", epicsThreadPriorityMedium, epicsThreadGetStackSize(epicsThreadStackMedium), socketRecvTest, pCir ); - verify ( threadId ); + testOk1 ( threadId != 0 ); } const char * serverCircuit::pName () @@ -243,7 +239,7 @@ static const char *mechName(int mech) MAIN(blockingSockTest) { - testPlan(1); + testPlan(13); address addr; memset ( (char *) & addr, 0, sizeof ( addr ) ); @@ -256,7 +252,7 @@ MAIN(blockingSockTest) clientCircuit client ( addr ); epicsThreadSleep ( 1.0 ); - verify ( ! client.recvWakeupDetected () ); + testOk1 ( ! client.recvWakeupDetected () ); client.shutdown (); epicsThreadSleep ( 1.0 ); From 7eba398792b4707e68b4ccdfd43d00377f8fb121 Mon Sep 17 00:00:00 2001 From: Janet Anderson Date: Mon, 24 Feb 2014 13:01:23 -0600 Subject: [PATCH 07/16] If T_A not defined, define DEP and look for template files in the . dir. --- configure/RULES.Db | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure/RULES.Db b/configure/RULES.Db index 9b8a7751c..436c05a9a 100644 --- a/configure/RULES.Db +++ b/configure/RULES.Db @@ -119,6 +119,9 @@ DBDDEPENDS_CMD = -$(MKMF) -m $(notdir $@)$(DEP) $(DBDDEPENDS_FLAGS) $@ $< ifndef T_A +DEP = .d +TEMPLATE3+=$(addsuffix .template, $(TEMPLATE2)) + COMMON_DIR = . INSTALL_DBDS = INSTALL_DBS = From 5bdd9ddca6742dee6760f0dfa31c5becc30de666 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 25 Feb 2014 15:56:13 -0600 Subject: [PATCH 08/16] Windows: Fix static builds on MinGW Xiaoqiang Wang proposed some fixes that allow static builds on the MinGW targets to succeed. Some additional changes made to blockingSockTest.cpp also clean that up. --- src/catools/Makefile | 20 ++++---- src/libCom/misc/shareLib.h | 2 +- src/libCom/test/blockingSockTest.cpp | 64 ++++++++++++++------------ src/libCom/test/epicsSockResolveTest.c | 2 + 4 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/catools/Makefile b/src/catools/Makefile index d5929b340..b18dd3e07 100644 --- a/src/catools/Makefile +++ b/src/catools/Makefile @@ -12,22 +12,18 @@ TOP=../.. include $(TOP)/configure/CONFIG -SHARED_LIBRARIES = NO - -# Build but don't install catools as a static library -LIBRARY += catools -INSTALL_LIBS = - -catools_SRCS += tool_lib.c -catools_LIBS += ca Com - -# Build and link programs against the catools library PROD_DEFAULT += caget camonitor cainfo caput PROD_vxWorks = -nil- PROD_RTEMS = -nil- PROD_iOS = -nil- -PROD_LIBS += catools ca Com -catools_DIR = . +PROD_SRCS = tool_lib.c + +caget_SRCS = caget.c +caput_SRCS = caput.c +camonitor_SRCS = camonitor.c +cainfo_SRCS = cainfo.c + +PROD_LIBS = ca Com include $(TOP)/configure/RULES diff --git a/src/libCom/misc/shareLib.h b/src/libCom/misc/shareLib.h index ba23b282f..c5204092e 100644 --- a/src/libCom/misc/shareLib.h +++ b/src/libCom/misc/shareLib.h @@ -126,7 +126,7 @@ # define epicsShareFunc __declspec(dllexport) # endif # else -# if defined(_DLL) /* this indicates that we are being compiled to call DLLs */ +# if !defined(EPICS_DLL_NO) /* this indicates that we are being compiled to call DLLs */ # define epicsShareExtern __declspec(dllimport) extern # define epicsShareClass __declspec(dllimport) # define epicsShareFunc __declspec(dllimport) diff --git a/src/libCom/test/blockingSockTest.cpp b/src/libCom/test/blockingSockTest.cpp index b2b537f5f..6d316f753 100644 --- a/src/libCom/test/blockingSockTest.cpp +++ b/src/libCom/test/blockingSockTest.cpp @@ -27,7 +27,6 @@ public: circuit ( SOCKET ); void recvTest (); void shutdown (); - void signal (); void close (); bool recvWakeupDetected () const; bool sendWakeupDetected () const; @@ -60,6 +59,7 @@ public: server ( const address & ); void start (); void daemon (); + void stop (); protected: SOCKET sock; epicsThreadId id; @@ -72,7 +72,7 @@ circuit::circuit ( SOCKET sockIn ) : recvWakeup ( false ), sendWakeup ( false ) { - testOk1 ( this->sock != INVALID_SOCKET ); + testOk ( this->sock != INVALID_SOCKET, "Socket valid" ); } bool circuit::recvWakeupDetected () const @@ -88,12 +88,7 @@ bool circuit::sendWakeupDetected () const void circuit::shutdown () { int status = ::shutdown ( this->sock, SHUT_RDWR ); - testOk1 ( status == 0 ); -} - -void circuit::signal () -{ - epicsSignalRaiseSigAlarm ( this->id ); + testOk ( status == 0, "Shutdown() returned Ok" ); } void circuit::close () @@ -103,7 +98,6 @@ void circuit::close () void circuit::recvTest () { - epicsSignalInstallSigAlarmIgnore (); char buf [1]; while ( true ) { int status = recv ( this->sock, @@ -114,13 +108,13 @@ void circuit::recvTest () break; } else if ( status > 0 ) { - testDiag ( "client received %i characters", status ); + testDiag ( "%s received %i characters", this->pName (), status ); } else { char sockErrBuf[64]; epicsSocketConvertErrnoToString ( sockErrBuf, sizeof ( sockErrBuf ) ); - testDiag ( "%s socket recv() error was \"%s\"\n", + testDiag ( "%s socket recv() error was \"%s\"", this->pName (), sockErrBuf ); this->recvWakeup = true; break; @@ -140,14 +134,14 @@ clientCircuit::clientCircuit ( const address & addrIn ) : address tmpAddr = addrIn; int status = ::connect ( this->sock, & tmpAddr.sa, sizeof ( tmpAddr ) ); - testOk1 ( status == 0 ); + testOk ( status == 0, "Client end connected" ); circuit * pCir = this; this->id = epicsThreadCreate ( "client circuit", epicsThreadPriorityMedium, epicsThreadGetStackSize(epicsThreadStackMedium), socketRecvTest, pCir ); - testOk1 ( this->id != 0 ); + testOk ( this->id != 0, "Client thread created" ); } @@ -165,7 +159,7 @@ server::server ( const address & addrIn ) : sock ( epicsSocketCreate ( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ), id ( 0 ), exit ( false ) { - testOk1 ( this->sock != INVALID_SOCKET ); + testOk ( this->sock != INVALID_SOCKET, "Server socket valid" ); // setup server side address tmpAddr = addrIn; @@ -176,7 +170,7 @@ server::server ( const address & addrIn ) : testAbort ( "Stop all CA servers before running this test." ); } status = listen ( this->sock, 10 ); - testOk1 ( status == 0 ); + testOk ( status == 0, "Server socket listening" ); } void server::start () @@ -185,7 +179,7 @@ void server::start () "server daemon", epicsThreadPriorityMedium, epicsThreadGetStackSize(epicsThreadStackMedium), serverDaemon, this ); - testOk1 ( this->id != 0 ); + testOk ( this->id != 0, "Server thread created" ); } void server::daemon () @@ -196,12 +190,20 @@ void server::daemon () osiSocklen_t addressSize = sizeof ( addr ); SOCKET ns = accept ( this->sock, & addr.sa, & addressSize ); - testOk1 ( ns != INVALID_SOCKET ); + if ( this->exit ) + break; + testOk ( ns != INVALID_SOCKET, "Accepted socket valid" ); circuit * pCir = new serverCircuit ( ns ); - testOk1 ( pCir != 0 ); + testOk ( pCir != 0, "Server circuit created" ); } } +void server::stop () +{ + this->exit = true; + epicsSocketDestroy ( this->sock ); +} + serverCircuit::serverCircuit ( SOCKET sockIn ) : circuit ( sockIn ) { @@ -210,7 +212,7 @@ serverCircuit::serverCircuit ( SOCKET sockIn ) : "server circuit", epicsThreadPriorityMedium, epicsThreadGetStackSize(epicsThreadStackMedium), socketRecvTest, pCir ); - testOk1 ( threadId != 0 ); + testOk ( threadId != 0, "Server circuit thread created" ); } const char * serverCircuit::pName () @@ -240,6 +242,7 @@ static const char *mechName(int mech) MAIN(blockingSockTest) { testPlan(13); + osiSockAttach(); address addr; memset ( (char *) & addr, 0, sizeof ( addr ) ); @@ -252,35 +255,36 @@ MAIN(blockingSockTest) clientCircuit client ( addr ); epicsThreadSleep ( 1.0 ); - testOk1 ( ! client.recvWakeupDetected () ); + testOk ( ! client.recvWakeupDetected (), "Client is asleep" ); + testDiag("Trying Shutdown mechanism"); client.shutdown (); epicsThreadSleep ( 1.0 ); int mech = -1; if ( client.recvWakeupDetected () ) { mech = esscimqi_socketBothShutdownRequired; + testDiag("Shutdown succeeded"); } else { - client.signal (); + testDiag("Trying Close mechanism"); + client.close (); epicsThreadSleep ( 1.0 ); if ( client.recvWakeupDetected () ) { - mech = esscimqi_socketSigAlarmRequired; - } - else { - client.close (); - epicsThreadSleep ( 1.0 ); - if ( client.recvWakeupDetected () ) { - mech = esscimqi_socketCloseRequired; - } + mech = esscimqi_socketCloseRequired; + testDiag("Close succeeded"); } } testDiag("This OS behaves like \"%s\".", mechName(mech)); int query = epicsSocketSystemCallInterruptMechanismQuery (); - if (! testOk(mech == query, "Socket shutdown mechanism") ) + if (! testOk(mech == query, "Declared mechanism works") ) testDiag("epicsSocketSystemCallInterruptMechanismQuery returned \"%s\"", mechName(query)); + srv.stop (); + epicsThreadSleep ( 1.0 ); + + osiSockRelease(); return testDone(); } diff --git a/src/libCom/test/epicsSockResolveTest.c b/src/libCom/test/epicsSockResolveTest.c index 166a29b90..83075d2cc 100644 --- a/src/libCom/test/epicsSockResolveTest.c +++ b/src/libCom/test/epicsSockResolveTest.c @@ -47,6 +47,7 @@ MAIN(epicsSockResolveTest) int i; testPlan(3*NELEMENTS(okdata) + NELEMENTS(baddata)); + osiSockAttach(); { struct in_addr addr; @@ -88,5 +89,6 @@ MAIN(epicsSockResolveTest) } } + osiSockRelease(); return testDone(); } From d90f4d797670c4d9919783187635684cd152ae09 Mon Sep 17 00:00:00 2001 From: Janet Anderson Date: Mon, 3 Mar 2014 13:31:14 -0600 Subject: [PATCH 09/16] Added static build config files for win32-x86 and windows-x64. --- configure/os/CONFIG.win32-x86-static.Common | 11 +++++++++++ .../os/CONFIG.win32-x86-static.win32-x86-static | 13 +++++++++++++ configure/os/CONFIG.windows-x64-static.Common | 11 +++++++++++ .../os/CONFIG.windows-x64-static.windows-x64-static | 13 +++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 configure/os/CONFIG.win32-x86-static.Common create mode 100644 configure/os/CONFIG.win32-x86-static.win32-x86-static create mode 100644 configure/os/CONFIG.windows-x64-static.Common create mode 100644 configure/os/CONFIG.windows-x64-static.windows-x64-static diff --git a/configure/os/CONFIG.win32-x86-static.Common b/configure/os/CONFIG.win32-x86-static.Common new file mode 100644 index 000000000..7c4508ca6 --- /dev/null +++ b/configure/os/CONFIG.win32-x86-static.Common @@ -0,0 +1,11 @@ +# CONFIG.win32-x86-static.Common +# +# $Revision-Id$ +# This file is maintained by the build community. +# +# Definitions for win32-x86-static host archs +# Sites may override these definitions in CONFIG_SITE.win32-x86-static.Common +#------------------------------------------------------- + +include $(CONFIG)/os/CONFIG.win32-x86.Common + diff --git a/configure/os/CONFIG.win32-x86-static.win32-x86-static b/configure/os/CONFIG.win32-x86-static.win32-x86-static new file mode 100644 index 000000000..0bb18a6d0 --- /dev/null +++ b/configure/os/CONFIG.win32-x86-static.win32-x86-static @@ -0,0 +1,13 @@ +# CONFIG.win32-x86-static.win32-x86.static +# +# $Revision-Id$ +# This file is maintained by the build community. +# +# Definitions for win32-x86-static target archs when host arch is win32-x86-static +# Sites may override these definitions in CONFIG_SITE.win32-x86-static.win32-x86-static +#------------------------------------------------------- + +include $(CONFIG)/os/CONFIG.win32-x86.win32-x86 + +SHARED_LIBRARIES = NO +STATIC_BUILD = YES diff --git a/configure/os/CONFIG.windows-x64-static.Common b/configure/os/CONFIG.windows-x64-static.Common new file mode 100644 index 000000000..be61abad0 --- /dev/null +++ b/configure/os/CONFIG.windows-x64-static.Common @@ -0,0 +1,11 @@ +# CONFIG.windows-x64-static.Common +# +# $Revision-Id$ +# This file is maintained by the build community. +# +# Definitions for windows-x64-static host archs +# Sites may override these definitions in CONFIG_SITE.windows-x64-static.Common +#------------------------------------------------------- + +include $(CONFIG)/os/CONFIG.windows-x64.Common + diff --git a/configure/os/CONFIG.windows-x64-static.windows-x64-static b/configure/os/CONFIG.windows-x64-static.windows-x64-static new file mode 100644 index 000000000..e5e152411 --- /dev/null +++ b/configure/os/CONFIG.windows-x64-static.windows-x64-static @@ -0,0 +1,13 @@ +# CONFIG.windows-x64-static.windows-x64-static +# +# $Revision-Id$ +# This file is maintained by the build community. +# +# Definitions for windows-x64-static target archs when host arch is windows-x64-static +# Sites may override these definitions in CONFIG_SITE.windows-x64-static.windows-x64-static +#------------------------------------------------------- + +include $(CONFIG)/os/CONFIG.windows-x64.windows-x64 + +SHARED_LIBRARIES = NO +STATIC_BUILD= YES From 5ad46f557c94eeb44116760788a06d137c4d68ee Mon Sep 17 00:00:00 2001 From: Janet Anderson Date: Mon, 3 Mar 2014 16:34:06 -0600 Subject: [PATCH 10/16] Added static cross builds for win32-x86 and windows-x64. --- configure/os/CONFIG.win32-x86.win32-x86-static | 13 +++++++++++++ configure/os/CONFIG.windows-x64.windows-x64-static | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 configure/os/CONFIG.win32-x86.win32-x86-static create mode 100644 configure/os/CONFIG.windows-x64.windows-x64-static diff --git a/configure/os/CONFIG.win32-x86.win32-x86-static b/configure/os/CONFIG.win32-x86.win32-x86-static new file mode 100644 index 000000000..0b6d4ab1f --- /dev/null +++ b/configure/os/CONFIG.win32-x86.win32-x86-static @@ -0,0 +1,13 @@ +# CONFIG.win32-x86.win32-x86-static +# +# $Revision-Id$ +# This file is maintained by the build community. +# +# Definitions for win32-x86-static target archs when host arch is win32-x86 +# Sites may override these definitions in CONFIG_SITE.win32-x86.win32-x86-static +#------------------------------------------------------- + +include $(CONFIG)/os/CONFIG.win32-x86.win32-x86 + +SHARED_LIBRARIES = NO +STATIC_BUILD = YES diff --git a/configure/os/CONFIG.windows-x64.windows-x64-static b/configure/os/CONFIG.windows-x64.windows-x64-static new file mode 100644 index 000000000..940b67b81 --- /dev/null +++ b/configure/os/CONFIG.windows-x64.windows-x64-static @@ -0,0 +1,13 @@ +# CONFIG.windows-x86.windows-x86-static +# +# $Revision-Id$ +# This file is maintained by the build community. +# +# Definitions for windows-x64-static target archs when host arch is windows-x64 +# Sites may override these definitions in CONFIG_SITE.windows-x64.windows-x64-static +#------------------------------------------------------- + +include $(CONFIG)/os/CONFIG.windows-x64.windows-x64 + +SHARED_LIBRARIES = NO +STATIC_BUILD = YES From 0ba29b2efffe05e01fc1b725da38747f09400ecd Mon Sep 17 00:00:00 2001 From: Janet Anderson Date: Tue, 4 Mar 2014 09:12:25 -0600 Subject: [PATCH 11/16] Set BUILD_CLASS to HOST. --- configure/os/CONFIG.win32-x86.win32-x86-static | 1 + 1 file changed, 1 insertion(+) diff --git a/configure/os/CONFIG.win32-x86.win32-x86-static b/configure/os/CONFIG.win32-x86.win32-x86-static index 0b6d4ab1f..a23431744 100644 --- a/configure/os/CONFIG.win32-x86.win32-x86-static +++ b/configure/os/CONFIG.win32-x86.win32-x86-static @@ -9,5 +9,6 @@ include $(CONFIG)/os/CONFIG.win32-x86.win32-x86 +BUILD_CLASS = HOST SHARED_LIBRARIES = NO STATIC_BUILD = YES From 4e1a5eefffac0dc0017cd3eac4dbff78479bd7d9 Mon Sep 17 00:00:00 2001 From: Janet Anderson Date: Tue, 4 Mar 2014 09:21:35 -0600 Subject: [PATCH 12/16] Set BUILD_CLASS to HOST. --- configure/os/CONFIG.windows-x64.windows-x64-static | 1 + 1 file changed, 1 insertion(+) diff --git a/configure/os/CONFIG.windows-x64.windows-x64-static b/configure/os/CONFIG.windows-x64.windows-x64-static index 940b67b81..8a6fd20f9 100644 --- a/configure/os/CONFIG.windows-x64.windows-x64-static +++ b/configure/os/CONFIG.windows-x64.windows-x64-static @@ -9,5 +9,6 @@ include $(CONFIG)/os/CONFIG.windows-x64.windows-x64 +BUILD_CLASS = HOST SHARED_LIBRARIES = NO STATIC_BUILD = YES From f5b9db95834fb64cb022b0cd969abe0232afef00 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 11 Mar 2014 17:12:41 -0500 Subject: [PATCH 13/16] libCom: Fix epicsString.h comparison functions The string comparison functions epicsStrCaseCmp() and epicsStrnCaseCmp() were returning incorrect results when the strings did not match. These functions now match their BSD equivalents, and have working tests to confirm their operation. --- src/libCom/misc/epicsString.c | 16 ++++++++-------- src/libCom/test/epicsStringTest.c | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/libCom/misc/epicsString.c b/src/libCom/misc/epicsString.c index 28b3f3488..f5c61944d 100644 --- a/src/libCom/misc/epicsString.c +++ b/src/libCom/misc/epicsString.c @@ -171,11 +171,11 @@ size_t epicsStrnEscapedFromRawSize(const char *inbuf, size_t inlen) int epicsStrCaseCmp(const char *s1, const char *s2) { while (1) { - int ch1 = toupper(*s1); - int ch2 = toupper(*s2); + int ch1 = toupper((int) *s1); + int ch2 = toupper((int) *s2); - if (ch1 == 0) return (ch2 != 0); - if (ch2 == 0) return -1; + if (ch2 == 0) return (ch1 != 0); + if (ch1 == 0) return -1; if (ch1 < ch2) return -1; if (ch1 > ch2) return 1; s1++; @@ -188,11 +188,11 @@ int epicsStrnCaseCmp(const char *s1, const char *s2, size_t len) size_t i = 0; while (i++ < len) { - int ch1 = toupper(*s1); - int ch2 = toupper(*s2); + int ch1 = toupper((int) *s1); + int ch2 = toupper((int) *s2); - if (ch1 == 0) return (ch2 != 0); - if (ch2 == 0) return -1; + if (ch2 == 0) return (ch1 != 0); + if (ch1 == 0) return -1; if (ch1 < ch2) return -1; if (ch1 > ch2) return 1; s1++; diff --git a/src/libCom/test/epicsStringTest.c b/src/libCom/test/epicsStringTest.c index e9dea2fb2..72944f7c6 100644 --- a/src/libCom/test/epicsStringTest.c +++ b/src/libCom/test/epicsStringTest.c @@ -56,8 +56,8 @@ MAIN(epicsStringTest) testOk1(epicsStrnCaseCmp(empty, "", 0) == 0); testOk1(epicsStrnCaseCmp(empty, "", 1) == 0); - testOk1(epicsStrnCaseCmp(space, empty, 1) < 0); - testOk1(epicsStrnCaseCmp(empty, space, 1) > 0); + testOk1(epicsStrnCaseCmp(space, empty, 1) > 0); + testOk1(epicsStrnCaseCmp(empty, space, 1) < 0); testOk1(epicsStrnCaseCmp(a, A, 1) == 0); testOk1(epicsStrnCaseCmp(a, A, 2) == 0); testOk1(epicsStrnCaseCmp(abcd, ABCD, 2) == 0); @@ -65,17 +65,17 @@ MAIN(epicsStringTest) testOk1(epicsStrnCaseCmp(abcd, ABCD, 1000) == 0); testOk1(epicsStrnCaseCmp(abcd, ABCDE, 2) == 0); testOk1(epicsStrnCaseCmp(abcd, ABCDE, 4) == 0); - testOk1(epicsStrnCaseCmp(abcd, ABCDE, 1000)> 0); + testOk1(epicsStrnCaseCmp(abcd, ABCDE, 1000) < 0); testOk1(epicsStrnCaseCmp(abcde, ABCD, 2) == 0); testOk1(epicsStrnCaseCmp(abcde, ABCD, 4) == 0); - testOk1(epicsStrnCaseCmp(abcde, ABCD, 1000) < 0); + testOk1(epicsStrnCaseCmp(abcde, ABCD, 1000) > 0); testOk1(epicsStrCaseCmp(empty, "") == 0); testOk1(epicsStrCaseCmp(a, A) == 0); testOk1(epicsStrCaseCmp(abcd, ABCD) == 0); - testOk1(epicsStrCaseCmp(abcd, ABCDE) != 0); - testOk1(epicsStrCaseCmp(abcde, ABCD) != 0); - testOk1(epicsStrCaseCmp(abcde, "ABCDF") != 0); + testOk1(epicsStrCaseCmp(abcd, ABCDE) < 0); + testOk1(epicsStrCaseCmp(abcde, ABCD) > 0); + testOk1(epicsStrCaseCmp(abcde, "ABCDF") < 0); s = epicsStrDup(abcd); testOk(strcmp(s, abcd) == 0 && s != abcd, "epicsStrDup"); From 894771e7896581d1d537f703c69eabaa6614879f Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 11 Mar 2014 17:14:30 -0500 Subject: [PATCH 14/16] docs: Update Release Notes. --- documentation/RELEASE_NOTES.html | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index f00cabdcf..c16a3fd91 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -13,6 +13,25 @@ +

epicsString.h comparison functions fixed

+ +

The case-independent string comparison functions epicsStrCaseCmp() and +epicsStrnCaseCmp() were returning incorrect results when the strings did not +match; if the left-hand string is a shorter sub-set of the right-hand one the +result should be -1. These functions now match their BSD equivalents.

+ +

Windows -static targets included

+ +

The win32-x86 and windows-x64 host target architectures can now cross-build +the associated -static target, i.e. win32-x86-static or windows-x64-static +(these targets can also be used as regular host architectures). Users could +always have added configuration files themselves to build these, but we needed +them for continuous integration testing of static builds.

+ +

iOS Build Rules fixed

+ +

The problem building for the ios-x86 simulator target architecture has been +resolved.

Changes between 3.14.12.3 and 3.14.12.4

From b1ece5d8d22c15988c97f02edda07bfaafb398e5 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 11 Mar 2014 17:46:14 -0500 Subject: [PATCH 15/16] cap5: Added CA->version function Documented. --- documentation/RELEASE_NOTES.html | 5 +++++ src/cap5/CA.pm | 7 ++++++- src/cap5/Cap5.xs | 11 +++++++++++ src/cap5/caget.pl | 7 ++++--- src/cap5/cainfo.pl | 5 +++-- src/cap5/camonitor.pl | 7 ++++--- src/cap5/capr.pl | 33 ++++++++++++++++---------------- src/cap5/caput.pl | 7 ++++--- 8 files changed, 53 insertions(+), 29 deletions(-) diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index c16a3fd91..f5fe169db 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -13,6 +13,11 @@ +

Added CA->version function to CA Perl Bindings

+ +

This new function returns the version string from Base. The ca*.pl tools have +been updated to display this in their help output.

+

epicsString.h comparison functions fixed

The case-independent string comparison functions epicsStrCaseCmp() and diff --git a/src/cap5/CA.pm b/src/cap5/CA.pm index ac6542e01..31f09f9fb 100644 --- a/src/cap5/CA.pm +++ b/src/cap5/CA.pm @@ -4,7 +4,7 @@ use strict; use warnings; -my $version = '0.4'; +my $version = '0.5'; package CA; @@ -507,6 +507,11 @@ class method syntax, e.g. C<< CA->pend_io(10) >>. =over 4 +=item version + +Returns the EPICS_VERSION_STRING from the version of EPICS Base this software +was built using. + =item flush_io Flush outstanding IO requests to the server. This routine is useful for users diff --git a/src/cap5/Cap5.xs b/src/cap5/Cap5.xs index c3e4d0e50..785041229 100644 --- a/src/cap5/Cap5.xs +++ b/src/cap5/Cap5.xs @@ -10,6 +10,7 @@ #include "cadef.h" #include "db_access.h" +#include "epicsVersion.h" #include "alarm.h" #include "alarmString.h" @@ -1010,6 +1011,12 @@ void CA_flush_io(const char *class) { } +/* CA::version($class) */ + +const char * CA_version(const char *class) { + return EPICS_VERSION_STRING; +} + /* CA::add_exception_event($class, \&sub) */ static @@ -1385,6 +1392,10 @@ void CA_flush_io (class) const char * class +const char * +CA_version (class) + const char * class + void CA_add_exception_event (class, sub) const char * class diff --git a/src/cap5/caget.pl b/src/cap5/caget.pl index df8cb6d25..a3fcbfe85 100644 --- a/src/cap5/caget.pl +++ b/src/cap5/caget.pl @@ -148,11 +148,11 @@ sub display { } sub HELP_MESSAGE { - print STDERR "\nUsage: caget [options] ...\n", + print STDERR "\nUsage: caget.pl [options] ...\n", "\n", " -h: Help: Print this message\n", "Channel Access options:\n", - " -w : Wait time, specifies longer CA timeout, default is $opt_w second\n", + " -w : Wait time, specifies CA timeout, default is $opt_w second\n", "Format options:\n", " -t: Terse mode - print only value, without name\n", " -a: Wide mode \"name timestamp value stat sevr\" (read PVs as DBR_TIME_xxx)\n", @@ -182,6 +182,7 @@ sub HELP_MESSAGE { " -0b: Print as binary number\n", "Set output field separator:\n", " -F : Use to separate fields on output\n", - "\n"; + "\n", + "Base version: ", CA->version, "\n"; exit 1; } diff --git a/src/cap5/cainfo.pl b/src/cap5/cainfo.pl index 2196655b1..2c08bcfe6 100644 --- a/src/cap5/cainfo.pl +++ b/src/cap5/cainfo.pl @@ -52,13 +52,14 @@ sub display { } sub HELP_MESSAGE { - print STDERR "\nUsage: cainfo [options] ...\n", + print STDERR "\nUsage: cainfo.pl [options] ...\n", "\n", " -h: Help: Print this message\n", "Channel Access options:\n", " -w : Wait time, specifies CA timeout, default is $opt_w second\n", "\n", "Example: cainfo my_channel another_channel\n", - "\n"; + "\n", + "Base version: ", CA->version, "\n"; exit 1; } diff --git a/src/cap5/camonitor.pl b/src/cap5/camonitor.pl index 4d19272b2..2a933abbe 100644 --- a/src/cap5/camonitor.pl +++ b/src/cap5/camonitor.pl @@ -109,11 +109,11 @@ sub display { } sub HELP_MESSAGE { - print STDERR "\nUsage: camonitor [options] ...\n", + print STDERR "\nUsage: camonitor.pl [options] ...\n", "\n", " -h: Help: Print this message\n", "Channel Access options:\n", - " -w : Wait time, specifies longer CA timeout, default is $opt_w second\n", + " -w : Wait time, specifies CA timeout, default is $opt_w second\n", " -m : Specify CA event mask to use, with being any combination of\n", " 'v' (value), 'a' (alarm), 'l' (log/archive), 'p' (property)", " Default: '$opt_m'\n", @@ -144,6 +144,7 @@ sub HELP_MESSAGE { "\n", "Example: camonitor -f8 my_channel another_channel\n", " (doubles are printed as %f with 8 decimal digits)\n", - "\n"; + "\n", + "Base version: ", CA->version, "\n"; exit 1; } diff --git a/src/cap5/capr.pl b/src/cap5/capr.pl index 04f1caa97..cf0c4d397 100644 --- a/src/cap5/capr.pl +++ b/src/cap5/capr.pl @@ -401,23 +401,22 @@ sub printRecordList { sub HELP_MESSAGE { print STDERR "\n", "Usage: capr.pl -h\n", - " capr.pl [-d file.dbd] [-w seconds] -r\n", - " capr.pl [-d file.dbd] [-w seconds] -f record_type\n", - " capr.pl [-d file.dbd] [-w seconds] record_name [interest]\n", - "Description:\n", - " Attempts to perform a \"dbpr\" record print via channel access for \n", - " record_name at an interest level which defaults to level 0.\n\n", - " The -r or -f options cause it to print record type or field lists.\n", + " capr.pl [options] -r\n", + " capr.pl [options] -f \n", + " capr.pl [options] []\n", "\n", - "Options:\n", - " -h Prints this help message.\n", - " -r Lists all record types in the dbd file.\n", - " -f record_type: Lists all fields plus their interest level, data type\n", - " and number base for the given record_type.\n", - " -d file.dbd: The dbd file containing record type definitions.\n", - " This can be set using the EPICS_CAPR_DBD_FILE environment variable.\n", - " Currently ", AbsPath($opt_d), "\n", - " -w seconds: CA connection timeout, currently $opt_w\n", - "\n"; + " -h Print this help message.\n", + "Channel Access options:\n", + " -w : Wait time, specifies CA timeout, default is $opt_w second\n", + "Database Definitions:\n", + " -d : The file containing record type definitions.\n", + " This can be set using the EPICS_CAPR_DBD_FILE environment variable.\n", + " Default: ", AbsPath($opt_d), "\n", + "Output Options:\n", + " -r Lists all record types in the selected dbd file.\n", + " -f : Lists all fields with their interest level, data type\n", + " and number base for the given record_type.\n", + "\n", + "Base version: ", CA->version, "\n"; exit 1; } diff --git a/src/cap5/caput.pl b/src/cap5/caput.pl index 8d2e6b4b3..69cd4b638 100644 --- a/src/cap5/caput.pl +++ b/src/cap5/caput.pl @@ -151,11 +151,11 @@ sub display { } sub HELP_MESSAGE { - print STDERR "\nUsage: caput [options] ...\n", + print STDERR "\nUsage: caput.pl [options] ...\n", "\n", " -h: Help: Print this message\n", "Channel Access options:\n", - " -w : Wait time, specifies longer CA timeout, default is $opt_w second\n", + " -w : Wait time, specifies CA timeout, default is $opt_w second\n", " -c: Use put_callback to wait for completion\n", "Format options:\n", " -t: Terse mode - print only sucessfully written value, without name\n", @@ -180,7 +180,8 @@ sub HELP_MESSAGE { "Examples:\n", " caput my_channel 1.2\n", " caput my_waveform 1.2 2.4 3.6 4.8 6.0\n", - "\n"; + "\n", + "Base version: ", CA->version, "\n"; exit 1; } From e63f14bc9593e8784bb74d1d0408b5c672554039 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 12 Mar 2014 16:42:18 -0500 Subject: [PATCH 16/16] configure: Fix for Ben's INC_osclass issue Janet developed the fix, I documented it. --- configure/CONFIG_ADDONS | 11 ----------- documentation/RELEASE_NOTES.html | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/configure/CONFIG_ADDONS b/configure/CONFIG_ADDONS index 7fdff395d..86813964e 100644 --- a/configure/CONFIG_ADDONS +++ b/configure/CONFIG_ADDONS @@ -376,17 +376,6 @@ USR_LIBS += $(USR_LIBS_DEFAULT) endif endif -# -# concat specific include files -# -ifneq ($(strip $(INC_$(OS_CLASS))),) -INC += $(subst -nil-,,$(INC_$(OS_CLASS))) -else -ifdef INC_DEFAULT -INC+=$(INC_DEFAULT) -endif -endif - # # concat specific library contents (if defined) to SYS_PROD_LIBS # diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index f5fe169db..021f0e432 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -13,6 +13,20 @@ +

Generating OS-specific include files

+ +

A fix has been applied to the build rules to permit OS-specific header files +to be generated by adding them to the appropriate INC_<osclass> variable. +To avoid problems with parallel builds, the rule to generate a header file +should look something like this:

+ +
+$(COMMON_DIR)/os/vxWorks/file.h:
+	$(MKDIR) -p $(dir $@)
+	generate-file -o $(notdir $@)
+	$(MV) $(notdir $@) $@
+
+

Added CA->version function to CA Perl Bindings

This new function returns the version string from Base. The ca*.pl tools have