| /*************************************************************************** |
| * |
| * _config-gcc.h - GCC 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-2008 Rogue Wave Software, Inc. |
| * |
| **************************************************************************/ |
| |
| // _REENTRANT is defined by the -pthread compiler option |
| |
| #ifndef _RWSTD_NO_IMPLICIT_INCLUSION |
| # define _RWSTD_NO_IMPLICIT_INCLUSION |
| #endif |
| |
| #ifndef _RWSTD_NO_EXPORT |
| // not implemented |
| # define _RWSTD_NO_EXPORT |
| #endif |
| |
| #ifndef __EXCEPTIONS |
| // disable exceptions when the macro __EXCEPTIONS |
| // is not #defined by the compiler, e.g., when |
| // the -fno-exceptions option is used |
| # ifndef _RWSTD_NO_EXCEPTIONS |
| # define _RWSTD_NO_EXCEPTIONS |
| # endif // _RWSTD_NO_EXCEPTIONS |
| #endif // __EXCEPTIONS |
| |
| #if !defined (_RWSTD_USE_PURE_C_HEADERS) |
| // disabled except when requested |
| # define _RWSTD_NO_PURE_C_HEADERS |
| #endif // !_RWSTD_USE_PURE_C_HEADERS |
| |
| #ifdef _RWSTD_NO_PURE_C_HEADERS |
| // deprecated C headers (the <xxx.h> kind) are fully implemented |
| // in terms of the pure C++ C library headers (the <cxxx> kind) |
| # define _RWSTD_NO_DEPRECATED_C_HEADERS |
| #endif // _RWSTD_NO_PURE_C_HEADERS |
| |
| #if !defined (_RWSTD_STRICT_ANSI) && __GNUG__ <= 2 && __GNUC_MINOR__ < 97 |
| // prevent gcc 2.9x ICE |
| # define _RWSTD_NO_PLACEMENT_DELETE |
| #endif // !_RWSTD_STRICT_ANSI |
| |
| #if __GNUG__ < 3 |
| // gcc 2.x doesn't understand the extern template syntax |
| // but only issues a warning: ANSI C++ forbids the use |
| // of `extern' on explicit instantiations |
| # ifndef _RWSTD_NO_EXTERN_TEMPLATE |
| # define _RWSTD_NO_EXTERN_TEMPLATE |
| # endif // _RWSTD_NO_EXTERN_TEMPLATE |
| #endif // gcc 2.x |
| |
| #if __GNUG__ <= 2 && __GNUC_MINOR__ < 97 && defined (_RWSTD_NO_HONOR_STD) |
| // standard iostream objects are declared as objects of their respective |
| // types by defined as POD's to prevent their destruction during program |
| // lifetime (done to work around a g++ 2.95.2 bug that prevents g++ |
| // from deducing the type of references to the objects in template code) |
| # define _RWSTD_NO_IOSTREAM_OBJECT_REFS |
| #endif //__GNUG__ <= 2 && __GNUC_MINOR__ < 97 && _RWSTD_NO_HONOR_STD |
| |
| #define _RWSTD_GNUC_ATTRIBUTE(attr) __attribute__ (attr) |
| |
| // gcc attribute((noreturn)) indicates that a function doesn't return |
| // (it may still exit by throwing an exception or by calling longjmp) |
| #define _RWSTD_NORETURN __attribute__ ((noreturn)) |
| |
| #if __GNUG__ > 3 || __GNUG__ == 3 && __GNUC_MINOR__ >= 3 |
| // gcc attribute((nothrow)) to indicate that a function doesn't throw |
| // exceptions; unlike the emtpy exception specification the attribute |
| // avoids the cost of checking for exceptions and calling unexpected() |
| # define _RWSTD_ATTRIBUTE_NOTHROW _RWSTD_GNUC_ATTRIBUTE ((nothrow)) |
| #endif // gcc >= 3.3 |
| |
| #ifdef _RWSTD_OS_LINUX |
| |
| # ifdef _RWSTD_NO_NEW_HEADER |
| # undef _RWSTD_NO_NEW_HEADER |
| # endif // _RWSTD_NO_NEW_HEADER |
| |
| // our <cxxx> libc headers put the libc functions in namespace std |
| # ifdef _RWSTD_NO_LIBC_IN_STD |
| # undef _RWSTD_NO_LIBC_IN_STD |
| # endif // _RWSTD_NO_LIBC_IN_STD |
| |
| # ifdef _RWSTD_ANSI_C_LIMITS_H |
| // prevent system header warnings |
| # undef _RWSTD_ANSI_C_LIMITS_H |
| # define _RWSTD_ANSI_C_LIMITS_H <../include/limits.h> |
| # endif // _RWSTD_ANSI_C_LIMITS_H |
| #endif // _RWSTD_OS_LINUX |
| |
| #ifdef _RWSTD_OS_AIX |
| // functions called from member functions of explicitly instantiated |
| // class templates aren't "implicitly" instantiated (compiler bug) |
| # define _RWSTD_NO_IMPLICIT_INSTANTIATION |
| #endif |
| |
| // force using /usr/include/math.h |
| // prevent recursion caused by pulling in gcc's own "fixed" header |
| #undef _RWSTD_ANSI_C_MATH_H |
| |
| // use new C++ libc headers |
| #undef _RWSTD_NO_NEW_HEADER |
| |
| #undef _RWSTD_NO_LIBC_IN_STD |
| |
| #undef _RWSTD_NO_DEPRECATED_LIBC_IN_STD |
| |
| /*** CygWin ***************************************************************/ |
| #ifdef __CYGWIN__ |
| // use our own C++ libc headers |
| # undef _RWSTD_NO_NEW_HEADER |
| // libc is wrapped in namespaces std |
| # undef _RWSTD_NO_LIBC_IN_STD |
| // deprecated C++ libc headers don't introduce names into namespace std |
| # ifndef _RWSTD_NO_DEPRECATED_LIBC_IN_STD |
| # define _RWSTD_NO_DEPRECATED_LIBC_IN_STD |
| # endif |
| |
| # ifdef _RWSHARED |
| // disable exporting tmeplate instantiations in shared builds |
| // see STDCXX-507 |
| # define _RWSTD_NO_EXTERN_TEMPLATE |
| |
| // operator new and delete is not reliably replaceable across |
| // shared library boundaries, which includes the shared library |
| // version of the language support library |
| # define _RWSTD_NO_REPLACEABLE_NEW_DELETE |
| # endif |
| #endif // __CYGWIN__ |
| |
| /*** MinGW ****************************************************************/ |
| #ifdef __MINGW32__ |
| # ifdef _RWSHARED |
| // disable exporting temeplate instantiations in shared builds |
| // see STDCXX-507 |
| # define _RWSTD_NO_EXTERN_TEMPLATE |
| # endif |
| |
| // operator new and delete is not reliably replaceable across |
| // shared library boundaries, which includes the shared library |
| // version of the language support library |
| // on MinGW the language support library is always shared |
| # define _RWSTD_NO_REPLACEABLE_NEW_DELETE |
| #endif // __MINGW32__ |
| |
| /*** Tru64 UNIX ***********************************************************/ |
| #ifdef _RWSTD_OS_OSF1 |
| // sizeof (long double) == sizeof (double), 'L' causes SIGSEGV |
| # define _RWSTD_LDBL_PRINTF_PREFIX "" |
| # define _RWSTD_LDBL_SCANF_PREFIX "l" |
| |
| #endif // _RWSTD_OS_OSF1 |
| |
| /*** Solaris **************************************************************/ |
| #ifdef _RWSTD_OS_SUNOS |
| |
| // _SOLARIS_THREADS #defined when the -threads option is used on SunOS |
| # if defined (_SOLARIS_THREADS) && !defined (_RWSTD_SOLARIS_THREADS) |
| # define _RWSTD_SOLARIS_THREADS |
| # endif // _SOLARIS_THREADS && !_RWSTD_SOLARIS_THREADS |
| |
| // _PTHREADS #defined when the -pthreads option is used on SunOS |
| # if defined (_PTHREADS) && !defined (_RWSTD_POSIX_THREADS) |
| # define _RWSTD_POSIX_THREADS |
| # endif // _PTHREADS && !_RWSTD_POSIX_THREADS |
| |
| # if __GNUG__ == 3 && __GNUC_MINOR__ < 1 |
| // Avoid gcc 3.0.1 header configuration confusion with wchar |
| # ifndef _RWSTD_NO_NEW_HEADER |
| # define _RWSTD_NO_NEW_HEADER |
| # endif |
| # ifndef _RWSTD_NO_LIBC_IN_STD |
| # define _RWSTD_NO_LIBC_IN_STD |
| # endif |
| # endif // __GNUG__ == 3 && __GNUC_MINOR__ < 1 |
| #endif // _RWSTD_OS_SUNOS |