epoc32/include/tools/stlport/stl/config/_evc.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
/*
williamr@2
     2
 * File to have Microsoft eMbedded Visual C++ 3.0 and .NET working with STLport
williamr@2
     3
 * May 2004
williamr@2
     4
 * Origin : Zdenek Nemec - zero@mapfactor.com
williamr@2
     5
 *          Michael Fink - vividos@users.sourceforge.net
williamr@2
     6
 */
williamr@2
     7
williamr@2
     8
#ifndef _STLP_EVC_H
williamr@2
     9
#define _STLP_EVC_H
williamr@2
    10
williamr@2
    11
#define _STLP_COMPILER "eMbedded Visual C++"
williamr@2
    12
williamr@2
    13
// This flag is being used by STLport to support
williamr@2
    14
// old-fashioned Windows CE SDK (see stl_wince.h)
williamr@2
    15
// do not use with eMebedded Visual C++ 3 or 4!
williamr@2
    16
#ifdef _STLP_WINCE
williamr@2
    17
#  undef _STLP_WINCE
williamr@2
    18
#endif
williamr@2
    19
williamr@2
    20
/* Compiler dependent define. The following defines may be available:
williamr@2
    21
 * _STLP_WCE_EVC3 when compiling under eMbedded Visual C++ 3
williamr@2
    22
 * _STLP_WCE_NET  when compiling under eMbedded Visual C++ .NET
williamr@2
    23
 * _STLP_WCE      always defined when compiling with one of the above
williamr@2
    24
 */
williamr@2
    25
#undef _STLP_WCE_EVC3
williamr@2
    26
#undef _STLP_WCE_NET
williamr@2
    27
williamr@2
    28
#if (_WIN32_WCE > 300)
williamr@2
    29
#  define _STLP_WCE_NET UNDER_CE
williamr@2
    30
#elif (_WIN32_WCE == 300)
williamr@2
    31
#  define _STLP_WCE_EVC3 UNDER_CE
williamr@2
    32
#else
williamr@2
    33
#  error No support for Windows CE below 3.0!
williamr@2
    34
#endif
williamr@2
    35
williamr@2
    36
// This is defined for all platforms using Windows CE
williamr@2
    37
#define _STLP_WCE
williamr@2
    38
williamr@2
    39
/* All Windows CE versions up to at least version 5 are little-endian, even
williamr@2
    40
 * if the hardware (like e.g. MIPS) can be configured for big-endian, too. */
williamr@2
    41
#define _STLP_LITTLE_ENDIAN
williamr@2
    42
williamr@2
    43
// Ensure _DEBUG is defined.
williamr@2
    44
#if defined (DEBUG) && !defined (_DEBUG)
williamr@2
    45
#  define _DEBUG
williamr@2
    46
#endif
williamr@2
    47
williamr@2
    48
// in evc3/4, on ARM, check that _STLP_DEBUG is not defined
williamr@2
    49
// the ARM compiler has a bug that prevents that debug mode from working
williamr@2
    50
#if _WIN32_WCE < 500 && defined(ARM) && defined(_STLP_DEBUG)
williamr@2
    51
#  error _STLP_DEBUG mode is not supported in evc3 and evc4 on the ARM platform!
williamr@2
    52
#endif
williamr@2
    53
williamr@2
    54
// inherit all msvc6 options
williamr@2
    55
#include <stl/config/_msvc.h>
williamr@2
    56
williamr@2
    57
// CE up to at least version 5 has no C locale support
williamr@2
    58
#define _STLP_NO_LOCALE_SUPPORT
williamr@2
    59
williamr@2
    60
#if _WIN32_WCE >= 0x500
williamr@2
    61
   // SDKs built with PB5 have terminate&co in namespace std...
williamr@2
    62
#  define _STLP_VENDOR_TERMINATE_STD _STLP_VENDOR_STD
williamr@2
    63
#  define _STLP_VENDOR_UNCAUGHT_EXCEPTION_STD _STLP_VENDOR_STD
williamr@2
    64
   // ...and new_handler/set_new_handler in the global namespace.
williamr@2
    65
#  define _STLP_GLOBAL_NEW_HANDLER 1
williamr@2
    66
#endif
williamr@2
    67
