src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp in passenger-6.0.7 vs src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp in passenger-6.0.8
- old
+ new
@@ -10,45 +10,22 @@
// Old versions of vxWorks (namely everything below 6.x) are
// absolutely unable to use boost. Old STLs and compilers
// like (GCC 2.96) . Do not even think of getting this to work,
// a miserable failure will be guaranteed!
//
-// Equally, this file has been tested for RTPs (Real Time Processes)
-// only, not for DKMs (Downloadable Kernel Modules). These two types
-// of executables differ largely in the available functionality of
-// the C-library, STL, and so on. A DKM uses a C89 library with no
-// wide character support and no guarantee of ANSI C. The same Dinkum
+// VxWorks supports C++ linkage in the kernel with
+// DKMs (Downloadable Kernel Modules). But, until recently
+// the kernel used a C89 library with no
+// wide character support and no guarantee of ANSI C.
+// Regardless of the C library the same Dinkum
// STL library is used in both contexts.
//
// Similarly the Dinkum abridged STL that supports the loosely specified
// embedded C++ standard has not been tested and is unlikely to work
// on anything but the simplest library.
// ====================================================================
-//
-// Additional Configuration
-// -------------------------------------------------------------------
//
-// Because of the ordering of include files and other issues the following
-// additional definitions worked better outside this file.
-//
-// When building the log library add the following to the b2 invocation
-// define=BOOST_LOG_WITHOUT_IPC
-// and
-// -DBOOST_LOG_WITHOUT_DEFAULT_FACTORIES
-// to your compile options.
-//
-// When building the test library add
-// -DBOOST_TEST_LIMITED_SIGNAL_DETAILS
-// to your compile options
-//
-// When building containers library add
-// -DHAVE_MORECORE=0
-// to your c compile options so dlmalloc heap library is compiled
-// without brk() calls
-//
-// ====================================================================
-//
// Some important information regarding the usage of POSIX semaphores:
// -------------------------------------------------------------------
//
// VxWorks as a real time operating system handles threads somewhat
// different from what "normal" OSes do, regarding their scheduling!
@@ -110,34 +87,24 @@
// vxWorks specific config options:
// --------------------------------
#define BOOST_PLATFORM "vxWorks"
-// Special behaviour for DKMs:
-#ifdef _WRS_KERNEL
- // DKMs do not have the <cwchar>-header,
- // but apparently they do have an intrinsic wchar_t meanwhile!
-# define BOOST_NO_CWCHAR
- // Lots of wide-functions and -headers are unavailable for DKMs as well:
-# define BOOST_NO_CWCTYPE
-# define BOOST_NO_SWPRINTF
-# define BOOST_NO_STD_WSTRING
-# define BOOST_NO_STD_WSTREAMBUF
-#endif
-
// Generally available headers:
#define BOOST_HAS_UNISTD_H
#define BOOST_HAS_STDINT_H
#define BOOST_HAS_DIRENT_H
-#define BOOST_HAS_SLIST
+//#define BOOST_HAS_SLIST
// vxWorks does not have installed an iconv-library by default,
// so unfortunately no Unicode support from scratch is available!
// Thus, instead it is suggested to switch to ICU, as this seems
// to be the most complete and portable option...
-#define BOOST_LOCALE_WITH_ICU
+#ifndef BOOST_LOCALE_WITH_ICU
+ #define BOOST_LOCALE_WITH_ICU
+#endif
// Generally available functionality:
#define BOOST_HAS_THREADS
#define BOOST_HAS_NANOSLEEP
#define BOOST_HAS_GETTIMEOFDAY
@@ -168,52 +135,71 @@
# define _POSIX_TIMERS 1
# endif
# ifndef _POSIX_THREADS
# define _POSIX_THREADS 1
# endif
+// no sysconf( _SC_PAGESIZE) in kernel
+# define BOOST_THREAD_USES_GETPAGESIZE
#endif
#if (_WRS_VXWORKS_MAJOR < 7)
// vxWorks-around: <time.h> #defines CLOCKS_PER_SEC as sysClkRateGet() but
// miserably fails to #include the required <sysLib.h> to make
// sysClkRateGet() available! So we manually include it here.
-#ifdef __RTP__
-# include <time.h>
-# include <sysLib.h>
-#endif
+# ifdef __RTP__
+# include <time.h>
+# include <sysLib.h>
+# endif
// vxWorks-around: In <stdint.h> the macros INT32_C(), UINT32_C(), INT64_C() and
// UINT64_C() are defined erroneously, yielding not a signed/
// unsigned long/long long type, but a signed/unsigned int/long
// type. Eventually this leads to compile errors in ratio_fwd.hpp,
// when trying to define several constants which do not fit into a
// long type! We correct them here by redefining.
-#include <cstdint>
+# include <cstdint>
+// Special behaviour for DKMs:
+
// Some macro-magic to do the job
-#define VX_JOIN(X, Y) VX_DO_JOIN(X, Y)
-#define VX_DO_JOIN(X, Y) VX_DO_JOIN2(X, Y)
-#define VX_DO_JOIN2(X, Y) X##Y
+# define VX_JOIN(X, Y) VX_DO_JOIN(X, Y)
+# define VX_DO_JOIN(X, Y) VX_DO_JOIN2(X, Y)
+# define VX_DO_JOIN2(X, Y) X##Y
// Correctly setup the macros
-#undef INT32_C
-#undef UINT32_C
-#undef INT64_C
-#undef UINT64_C
-#define INT32_C(x) VX_JOIN(x, L)
-#define UINT32_C(x) VX_JOIN(x, UL)
-#define INT64_C(x) VX_JOIN(x, LL)
-#define UINT64_C(x) VX_JOIN(x, ULL)
+# undef INT32_C
+# undef UINT32_C
+# undef INT64_C
+# undef UINT64_C
+# define INT32_C(x) VX_JOIN(x, L)
+# define UINT32_C(x) VX_JOIN(x, UL)
+# define INT64_C(x) VX_JOIN(x, LL)
+# define UINT64_C(x) VX_JOIN(x, ULL)
// #include Libraries required for the following function adaption
-#include <sys/time.h>
+# include <sys/time.h>
#endif // _WRS_VXWORKS_MAJOR < 7
#include <ioLib.h>
#include <tickLib.h>
+#if defined(_WRS_KERNEL) && (_CPPLIB_VER < 700)
+ // recent kernels use Dinkum clib v7.00+
+ // with widechar but older kernels
+ // do not have the <cwchar>-header,
+ // but apparently they do have an intrinsic wchar_t meanwhile!
+# define BOOST_NO_CWCHAR
+
+ // Lots of wide-functions and -headers are unavailable for DKMs as well:
+# define BOOST_NO_CWCTYPE
+# define BOOST_NO_SWPRINTF
+# define BOOST_NO_STD_WSTRING
+# define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+
// Use C-linkage for the following helper functions
#ifdef __cplusplus
extern "C" {
#endif
@@ -251,13 +237,13 @@
}
return close(fd);
}
#ifdef __GNUC__
-#define ___unused __attribute__((unused))
+# define ___unused __attribute__((unused))
#else
-#define ___unused
+# define ___unused
#endif
// Fake symlink handling by dummy functions:
inline int symlink(const char* path1 ___unused, const char* path2 ___unused){
// vxWorks has no symlinks -> always return an error!
@@ -289,11 +275,11 @@
/*
* moved to os/utils/unix/freind_h/times.h in VxWorks 7
* to avoid conflict with MPL operator times
*/
#if (_WRS_VXWORKS_MAJOR < 7)
-#ifdef __cplusplus
+# ifdef __cplusplus
// vxWorks provides neither struct tms nor function times()!
// We implement an empty dummy-function, simply setting the user
// and system time to the half of thew actual system ticks-value
// and the child user and system time to 0.
@@ -325,42 +311,44 @@
namespace std {
using ::times;
}
-#endif // __cplusplus
+# endif // __cplusplus
#endif // _WRS_VXWORKS_MAJOR < 7
#ifdef __cplusplus
-extern "C" void bzero (void *, size_t); // FD_ZERO uses bzero() but doesn't include strings.h
+extern "C" void bzero (void *, size_t); // FD_ZERO uses bzero() but doesn't include strings.h
// Put the selfmade functions into the std-namespace, just in case
namespace std {
-# ifdef __RTP__
+# ifdef __RTP__
using ::getrlimit;
using ::setrlimit;
-# endif
+# endif
using ::truncate;
using ::symlink;
using ::readlink;
-#if (_WRS_VXWORKS_MAJOR < 7)
+# if (_WRS_VXWORKS_MAJOR < 7)
using ::gettimeofday;
-#endif
+# endif
}
#endif // __cplusplus
// Some more macro-magic:
// vxWorks-around: Some functions are not present or broken in vxWorks
// but may be patched to life via helper macros...
// Include signal.h which might contain a typo to be corrected here
#include <signal.h>
+
#if (_WRS_VXWORKS_MAJOR < 7)
-#define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway!
+# define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway!
inline int lstat(p, b) { return stat(p, b); } // lstat() == stat(), as vxWorks has no symlinks!
#endif
+
#ifndef S_ISSOCK
# define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket?
#endif
#ifndef FPE_FLTINV
# define FPE_FLTINV (FPE_FLTSUB+1) // vxWorks has no FPE_FLTINV, so define one as a dummy
@@ -377,11 +365,11 @@
#undef BOOST_HAS_NL_TYPES_H
// vxWorks 7 adds C++11 support
// however it is optional, and does not match exactly the support determined
// by examining the Dinkum STL version and GCC version (or ICC and DCC)
-#ifndef _WRS_CONFIG_LANG_LIB_CPLUS_CPLUS_USER_2011
+#if !( defined( _WRS_CONFIG_LANG_LIB_CPLUS_CPLUS_USER_2011) || defined(_WRS_CONFIG_LIBCPLUS_STD))
# define BOOST_NO_CXX11_ADDRESSOF // C11 addressof operator on memory location
# define BOOST_NO_CXX11_ALLOCATOR
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
# define BOOST_NO_CXX11_NUMERIC_LIMITS // max_digits10 in test/../print_helper.hpp
# define BOOST_NO_CXX11_SMART_PTR
@@ -406,20 +394,22 @@
# define BOOST_NO_CXX11_HDR_TYPE_TRAITS
# define BOOST_NO_CXX11_HDR_TUPLE
# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
# define BOOST_NO_CXX11_HDR_UNORDERED_SET
#else
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED // workaround link error in spirit
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED // workaround link error in spirit
+# endif
#endif
-#endif
// NONE is used in enums in lamda and other libraries
#undef NONE
// restrict is an iostreams class
#undef restrict
+// affects some typeof tests
+#undef V7
// use fake poll() from Unix layer in ASIO to get full functionality
// most libraries will use select() but this define allows 'iostream' functionality
// which is based on poll() only
#if (_WRS_VXWORKS_MAJOR > 6)
@@ -427,7 +417,6 @@
# define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR
# endif
#else
# define BOOST_ASIO_DISABLE_SERIAL_PORT
#endif
-