OLD | NEW |
| (Empty) |
1 /* | |
2 ****************************************************************************** | |
3 * | |
4 * Copyright (C) 1997-2010, International Business Machines | |
5 * Corporation and others. All Rights Reserved. | |
6 * | |
7 ****************************************************************************** | |
8 * | |
9 * Note: autoconf creates platform.h from platform.h.in at configure time. | |
10 * | |
11 ****************************************************************************** | |
12 * | |
13 * FILE NAME : platform.h | |
14 * | |
15 * Date Name Description | |
16 * 05/13/98 nos Creation (content moved here from ptypes.h). | |
17 * 03/02/99 stephen Added AS400 support. | |
18 * 03/30/99 stephen Added Linux support. | |
19 * 04/13/99 stephen Reworked for autoconf. | |
20 ****************************************************************************** | |
21 */ | |
22 | |
23 #ifndef _PLATFORM_H | |
24 #define _PLATFORM_H | |
25 | |
26 /** | |
27 * \file | |
28 * \brief Basic types for the platform | |
29 */ | |
30 | |
31 /* This file should be included before uvernum.h. */ | |
32 #if defined(UVERNUM_H) | |
33 # error Do not include unicode/uvernum.h before #including unicode/platform.h.
Instead of unicode/uvernum.h, #include unicode/uversion.h | |
34 #endif | |
35 | |
36 /** | |
37 * Determine wheter to enable auto cleanup of libraries. | |
38 * @internal | |
39 */ | |
40 #ifndef UCLN_NO_AUTO_CLEANUP | |
41 #define UCLN_NO_AUTO_CLEANUP 1 | |
42 #endif | |
43 | |
44 /* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everyt
hing else. */ | |
45 #ifndef CYGWINMSVC | |
46 | |
47 /** Define the platform we're on. */ | |
48 #ifndef U_DARWIN | |
49 #define U_DARWIN | |
50 #endif | |
51 | |
52 #include <AvailabilityMacros.h> | |
53 #include <TargetConditionals.h> | |
54 | |
55 /** | |
56 * Add a second platform define to handle differences between Mac OS X and iOS | |
57 */ | |
58 #if TARGET_OS_IPHONE | |
59 #ifndef U_IOS | |
60 #define U_IOS | |
61 #endif | |
62 #endif | |
63 | |
64 /** | |
65 * \def U_HAVE_DIRENT_H | |
66 * Define whether dirent.h is available | |
67 * @internal | |
68 */ | |
69 #ifndef U_HAVE_DIRENT_H | |
70 #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 | |
71 #define U_HAVE_DIRENT_H 0 | |
72 #else | |
73 #define U_HAVE_DIRENT_H 1 | |
74 #endif | |
75 #endif | |
76 | |
77 /** Define whether inttypes.h is available */ | |
78 #ifndef U_HAVE_INTTYPES_H | |
79 #define U_HAVE_INTTYPES_H 1 | |
80 #endif | |
81 | |
82 /** | |
83 * Define what support for C++ streams is available. | |
84 * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available | |
85 * (1997711 is the date the ISO/IEC C++ FDIS was published), and then | |
86 * one should qualify streams using the std namespace in ICU header | |
87 * files. | |
88 * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is | |
89 * available instead (198506 is the date when Stroustrup published | |
90 * "An Extensible I/O Facility for C++" at the summer USENIX conference). | |
91 * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and | |
92 * support for them will be silently suppressed in ICU. | |
93 * | |
94 */ | |
95 | |
96 #ifndef U_IOSTREAM_SOURCE | |
97 #define U_IOSTREAM_SOURCE 199711 | |
98 #endif | |
99 | |
100 /** | |
101 * \def U_HAVE_STD_STRING | |
102 * Define whether the standard C++ (STL) <string> header is available. | |
103 * For platforms that do not use platform.h and do not define this constant | |
104 * in their platform-specific headers, std_string.h defaults | |
105 * U_HAVE_STD_STRING to 1. | |
106 * @internal | |
107 */ | |
108 #ifndef U_HAVE_STD_STRING | |
109 #define U_HAVE_STD_STRING 1 | |
110 #endif | |
111 | |
112 /** @{ Determines whether specific types are available */ | |
113 #ifndef U_HAVE_INT8_T | |
114 #define U_HAVE_INT8_T 1 | |
115 #endif | |
116 | |
117 #ifndef U_HAVE_UINT8_T | |
118 #define U_HAVE_UINT8_T 1 | |
119 #endif | |
120 | |
121 #ifndef U_HAVE_INT16_T | |
122 #define U_HAVE_INT16_T 1 | |
123 #endif | |
124 | |
125 #ifndef U_HAVE_UINT16_T | |
126 #define U_HAVE_UINT16_T 1 | |
127 #endif | |
128 | |
129 #ifndef U_HAVE_INT32_T | |
130 #define U_HAVE_INT32_T 1 | |
131 #endif | |
132 | |
133 #ifndef U_HAVE_UINT32_T | |
134 #define U_HAVE_UINT32_T 1 | |
135 #endif | |
136 | |
137 #ifndef U_HAVE_INT64_T | |
138 #define U_HAVE_INT64_T 1 | |
139 #endif | |
140 | |
141 #ifndef U_HAVE_UINT64_T | |
142 #define U_HAVE_UINT64_T 1 | |
143 #endif | |
144 | |
145 /** @} */ | |
146 | |
147 /*===========================================================================*/ | |
148 /** @{ Compiler and environment features */ | |
149 /*===========================================================================*/ | |
150 | |
151 /* Define whether namespace is supported */ | |
152 #ifndef U_HAVE_NAMESPACE | |
153 #define U_HAVE_NAMESPACE 1 | |
154 #endif | |
155 | |
156 /* Determines the endianness of the platform | |
157 It's done this way in case multiple architectures are being built at once. | |
158 For example, Darwin supports fat binaries, which can be both PPC and x86 base
d. */ | |
159 #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) | |
160 #define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN) | |
161 #else | |
162 #define U_IS_BIG_ENDIAN 0 | |
163 #endif | |
164 | |
165 /* 1 or 0 to enable or disable threads. If undefined, default is: enable thread
s. */ | |
166 #ifndef ICU_USE_THREADS | |
167 #define ICU_USE_THREADS 1 | |
168 #endif | |
169 | |
170 /* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double che
ck lock. */ | |
171 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) | |
172 #define UMTX_STRONG_MEMORY_MODEL 1 | |
173 #endif | |
174 | |
175 #ifndef U_DEBUG | |
176 #define U_DEBUG 0 | |
177 #endif | |
178 | |
179 #ifndef U_RELEASE | |
180 #define U_RELEASE 1 | |
181 #endif | |
182 | |
183 /* Determine whether to disable renaming or not. This overrides the | |
184 setting in umachine.h which is for all platforms. */ | |
185 #ifndef U_DISABLE_RENAMING | |
186 #define U_DISABLE_RENAMING 0 | |
187 #endif | |
188 | |
189 /* Determine whether to override new and delete. */ | |
190 #ifndef U_OVERRIDE_CXX_ALLOCATION | |
191 #define U_OVERRIDE_CXX_ALLOCATION 1 | |
192 #endif | |
193 /* Determine whether to override placement new and delete for STL. */ | |
194 #ifndef U_HAVE_PLACEMENT_NEW | |
195 #define U_HAVE_PLACEMENT_NEW 1 | |
196 #endif | |
197 | |
198 /* Determine whether to enable tracing. */ | |
199 #ifndef U_ENABLE_TRACING | |
200 #define U_ENABLE_TRACING 0 | |
201 #endif | |
202 | |
203 /** | |
204 * Whether to enable Dynamic loading in ICU | |
205 * @internal | |
206 */ | |
207 #ifndef U_ENABLE_DYLOAD | |
208 #define U_ENABLE_DYLOAD 1 | |
209 #endif | |
210 | |
211 /** | |
212 * Whether to test Dynamic loading as an OS capabilty | |
213 * @internal | |
214 */ | |
215 #ifndef U_CHECK_DYLOAD | |
216 #define U_CHECK_DYLOAD 1 | |
217 #endif | |
218 | |
219 | |
220 /** Do we allow ICU users to use the draft APIs by default? */ | |
221 #ifndef U_DEFAULT_SHOW_DRAFT | |
222 #define U_DEFAULT_SHOW_DRAFT 1 | |
223 #endif | |
224 | |
225 /** @} */ | |
226 | |
227 /*===========================================================================*/ | |
228 /** @{ Character data types
*/ | |
229 /*===========================================================================*/ | |
230 | |
231 #if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined
(OS400) | |
232 # define U_CHARSET_FAMILY 1 | |
233 #endif | |
234 | |
235 /** @} */ | |
236 | |
237 /*===========================================================================*/ | |
238 /** @{ Information about wchar support
*/ | |
239 /*===========================================================================*/ | |
240 | |
241 #ifndef U_HAVE_WCHAR_H | |
242 #define U_HAVE_WCHAR_H 1 | |
243 #endif | |
244 | |
245 #ifndef U_SIZEOF_WCHAR_T | |
246 #define U_SIZEOF_WCHAR_T 4 | |
247 #endif | |
248 | |
249 #ifndef U_HAVE_WCSCPY | |
250 #define U_HAVE_WCSCPY 1 | |
251 #endif | |
252 | |
253 /** @} */ | |
254 | |
255 /** | |
256 * @{ | |
257 * \def U_DECLARE_UTF16 | |
258 * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros | |
259 * instead. | |
260 * @internal | |
261 * | |
262 * \def U_GNUC_UTF16_STRING | |
263 * @internal | |
264 */ | |
265 #ifndef U_GNUC_UTF16_STRING | |
266 #define U_GNUC_UTF16_STRING 0 | |
267 #endif | |
268 #if 1 || defined(U_CHECK_UTF16_STRING) | |
269 #if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \ | |
270 || (defined(__HP_aCC) && __HP_aCC >= 035000) \ | |
271 || (defined(__HP_cc) && __HP_cc >= 111106) \ | |
272 || U_GNUC_UTF16_STRING | |
273 #define U_DECLARE_UTF16(string) u ## string | |
274 #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) | |
275 /* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */ | |
276 /* Sun's C compiler has issues with this notation, and it's unreliable. */ | |
277 #define U_DECLARE_UTF16(string) U ## string | |
278 #elif U_SIZEOF_WCHAR_T == 2 \ | |
279 && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(
__UCS2__))) | |
280 #define U_DECLARE_UTF16(string) L ## string | |
281 #endif | |
282 #endif | |
283 | |
284 /** @} */ | |
285 | |
286 /*===========================================================================*/ | |
287 /** @{ Information about POSIX support
*/ | |
288 /*===========================================================================*/ | |
289 | |
290 #ifndef U_HAVE_NL_LANGINFO_CODESET | |
291 #define U_HAVE_NL_LANGINFO_CODESET 1 | |
292 #endif | |
293 | |
294 #ifndef U_NL_LANGINFO_CODESET | |
295 #define U_NL_LANGINFO_CODESET CODESET | |
296 #endif | |
297 | |
298 #if 1 | |
299 #define U_TZSET tzset | |
300 #endif | |
301 #ifndef U_IOS | |
302 /* The iOS version of timezone is busted (at least in the simulator, it is | |
303 never set to anything useful). Leave it undefined to avoid a code path | |
304 in putil.c. */ | |
305 #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 | |
306 #define U_TIMEZONE 0 | |
307 #else | |
308 #define U_TIMEZONE timezone | |
309 #endif | |
310 #endif // !U_IOS | |
311 #if 1 | |
312 #define U_TZNAME tzname | |
313 #endif | |
314 | |
315 #define U_HAVE_MMAP 1 | |
316 #define U_HAVE_POPEN 1 | |
317 | |
318 /** @} */ | |
319 | |
320 /*===========================================================================*/ | |
321 /** @{ Symbol import-export control
*/ | |
322 /*===========================================================================*/ | |
323 | |
324 #ifdef U_STATIC_IMPLEMENTATION | |
325 #define U_EXPORT | |
326 #elif 1 | |
327 #define U_EXPORT __attribute__((visibility("default"))) | |
328 #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ | |
329 || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) | |
330 #define U_EXPORT __global | |
331 /*#elif defined(__HP_aCC) || defined(__HP_cc) | |
332 #define U_EXPORT __declspec(dllexport)*/ | |
333 #else | |
334 #define U_EXPORT | |
335 #endif | |
336 | |
337 /* U_CALLCONV is releated to U_EXPORT2 */ | |
338 #define U_EXPORT2 | |
339 | |
340 /* cygwin needs to export/import data */ | |
341 #if defined(U_CYGWIN) && !defined(__GNUC__) | |
342 #define U_IMPORT __declspec(dllimport) | |
343 #else | |
344 #define U_IMPORT | |
345 #endif | |
346 | |
347 /* @} */ | |
348 | |
349 /*===========================================================================*/ | |
350 /** @{ Code alignment and C function inlining
*/ | |
351 /*===========================================================================*/ | |
352 | |
353 #ifndef U_INLINE | |
354 # ifdef __cplusplus | |
355 # define U_INLINE inline | |
356 # else | |
357 # define U_INLINE __inline__ | |
358 # endif | |
359 #endif | |
360 | |
361 #ifndef U_ALIGN_CODE | |
362 #define U_ALIGN_CODE(n) | |
363 #endif | |
364 | |
365 /** @} */ | |
366 | |
367 /*===========================================================================*/ | |
368 /** @{ GCC built in functions for atomic memory operations
*/ | |
369 /*===========================================================================*/ | |
370 | |
371 /** | |
372 * \def U_HAVE_GCC_ATOMICS | |
373 * @internal | |
374 */ | |
375 #ifndef U_HAVE_GCC_ATOMICS | |
376 #define U_HAVE_GCC_ATOMICS 1 | |
377 #endif | |
378 | |
379 /** @} */ | |
380 | |
381 /*===========================================================================*/ | |
382 /** @{ Programs used by ICU code
*/ | |
383 /*===========================================================================*/ | |
384 | |
385 /** | |
386 * \def U_MAKE | |
387 * What program to execute to run 'make' | |
388 */ | |
389 #ifndef U_MAKE | |
390 #define U_MAKE "/usr/bin/gnumake" | |
391 #endif | |
392 | |
393 /** @} */ | |
394 | |
395 #endif /* CYGWINMSVC */ | |
396 | |
397 /*===========================================================================*/ | |
398 /* Custom icu entry point renaming
*/ | |
399 /*===========================================================================*/ | |
400 | |
401 /** | |
402 * Define the library suffix with C syntax. | |
403 * @internal | |
404 */ | |
405 # define U_LIB_SUFFIX_C_NAME | |
406 /** | |
407 * Define the library suffix as a string with C syntax | |
408 * @internal | |
409 */ | |
410 # define U_LIB_SUFFIX_C_NAME_STRING "" | |
411 /** | |
412 * 1 if a custom library suffix is set | |
413 * @internal | |
414 */ | |
415 # define U_HAVE_LIB_SUFFIX 0 | |
416 | |
417 #if U_HAVE_LIB_SUFFIX | |
418 # ifndef U_ICU_ENTRY_POINT_RENAME | |
419 /* Renaming pattern: u_strcpy_41_suffix */ | |
420 # define U_ICU_ENTRY_POINT_RENAME(x) x ## _ ## 46 ## | |
421 # define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt####major##minor##_dat | |
422 | |
423 # endif | |
424 #endif | |
425 | |
426 /*===========================================================================*/ | |
427 /* Local defines */ | |
428 /*===========================================================================*/ | |
429 | |
430 /* On the Mac, we define U_WCHAR_IS_UTF32 to treat wchar_t as though it | |
431 contains UTF-32 at all times. Strictly speaking, that's not entirely | |
432 correct given Mac's libc (__STDC_ISO_10646__ is not defined) , but provided | |
433 that we ignore libc's locale support (by not calling setlocale) and its | |
434 multibyte string support, this should be fine. Our codebase makes enough | |
435 other assumptions about a UTF-8 locale and UTF-32 wchar_t strings for this | |
436 to make sense. */ | |
437 #define U_WCHAR_IS_UTF32 | |
438 | |
439 #endif | |
OLD | NEW |