blob: 5ba0c7a34a2f9045eace1fd54fd4d4ffbbe3d549 [file] [log] [blame]
/***************************************************************************
*
* _config.h - Compiler and C library configuration definitions
*
* This is an internal header file used to implement the C++ Standard
* Library. It should never be #included directly by a program.
*
* $Id$
*
***************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* Copyright 1994-2006 Rogue Wave Software.
*
**************************************************************************/
#ifndef _RWSTD_RW_CONFIG_H_INCLUDED
#define _RWSTD_RW_CONFIG_H_INCLUDED
// include generated configuration header
#include <config.h>
/*** library version numbers and ids **************************************/
#define _RWSTD_VER 0x04020000
// | | | |
// MMmmuupp
// | | | |
// | | | +--- pp = patch release number
// | | +----- uu = micro release number
// | +------- mm = minor release number
// +--------- MM = major release number
// library version string (patch number included only if non-zero)
#define _RWSTD_VER_STR "4.2.0"
// library version numbers
#define _RWSTD_VER_MAJOR ((_RWSTD_VER >> 24) & 0xff)
#define _RWSTD_VER_MINOR ((_RWSTD_VER >> 16) & 0xff)
#define _RWSTD_VER_MICRO ((_RWSTD_VER >> 8) & 0xff)
#define _RWSTD_VER_PATCH (_RWSTD_VER & 0xff)
// Two libraries are Source Compatible if they have the same major
// release number. Libraries whose major release numbers differ may
// or may not be source compatible.
// Two libraries are Binary Compatible (symbol-wise and functionally)
// if have the same major and minor release numbers. Libraries whose
// major and minor release numbers differ may or may not be binary
// compatible.
/**************************************************************************
* OVERRIDES FOR CONFIGURATION MACROS *
**************************************************************************/
#if defined (_RWSTD_NO_EXTENSIONS) && !defined (_RWSTD_STRICT_ANSI)
# define _RWSTD_STRICT_ANSI
#endif // _RWSTD_NO_EXTENSIONS && !_RWSTD_STRICT_ANSI
// -D _REENTRANT or any one of the other thread safety macros
// used in the conditional below turns on thread safety features
#if defined (_REENTRANT) \
|| defined (_THREAD_SAFE) \
|| defined (_RWSTD_MULTI_THREAD) \
|| defined (_RWSTD_DCE_THREADS) \
|| defined (_RWSTD_SOLARIS_THREADS) \
|| defined (_RWSTD_POSIX_THREADS)
# ifndef _RWSTD_REENTRANT
# define _RWSTD_REENTRANT
# endif // _RWSTD_REENTRANT
#endif
/**************************************************************************
* ARCHITECTURE-SPECIFIC OVERRIDES *
**************************************************************************/
/*** Alpha ****************************************************************/
#if defined (__alpha__) || defined (__alpha)
// this applies to both Tru64 UNIX and Linux on Alpha
# undef _RWSTD_IS_IEC559
# ifdef _IEEE_FP
// IEEE 754/IEC 559 conforming environment enabled
// using the Compaq C++ -ieee compiler command line
// option or with gcc -mieee
# define _RWSTD_IS_IEC559 true
# else
// OSF1 (Tru64 UNIX) Compaq C++ without -ieee
# define _RWSTD_IS_IEC559 false
# endif
#endif // Alpha
/*** Itanium (IA64) *******************************************************/
#if defined (__ia64__) || defined (__ia64)
#endif // IA64
/*** MIPS *****************************************************************/
#if defined (__mips__) || defined (__mips)
#endif // MIPS
/*** PA-RISC **************************************************************/
#if defined (__parisc__) || defined (__parsisc)
#endif // PA RISC
/*** PowerPC **************************************************************/
#if defined (__powerpc__) || defined (__powerpc)
#endif // PowerPC
/*** SPARC ****************************************************************/
#if defined (__sparc__) || defined (__sparc)
#endif // SPARC
/**************************************************************************
* COMPILER-SPECIFIC OVERRIDES *
**************************************************************************/
/*** Apogee C++ ***********************************************************/
// Apogee C++ uses an EDG front end but doesn't define __EDG__
#ifdef __APOGEE__
#endif // __APOGEE__
/*** IBM VAC++ ************************************************************/
#if defined (__IBMCPP__)
# include "_config-xlc.h"
#endif // __IBMCPP___
/*** Compaq C++ ***********************************************************/
// Compaq C++ uses an EDG front end and #defines __EDG__
#ifdef __DECCXX
# include "_config-deccxx.h"
#endif // __DECCXX
/*** EDG eccp (this is the vanilla EDG front end) *************************/
// NOTE: the __EDG__ macro is #defined by most EDG-based compilers
#if defined (__EDG__) \
&& !defined (__DECCXX) \
&& !defined (__HP_aCC) \
&& !defined (__INTEL_COMPILER) \
&& !defined (_SGI_COMPILER_VERSION)
// FIXME: make this more robust by detecting the EDG eccp demo
// during library configuration (and avoid relying on compiler
// specific macros)
# include "_config-eccp.h"
#endif // __EDG__
/*** GCC ******************************************************************/
#ifdef __GNUG__
# include "_config-gcc.h"
#else // if !defined (__GNUG__)
# define _RWSTD_GNUC_ATTRIBUTE(ignore)
#endif // __GNUG__
/*** HP aCC ***************************************************************/
#ifdef __HP_aCC
# include "_config-acc.h"
#endif // __HP_aCC
/*** Intel C++ ************************************************************/
#if defined (__INTEL_COMPILER)
# include "_config-icc.h"
#endif // __INTEL_COMPILER
/*** SGI MIPSpro **********************************************************/
// SGI MIPSpro uses an EDG front end; it may or may not #define __EDG__
// (starting with MIPSpro 7.4 the preprocessor does #define the macro
// along with _SGI_COMPILER_VERSION)
#ifdef _RWSTD_OS_IRIX64
// if _SGI_COMPILER_VERSION is not #defined, assume MIPSpro
// unless __GNUG__ is #defined
# if defined (_SGI_COMPILER_VERSION) || !defined (__GNUG__)
# include "_config-mipspro.h"
# endif // _SGI_COMPILER_VERSION || !__GNUG__
#endif // _RWSTD_OS_IRIX64
/*** MSVC *****************************************************************/
#if defined (_MSC_VER) && !defined (__INTEL_COMPILER)
# include "_config-msvc.h"
#endif // _MSC_VER && !__INTEL_COMPILER
/*** Siemens CDS++ ********************************************************/
#ifdef SNI
# define _RWSTD_NO_PTR_VALUE_TEMPLATE_OVERLOAD
# if __STDC__ == 1
# ifndef _RWSTD_STRICT_ANSI
# define _RWSTD_STRICT_ANSI
# endif
# endif
# if defined __SNI_THREAD_SUPPORT
# define _RWSTD_NO_MBRTOWC
# define _RWSTD_NO_WCRTOMB
# endif
#endif // SNI
/*** SunPro aka Sun C++ ***************************************************/
#ifdef __SUNPRO_CC
# include "_config-sunpro.h"
#endif // __SUNPRO_CC
/**************************************************************************
* OPERATING SYSTEM-SPECIFIC OVERRIDES *
**************************************************************************/
/*** OS2 ******************************************************************/
#ifdef __OS2__
# define _RWSTD_NO_STATIC_MUTEX_INIT
#endif // __OS2__
/*** Win{32,64} ***********************************************************/
#if defined (_WIN32) || defined (_WIN64)
# define _RWSTD_NO_STATIC_MUTEX_INIT
# define _RWSTD_PATH_SEP '\\'
#endif // _WIN32
#ifndef _RWSTD_PATH_SEP
# define _RWSTD_PATH_SEP '/'
#endif // _RWSTD_PATH_SEP
/*** Non-10646 platforms **************************************************/
#if !defined (_RWSTD_OS_LINUX) && !defined (_WIN32)
// Linux glibc and Windows use ISO 10646 (Unicode)
// as the internal wchar_t encoding in all locales
# ifndef _RWSTD_NO_ISO_10646_WCHAR_T
# define _RWSTD_NO_ISO_10646_WCHAR_T
# endif // _RWSTD_NO_ISO_10646_WCHAR_T
#endif // !Linux && !Windoze
/********************** Threads *******************************************/
#ifdef _RWSTD_REENTRANT
# if !defined (_RWSTD_DCE_THREADS) \
&& !defined (_RWSTD_DEC_THREADS) \
&& !defined (_RWSTD_POSIX_THREADS) \
&& !defined (_RWSTD_SOLARIS_THREADS)
// default to POSIX threads except on Win32 or Win64
# if !defined (_WIN32) && !defined (_WIN64)
# define _RWSTD_POSIX_THREADS
# endif // _WIN{32,64}
# endif // _RWSTD_*_THREADS
#endif // _RWSTD_REENTRANT
#ifdef _RWSTD_DCE_THREADS
# define _RWSTD_NO_STATIC_MUTEX_INIT
#endif // _RWSTD_DCE_THREADS
/********************** Miscellaneous *************************************/
// g++ cannot inline functions that take a variable number of arguments
// or functions that contain static (local) variables
#if !defined (__GNUG__) || __GNUG__ > 2 || __GNUG_MINOR__ > 96
# define _INLINE_VARARGS inline
# if !defined (__HP_aCC) || __HP_aCC > 012100
// working around a known aCC 1.21 bug
# define _INLINE_WITH_STATICS inline
# endif // !__HP_aCC || __HP_aCC > 012100
#endif // !__GNUG__ || __GNUG__ > 2 || __GNUG_MINOR__ > 96
#if defined (_RWSTD_NO_COLLAPSE_TEMPLATE_STATICS) \
|| defined (_RWSTD_NO_STATIC_TEMPLATE_MEMBER_INIT)
// static mutex initialization depends on the compiler's (and the
// linker's in gcc's case) ability to correctly handle explicitly
// initialized static members of class templates
# ifndef _RWSTD_NO_STATIC_MUTEX_INIT
# define _RWSTD_NO_STATIC_MUTEX_INIT
# endif
#endif // NO_COLLAPSE_TEMPLATE_STATICS || NO_STATIC_TEMPLATE_MEMBER_INIT
/********************** Environment ***************************************/
// pa-risc2 atomic ops related
#if defined(_PA_RISC2_0) && defined(__HP_aCC)
# define _RWSTD_STRING_REF_OFFSET _RWSTD_INT_MAX
#endif
#if defined (_RWSTD_NO_WCHAR_T) && !defined (_RWSTD_NO_NATIVE_WCHAR_T)
# define _RWSTD_NO_NATIVE_WCHAR_T
#endif
#ifndef _RWSTD_NO_STL_SPECIALIZATION
// #ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC
// disable partial specialization for void* of STL sequences
# define _RWSTD_NO_STL_SPECIALIZATION
// #endif // _RWSTD_NO_CLASS_PARTIAL_SPEC
#endif // _RWSTD_NO_STL_SPECIALIZATION
//
// Macro for path to the ANSI 'C' headers
// Must be set specifically for each platform when the
// C++ wrappers for 'C' headers are used.
//
#define _RWSTD_ANSIC(x) </usr/include/x>
// the default long double printf format prefix is "L" (unless #defined above)
#ifndef _RWSTD_LDBL_PRINTF_PREFIX
# define _RWSTD_LDBL_PRINTF_PREFIX "L"
#endif // _RWSTD_LDBL_PRINTF_PREFIX
// the default long double scanf format prefix is "L" (unless #defined above)
#ifndef _RWSTD_LDBL_SCANF_PREFIX
# define _RWSTD_LDBL_SCANF_PREFIX "L"
#endif // _RWSTD_LDBL_SCANF_PREFIX
// the default expansion of dllimport is empty (unless #defined above)
#ifndef _RWSTD_DLLIMPORT
# define _RWSTD_DLLIMPORT /* empty */
#endif // _RWSTD_DLLIMPORT
// the default name of a libc symbol is itself (unless #defined above)
#ifndef _RWSTD_LIBC_SYM
# define _RWSTD_LIBC_SYM(name) name
#endif // _RWSTD_LIBC_SYM
/********************** Library Option Dependencies ***********************/
/*
* The following macro sets the default size of file stream internal buffers
*/
#ifndef _RWSTD_DEFAULT_BUFSIZE // specified on command line?
# define _RWSTD_DEFAULT_BUFSIZE 512
#endif
#ifndef _RWSTD_NO_LONG_LONG
// Win32/64 #defines _RWSTD_LONG_LONG to __int64
# ifndef _RWSTD_LONG_LONG
# define _RWSTD_LONG_LONG long long
# endif // _RWSTD_LONG_LONG
#endif // _RWSTD_NO_LONG_LONG
// disable all extensions in strict ANSI mode
#ifdef _RWSTD_STRICT_ANSI
// long long is not in ANSI C++ yet (although it is in ANSI C99)
# undef _RWSTD_LONG_LONG
# define _RWSTD_NO_EXT_FILEBUF
# define _RWSTD_NO_EXT_VECTOR_BOOL_REF_OPS
# define _RWSTD_NO_EXT_LOCALE
# define _RWSTD_NO_EXT_DEEP_STRING_COPY
// no support for exceptions derived from ios_base::failure
# define _RWSTD_NO_EXT_FAILURE
// no support for writing out integral values in base 2
# define _RWSTD_NO_EXT_BIN_IO
// disable safe conversion of iostream objects only to bool
// (and enable conversion to void*)
# define _RWSTD_NO_EXT_IOS_SAFE_CONVERSION
// std::setbase manipulator accepts only required bases (i.e.,
// 0, 8, 10, 16, and 2 unless _RWSTD_NO_EXT_BIN_IO is also #defined)
# define _RWSTD_NO_EXT_SETBASE
// disable the str(const char*) overload in stringbuf and stringstreams
# define _RWSTD_NO_EXT_STRINGBUF_STR
// no support for member overloads on all fundamental types
# define _RWSTD_NO_EXT_NUM_GET
# define _RWSTD_NO_EXT_NUM_PUT
// no support for extended member overloads
# define _RWSTD_NO_EXT_TIME_GET
// no support for optional mt-locking in iostreams
# define _RWSTD_NO_EXT_REENTRANT_IO
// allocator<const T> not possible
# define _RWSTD_NO_EXT_CONST_ALLOCATOR
// missing operator new or delete not defined
# define _RWSTD_NO_EXT_OPERATOR_NEW
// void std::count<>() not defined (except when necessary)
# define _RWSTD_NO_EXT_VOID_COUNT
// void std::distance() not defined
# define _RWSTD_NO_EXT_VOID_DISTANCE
// calling width(0) only when insertion succeeds
# define _RWSTD_NO_EXT_KEEP_WIDTH_ON_FAILURE
// deque::assign() clears container before assignment
// rather than assigning over existing elements
# define _RWSTD_NO_EXT_DEQUE_ASSIGN_IN_PLACE
// deque::insert() creates a copy of the container
// to insert into and on success swaps the copy
# define _RWSTD_NO_EXT_DEQUE_INSERT_IN_PLACE
// primary templates not defined
# define _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
# define _RWSTD_NO_EXT_CODECVT_PRIMARY
# define _RWSTD_NO_EXT_COLLATE_PRIMARY
# define _RWSTD_NO_EXT_CTYPE_PRIMARY
// random number generator used by algorithms such as random_shuffle
// utilizes the entire range of size_t and will not generate the same
// sequence of values between ILP32 and LP64 (or LLP64)
# define _RWSTD_NO_EXT_PORTABLE_RANDOM_SEQUENCE
// disable the implementation of LWG issue 559 (numeric_limits
// limits specialized on cv-qualified scalar types)
# define _RWSTD_NO_EXT_CV_QUALIFIED_LIMITS
// commented out macros not implemented yet
// # define _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
// # define _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
// # define _RWSTD_NO_EXT_TIME_GET_PRIMARY
// # define _RWSTD_NO_EXT_TIME_PUT_PRIMARY
// # define _RWSTD_NO_EXT_MESSAGES_PRIMARY
#endif // _RWSTD_STRICT_ANSI
// macros that are enabled in library source files
#ifdef _RWSTD_LIB_SRC
// don't instantiate templates in library source code
// (but see _RWSTD_INSTANTIATE_TEMPLATES macro below)
# define _RWSTD_NO_TEMPLATE_DEFINITIONS
// don't provide definitions of operator new in library
# define _RWSTD_NO_EXT_OPERATOR_NEW
#endif // _RWSTD_LIB_SRC
#if _MSC_VER <= 1300
// msvc60 expects a definition to be provided for all variants
// of operator new/delete that are declared. This means that either
// the operators must be defined - preventing redefinition in user code -
// or that they must be undeclared - preventing them from being called
// directly in user code. We have chosen the former option.
# undef _RWSTD_NO_EXT_OPERATOR_NEW
#endif // _MSC_VER
#ifdef _RWSTD_INSTANTIATE_TEMPLATES
// instantiate templates (this macro is defined at the top of each
// library source file (.cpp file) that explicitly instantiates class
// or function templates using the _RWSTD_INSTANTIATE_N() macros
# undef _RWSTD_NO_TEMPLATE_DEFINITIONS
#endif
#endif // _RWSTD_RW_CONFIG_H_INCLUDED