williamr@2
    68
// Always threaded in eMbedded Visual C++ 3.0 and .NET
williamr@2
    69
#ifndef _MT
williamr@2
    70
#  define _MT
williamr@2
    71
#endif
williamr@2
    72
williamr@2
    73
// we don't have a static native runtime library
williamr@2
    74
#undef _STLP_USING_CROSS_NATIVE_RUNTIME_LIB
williamr@2
    75
williamr@2
    76
#if _WIN32_WCE < 400
williamr@2
    77
// no long double under CE3 and older
williamr@2
    78
#  define _STLP_NO_LONG_DOUBLE
williamr@2
    79
#endif
williamr@2
    80
williamr@2
    81
// no *f and *l math functions available
williamr@2
    82
#define _STLP_NO_VENDOR_MATH_F
williamr@2
    83
#define _STLP_NO_VENDOR_MATH_L
williamr@2
    84
williamr@2
    85
/*
williamr@2
    86
 * Redirect cout, cerr and clog:
williamr@2
    87
 * If defined redirect cout, cerr and clog to
williamr@2
    88
 * files stdout.txt, stderr.txt and stdlog.txt
williamr@2
    89
 */
williamr@2
    90
//# define _STLP_REDIRECT_STDSTREAMS
williamr@2
    91
williamr@2
    92
/*
williamr@2
    93
 * Static class members may generate LNK1179:
williamr@2
    94
 * Wrong COMDAT packing may cause LNK1179 error.
williamr@2
    95
 * For details see http://groups.google.com/groups?th=8a05c82c4ffee280
williamr@2
    96
 * example P78. This define is not used/needed at this moment
williamr@2
    97
 * but may came handy in future...
williamr@2
    98
 */
williamr@2
    99
//# define _STLP_STATIC_MEMBERS_BUG
williamr@2
   100
williamr@2
   101
// Use wide-string interface of windows native functions (CreateFile...).
williamr@2
   102
// Note that this should be defined all the time while under CE.
williamr@2
   103
#if defined (UNICODE)
williamr@2
   104
#  define _STLP_USE_WIDE_INTERFACE
williamr@2
   105
#endif
williamr@2
   106
williamr@2
   107
// Force exception std to std instead of __std_alias.
williamr@2
   108
#if defined (__cplusplus) && !defined (_STLP_HAS_NO_NAMESPACES)
williamr@2
   109
#  ifdef _STLP_VENDOR_EXCEPT_STD
williamr@2
   110
#    undef _STLP_VENDOR_EXCEPT_STD
williamr@2
   111
#  endif
williamr@2
   112
#  define _STLP_VENDOR_EXCEPT_STD std
williamr@2
   113
#endif
williamr@2
   114
williamr@2
   115
// short string optimization bug under evc3, evc4 using ARM compiler
williamr@2
   116
#if _MSC_VER<1400 && (defined (ARM) || defined (_ARM_))
williamr@2
   117
#  define _STLP_DONT_USE_SHORT_STRING_OPTIM
williamr@2
   118
#endif
williamr@2
   119
williamr@2
   120
// when using MFC, disable another placement new declaration, since there is one in wcealt.h
williamr@2
   121
#if !defined (__BUILDING_STLPORT) && defined (_MFC_VER)
williamr@2
   122
#  define __PLACEMENT_NEW_INLINE
williamr@2
   123
#endif
williamr@2
   124
williamr@2
   125
// threads
williamr@2
   126
#undef _REENTRANT
williamr@2
   127
#define _REENTRANT
williamr@2
   128
#undef _NOTHREADS
williamr@2
   129
williamr@2
   130
// Use old fashioned headers (ctime vs. time.h).
williamr@2
   131
#undef _STLP_NO_NEW_C_HEADERS
williamr@2
   132
#define _STLP_NO_NEW_C_HEADERS
williamr@2
   133
williamr@2
   134
// exception handling support: only on evc4 and user added /GX to project settings
williamr@2
   135
#if defined (_STLP_WCE_EVC3) || !defined (_CPPUNWIND)
williamr@2
   136
#  define _STLP_NO_EXCEPTION_HEADER
williamr@2
   137
#  define _STLP_NO_EXCEPTIONS
williamr@2
   138
