]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - icu/unicode/platform.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / icu / unicode / platform.h
index 9595a268a69de7c220cc2ed7c0a74683086a32c1..3de40d256553c4aaf1ec04831e99c553fd7c46e9 100644 (file)
@@ -1,11 +1,15 @@
 /*
 ******************************************************************************
 *
-*   Copyright (C) 1997-2004, International Business Machines
+*   Copyright (C) 1997-2010, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
 *
+* Note: autoconf creates platform.h from platform.h.in at configure time.
+*
+******************************************************************************
+*
 *  FILE NAME : platform.h
 *
 *   Date        Name        Description
 ******************************************************************************
 */
 
-/* Define the platform we're on. */
+#ifndef _PLATFORM_H
+#define _PLATFORM_H
+
+/**
+ * \file 
+ * \brief Basic types for the platform 
+ */
+
+/* This file should be included before uvernum.h. */
+#if defined(UVERNUM_H)
+# error Do not include unicode/uvernum.h before #including unicode/platform.h.  Instead of unicode/uvernum.h, #include unicode/uversion.h
+#endif
+
+/**
+ * Determine wheter to enable auto cleanup of libraries. 
+ * @internal
+ */
+#ifndef UCLN_NO_AUTO_CLEANUP
+#define UCLN_NO_AUTO_CLEANUP 1
+#endif
+
+/* Need platform.h when using CYGWINMSVC to get definitions above. Ignore everything else. */
+#ifndef CYGWINMSVC
+
+/** Define the platform we're on. */
 #ifndef U_DARWIN
 #define U_DARWIN
 #endif
 
-/* Define whether inttypes.h is available */
+/**
+ * \def U_HAVE_DIRENT_H
+ * Define whether dirent.h is available 
+ * @internal
+ */
+#ifndef U_HAVE_DIRENT_H
+#define U_HAVE_DIRENT_H 1
+#endif
+
+/** Define whether inttypes.h is available */
 #ifndef U_HAVE_INTTYPES_H
 #define U_HAVE_INTTYPES_H 1
 #endif
 
-/*
+/**
  * Define what support for C++ streams is available.
- *     If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available
+ *     If U_IOSTREAM_SOURCE is set to 199711, then &lt;iostream&gt; is available
  * (1997711 is the date the ISO/IEC C++ FDIS was published), and then
  * one should qualify streams using the std namespace in ICU header
  * files.
- *     If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is
+ *     If U_IOSTREAM_SOURCE is set to 198506, then &lt;iostream.h&gt; is
  * available instead (198506 is the date when Stroustrup published
  * "An Extensible I/O Facility for C++" at the summer USENIX conference).
  *     If U_IOSTREAM_SOURCE is 0, then C++ streams are not available and
 #define U_IOSTREAM_SOURCE 199711
 #endif
 
-/* Determines whether specific types are available */
+/**
+ * \def U_HAVE_STD_STRING
+ * Define whether the standard C++ (STL) &lt;string&gt; header is available.
+ * For platforms that do not use platform.h and do not define this constant
+ * in their platform-specific headers, std_string.h defaults
+ * U_HAVE_STD_STRING to 1.
+ * @internal
+ */
+#ifndef U_HAVE_STD_STRING
+#define U_HAVE_STD_STRING 1
+#endif
+
+/** @{ Determines whether specific types are available */
 #ifndef U_HAVE_INT8_T
 #define U_HAVE_INT8_T 1
 #endif
 #define U_HAVE_UINT64_T 0
 #endif
 
