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