|
1 /* |
|
2 ****************************************************************************** |
|
3 * |
|
4 * Copyright (C) 1997-2005, 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 Basic types for the platform |
|
22 */ |
|
23 |
|
24 /* Define the platform we're on. */ |
|
25 #ifndef @platform@ |
|
26 #define @platform@ |
|
27 #endif |
|
28 |
|
29 /* Define whether inttypes.h is available */ |
|
30 #ifndef U_HAVE_INTTYPES_H |
|
31 #define U_HAVE_INTTYPES_H @U_HAVE_INTTYPES_H@ |
|
32 #endif |
|
33 |
|
34 /* |
|
35 * Define what support for C++ streams is available. |
|
36 * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available |
|
37 * (1997711 is the date the ISO/IEC C++ FDIS was published), and then |
|
38 * one should qualify streams using the std namespace in ICU header |
|
39 * files. |
|
40 * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is |
|
41 * available instead (198506 is the date when Stroustrup published |
|
42 * "An Extensible I/O Facility for C++" at the summer USENIX conference). |
|
43 * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and |
|
44 * support for them will be silently suppressed in ICU. |
|
45 * |
|
46 */ |
|
47 |
|
48 #ifndef U_IOSTREAM_SOURCE |
|
49 #define U_IOSTREAM_SOURCE @U_IOSTREAM_SOURCE@ |
|
50 #endif |
|
51 |
|
52 /* Determines whether specific types are available */ |
|
53 #ifndef U_HAVE_INT8_T |
|
54 #define U_HAVE_INT8_T @HAVE_INT8_T@ |
|
55 #endif |
|
56 |
|
57 #ifndef U_HAVE_UINT8_T |
|
58 #define U_HAVE_UINT8_T @HAVE_UINT8_T@ |
|
59 #endif |
|
60 |
|
61 #ifndef U_HAVE_INT16_T |
|
62 #define U_HAVE_INT16_T @HAVE_INT16_T@ |
|
63 #endif |
|
64 |
|
65 #ifndef U_HAVE_UINT16_T |
|
66 #define U_HAVE_UINT16_T @HAVE_UINT16_T@ |
|
67 #endif |
|
68 |
|
69 #ifndef U_HAVE_INT32_T |
|
70 #define U_HAVE_INT32_T @HAVE_INT32_T@ |
|
71 #endif |
|
72 |
|
73 #ifndef U_HAVE_UINT32_T |
|
74 #define U_HAVE_UINT32_T @HAVE_UINT32_T@ |
|
75 #endif |
|
76 |
|
77 #ifndef U_HAVE_INT64_T |
|
78 #define U_HAVE_INT64_T @HAVE_INT64_T@ |
|
79 #endif |
|
80 |
|
81 #ifndef U_HAVE_UINT64_T |
|
82 #define U_HAVE_UINT64_T @HAVE_UINT64_T@ |
|
83 #endif |
|
84 |
|
85 /*===========================================================================*/ |
|
86 /* Generic data types */ |
|
87 /*===========================================================================*/ |
|
88 |
|
89 #include <sys/types.h> |
|
90 |
|
91 /* If your platform does not have the <inttypes.h> header, you may |
|
92 need to edit the typedefs below. */ |
|
93 #if U_HAVE_INTTYPES_H |
|
94 |
|
95 /* autoconf 2.13 sometimes can't properly find the data types in <inttypes.h> */ |
|
96 /* os/390 needs <inttypes.h>, but it doesn't have int8_t, and it sometimes */ |
|
97 /* doesn't have uint8_t depending on the OS version. */ |
|
98 /* So we have this work around. */ |
|
99 #ifdef OS390 |
|
100 /* The features header is needed to get (u)int64_t sometimes. */ |
|
101 #include <features.h> |
|
102 #if ! U_HAVE_INT8_T |
|
103 typedef signed char int8_t; |
|
104 #endif |
|
105 #if !defined(__uint8_t) |
|
106 #define __uint8_t 1 |
|
107 typedef unsigned char uint8_t; |
|
108 #endif |
|
109 #endif /* OS390 */ |
|
110 |
|
111 #include <inttypes.h> |
|
112 |
|
113 #else /* U_HAVE_INTTYPES_H */ |
|
114 |
|
115 #if ! U_HAVE_INT8_T |
|
116 typedef signed char int8_t; |
|
117 #endif |
|
118 |
|
119 #if ! U_HAVE_UINT8_T |
|
120 typedef unsigned char uint8_t; |
|
121 #endif |
|
122 |
|
123 #if ! U_HAVE_INT16_T |
|
124 typedef signed short int16_t; |
|
125 #endif |
|
126 |
|
127 #if ! U_HAVE_UINT16_T |
|
128 typedef unsigned short uint16_t; |
|
129 #endif |
|
130 |
|
131 #if ! U_HAVE_INT32_T |
|
132 typedef signed int int32_t; |
|
133 #endif |
|
134 |
|
135 #if ! U_HAVE_UINT32_T |
|
136 typedef unsigned int uint32_t; |
|
137 #endif |
|
138 |
|
139 #if ! U_HAVE_INT64_T |
|
140 typedef signed long long int64_t; |
|
141 /* else we may not have a 64-bit type */ |
|
142 #endif |
|
143 |
|
144 #if ! U_HAVE_UINT64_T |
|
145 typedef unsigned long long uint64_t; |
|
146 /* else we may not have a 64-bit type */ |
|
147 #endif |
|
148 |
|
149 #endif |
|
150 |
|
151 /*===========================================================================*/ |
|
152 /* Compiler and environment features */ |
|
153 /*===========================================================================*/ |
|
154 |
|
155 /* Define whether namespace is supported */ |
|
156 #ifndef U_HAVE_NAMESPACE |
|
157 #define U_HAVE_NAMESPACE @U_HAVE_NAMESPACE@ |
|
158 #endif |
|
159 |
|
160 /* Determines the endianness of the platform |
|
161 It's done this way in case multiple architectures are being built at once. |
|
162 For example, Darwin supports fat binaries, which can be both PPC and x86 based. */ |
|
163 #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) |
|
164 #define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN) |
|
165 #else |
|
166 #define U_IS_BIG_ENDIAN @U_IS_BIG_ENDIAN@ |
|
167 #endif |
|
168 |
|
169 /* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */ |
|
170 #define ICU_USE_THREADS @ICU_USE_THREADS@ |
|
171 |
|
172 #ifndef U_DEBUG |
|
173 #define U_DEBUG @ENABLE_DEBUG@ |
|
174 #endif |
|
175 |
|
176 #ifndef U_RELEASE |
|
177 #define U_RELEASE @ENABLE_RELEASE@ |
|
178 #endif |
|
179 |
|
180 /* Determine whether to disable renaming or not. This overrides the |
|
181 setting in umachine.h which is for all platforms. */ |
|
182 #ifndef U_DISABLE_RENAMING |
|
183 #define U_DISABLE_RENAMING @U_DISABLE_RENAMING@ |
|
184 #endif |
|
185 |
|
186 /* Determine whether to override new and delete. */ |
|
187 #ifndef U_OVERRIDE_CXX_ALLOCATION |
|
188 #define U_OVERRIDE_CXX_ALLOCATION @U_OVERRIDE_CXX_ALLOCATION@ |
|
189 #endif |
|
190 /* Determine whether to override placement new and delete for STL. */ |
|
191 #ifndef U_HAVE_PLACEMENT_NEW |
|
192 #define U_HAVE_PLACEMENT_NEW @U_HAVE_PLACEMENT_NEW@ |
|
193 #endif |
|
194 |
|
195 /* Determine whether to enable tracing. */ |
|
196 #ifndef U_ENABLE_TRACING |
|
197 #define U_ENABLE_TRACING @U_ENABLE_TRACING@ |
|
198 #endif |
|
199 |
|
200 /* Do we allow ICU users to use the draft APIs by default? */ |
|
201 #ifndef U_DEFAULT_SHOW_DRAFT |
|
202 #define U_DEFAULT_SHOW_DRAFT @U_DEFAULT_SHOW_DRAFT@ |
|
203 #endif |
|
204 |
|
205 /* Define the library suffix in a C syntax. */ |
|
206 #define U_HAVE_LIB_SUFFIX @U_HAVE_LIB_SUFFIX@ |
|
207 #define U_LIB_SUFFIX_C_NAME @ICULIBSUFFIXCNAME@ |
|
208 #define U_LIB_SUFFIX_C_NAME_STRING "@ICULIBSUFFIXCNAME@" |
|
209 |
|
210 /*===========================================================================*/ |
|
211 /* Character data types */ |
|
212 /*===========================================================================*/ |
|
213 |
|
214 #if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400) |
|
215 # define U_CHARSET_FAMILY 1 |
|
216 #endif |
|
217 |
|
218 /*===========================================================================*/ |
|
219 /* Information about wchar support */ |
|
220 /*===========================================================================*/ |
|
221 |
|
222 #define U_HAVE_WCHAR_H @U_HAVE_WCHAR_H@ |
|
223 #define U_SIZEOF_WCHAR_T @U_SIZEOF_WCHAR_T@ |
|
224 |
|
225 #define U_HAVE_WCSCPY @U_HAVE_WCSCPY@ |
|
226 |
|
227 /*===========================================================================*/ |
|
228 /* Information about POSIX support */ |
|
229 /*===========================================================================*/ |
|
230 |
|
231 #define U_HAVE_NL_LANGINFO @U_HAVE_NL_LANGINFO@ |
|
232 #define U_HAVE_NL_LANGINFO_CODESET @U_HAVE_NL_LANGINFO_CODESET@ |
|
233 #define U_NL_LANGINFO_CODESET @U_NL_LANGINFO_CODESET@ |
|
234 |
|
235 #if @U_HAVE_TZSET@ |
|
236 #define U_TZSET @U_TZSET@ |
|
237 #endif |
|
238 #if @U_HAVE_TIMEZONE@ |
|
239 #define U_TIMEZONE @U_TIMEZONE@ |
|
240 #endif |
|
241 #if @U_HAVE_TZNAME@ |
|
242 #define U_TZNAME @U_TZNAME@ |
|
243 #endif |
|
244 |
|
245 #define U_HAVE_MMAP @HAVE_MMAP@ |
|
246 #define U_HAVE_POPEN @U_HAVE_POPEN@ |
|
247 |
|
248 /*===========================================================================*/ |
|
249 /* Symbol import-export control */ |
|
250 /*===========================================================================*/ |
|
251 |
|
252 #define U_EXPORT |
|
253 /* U_CALLCONV is releated to U_EXPORT2 */ |
|
254 #define U_EXPORT2 |
|
255 |
|
256 /* cygwin needs to export/import data */ |
|
257 #ifdef U_CYGWIN |
|
258 #define U_IMPORT __declspec(dllimport) |
|
259 #else |
|
260 #define U_IMPORT |
|
261 #endif |
|
262 |
|
263 /*===========================================================================*/ |
|
264 /* Code alignment and C function inlining */ |
|
265 /*===========================================================================*/ |
|
266 |
|
267 #ifndef U_INLINE |
|
268 # ifdef __cplusplus |
|
269 # define U_INLINE inline |
|
270 # else |
|
271 # define U_INLINE @U_INLINE@ |
|
272 # endif |
|
273 #endif |
|
274 |
|
275 #define U_ALIGN_CODE(n) |
|
276 |
|
277 /*===========================================================================*/ |
|
278 /* Programs used by ICU code */ |
|
279 /*===========================================================================*/ |
|
280 |
|
281 #define U_MAKE "@U_MAKE@" |