-/*===========================================================================*/
-/* Generic data types                                                        */
-/*===========================================================================*/
-
-#include <sys/types.h>
-
-/* If your platform does not have the <inttypes.h> header, you may
-   need to edit the typedefs below. */
-#if U_HAVE_INTTYPES_H
-
-/* autoconf 2.13 sometimes can't properly find the data types in <inttypes.h> */
-/* os/390 needs <inttypes.h>, but it doesn't have int8_t, and it sometimes */
-/* doesn't have uint8_t depending on the OS version. */
-/* So we have this work around. */
-#ifdef OS390
-/* The features header is needed to get (u)int64_t sometimes. */
-#include <features.h>
-#if ! U_HAVE_INT8_T
-typedef signed char int8_t;
-#endif
-#if !defined(__uint8_t)
-#define __uint8_t 1
-typedef unsigned char uint8_t;
-#endif
-#endif /* OS390 */
-
-#include <inttypes.h>
-
-#else /* U_HAVE_INTTYPES_H */
-
-#if ! U_HAVE_INT8_T
-typedef signed char int8_t;
-#endif
-
-#if ! U_HAVE_UINT8_T
-typedef unsigned char uint8_t;
-#endif
-
-#if ! U_HAVE_INT16_T
-typedef signed short int16_t;
-#endif
-
-#if ! U_HAVE_UINT16_T
-typedef unsigned short uint16_t;
-#endif
-
-#if ! U_HAVE_INT32_T
-typedef signed int int32_t;
-#endif
-
-#if ! U_HAVE_UINT32_T
-typedef unsigned int uint32_t;
-#endif
-
-#if ! U_HAVE_INT64_T
-    typedef signed long long int64_t;
-/* else we may not have a 64-bit type */
-#endif
-
-#if ! U_HAVE_UINT64_T
-    typedef unsigned long long uint64_t;
-/* else we may not have a 64-bit type */
-#endif
-
-#endif
+/** @} */
 
 /*===========================================================================*/
-/* Compiler and environment features                                         */
+/** @{ Compiler and environment features                                     */
 /*===========================================================================*/
 
 /* Define whether namespace is supported */
@@ -162,7 +147,14 @@ typedef unsigned int uint32_t;
 #endif
 
 /* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
+#ifndef ICU_USE_THREADS 
 #define ICU_USE_THREADS 1
+#endif
+
+/* On strong memory model CPUs (e.g. x86 CPUs), we use a safe & quick double check lock. */
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+#define UMTX_STRONG_MEMORY_MODEL 1
+#endif
 
 #ifndef U_DEBUG
 #define U_DEBUG 0
@@ -192,41 +184,106 @@ typedef unsigned int uint32_t;
 #define U_ENABLE_TRACING 1
 #endif
 
-/* Define the library suffix in a C syntax. */
-#define U_HAVE_LIB_SUFFIX 0
-#define U_LIB_SUFFIX_C_NAME 
-#define U_LIB_SUFFIX_C_NAME_STRING ""
+/**
+ * Whether to enable Dynamic loading in ICU
+ * @internal
+ */
+#ifndef U_ENABLE_DYLOAD
+#define U_ENABLE_DYLOAD 1
+#endif
+
+/**
+ * Whether to test Dynamic loading as an OS capabilty
+ * @internal
+ */
+#ifndef U_CHECK_DYLOAD
+#define U_CHECK_DYLOAD 1
+#endif
+
+
+/** Do we allow ICU users to use the draft APIs by default? */
+#ifndef U_DEFAULT_SHOW_DRAFT
+#define U_DEFAULT_SHOW_DRAFT 1
+#endif
+
+/** @} */
 
 /*===========================================================================*/
-/* Character data types                                                      */
+/** @{ Character data types                                                      */
 /*===========================================================================*/
 
-#if defined(OS390) || defined(OS400)
+#if ((defined(OS390) && (!defined(__CHARSET_LIB) || !__CHARSET_LIB))) || defined(OS400)
 #   define U_CHARSET_FAMILY 1
 #endif
 
+/** @} */
+
 /*===========================================================================*/
-/* Information about wchar support                                           */
+/** @{ Information about wchar support                                           */
 /*===========================================================================*/
 
+#ifndef U_HAVE_WCHAR_H
 #define U_HAVE_WCHAR_H      1
+#endif
+
+#ifndef U_SIZEOF_WCHAR_T
 #define U_SIZEOF_WCHAR_T    4
+#endif
 
+#ifndef U_HAVE_WCSCPY
 #define U_HAVE_WCSCPY       1
+#endif
+
+/** @} */
+
+/**
+ * @{
+ * \def U_DECLARE_UTF16
+ * Do not use this macro. Use the UNICODE_STRING or U_STRING_DECL macros
+ * instead.
+ * @internal
+ *
+ * \def U_GNUC_UTF16_STRING
+ * @internal
+ */
+#ifndef U_GNUC_UTF16_STRING
+#define U_GNUC_UTF16_STRING 0
+#endif
+#if 1 || defined(U_CHECK_UTF16_STRING)
+#if (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \
+    || (defined(__HP_aCC) && __HP_aCC >= 035000) \
+    || (defined(__HP_cc) && __HP_cc >= 111106) \
+    || U_GNUC_UTF16_STRING
+#define U_DECLARE_UTF16(string) u ## string
+#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550)
+/* || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x580) */
+/* Sun's C compiler has issues with this notation, and it's unreliable. */
+#define U_DECLARE_UTF16(string) U ## string
+#elif U_SIZEOF_WCHAR_T == 2 \
+    && (U_CHARSET_FAMILY == 0 || ((defined(OS390) || defined(OS400)) && defined(__UCS2__)))
+#define U_DECLARE_UTF16(string) L ## string
+#endif
+#endif
+
+/** @} */
 
 /*===========================================================================*/
