1 /* 2 ****************************************************************************** 3 * 4 * Copyright (C) 1997-2010, 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 #ifndef ICU_USE_THREADS 185 #define ICU_USE_THREADS 1 186 #endif 187 188 /** 0 or 1 to enable or disable auto cleanup of libraries. If undefined, default is: disabled. */ 189 #ifndef UCLN_NO_AUTO_CLEANUP 190 #define UCLN_NO_AUTO_CLEANUP 1 191 #endif 192 193 /* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check mutex lock. */ 194 /** 195 Microsoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) or _M_X64 (starting in Visual Studio 8). 196 Intel can define _M_IX86 or _M_X64 197 */ 198 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) 199 #define UMTX_STRONG_MEMORY_MODEL 1 200 #endif 201 202 /** Enable or disable debugging options **/ 203 #ifndef U_DEBUG 204 #ifdef _DEBUG 205 #define U_DEBUG 1 206 #else 207 #define U_DEBUG 0 208 #endif 209 #endif 210 211 /** Enable or disable release options **/ 212 #ifndef U_RELEASE 213 #ifdef NDEBUG 214 #define U_RELEASE 1 215 #else 216 #define U_RELEASE 0 217 #endif 218 #endif 219 220 /** Determine whether to disable renaming or not. This overrides the 221 setting in umachine.h which is for all platforms. */ 222 #ifndef U_DISABLE_RENAMING 223 #define U_DISABLE_RENAMING 0 224 #endif 225 226 /** Determine whether to override new and delete. */ 227 #ifndef U_OVERRIDE_CXX_ALLOCATION 228 #define U_OVERRIDE_CXX_ALLOCATION 1 229 #endif 230 /** Determine whether to override placement new and delete for STL. */ 231 #ifndef U_HAVE_PLACEMENT_NEW 232 #define U_HAVE_PLACEMENT_NEW 1 233 #endif 234 /** Determine whether to override new and delete for MFC. */ 235 #if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER) 236 #define U_HAVE_DEBUG_LOCATION_NEW 1 237 #endif 238 239 /** Determine whether to enable tracing. */ 240 #ifndef U_ENABLE_TRACING 241 #define U_ENABLE_TRACING 0 242 #endif 243 244 /** Do we allow ICU users to use the draft APIs by default? */ 245 #ifndef U_DEFAULT_SHOW_DRAFT 246 #define U_DEFAULT_SHOW_DRAFT 1 247 #endif 248 249 /** @{ Define the library suffix in a C syntax. */ 250 #ifndef U_HAVE_LIB_SUFFIX 251 #define U_HAVE_LIB_SUFFIX 0 252 #endif 253 #ifndef U_LIB_SUFFIX_C_NAME 254 #define U_LIB_SUFFIX_C_NAME 255 #endif 256 #ifndef U_LIB_SUFFIX_C_NAME_STRING 257 #define U_LIB_SUFFIX_C_NAME_STRING "" 258 #endif 259 /** @} */ 260 261 /*===========================================================================*/ 262 /** @{ Information about wchar support */ 263 /*===========================================================================*/ 264 265 #define U_HAVE_WCHAR_H 1 266 #define U_SIZEOF_WCHAR_T 2 267 268 #define U_HAVE_WCSCPY 1 269 270 /** @} */ 271 272 /** 273 * \def U_DECLARE_UTF16 274 * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros 275 * instead. 276 * @internal 277 */ 278 #if 1 279 #define U_DECLARE_UTF16(string) L ## string 280 #endif 281 282 /*===========================================================================*/ 283 /** @{ Information about POSIX support */ 284 /*===========================================================================*/ 285 286 /** 287 * @internal 288 */ 289 #if 1 290 #define U_TZSET _tzset 291 #endif 292 /** 293 * @internal 294 */ 295 #if 1 296 #define U_TIMEZONE _timezone 297 #endif 298 /** 299 * @internal 300 */ 301 #if 1 302 #define U_TZNAME _tzname 303 #endif 304 /** 305 * @internal 306 */ 307 #if 1 308 #define U_DAYLIGHT _daylight 309 #endif 310 311 #define U_HAVE_MMAP 0 312 #define U_HAVE_POPEN 0 313 314 #ifndef U_ENABLE_DYLOAD 315 #define U_ENABLE_DYLOAD 1 316 #endif 317 318 319 /** @} */ 320 321 /*===========================================================================*/ 322 /** @{ Symbol import-export control */ 323 /*===========================================================================*/ 324 325 #ifdef U_STATIC_IMPLEMENTATION 326 #define U_EXPORT 327 #else 328 #define U_EXPORT __declspec(dllexport) 329 #endif 330 #define U_EXPORT2 __cdecl 331 #define U_IMPORT __declspec(dllimport) 332 /** @} */ 333 334 /*===========================================================================*/ 335 /** @{ Code alignment and C function inlining */ 336 /*===========================================================================*/ 337 338 #ifndef U_INLINE 339 # ifdef __cplusplus 340 # define U_INLINE inline 341 # else 342 # define U_INLINE __inline 343 # endif 344 #endif 345 346 #if defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED) 347 #define U_ALIGN_CODE(val) __asm align val 348 #else 349 #define U_ALIGN_CODE(val) 350 #endif 351 352 /** 353 * Flag for workaround of MSVC 2003 optimization bugs 354 */ 355 #if defined(_MSC_VER) && (_MSC_VER < 1400) 356 #define U_HAVE_MSVC_2003_OR_EARLIER 357 #endif 358 359 360 /** @} */ 361 362 /*===========================================================================*/ 363 /** @{ Programs used by ICU code */ 364 /*===========================================================================*/ 365 366 #ifndef U_MAKE 367 #define U_MAKE "nmake" 368 #define U_MAKE_IS_NMAKE 1 369 #endif 370 371 /** @} */ 372 373