williamr@2: /* STLport configuration file williamr@2: * It is internal STLport header - DO NOT include it directly williamr@2: * Microsoft Visual C++ 6.0, 7.0, 7.1, 8.0, ICL williamr@2: */ williamr@2: williamr@2: #if !defined (_STLP_COMPILER) williamr@2: # define _STLP_COMPILER "Microsoft Visual Studio C++" williamr@2: #endif williamr@2: williamr@2: #if !defined (__ICL) && !defined (_STLP_MSVC) williamr@2: # define _STLP_MSVC _MSC_VER williamr@2: #endif williamr@2: williamr@2: #if !defined (_STLP_MSVC_LIB) williamr@2: # define _STLP_MSVC_LIB _MSC_VER williamr@2: #endif williamr@2: williamr@2: #if defined (__BUILDING_STLPORT) && defined (_MANAGED) williamr@2: /* Building a managed version of STLport is not supported because we haven't williamr@2: * found a good reason to support it. However, building a managed translation williamr@2: * unit using STLport _is_ supported. williamr@2: */ williamr@2: # error Sorry but building a managed version of STLport is not supported. williamr@2: #endif williamr@2: williamr@2: #if defined (_STLP_USING_PLATFORM_SDK_COMPILER) williamr@2: /* This is a specific section for compilers coming with platform SDKs. Native williamr@2: * library coming with it is different from the one coming with commercial williamr@2: * MSVC compilers so there is some specific settings. williamr@2: */ williamr@2: # define _STLP_NATIVE_INCLUDE_PATH ../crt williamr@2: # define _STLP_VENDOR_GLOBAL_CSTD williamr@2: # define _STLP_VENDOR_TERMINATE_STD williamr@2: # define _STLP_GLOBAL_NEW_HANDLER williamr@2: # if (_STLP_MSVC_LIB <= 1400) williamr@2: /* We hope this bug will be fixed in future versions. */ williamr@2: # define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 williamr@2: # endif williamr@2: #endif williamr@2: williamr@2: #define _STLP_CALL __cdecl williamr@2: williamr@2: #ifndef _STLP_LONG_LONG williamr@2: # define _STLP_LONG_LONG __int64 williamr@2: #endif williamr@2: williamr@2: #define _STLP_PRAGMA_ONCE williamr@2: williamr@2: /* These switches depend on compiler flags. We are hoping here that compilers williamr@2: * simulating MSVC behavior use identical macros to report compilation context. williamr@2: * Otherwise those macros will have to be undef in specific compiler configuration williamr@2: * files. williamr@2: */ williamr@2: #ifndef _CPPUNWIND williamr@2: # define _STLP_DONT_USE_EXCEPTIONS 1 williamr@2: #endif williamr@2: williamr@2: #ifndef _CPPRTTI williamr@2: # define _STLP_NO_RTTI 1 williamr@2: #endif williamr@2: williamr@2: #if defined (_MT) && !defined (_STLP_NO_THREADS) && !defined (_REENTRANT) williamr@2: # define _REENTRANT 1 williamr@2: #endif williamr@2: williamr@2: #if !defined (_NATIVE_WCHAR_T_DEFINED) williamr@2: # define _STLP_WCHAR_T_IS_USHORT 1 williamr@2: #endif williamr@2: williamr@2: #define _STLP_MINIMUM_IMPORT_STD williamr@2: #define _STLP_NO_VENDOR_STDLIB_L 1 williamr@2: williamr@2: #if defined (_STLP_MSVC) williamr@2: williamr@2: #define _STLP_NORETURN_FUNCTION __declspec(noreturn) williamr@2: williamr@2: /* Full compiler version comes from boost library intrinsics.hpp header. */ williamr@2: # if defined (_MSC_FULL_VER) && (_MSC_FULL_VER >= 140050215) williamr@2: # define _STLP_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T) williamr@2: # define _STLP_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T) williamr@2: # define _STLP_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T) williamr@2: # define _STLP_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) williamr@2: # define _STLP_IS_POD(T) __is_pod(T) williamr@2: # define _STLP_HAS_TYPE_TRAITS_INTRINSICS williamr@2: # endif williamr@2: williamr@2: # ifndef _STLP_MSVC50_COMPATIBILITY williamr@2: # define _STLP_MSVC50_COMPATIBILITY 1 williamr@2: # endif williamr@2: williamr@2: # define _STLP_DLLEXPORT_NEEDS_PREDECLARATION 1 williamr@2: # define _STLP_HAS_SPECIFIC_PROLOG_EPILOG 1 williamr@2: williamr@2: /* # ifndef __BUILDING_STLPORT williamr@2: * # define _STLP_USE_TEMPLATE_EXPORT 1 williamr@2: * # endif williamr@2: */ williamr@2: # if (_STLP_MSVC <= 1400) williamr@2: # define _STLP_STATIC_CONST_INIT_BUG 1 williamr@2: # endif williamr@2: williamr@2: /** Note: the macro _STLP_NO_UNCAUGHT_EXCEPT_SUPPORT is defined williamr@2: unconditionally and undef'ed here when applicable. */ williamr@2: # if defined(UNDER_CE) williamr@2: /* eVCx: williamr@2: uncaught_exception is declared in the SDKs delivered with eVC4 (eVC3 is williamr@2: unknown) and they all reside in namespace 'std' there. However, they are not williamr@2: part of any lib so linking fails. When using VC8 to crosscompile for CE 5 on williamr@2: an ARMV4I, the uncaught_exception test fails, the function returns the wrong williamr@2: value. */ williamr@2: # else williamr@2: /* VCx: williamr@2: These are present at least since VC6, but the uncaught_exception() of VC6 is williamr@2: broken, it returns the wrong value in the unittests. 7.1 and later seem to williamr@2: work, 7.0 is still unknown (we assume it works until negative report). */ williamr@2: # if (_STLP_MSVC >= 1300)// VC7 and later williamr@2: # undef _STLP_NO_UNCAUGHT_EXCEPT_SUPPORT williamr@2: # if !defined (_STLP_DONT_USE_EXCEPTIONS) williamr@2: # define _STLP_NOTHROW throw() williamr@2: # endif williamr@2: # endif williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC <= 1300) williamr@2: # define _STLP_NO_CLASS_PARTIAL_SPECIALIZATION 1 williamr@2: # define _STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER 1 williamr@2: /* There is no partial spec, and MSVC breaks on simulating it for iterator_traits queries */ williamr@2: # define _STLP_USE_OLD_HP_ITERATOR_QUERIES williamr@2: # define _STLP_NO_TYPENAME_IN_TEMPLATE_HEADER williamr@2: # define _STLP_NO_METHOD_SPECIALIZATION 1 williamr@2: # define _STLP_DEF_CONST_PLCT_NEW_BUG 1 williamr@2: # define _STLP_NO_TYPENAME_ON_RETURN_TYPE 1 williamr@2: /* VC++ cannot handle default allocator argument in template constructors */ williamr@2: # define _STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS williamr@2: # define _STLP_NO_QUALIFIED_FRIENDS 1 williamr@2: # define _STLP_NO_FRIEND_TEMPLATES williamr@2: /* Fails to properly resolve call to sin() from within sin() */ williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC < 1300) williamr@2: # define _STLP_NO_IEC559_SUPPORT 1 williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC < 1300) /* including MSVC 6.0 */ williamr@2: /* These work, as long they are inline */ williamr@2: # define _STLP_INLINE_MEMBER_TEMPLATES 1 williamr@2: # define _STLP_NO_MEMBER_TEMPLATE_KEYWORD 1 williamr@2: # define _STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE 1 williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC >= 1200) williamr@2: # define _STLP_HAS_NATIVE_FLOAT_ABS 1 williamr@2: # endif williamr@2: williamr@2: // TODO: some eVC4 compilers report _MSC_VER 1201 or 1202, which category do they belong to? williamr@2: # if (_STLP_MSVC > 1200) && (_STLP_MSVC < 1310) williamr@2: # define _STLP_NO_MOVE_SEMANTIC williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC < 1300) williamr@2: /* TODO: remove this if it is handled and documented elsewhere williamr@2: * dums: VC6 do not handle correctly member templates of class that are explicitely williamr@2: * instanciated to be exported. There is a workaround, seperate the non template methods williamr@2: * from the template ones within 2 different classes and only export the non template one. williamr@2: * It is implemented for basic_string and locale at the writing of this note. williamr@2: * However this problem hos not been considered as important enough to remove template member williamr@2: * methods for other classes. Moreover Boost (www.boost.org) required it to be granted. williamr@2: * The workaround is activated thanks to the _STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND macro defined williamr@2: * later in this config file. williamr@2: */ williamr@2: /* williamr@2: # if defined (_DLL) williamr@2: # define _STLP_NO_MEMBER_TEMPLATES 1 williamr@2: # endif williamr@2: */ williamr@2: williamr@2: /* Boris : not defining this macro for SP5 causes other problems */ williamr@2: /*# if !defined (_MSC_FULL_VER) || (_MSC_FULL_VER < 12008804 ) */ williamr@2: # define _STLP_NO_USING_FOR_GLOBAL_FUNCTIONS 1 williamr@2: /*# endif */ williamr@2: # define _STLP_DONT_USE_BOOL_TYPEDEF 1 williamr@2: # define _STLP_DONT_RETURN_VOID 1 williamr@2: # endif williamr@2: williamr@2: /* williamr@2: * MSVC6 is known to have many trouble with namespace management but williamr@2: * MSVC .Net 2003 and 2005 also have a bug difficult to reproduce without williamr@2: * STLport: williamr@2: * namespace stlp_std { williamr@2: * typedef int foo_int; williamr@2: * } williamr@2: * #include williamr@2: * const foo_int bar = 0; williamr@2: * williamr@2: * As you can see foo is available without namespace specification as if williamr@2: * a using namespace stlp_std has been performed. Defining _STLP_USING_NAMESPACE_BUG williamr@2: * restore the expected compilation error. williamr@2: */ williamr@2: # define _STLP_USING_NAMESPACE_BUG 1 williamr@2: williamr@2: # if (_STLP_MSVC < 1300) /* MSVC 6.0 and earlier */ williamr@2: /* defined for DEBUG and NDEBUG too, to allow user mix own debug build with STLP release library */ williamr@2: # define _STLP_USE_ABBREVS williamr@2: # endif williamr@2: williamr@2: // TODO: what is the earliest version for this? If it is 1200, use _STLP_MSVC>=1200. williamr@2: # if (_STLP_MSVC > 1100) && (_STLP_MSVC < 1300) williamr@2: typedef char __stl_char; williamr@2: # define _STLP_DEFAULTCHAR __stl_char williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC < 1200) /* before VC++ 6.0 */ williamr@2: /* # define _STLP_NO_MEMBER_TEMPLATES 1 */ williamr@2: /* # define _STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS 1 */ williamr@2: # define _STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS 1 williamr@2: # define _STLP_DONT_USE_PARTIAL_SPEC_WRKD 1 williamr@2: # define _STLP_QUALIFIED_SPECIALIZATION_BUG 1 williamr@2: # define _STLP_NON_TYPE_TMPL_PARAM_BUG 1 williamr@2: # define _STLP_THROW_RETURN_BUG 1 williamr@2: # define _STLP_NO_MEMBER_TEMPLATE_CLASSES 1 williamr@2: # define _STLP_DEF_CONST_DEF_PARAM_BUG 1 williamr@2: # endif williamr@2: williamr@2: # if (_STLP_MSVC < 1100 ) williamr@2: # ifndef _STLP_USE_NO_IOSTREAMS williamr@2: # define _STLP_USE_NO_IOSTREAMS williamr@2: # endif williamr@2: /* # define _STLP_NESTED_TYPE_PARAM_BUG 1 */ williamr@2: /* Debug mode does not work for 4.2 */ williamr@2: # if defined (_STLP_DEBUG) williamr@2: # pragma message ("STLport debug mode does not work for VC++ 4.2, turning _STLP_DEBUG off ...") williamr@2: # undef _STLP_DEBUG williamr@2: # endif williamr@2: # define _STLP_NO_BOOL 1 williamr@2: # define _STLP_NEED_TYPENAME 1 williamr@2: # define _STLP_NEED_EXPLICIT 1 williamr@2: # define _STLP_NEED_MUTABLE 1 williamr@2: # define _STLP_NO_PARTIAL_SPECIALIZATION_SYNTAX williamr@2: # define _STLP_LIMITED_DEFAULT_TEMPLATES 1 williamr@2: # define _STLP_NONTEMPL_BASE_MATCH_BUG 1 williamr@2: # define _STLP_BROKEN_USING_DIRECTIVE 1 williamr@2: # define _STLP_NO_ARROW_OPERATOR 1 williamr@2: # define _STLP_NO_SIGNED_BUILTINS 1 williamr@2: # define _STLP_NO_EXCEPTION_SPEC 1 williamr@2: # define _STLP_HAS_NO_NAMESPACES 1 williamr@2: # define _STLP_NO_AT_MEMBER_FUNCTION 1 williamr@2: # define _STLP_NO_MEMBER_TEMPLATES 1 williamr@2: # endif /* 1100 */ williamr@2: williamr@2: #endif /* _STLP_MSVC */ williamr@2: williamr@2: /** The desktop variants starting with VC8 have a set of more secure replacements williamr@2: for the error-prone string handling functions of the C standard lib. */ williamr@2: #if (_STLP_MSVC_LIB >= 1400) && !defined (_STLP_USING_PLATFORM_SDK_COMPILER) && !defined(UNDER_CE) williamr@2: # define _STLP_USE_SAFE_STRING_FUNCTIONS 1 williamr@2: #endif williamr@2: williamr@2: #if (_STLP_MSVC_LIB <= 1310) williamr@2: # define _STLP_VENDOR_GLOBAL_CSTD williamr@2: #endif williamr@2: williamr@2: #if (_STLP_MSVC_LIB >= 1300) && !defined(UNDER_CE) williamr@2: /* Starting with MSVC 7.0 and compilers simulating it, williamr@2: * we assume that the new SDK is granted: williamr@2: */ williamr@2: # define _STLP_NEW_PLATFORM_SDK 1 williamr@2: #endif williamr@2: williamr@2: #if (_STLP_MSVC_LIB < 1300) /* including MSVC 6.0 */ williamr@2: # define _STLP_GLOBAL_NEW_HANDLER 1 williamr@2: # define _STLP_VENDOR_UNEXPECTED_STD williamr@2: # define _STLP_NEW_DONT_THROW_BAD_ALLOC 1 williamr@2: #endif williamr@2: williamr@2: #if (_STLP_MSVC_LIB < 1100) williamr@2: /* up to 4.2, library is in global namespace */ williamr@2: # define _STLP_VENDOR_GLOBAL_STD williamr@2: #endif williamr@2: williamr@2: #if (_STLP_MSVC_LIB <= 1010) williamr@2: /* "bool" is reserved in MSVC 4.1 while absent, so : */ williamr@2: # define _STLP_NO_BAD_ALLOC williamr@2: # define _STLP_HAS_NO_NEW_C_HEADERS 1 williamr@2: # define _STLP_NO_NEW_NEW_HEADER 1 williamr@2: #elif (_STLP_MSVC_LIB < 1100) williamr@2: /* VC++ 4.2 and higher */ williamr@2: # define _STLP_YVALS_H 1 williamr@2: # define _STLP_USE_NO_IOSTREAMS 1 williamr@2: #endif williamr@2: williamr@2: #define _STLP_EXPORT_DECLSPEC __declspec(dllexport) williamr@2: #define _STLP_IMPORT_DECLSPEC __declspec(dllimport) williamr@2: williamr@2: #if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1100) williamr@2: # define _STLP_CLASS_EXPORT_DECLSPEC __declspec(dllexport) williamr@2: # define _STLP_CLASS_IMPORT_DECLSPEC __declspec(dllimport) williamr@2: #endif williamr@2: williamr@2: #if defined (__DLL) || defined (_DLL) || defined (_RTLDLL) || defined (_AFXDLL) williamr@2: # define _STLP_RUNTIME_DLL williamr@2: #endif williamr@2: #if defined (__BUILDING_STLPORT) && \ williamr@2: (defined (_STLP_USE_DYNAMIC_LIB) || \ williamr@2: defined (_STLP_RUNTIME_DLL) && !defined (_STLP_USE_STATIC_LIB)) williamr@2: # define _STLP_DLL williamr@2: #endif williamr@2: #include williamr@2: #undef _STLP_RUNTIME_DLL williamr@2: #undef _STLP_DLL williamr@2: williamr@2: #if defined (_STLP_USE_DYNAMIC_LIB) williamr@2: # undef _STLP_USE_DECLSPEC williamr@2: # define _STLP_USE_DECLSPEC 1 williamr@2: # if (_STLP_MSVC >= 1200) && (_STLP_MSVC < 1300) williamr@2: # define _STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND 1 williamr@2: # endif williamr@2: #endif williamr@2: williamr@2: #if !defined (_STLP_IMPORT_TEMPLATE_KEYWORD) williamr@2: # if !defined (_MSC_EXTENSIONS) || defined(_STLP_MSVC) && _STLP_MSVC >= 1300 williamr@2: # define _STLP_IMPORT_TEMPLATE_KEYWORD williamr@2: # else williamr@2: # define _STLP_IMPORT_TEMPLATE_KEYWORD extern williamr@2: # endif williamr@2: #endif williamr@2: #define _STLP_EXPORT_TEMPLATE_KEYWORD williamr@2: williamr@2: #if defined (_STLP_MSVC) && (_STLP_MSVC < 1200) williamr@2: /* only static STLport lib now works for VC 5.0 */ williamr@2: # undef _STLP_USE_STATIC_LIB williamr@2: # undef _STLP_USE_DYNAMIC_LIB williamr@2: # define _STLP_USE_STATIC_LIB williamr@2: /* disable hook which makes template symbols to be searched for in the library */ williamr@2: # undef _STLP_NO_CUSTOM_IO williamr@2: #endif williamr@2: williamr@2: #include williamr@2: williamr@2: #if defined (_STLP_USING_PLATFORM_SDK_COMPILER) williamr@2: /* The Windows 64 bits SDK required for the moment link to bufferoverflowU.lib for williamr@2: * additional buffer overrun checks. Rather than require the STLport build system and williamr@2: * users to explicitely link with it we use the MSVC auto link feature. williamr@2: */ williamr@2: # if !defined (_STLP_DONT_USE_AUTO_LINK) || defined (__BUILDING_STLPORT) williamr@2: # pragma comment (lib, "bufferoverflowU.lib") williamr@2: # if defined (_STLP_VERBOSE_AUTO_LINK) williamr@2: # pragma message ("STLport: Auto linking to bufferoverflowU.lib") williamr@2: # endif williamr@2: # endif williamr@2: #endif williamr@2: williamr@2: /* Local Variables: williamr@2: * mode:C++ williamr@2: * End: williamr@2: */