#  undef _STLP_USE_EXCEPTIONS
williamr@2
   139
#  ifndef __THROW_BAD_ALLOC
williamr@2
   140
#    define __THROW_BAD_ALLOC { _STLP_WINCE_TRACE(L"out of memory"); ExitThread(1); }
williamr@2
   141
#  endif
williamr@2
   142
#endif
williamr@2
   143
williamr@2
   144
#define _STLP_WINCE_TRACE(msg) OutputDebugString(msg)
williamr@2
   145
williamr@2
   146
/*
williamr@2
   147
 * eMbedded Visual C++ .NET specific settings
williamr@2
   148
 */
williamr@2
   149
#if defined (_STLP_WCE_NET)
williamr@2
   150
williamr@2
   151
// evc4 has no locale and time support
williamr@2
   152
#  define _STLP_NO_LOCALE_SUPPORT
williamr@2
   153
#  define _STLP_NO_TIME_SUPPORT
williamr@2
   154
williamr@2
   155
// ptrdiff_t is not defined in evc4 headers
williamr@2
   156
#  ifndef _PTRDIFF_T_DEFINED
williamr@2
   157
   typedef int ptrdiff_t;
williamr@2
   158
#    define _PTRDIFF_T_DEFINED
williamr@2
   159
#  endif
williamr@2
   160
williamr@2
   161
/*
williamr@2
   162
 * Helper macros for including the native headers in cases where a file with
williamr@2
   163
 * the same name also exists in the STLport include folder. The idea behind
williamr@2
   164
 * this is that we first go up one directory and then down into a dir that
williamr@2
   165
 * is only present in the native install but not in STLport.
williamr@2
   166
 *
williamr@2
   167
 */
williamr@2
   168
#  if !defined (_STLP_NATIVE_INCLUDE_PATH)
williamr@2
   169
#    if defined (_X86_)
williamr@2
   170
#      if defined (_STLP_WCE_TARGET_PROC_SUBTYPE_EMULATOR)
williamr@2
   171
#        define _STLP_NATIVE_INCLUDE_PATH ../Emulator
williamr@2
   172
#      else
williamr@2
   173
#        define _STLP_NATIVE_INCLUDE_PATH ../X86
williamr@2
   174
#      endif
williamr@2
   175
#    elif defined (_ARM_)
williamr@2
   176
#      if _MSC_VER < 1400
williamr@2
   177
         // eVC3/4
williamr@2
   178
#        if defined (ARMV4)
williamr@2
   179
#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4
williamr@2
   180
#        elif defined (ARMV4I)
williamr@2
   181
#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i
williamr@2
   182
#        elif defined (ARMV4T)
williamr@2
   183
#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4t
williamr@2
   184
#        else
williamr@2
   185
#          error Unknown ARM SDK.
williamr@2
   186
#        endif
williamr@2
   187
#      else
williamr@2
   188
         // VC8 crosscompiling for CE
williamr@2
   189
#        if defined (ARMV4)
williamr@2
   190
#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4
williamr@2
   191
#        elif defined(ARMV4I) || defined(ARMV4T)
williamr@2
   192
#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i
williamr@2
   193
#        else
williamr@2
   194
#          error Unknown ARM SDK.
williamr@2
   195
#        endif
williamr@2
   196
#      endif
williamr@2
   197
#    elif defined (_MIPS_)
williamr@2
   198
#      if defined (MIPS16)
williamr@2
   199
#        define _STLP_NATIVE_INCLUDE_PATH ../mips16
williamr@2
   200
#      elif defined (MIPSII)
williamr@2
   201
#        define _STLP_NATIVE_INCLUDE_PATH ../mipsII
williamr@2
   202
#      elif defined (MIPSII_FP)
williamr@2
   203
#        define _STLP_NATIVE_INCLUDE_PATH ../mipsII_fp
williamr@2
   204
#      elif defined (MIPSIV)
williamr@2
   205
#        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV
williamr@2
   206
#      elif defined (MIPSIV_FP)
williamr@2
   207
#        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV_fp
williamr@2
   208
#      else
williamr@2
   209
#        error Unknown MIPS SDK.
williamr@2
   210
#      endif
williamr@2
   211
