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