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 127typedef signed char int8_t; 128#endif 129 130#if ! U_HAVE_UINT8_T 131typedef unsigned char uint8_t; 132#endif 133 134#if ! U_HAVE_INT16_T 135typedef signed short int16_t; 136#endif 137 138#if ! U_HAVE_UINT16_T 139typedef unsigned short uint16_t; 140#endif 141 142#if ! U_HAVE_INT32_T 143typedef signed int int32_t; 144#endif 145 146#if ! U_HAVE_UINT32_T 147typedef 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/** 195Microsoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) or _M_X64 (starting in Visual Studio 8). 196Intel 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