#    elif defined (SHx)
williamr@2
   212
#      if defined (SH3)
williamr@2
   213
#        define _STLP_NATIVE_INCLUDE_PATH ../sh3
williamr@2
   214
#      elif defined (SH4)
williamr@2
   215
#        define _STLP_NATIVE_INCLUDE_PATH ../sh4
williamr@2
   216
#      else
williamr@2
   217
#        error Unknown SHx SDK.
williamr@2
   218
#      endif
williamr@2
   219
#    else
williamr@2
   220
#      error Unknown SDK.
williamr@2
   221
#    endif
williamr@2
   222
#  endif /* !_STLP_NATIVE_INCLUDE_PATH */
williamr@2
   223
williamr@2
   224
/* Workaround when using MFCCE and using <new> together: MFCCE's wcealt.h doesn't
williamr@2
   225
 * check for __PLACEMENT_NEW_INLINE before defining operator new, so when <new>
williamr@2
   226
 * defines the operatore before, there will be an error C2084:
williamr@2
   227
 * "function 'void *__cdecl operator new(unsigned int,void *)' already has a body".
williamr@2
   228
 */
williamr@2
   229
#  ifdef _STLP_USE_MFC
williamr@2
   230
#    define __PLACEMENT_NEW_INLINE
williamr@2
   231
#  endif
williamr@2
   232
williamr@2
   233
#endif /* _STLP_WCE_NET */
williamr@2
   234
williamr@2
   235
/* Workaround in _windows.h needs native headers access macros
williamr@2
   236
 * to be defined */
williamr@2
   237
#include <stl/config/_native_headers.h>
williamr@2
   238
williamr@2
   239
/*
williamr@2
   240
 * eMbedded Visual C++ 3.0 specific settings
williamr@2
   241
 */
williamr@2
   242
#if defined (_STLP_WCE_EVC3)
williamr@2
   243
williamr@2
   244
#  define _STLP_NO_NATIVE_MBSTATE_T
williamr@2
   245
williamr@2
   246
// evc3 has no locale and time support
williamr@2
   247
#  define _STLP_NO_LOCALE_SUPPORT
williamr@2
   248
#  define _STLP_NO_TIME_SUPPORT
williamr@2
   249
williamr@2
   250
// evc3 has new, but no explicit header
williamr@2
   251
#  define _STLP_NO_NEW_HEADER
williamr@2
   252
#  define _STLP_NO_NEW_NEW_HEADER
williamr@2
   253
williamr@2
   254
// evc3 has no bad_alloc and no typeinfo
williamr@2
   255
#  undef _STLP_NO_BAD_ALLOC
williamr@2
   256
#  define _STLP_NO_BAD_ALLOC
williamr@2
   257
williamr@2
   258
#  undef _STLP_NO_TYPEINFO
williamr@2
   259
#  define _STLP_NO_TYPEINFO
williamr@2
   260
williamr@2
   261
// missing things in eMbedded Visual C++ 3.0 headers
williamr@2
   262
#  ifndef _SIZE_T_DEFINED
williamr@2
   263
   typedef unsigned int size_t;
williamr@2
   264
#    define _SIZE_T_DEFINED
williamr@2
   265
#  endif
williamr@2
   266
williamr@2
   267
#  ifndef _WCHAR_T_DEFINED
williamr@2
   268
   typedef unsigned short wchar_t;
williamr@2
   269
#    define _WCHAR_T_DEFINED
williamr@2
   270
#  endif
williamr@2
   271
williamr@2
   272
// ptrdiff_t is not defined in evc3 headers
williamr@2
   273
#  ifndef _PTRDIFF_T_DEFINED
williamr@2
   274
   typedef int ptrdiff_t;
williamr@2
   275
#    define _PTRDIFF_T_DEFINED
williamr@2
   276
#  endif
williamr@2
   277
williamr@2
   278
// clock_t is not defined in evc3 headers
williamr@2
   279
#  ifndef _CLOCK_T_DEFINED
williamr@2
   280
   typedef long clock_t;
williamr@2
   281
#    define _CLOCK_T_DEFINED
williamr@2
   282
#  endif
williamr@2
   283
williamr@2
   284
// Struct tm is not defined in evc3 headers
williamr@2
   285
