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 @UCLN_NO_AUTO_CLEANUP@ 42 #endif 43 44 /* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */ 45 #ifndef CYGWINMSVC 46 47 /** Define the platform we're on. */ 48 #ifndef @platform@ 49 #define @platform@ 50 #endif 51 52 /** 53 * \def U_HAVE_DIRENT_H 54 * Define whether dirent.h is available 55 * @internal 56 */ 57 #ifndef U_HAVE_DIRENT_H 58 #define U_HAVE_DIRENT_H @U_HAVE_DIRENT_H@ 59 #endif 60 61 /** Define whether inttypes.h is available */ 62 #ifndef U_HAVE_INTTYPES_H 63 #define U_HAVE_INTTYPES_H @U_HAVE_INTTYPES_H@ 64 #endif 65 66 /** 67 * Define what support for C++ streams is available. 68 * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available 69 * (1997711 is the date the ISO/IEC C++ FDIS was published), and then 70 * one should qualify streams using the std namespace in ICU header 71 * files. 72 * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is 73 * available instead (198506 is the date when Stroustrup published 74 * "An Extensible I/O Facility for C++" at the summer USENIX conference). 75 * If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and 76 * support for them will be silently suppressed in ICU. 77 * 78 */ 79 80 #ifndef U_IOSTREAM_SOURCE 81 #define U_IOSTREAM_SOURCE @U_IOSTREAM_SOURCE@ 82 #endif 83 84 /** 85 * \def U_HAVE_STD_STRING 86 * Define whether the standard C++ (STL) <string> header is available. 87 * For platforms that do not use platform.h and do not define this constant 88 * in their platform-specific headers, std_string.h defaults 89 * U_HAVE_STD_STRING to 1. 90 * @internal 91 */ 92 #ifndef U_HAVE_STD_STRING 93 #define U_HAVE_STD_STRING @U_HAVE_STD_STRING@ 94 #endif 95 96 /** @{ Determines whether specific types are available */ 97 #ifndef U_HAVE_INT8_T 98 #define U_HAVE_INT8_T @HAVE_INT8_T@ 99 #endif 100 101 #ifndef U_HAVE_UINT8_T 102 #define U_HAVE_UINT8_T @HAVE_UINT8_T@ 103 #endif 104 105 #ifndef U_HAVE_INT16_T 106 #define U_HAVE_INT16_T @HAVE_INT16_T@ 107 #endif 108 109 #ifndef U_HAVE_UINT16_T 110 #define U_HAVE_UINT16_T @HAVE_UINT16_T@ 111 #endif 112 113 #ifndef U_HAVE_INT32_T 114 #define U_HAVE_INT32_T @HAVE_INT32_T@ 115 #endif 116 117 #ifndef U_HAVE_UINT32_T 118 #define U_HAVE_UINT32_T @HAVE_UINT32_T@ 119 #endif 120 121 #ifndef U_HAVE_INT64_T 122 #define U_HAVE_INT64_T @HAVE_INT64_T@ 123 #endif 124 125 #ifndef U_HAVE_UINT64_T 126 #define U_HAVE_UINT64_T @HAVE_UINT64_T@ 127 #endif 128 129 /** @} */ 130 131 /*===========================================================================*/ 132 /** @{ Compiler and environment features */ 133 /*===========================================================================*/ 134 135 /* Define whether namespace is supported */ 136 #ifndef U_HAVE_NAMESPACE 137 #define U_HAVE_NAMESPACE @U_HAVE_NAMESPACE@ 138 #endif 139 140 /* Determines the endianness of the platform 141 It's done this way in case multiple architectures are being built at once. 142 For example, Darwin supports fat binaries, which can be both PPC and x86 based. */ 143 #if defined(BYTE_ORDER) && defined(BIG_ENDIAN) 144 #define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN) 145 #else 146 #define U_IS_BIG_ENDIAN @U_IS_BIG_ENDIAN@ 147 #endif 148 149 /* 1 or 0 to enable or disable threads. If undefined, default is: enable threads. */ 150 #ifndef ICU_USE_THREADS 151 #define ICU_USE_THREADS @ICU_USE_THREADS@ 152 #endif 153 154 /* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */ 155 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) 156 #define UMTX_STRONG_MEMORY_MODEL 1 157 #endif 158 159 #ifndef U_DEBUG 160 #define U_DEBUG @ENABLE_DEBUG@ 161 #endif 162 163 #ifndef U_RELEASE 164 #define U_RELEASE @ENABLE_RELEASE@ 165 #endif 166 167 /* Determine whether to disable renaming or not. This overrides the 168 setting in umachine.h which is for all platforms. */ 169 #ifndef U_DISABLE_RENAMING 170 #define U_DISABLE_RENAMING @U_DISABLE_RENAMING@ 171 #endif 172 173 /* Determine whether to override new and delete. */ 174 #ifndef U_OVERRIDE_CXX_ALLOCATION 175 #define U_OVERRIDE_CXX_ALLOCATION @U_OVERRIDE_CXX_ALLOCATION@ 176 #endif 177 /* Determine whether to override placement new and delete for STL. */ 178 #ifndef U_HAVE_PLACEMENT_NEW 179 #define U_HAVE_PLACEMENT_NEW @U_HAVE_PLACEMENT_NEW@ 180 #endif 181 182 /* Determine whether to enable tracing. */ 183 #ifndef U_ENABLE_TRACING 184 #define U_ENABLE_TRACING @U_ENABLE_TRACING@ 185 #endif 186 187 /** 188 * Whether to enable Dynamic loading in ICU 189 * @internal 190 */ 191 #ifndef U_ENABLE_DYLOAD 192 #define U_ENABLE_DYLOAD @U_ENABLE_DYLOAD@ 193 #endif 194 195 /** 196 * Whether to test Dynamic loading as an OS capabilty 197 * @internal 198 */ 199 #ifndef U_CHECK_DYLOAD 200 #define U_CHECK_DYLOAD @U_CHECK_DYLOAD@ 201 #endif 202 203 204 /** Do we allow ICU users to use the draft APIs by default? */ 205 #ifndef U_DEFAULT_SHOW_DRAFT 206 #define U_DEFAULT_SHOW_DRAFT @U_DEFAULT_SHOW_DRAFT@ 207 #endif 208 209 /** @} */ 210 211 /*===========================================================================*/ 212 /** @{ Character data types */ 213 /*===========================================================================*/ 214 215 #if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400) 216 # define U_CHARSET_FAMILY 1 217 #endif 218 219 /** @} */ 220 221 /*===========================================================================*/ 222 /** @{ Information about wchar support */ 223 /*===========================================================================*/ 224 225 #ifndef U_HAVE_WCHAR_H 226 #define U_HAVE_WCHAR_H @U_HAVE_WCHAR_H@ 227 #endif 228 229 #ifndef U_SIZEOF_WCHAR_T 230 #define U_SIZEOF_WCHAR_T @U_SIZEOF_WCHAR_T@ 231 #endif 232 233 #ifndef U_HAVE_WCSCPY 234 #define U_HAVE_WCSCPY @U_HAVE_WCSCPY@ 235 #endif 236 237 /** @} */ 238 239 /** 240 * @{ 241 * \def U_DECLARE_UTF16 242 * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros 243 * instead. 244 * @internal 245 * 246 * \def U_GNUC_UTF16_STRING 247 * @internal 248 */ 249 #ifndef U_GNUC_UTF16_STRING 250 #define U_GNUC_UTF16_STRING @U_CHECK_GNUC_UTF16_STRING@ 251 #endif 252 #if @U_CHECK_UTF16_STRING@ || defined(U_CHECK_UTF16_STRING) 253 #if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \ 254 || (defined(__HP_aCC) && __HP_aCC >= 035000) \ 255 || (defined(__HP_cc) && __HP_cc >= 111106) \ 256 || U_GNUC_UTF16_STRING 257 #define U_DECLARE_UTF16(string) u ## string 258 #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) 259 /* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */ 260 /* Sun's C compiler has issues with this notation, and it's unreliable. */ 261 #define U_DECLARE_UTF16(string) U ## string 262 #elif U_SIZEOF_WCHAR_T == 2 \ 263 && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__))) 264 #define U_DECLARE_UTF16(string) L ## string 265 #endif 266 #endif 267 268 /** @} */ 269 270 /*===========================================================================*/ 271 /** @{ Information about POSIX support */ 272 /*===========================================================================*/ 273 274 #ifndef U_HAVE_NL_LANGINFO_CODESET 275 #define U_HAVE_NL_LANGINFO_CODESET @U_HAVE_NL_LANGINFO_CODESET@ 276 #endif 277 278 #ifndef U_NL_LANGINFO_CODESET 279 #define U_NL_LANGINFO_CODESET @U_NL_LANGINFO_CODESET@ 280 #endif 281 282 #if @U_HAVE_TZSET@ 283 #define U_TZSET @U_TZSET@ 284 #endif 285 #if @U_HAVE_TIMEZONE@ 286 #define U_TIMEZONE @U_TIMEZONE@ 287 #endif 288 #if @U_HAVE_TZNAME@ 289 #define U_TZNAME @U_TZNAME@ 290 #endif 291 292 #define U_HAVE_MMAP @HAVE_MMAP@ 293 #define U_HAVE_POPEN @U_HAVE_POPEN@ 294 295 /** @} */ 296 297 /*===========================================================================*/ 298 /** @{ Symbol import-export control */ 299 /*===========================================================================*/ 300 301 #ifdef U_STATIC_IMPLEMENTATION 302 #define U_EXPORT 303 #elif @U_USE_GCC_VISIBILITY_ATTRIBUTE@ 304 #define U_EXPORT __attribute__((visibility("default"))) 305 #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ 306 || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 307 #define U_EXPORT __global 308 /*#elif defined(__HP_aCC) || defined(__HP_cc) 309 #define U_EXPORT __declspec(dllexport)*/ 310 #else 311 #define U_EXPORT 312 #endif 313 314 /* U_CALLCONV is releated to U_EXPORT2 */ 315 #define U_EXPORT2 316 317 /* cygwin needs to export/import data */ 318 #if defined(U_CYGWIN) && !defined(__GNUC__) 319 #define U_IMPORT __declspec(dllimport) 320 #else 321 #define U_IMPORT 322 #endif 323 324 /* @} */ 325 326 /*===========================================================================*/ 327 /** @{ Code alignment and C function inlining */ 328 /*===========================================================================*/ 329 330 #ifndef U_INLINE 331 # ifdef __cplusplus 332 # define U_INLINE inline 333 # else 334 # define U_INLINE @U_INLINE@ 335 # endif 336 #endif 337 338 #ifndef U_ALIGN_CODE 339 #define U_ALIGN_CODE(n) 340 #endif 341 342 /** @} */ 343 344 /*===========================================================================*/ 345 /** @{ GCC built in functions for atomic memory operations */ 346 /*===========================================================================*/ 347 348 /** 349 * \def U_HAVE_GCC_ATOMICS 350 * @internal 351 */ 352 #ifndef U_HAVE_GCC_ATOMICS 353 #define U_HAVE_GCC_ATOMICS @U_HAVE_GCC_ATOMICS@ 354 #endif 355 356 /** @} */ 357 358 /*===========================================================================*/ 359 /** @{ Programs used by ICU code */ 360 /*===========================================================================*/ 361 362 /** 363 * \def U_MAKE 364 * What program to execute to run 'make' 365 */ 366 #ifndef U_MAKE 367 #define U_MAKE "@U_MAKE@" 368 #endif 369 370 /** @} */ 371 372 #endif /* CYGWINMSVC */ 373 374 /*===========================================================================*/ 375 /* Custom icu entry point renaming */ 376 /*===========================================================================*/ 377 378 /** 379 * Define the library suffix with C syntax. 380 * @internal 381 */ 382 # define U_LIB_SUFFIX_C_NAME @ICULIBSUFFIXCNAME@ 383 /** 384 * Define the library suffix as a string with C syntax 385 * @internal 386 */ 387 # define U_LIB_SUFFIX_C_NAME_STRING "@ICULIBSUFFIXCNAME@" 388 /** 389 * 1 if a custom library suffix is set 390 * @internal 391 */ 392 # define U_HAVE_LIB_SUFFIX @U_HAVE_LIB_SUFFIX@ 393 394 #if U_HAVE_LIB_SUFFIX 395 # ifndef U_ICU_ENTRY_POINT_RENAME 396 /* Renaming pattern: u_strcpy_41_suffix */ 397 # define U_ICU_ENTRY_POINT_RENAME(x) x ## _ ## @LIB_VERSION_MAJOR@ ## @ICULIBSUFFIXCNAME@ 398 # define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt##@ICULIBSUFFIXCNAME@##major##minor##_dat 399 400 # endif 401 #endif 402 403 #endif 404