1 /* 2 ****************************************************************************** 3 * 4 * Copyright (C) 1997-2009, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ****************************************************************************** 8 * 9 * FILE NAME : platform.h 10 * 11 * Date Name Description 12 * 05/13/98 nos Creation (content moved here from ptypes.h). 13 * 03/02/99 stephen Added AS400 support. 14 * 03/30/99 stephen Added Linux support. 15 * 04/13/99 stephen Reworked for autoconf. 16 ****************************************************************************** 17 */ 18 19 /** 20 * \file 21 * \brief Configuration constants for the Windows platform 22 */ 23 24 /** Define the platform we're on. */ 25 #ifndef U_WINDOWS 26 #define U_WINDOWS 27 #endif 28 29 #if defined(__BORLANDC__) 30 #define U_HAVE_PLACEMENT_NEW 0 31 #define __STDC_CONSTANT_MACROS 32 #endif 33 34 /** _MSC_VER is used to detect the Microsoft compiler. */ 35 #if defined(_MSC_VER) 36 #define U_INT64_IS_LONG_LONG 0 37 #else 38 #define U_INT64_IS_LONG_LONG 1 39 #endif 40 41 /** Define whether inttypes.h is available */ 42 #ifndef U_HAVE_INTTYPES_H 43 # if defined(__BORLANDC__) || defined(__MINGW32__) 44 # define U_HAVE_INTTYPES_H 1 45 # else 46 # define U_HAVE_INTTYPES_H 0 47 # endif 48 #endif 49 50 /** 51 * Define what support for C++ streams is available. 52 * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available 53 * (1997711 is the date the ISO/IEC C++ FDIS was published), and then 54 * one should qualify streams using the std namespace in ICU header 55 * files. 56 * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is 57 * available instead (198506 is the date when Stroustrup published 58 * "An Extensible I/O Facility for C++" at the summer USENIX conference). 59 * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and 60 * support for them will be silently suppressed in ICU. 61 * 62 */ 63 64 #ifndef U_IOSTREAM_SOURCE 65 #define U_IOSTREAM_SOURCE 199711 66 #endif 67 68 /** @{ 69 * Determines whether specific types are available */ 70 #ifndef U_HAVE_INT8_T 71 #define U_HAVE_INT8_T U_HAVE_INTTYPES_H 72 #endif 73 74 #ifndef U_HAVE_UINT8_T 75 #define U_HAVE_UINT8_T U_HAVE_INTTYPES_H 76 #endif 77 78 #ifndef U_HAVE_INT16_T 79 #define U_HAVE_INT16_T U_HAVE_INTTYPES_H 80 #endif 81 82 #ifndef U_HAVE_UINT16_T 83 #define U_HAVE_UINT16_T U_HAVE_INTTYPES_H 84 #endif 85 86 #ifndef U_HAVE_INT32_T 87 #define U_HAVE_INT32_T U_HAVE_INTTYPES_H 88 #endif 89 90 #ifndef U_HAVE_UINT32_T 91 #define U_HAVE_UINT32_T U_HAVE_INTTYPES_H 92 #endif 93 94 #ifndef U_HAVE_INT64_T 95 #define U_HAVE_INT64_T U_HAVE_INTTYPES_H 96 #endif 97 98 #ifndef U_HAVE_UINT64_T 99 #define U_HAVE_UINT64_T U_HAVE_INTTYPES_H 100 #endif 101 102 /** @} */ 103 104 /** Define 64 bit limits */ 105 #if !U_INT64_IS_LONG_LONG 106 # ifndef INT64_C 107 # define INT64_C(x) ((int64_t)x) 108 # endif 109 # ifndef UINT64_C 110 # define UINT64_C(x) ((uint64_t)x) 111 # endif 112 /** else use the umachine.h definition */ 113 #endif 114 115 /*===========================================================================*/ 116 /** @{ 117 * Generic data types */ 118 /*===========================================================================*/ 119 120 /** If your platform does not have the <inttypes.h> header, you may 121 need to edit the typedefs below. */ 122 #if U_HAVE_INTTYPES_H 123 #include <inttypes.h> 124 #else /* U_HAVE_INTTYPES_H */ 125 126 #if ! U_HAVE_INT8_T 127 typedef signed char int8_t; 128 #endif 129 130 #if ! U_HAVE_UINT8_T 131 typedef unsigned char uint8_t; 132 #endif 133 134 #if ! U_HAVE_INT16_T 135 typedef signed short int16_t; 136 #endif 137 138 #if ! U_HAVE_UINT16_T 139 typedef unsigned short uint16_t; 140 #endif 141 142 #if ! U_HAVE_INT32_T 143 typedef signed int int32_t; 144 #endif 145 146 #if ! U_HAVE_UINT32_T 147 typedef unsigned int uint32_t; 148 #endif 149 150 #if ! U_HAVE_INT64_T 151 #if U_INT64_IS_LONG_LONG 152 typedef signed long long int64_t; 153 #else 154 typedef signed __int64 int64_t; 155 #endif 156 #endif 157 158 #if ! U_HAVE_UINT64_T 159 #if U_INT64_IS_LONG_LONG 160 typedef unsigned long long uint64_t; 161 #else 162 typedef unsigned __int64 uint64_t; 163 #endif 164 #endif 165 #endif 166 167 /** 168 * @} 169 */ 170 171 /*===========================================================================*/ 172 /** Compiler and environment features */ 173 /*===========================================================================*/ 174 175 /** Define whether namespace is supported */ 176 #ifndef U_HAVE_NAMESPACE 177 #define U_HAVE_NAMESPACE 1 178 #endif 179 180 /** Determines the endianness of the platform */ 181 #define U_IS_BIG_ENDIAN 0 182 183 /** 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */ 184 #define ICU_USE_THREADS 1 185 186 /* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check mutex lock. */ 187 /** 188 Microsoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) or _M_X64 (starting in Visual Studio 8). 189 Intel can define _M_IX86 or _M_X64 190 */ 191 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) 192 #define UMTX_STRONG_MEMORY_MODEL 1 193 #endif 194 195 /** Enable or disable debugging options **/ 196 #ifndef U_DEBUG 197 #ifdef _DEBUG 198 #define U_DEBUG 1 199 #else 200 #define U_DEBUG 0 201 #endif 202 #endif 203 204 /** Enable or disable release options **/ 205 #ifndef U_RELEASE 206 #ifdef NDEBUG 207 #define U_RELEASE 1 208 #else 209 #define U_RELEASE 0 210 #endif 211 #endif 212 213 /** Determine whether to disable renaming or not. This overrides the 214 setting in umachine.h which is for all platforms. */ 215 #ifndef U_DISABLE_RENAMING 216 #define U_DISABLE_RENAMING 0 217 #endif 218 219 /** Determine whether to override new and delete. */ 220 #ifndef U_OVERRIDE_CXX_ALLOCATION 221 #define U_OVERRIDE_CXX_ALLOCATION 1 222 #endif 223 /** Determine whether to override placement new and delete for STL. */ 224 #ifndef U_HAVE_PLACEMENT_NEW 225 #define U_HAVE_PLACEMENT_NEW 1 226 #endif 227 /** Determine whether to override new and delete for MFC. */ 228 #if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER) 229 #define U_HAVE_DEBUG_LOCATION_NEW 1 230 #endif 231 232 /** Determine whether to enable tracing. */ 233 #ifndef U_ENABLE_TRACING 234 #define U_ENABLE_TRACING 0 235 #endif 236 237 /** Do we allow ICU users to use the draft APIs by default? */ 238 #ifndef U_DEFAULT_SHOW_DRAFT 239 #define U_DEFAULT_SHOW_DRAFT 1 240 #endif 241 242 /** @{ Define the library suffix in a C syntax. */ 243 #define U_HAVE_LIB_SUFFIX 0 244 #define U_LIB_SUFFIX_C_NAME 245 #define U_LIB_SUFFIX_C_NAME_STRING "" 246 /** @} */ 247 248 /*===========================================================================*/ 249 /** @{ Information about wchar support */ 250 /*===========================================================================*/ 251 252 #define U_HAVE_WCHAR_H 1 253 #define U_SIZEOF_WCHAR_T 2 254 255 #define U_HAVE_WCSCPY 1 256 257 /** @} */ 258 259 /** 260 * \def U_DECLARE_UTF16 261 * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros 262 * instead. 263 * @internal 264 */ 265 #if 1 266 #define U_DECLARE_UTF16(string) L ## string 267 #endif 268 269 /*===========================================================================*/ 270 /** @{ Information about POSIX support */ 271 /*===========================================================================*/ 272 273 #if 1 274 #define U_TZSET _tzset 275 #endif 276 #if 1 277 #define U_TIMEZONE _timezone 278 #endif 279 #if 1 280 #define U_TZNAME _tzname 281 #endif 282 #if 1 283 #define U_DAYLIGHT _daylight 284 #endif 285 286 #define U_HAVE_MMAP 0 287 #define U_HAVE_POPEN 0 288 289 /** @} */ 290 291 /*===========================================================================*/ 292 /** @{ Symbol import-export control */ 293 /*===========================================================================*/ 294 295 #ifdef U_STATIC_IMPLEMENTATION 296 #define U_EXPORT 297 #else 298 #define U_EXPORT __declspec(dllexport) 299 #endif 300 #define U_EXPORT2 __cdecl 301 #define U_IMPORT __declspec(dllimport) 302 /** @} */ 303 304 /*===========================================================================*/ 305 /** @{ Code alignment and C function inlining */ 306 /*===========================================================================*/ 307 308 #ifndef U_INLINE 309 # ifdef __cplusplus 310 # define U_INLINE inline 311 # else 312 # define U_INLINE __inline 313 # endif 314 #endif 315 316 #if defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED) 317 #define U_ALIGN_CODE(val) __asm align val 318 #else 319 #define U_ALIGN_CODE(val) 320 #endif 321 322 /** 323 * Flag for workaround of MSVC 2003 optimization bugs 324 */ 325 #if defined(_MSC_VER) && (_MSC_VER < 1400) 326 #define U_HAVE_MSVC_2003_OR_EARLIER 327 #endif 328 329 330 /** @} */ 331 332 /*===========================================================================*/ 333 /** @{ Programs used by ICU code */ 334 /*===========================================================================*/ 335 336 #ifndef U_MAKE 337 #define U_MAKE "nmake" 338 #define U_MAKE_IS_NMAKE 1 339 #endif 340 341 /** @} */ 342 343