#  ifndef _TM_DEFINED
williamr@2
   286
struct tm {
williamr@2
   287
   int tm_sec;     /* seconds after the minute - [0,59] */
williamr@2
   288
   int tm_min;     /* minutes after the hour - [0,59] */
williamr@2
   289
   int tm_hour;    /* hours since midnight - [0,23] */
williamr@2
   290
   int tm_mday;    /* day of the month - [1,31] */
williamr@2
   291
   int tm_mon;     /* months since January - [0,11] */
williamr@2
   292
   int tm_year;    /* years since 1900 */
williamr@2
   293
   int tm_wday;    /* days since Sunday - [0,6] */
williamr@2
   294
   int tm_yday;    /* days since January 1 - [0,365] */
williamr@2
   295
   int tm_isdst;   /* daylight savings time flag */
williamr@2
   296
};
williamr@2
   297
#    define _TM_DEFINED
williamr@2
   298
#  endif
williamr@2
   299
williamr@2
   300
// define placement new and delete operator
williamr@2
   301
// note: when MFCCE headers are included first, don't define the new operator,
williamr@2
   302
//       since it was already defined in wcealt.h
williamr@2
   303
#  ifdef __cplusplus
williamr@2
   304
#    ifndef __PLACEMENT_NEW_INLINE
williamr@2
   305
#      ifndef _MFC_VER
williamr@2
   306
inline void *__cdecl operator new(size_t, void *_P) { return (_P); }
williamr@2
   307
#      endif /* _MFC_VER */
williamr@2
   308
inline void __cdecl operator delete(void *, void *) { return; }
williamr@2
   309
#      define __PLACEMENT_NEW_INLINE
williamr@2
   310
#    endif
williamr@2
   311
#  endif /* __cplusplus */
williamr@2
   312
williamr@2
   313
// evc3 doesn't have native wide functions, e.g. fgetwc, wmemmove
williamr@2
   314
#  define _STLP_NO_NATIVE_WIDE_FUNCTIONS
williamr@2
   315
williamr@2
   316
// evc3 doesn't have assert.h
williamr@2
   317
#  ifndef _ASSERT_DEFINED
williamr@2
   318
#    define assert(expr) _STLP_ASSERT(expr)
williamr@2
   319
#    define _ASSERT_DEFINED
williamr@2
   320
#  endif
williamr@2
   321
williamr@2
   322
#endif /* _STLP_WCE_EVC3 */
williamr@2
   323
williamr@2
   324
// Minimize windows.h includes
williamr@2
   325
#if !defined (WIN32_LEAN_AND_MEAN)
williamr@2
   326
#  define WIN32_LEAN_AND_MEAN
williamr@2
   327
#endif
williamr@2
   328
#if !defined (VC_EXTRALEAN)
williamr@2
   329
#  define VC_EXTRALEAN
williamr@2
   330
#endif
williamr@2
   331
#if !defined (STRICT)
williamr@2
   332
#  define STRICT
williamr@2
   333
#endif
williamr@2
   334
williamr@2
   335
// Don't let windows.h define its min and max macros.
williamr@2
   336
#if !defined (NOMINMAX)
williamr@2
   337
#  define NOMINMAX
williamr@2
   338
#endif
williamr@2
   339
williamr@2
   340
/*
williamr@2
   341
 * original call: TerminateProcess(GetCurrentProcess(), 0);
williamr@2
   342
 * we substitute the GetCurrentProcess() with the result of the inline function
williamr@2
   343
 * defined in kfuncs.h, since we then can avoid including <windows.h> at all.
williamr@2
   344
 * all needed Win32 API functions are defined in <stl/_windows.h>
williamr@2
   345
 */
williamr@2
   346
#ifndef _ABORT_DEFINED
williamr@2
   347
#  define _STLP_ABORT() TerminateProcess(reinterpret_cast<HANDLE>(66), 0)
williamr@2
   348
#  define _ABORT_DEFINED
williamr@2
   349
#endif
williamr@2
   350
williamr@2
   351
// Notice: windows.h isn't included here anymore; all needed defines are in
williamr@2
   352
// stl/_windows.h now
williamr@2
   353
williamr@2
   354
#endif /* _STLP_EVC_H */