-/* Information about POSIX support                                           */
+/** @{ Information about POSIX support                                           */
 /*===========================================================================*/
 
-#define U_HAVE_NL_LANGINFO          1
+#ifndef U_HAVE_NL_LANGINFO_CODESET
 #define U_HAVE_NL_LANGINFO_CODESET  1
+#endif
+
+#ifndef U_NL_LANGINFO_CODESET
 #define U_NL_LANGINFO_CODESET       CODESET
+#endif
 
 #if 1
 #define U_TZSET         tzset
 #endif
 #if 0
-#define U_TIMEZONE      
+#define U_TIMEZONE      timezone
 #endif
 #if 1
 #define U_TZNAME        tzname
@@ -235,33 +292,110 @@ typedef unsigned int uint32_t;
 #define U_HAVE_MMAP     1
 #define U_HAVE_POPEN    1
 
+/** @} */
+
 /*===========================================================================*/
-/* Symbol import-export control                                              */
+/** @{ Symbol import-export control                                              */
 /*===========================================================================*/
 
+#if 1
+#define U_EXPORT __attribute__((visibility("default")))
+#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
+   || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
+#define U_EXPORT __global
+/*#elif defined(__HP_aCC) || defined(__HP_cc)
+#define U_EXPORT __declspec(dllexport)*/
+#else
 #define U_EXPORT
+#endif
+
 /* U_CALLCONV is releated to U_EXPORT2 */
 #define U_EXPORT2
 
 /* cygwin needs to export/import data */
-#ifdef U_CYGWIN
+#if defined(U_CYGWIN) && !defined(__GNUC__)
 #define U_IMPORT __declspec(dllimport)
 #else
 #define U_IMPORT 
 #endif
 
+/* @} */
+
 /*===========================================================================*/
-/* Code alignment and C function inlining                                    */
+/** @{ Code alignment and C function inlining                                    */
 /*===========================================================================*/
 
 #ifndef U_INLINE
-#define U_INLINE inline
+#   ifdef __cplusplus
+#       define U_INLINE inline
+#   else
+#       define U_INLINE __inline__
+#   endif
 #endif
 
+#ifndef U_ALIGN_CODE
 #define U_ALIGN_CODE(n) 
+#endif
+
+/** @} */
 
 /*===========================================================================*/
-/* Programs used by ICU code                                                 */
+/** @{ GCC built in functions for atomic memory operations                       */
 /*===========================================================================*/
 
+/**
+ * \def U_HAVE_GCC_ATOMICS
+ * @internal
+ */
+#ifndef U_HAVE_GCC_ATOMICS
+#define U_HAVE_GCC_ATOMICS 1
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/** @{ Programs used by ICU code                                                 */
+/*===========================================================================*/
+
+/**
+ * \def U_MAKE
+ * What program to execute to run 'make'
+ */
+#ifndef U_MAKE
 #define U_MAKE  "/usr/bin/gnumake"
+#endif
+
+/** @} */
+
+#endif /* CYGWINMSVC */
+
+/*===========================================================================*/
+/* Custom icu entry point renaming                                                  */
+/*===========================================================================*/
+
+/**
+ * Define the library suffix with C syntax.
+ * @internal
+ */
+# define U_LIB_SUFFIX_C_NAME 
+/**
+ * Define the library suffix as a string with C syntax
+ * @internal
+ */
+# define U_LIB_SUFFIX_C_NAME_STRING ""
+/**
+ * 1 if a custom library suffix is set
+ * @internal
+ */
+# define U_HAVE_LIB_SUFFIX 0
+
+#if U_HAVE_LIB_SUFFIX
+# ifndef U_ICU_ENTRY_POINT_RENAME
+/* Renaming pattern:    u_strcpy_41_suffix */
+#  define U_ICU_ENTRY_POINT_RENAME(x)    x ## _ ## 46 ## 
+#  define U_DEF_ICUDATA_ENTRY_POINT(major, minor) icudt####major##minor##_dat
+
+# endif
+#endif
+
+#endif