1878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*
2878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org ******************************************************************************
3878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *
4878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   Copyright (C) 1997-2010, International Business Machines
5878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   Corporation and others.  All Rights Reserved.
6878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *
7878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org ******************************************************************************
8878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *
9878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *  FILE NAME : platform.h
10878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *
11878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   Date        Name        Description
12878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   05/13/98    nos         Creation (content moved here from ptypes.h).
13878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   03/02/99    stephen     Added AS400 support.
14878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   03/30/99    stephen     Added Linux support.
15878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *   04/13/99    stephen     Reworked for autoconf.
16878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org ******************************************************************************
17878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
18878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
19878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org /**
20878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org  * \file
21878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org  * \brief Configuration constants for the Windows platform
22878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org  */
23878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
24878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Define the platform we're on. */
25878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_WINDOWS
26878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_WINDOWS
27878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
28878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
29763fff3b5360213b5f0e18d099b9dac867181b57bungeman@chromium.org#if _MSC_VER >= 1600
3035e00e4a09eb84db0900dba7fc61c8108b61b6d4scottmg@chromium.org#include <stdint.h>
3135e00e4a09eb84db0900dba7fc61c8108b61b6d4scottmg@chromium.org#endif
3235e00e4a09eb84db0900dba7fc61c8108b61b6d4scottmg@chromium.org
33878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if defined(__BORLANDC__)
34878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_PLACEMENT_NEW 0
35878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define __STDC_CONSTANT_MACROS
36878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
37878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
38878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** _MSC_VER is used to detect the Microsoft compiler. */
39878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if defined(_MSC_VER)
40878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_INT64_IS_LONG_LONG 0
41878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
42878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_INT64_IS_LONG_LONG 1
43878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
44878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
45878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Define whether inttypes.h is available */
46878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_INTTYPES_H
47878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#   if defined(__BORLANDC__) || defined(__MINGW32__)
48878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#       define U_HAVE_INTTYPES_H 1
49878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#   else
50878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#       define U_HAVE_INTTYPES_H 0
51878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#   endif
52878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
53878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
54878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
55878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * Define what support for C++ streams is available.
56878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *     If U_IOSTREAM_SOURCE is set to 199711, then &lt;iostream&gt; is available
57878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * (1997711 is the date the ISO/IEC C++ FDIS was published), and then
58878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * one should qualify streams using the std namespace in ICU header
59878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * files.
60878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *     If U_IOSTREAM_SOURCE is set to 198506, then &lt;iostream.h&gt; is
61878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * available instead (198506 is the date when Stroustrup published
62878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * "An Extensible I/O Facility for C++" at the summer USENIX conference).
63878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *     If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and
64878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * support for them will be silently suppressed in ICU.
65878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org *
66878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
67878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
68878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_IOSTREAM_SOURCE
69878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_IOSTREAM_SOURCE 199711
70878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
71878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
72878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{
73878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * Determines whether specific types are available */
74878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_INT8_T
75878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_INT8_T U_HAVE_INTTYPES_H
76878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
77878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
78878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_UINT8_T
79878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_UINT8_T U_HAVE_INTTYPES_H
80878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
81878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
82878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_INT16_T
83878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_INT16_T U_HAVE_INTTYPES_H
84878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
85878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
86878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_UINT16_T
87878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_UINT16_T U_HAVE_INTTYPES_H
88878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
89878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
90878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_INT32_T
91878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_INT32_T U_HAVE_INTTYPES_H
92878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
93878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
94878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_UINT32_T
95878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_UINT32_T U_HAVE_INTTYPES_H
96878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
97878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
98878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_INT64_T
99878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_INT64_T U_HAVE_INTTYPES_H
100878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
101878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
102878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_UINT64_T
103878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_UINT64_T U_HAVE_INTTYPES_H
104878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
105878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
106878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
107878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
108878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Define 64 bit limits */
109878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if !U_INT64_IS_LONG_LONG
110878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org# ifndef INT64_C
111878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#  define INT64_C(x) ((int64_t)x)
112878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org# endif
113878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org# ifndef UINT64_C
114878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#  define UINT64_C(x) ((uint64_t)x)
115878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org# endif
116878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** else use the umachine.h definition */
117878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
118878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
119878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
120878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{
121878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * Generic data types                                                        */
122878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
123878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
124878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** If your platform does not have the <inttypes.h> header, you may
125878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org   need to edit the typedefs below. */
126878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if U_HAVE_INTTYPES_H
127878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#include <inttypes.h>
128878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else /* U_HAVE_INTTYPES_H */
129878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
130878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_INT8_T
131878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgtypedef signed char int8_t;
132878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
133878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
134878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_UINT8_T
135878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgtypedef unsigned char uint8_t;
136878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
137878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
138878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_INT16_T
139878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgtypedef signed short int16_t;
140878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
141878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
142878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_UINT16_T
143878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgtypedef unsigned short uint16_t;
144878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
145878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
146878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_INT32_T
147878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgtypedef signed int int32_t;
148878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
149878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
150878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_UINT32_T
151878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgtypedef unsigned int uint32_t;
152878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
153878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
154878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_INT64_T
155878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if U_INT64_IS_LONG_LONG
156878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org    typedef signed long long int64_t;
157878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
158878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org    typedef signed __int64 int64_t;
159878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
160878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
161878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
162878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if ! U_HAVE_UINT64_T
163878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if U_INT64_IS_LONG_LONG
164878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org    typedef unsigned long long uint64_t;
165878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
166878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org    typedef unsigned __int64 uint64_t;
167878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
168878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
169878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
170878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
171878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
172878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * @}
173878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
174878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
175878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
176878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Compiler and environment features                                         */
177878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
178878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
179878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Define whether namespace is supported */
180878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_NAMESPACE
181878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_NAMESPACE 1
182878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
183878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
184878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Determines the endianness of the platform */
185878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_IS_BIG_ENDIAN 0
186878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
187878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
188878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef ICU_USE_THREADS
189878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define ICU_USE_THREADS 1
190878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
191878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
192878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** 0 or 1 to enable or disable auto cleanup of libraries. If undefined, default is: disabled. */
193878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef UCLN_NO_AUTO_CLEANUP
194878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define UCLN_NO_AUTO_CLEANUP 1
195878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
196878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
197878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check mutex lock. */
198878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
199878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgMicrosoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) or _M_X64 (starting in Visual Studio 8).
200878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.orgIntel can define _M_IX86 or _M_X64
201878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org*/
202878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
203878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define UMTX_STRONG_MEMORY_MODEL 1
204878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
205878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
206878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Enable or disable debugging options **/
207878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_DEBUG
208878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifdef _DEBUG
209878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_DEBUG 1
210878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
211878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_DEBUG 0
212878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
213878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
214878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
215878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Enable or disable release options **/
216878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_RELEASE
217878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifdef NDEBUG
218878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_RELEASE 1
219878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
220878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_RELEASE 0
221878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
222878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
223878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
224878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Determine whether to disable renaming or not. This overrides the
225878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org   setting in umachine.h which is for all platforms. */
226878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_DISABLE_RENAMING
227878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_DISABLE_RENAMING 0
228878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
229878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
230878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Determine whether to override new and delete. */
231878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_OVERRIDE_CXX_ALLOCATION
232878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_OVERRIDE_CXX_ALLOCATION 1
233878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
234878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Determine whether to override placement new and delete for STL. */
235878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_PLACEMENT_NEW
236878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_PLACEMENT_NEW 1
237878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
238878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Determine whether to override new and delete for MFC. */
239878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if !defined(U_HAVE_DEBUG_LOCATION_NEW) && defined(_MSC_VER)
240878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_DEBUG_LOCATION_NEW 1
241878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
242878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
243878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Determine whether to enable tracing. */
244878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_ENABLE_TRACING
245878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_ENABLE_TRACING 0
246878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
247878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
248878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** Do we allow ICU users to use the draft APIs by default? */
249878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_DEFAULT_SHOW_DRAFT
250878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_DEFAULT_SHOW_DRAFT 1
251878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
252878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
253878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{ Define the library suffix in a C syntax. */
254878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_HAVE_LIB_SUFFIX
255878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_LIB_SUFFIX 0
256878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
257878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_LIB_SUFFIX_C_NAME
258878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_LIB_SUFFIX_C_NAME
259878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
260878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_LIB_SUFFIX_C_NAME_STRING
261878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_LIB_SUFFIX_C_NAME_STRING ""
262878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
263878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
264878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
265878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
266878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{ Information about wchar support                                           */
267878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
268878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
269878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_WCHAR_H 1
270878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_SIZEOF_WCHAR_T 2
271878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
272878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_WCSCPY 1
273878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
274878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
275878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
276878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
277878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * \def U_DECLARE_UTF16
278878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
279878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * instead.
280878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * @internal
281878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
282878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if 1
283878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_DECLARE_UTF16(string) L ## string
284878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
285878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
286878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
287878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{ Information about POSIX support                                           */
288878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
289878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
290878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
291878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * @internal
292878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
293878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if 1
294878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_TZSET         _tzset
295878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
296878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
297878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * @internal
298878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
299878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if 1
300878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_TIMEZONE      _timezone
301878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
302878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
303878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * @internal
304878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
305878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if 1
306878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_TZNAME        _tzname
307878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
308878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
309878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * @internal
310878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
311878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if 1
312878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_DAYLIGHT      _daylight
313878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
314878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
315878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_MMAP 0
316878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_POPEN 0
317878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
318878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_ENABLE_DYLOAD
319878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_ENABLE_DYLOAD 1
320878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
321878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
322878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
323878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
324878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
325878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
326878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{ Symbol import-export control                                              */
327878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
328878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
329878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifdef U_STATIC_IMPLEMENTATION
330878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_EXPORT
331878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
332878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_EXPORT __declspec(dllexport)
333878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
334878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_EXPORT2 __cdecl
335878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_IMPORT __declspec(dllimport)
336878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
337878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
338878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
339878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{ Code alignment and C function inlining                                    */
340878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
341878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
342878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_INLINE
343878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#   ifdef __cplusplus
344878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#       define U_INLINE inline
345878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#   else
346878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#       define U_INLINE __inline
347878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#   endif
348878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
349878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
350878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_MANAGED)
351878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_ALIGN_CODE(val)    __asm      align val
352878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#else
353878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_ALIGN_CODE(val)
354878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
355878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
356878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/**
357878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org * Flag for workaround of MSVC 2003 optimization bugs
358878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org */
359878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#if defined(_MSC_VER) && (_MSC_VER < 1400)
360878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_HAVE_MSVC_2003_OR_EARLIER
361878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
362878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
363878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
364878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
365878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
366878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
367878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @{ Programs used by ICU code                                                 */
368878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/*===========================================================================*/
369878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
370878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#ifndef U_MAKE
371878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_MAKE  "nmake"
372878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#define U_MAKE_IS_NMAKE 1
373878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org#endif
374878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
375878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org/** @} */
376878ab27c8e23bae140344313af953fe99cf89b3jshin@chromium.org
377