164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// Copyright (C) 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 37c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/* 47c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru****************************************************************************** 57c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 68de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert* Copyright (C) 1997-2016, International Business Machines 77c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* Corporation and others. All Rights Reserved. 87c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 97c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru****************************************************************************** 107c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 117c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* FILE NAME : platform.h 127c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 137c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* Date Name Description 147c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 05/13/98 nos Creation (content moved here from ptypes.h). 157c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 03/02/99 stephen Added AS400 support. 167c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 03/30/99 stephen Added Linux support. 177c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru* 04/13/99 stephen Reworked for autoconf. 187c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru****************************************************************************** 197c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru*/ 207c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifndef _PLATFORM_H 2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define _PLATFORM_H 2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 24103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/uconfig.h" 25103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/uvernum.h" 26103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 277c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/** 28103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \file 29103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \brief Basic types for the platform. 30103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 31103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This file used to be generated by autoconf/configure. 32103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Starting with ICU 49, platform.h is a normal source file, 33103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * to simplify cross-compiling and working with non-autoconf/make build systems. 34103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 35103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * When a value in this file does not work on a platform, then please 36103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * try to derive it from the U_PLATFORM value 37103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * (for which we might need a new value constant in rare cases) 38103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * and/or from other macros that are predefined by the compiler 39103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * or defined in standard (POSIX or platform or compiler) headers. 40103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 4154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * As a temporary workaround, you can add an explicit <code>#define</code> for some macros 42103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * before it is first tested, or add an equivalent -D macro definition 43103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * to the compiler's command line. 44103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 45103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Note: Some compilers provide ways to show the predefined macros. 46103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * For example, with gcc you can compile an empty .c file and have the compiler 47103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * print the predefined macros with 48103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \code 49103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * gcc -E -dM -x c /dev/null | sort 50103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \endcode 51103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * (You can provide an actual empty .c file rather than /dev/null. 52103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <code>-x c++</code> is for C++.) 537c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru */ 547c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 55103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 5654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Define some things so that they can be documented. 5754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @internal 5854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 5954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifdef U_IN_DOXYGEN 6054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/* 6154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Problem: "platform.h:335: warning: documentation for unknown define U_HAVE_STD_STRING found." means that U_HAVE_STD_STRING is not documented. 6254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Solution: #define any defines for non @internal API here, so that they are visible in the docs. If you just set PREDEFINED in Doxyfile.in, they won't be documented. 6354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 6454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 6554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/* None for now. */ 6654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 6754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 6854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 69103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_PLATFORM 70103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * The U_PLATFORM macro defines the platform we're on. 71103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 72103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * We used to define one different, value-less macro per platform. 73103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * That made it hard to know the set of relevant platforms and macros, 74103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * and hard to deal with variants of platforms. 75103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 76103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Starting with ICU 49, we define platforms as numeric macros, 77103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * with ranges of values for related platforms and their variants. 78103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * The U_PLATFORM macro is set to one of these values. 79103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 80103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Historical note from the Solaris Wikipedia article: 81103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * AT&T and Sun collaborated on a project to merge the most popular Unix variants 82103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * on the market at that time: BSD, System V, and Xenix. 83103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This became Unix System V Release 4 (SVR4). 84103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 85103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 86103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 87103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 88103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** Unknown platform. @internal */ 89103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_UNKNOWN 0 90103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** Windows @internal */ 91103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_WINDOWS 1000 92103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** MinGW. Windows, calls to Win32 API, but using GNU gcc and binutils. @internal */ 93103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_MINGW 1800 94103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 95103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Cygwin. Windows, calls to cygwin1.dll for Posix functions, 96103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * using MSVC or GNU gcc and binutils. 97103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 98103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 99103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_CYGWIN 1900 100103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* Reserve 2000 for U_PF_UNIX? */ 101103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** HP-UX is based on UNIX System V. @internal */ 102103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_HPUX 2100 103103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** Solaris is a Unix operating system based on SVR4. @internal */ 104103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_SOLARIS 2600 105103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** BSD is a UNIX operating system derivative. @internal */ 106103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_BSD 3000 107103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** AIX is based on UNIX System V Releases and 4.3 BSD. @internal */ 108103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_AIX 3100 109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** IRIX is based on UNIX System V with BSD extensions. @internal */ 110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_IRIX 3200 111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Darwin is a POSIX-compliant operating system, composed of code developed by Apple, 113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * as well as code derived from NeXTSTEP, BSD, and other projects, 114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * built around the Mach kernel. 115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Darwin forms the core set of components upon which Mac OS X, Apple TV, and iOS are based. 116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * (Original description modified from WikiPedia.) 117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_DARWIN 3500 120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** iPhone OS (iOS) is a derivative of Mac OS X. @internal */ 121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_IPHONE 3550 122103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** QNX is a commercial Unix-like real-time operating system related to BSD. @internal */ 123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_QNX 3700 124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** Linux is a Unix-like operating system. @internal */ 125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_LINUX 4000 1261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert/** 1271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * Native Client is pretty close to Linux. 1281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * See https://developer.chrome.com/native-client and 1291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * http://www.chromium.org/nativeclient 1301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * @internal 1311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert */ 1321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#define U_PF_BROWSER_NATIVE_CLIENT 4020 133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** Android is based on Linux. @internal */ 134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_ANDROID 4050 1351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert/* Maximum value for Linux-based platform is 4499 */ 136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** z/OS is the successor to OS/390 which was the successor to MVS. @internal */ 137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_OS390 9000 138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** "IBM i" is the current name of what used to be i5/OS and earlier OS/400. @internal */ 139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_PF_OS400 9400 140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_PLATFORM 142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__MINGW32__) 144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_MINGW 145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__CYGWIN__) 146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_CYGWIN 147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) 148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_WINDOWS 149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__ANDROID__) 150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_ANDROID 151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Android wchar_t support depends on the API level. */ 152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# include <android/api-level.h> 1531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#elif defined(__native_client__) 1541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert# define U_PLATFORM U_PF_BROWSER_NATIVE_CLIENT 155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(linux) || defined(__linux__) || defined(__linux) 156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_LINUX 15759d709d503bab6e2b61931737e662dd293b40578ccornelius#elif defined(__APPLE__) && defined(__MACH__) 15859d709d503bab6e2b61931737e662dd293b40578ccornelius# include <TargetConditionals.h> 15959d709d503bab6e2b61931737e662dd293b40578ccornelius# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE /* variant of TARGET_OS_MAC */ 16059d709d503bab6e2b61931737e662dd293b40578ccornelius# define U_PLATFORM U_PF_IPHONE 16159d709d503bab6e2b61931737e662dd293b40578ccornelius# else 16259d709d503bab6e2b61931737e662dd293b40578ccornelius# define U_PLATFORM U_PF_DARWIN 16359d709d503bab6e2b61931737e662dd293b40578ccornelius# endif 16454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif defined(BSD) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__MirBSD__) 165c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# if defined(__FreeBSD__) 166c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# include <sys/endian.h> 167c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# endif 168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_BSD 169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(sun) || defined(__sun) 170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Check defined(__SVR4) || defined(__svr4__) to distinguish Solaris from SunOS? */ 171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_SOLARIS 172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# if defined(__GNUC__) 173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Solaris/GCC needs this header file to get the proper endianness. Normally, this 174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * header file is included with stddef.h but on Solairs/GCC, the GCC version of stddef.h 175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * is included which does not include this header file. 176103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# include <sys/isa_defs.h> 178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# endif 179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_AIX) || defined(__TOS_AIX__) 180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_AIX 181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_hpux) || defined(hpux) || defined(__hpux) 182103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_HPUX 183103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(sgi) || defined(__sgi) 184103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_IRIX 185103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__QNX__) || defined(__QNXNTO__) 186103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_QNX 187103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__TOS_MVS__) 188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_OS390 189103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__OS400__) || defined(__TOS_OS400__) 190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_OS400 191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM U_PF_UNKNOWN 19327f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 19427f654740f2a26ad62a5c155af9199af9e69b889claireho 19527f654740f2a26ad62a5c155af9199af9e69b889claireho/** 196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def CYGWINMSVC 197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defined if this is Windows with Cygwin, but using MSVC rather than gcc. 198103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Otherwise undefined. 19927f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 20027f654740f2a26ad62a5c155af9199af9e69b889claireho */ 201103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* Commented out because this is already set in mh-cygwin-msvc 202103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM == U_PF_CYGWIN && defined(_MSC_VER) 203103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define CYGWINMSVC 20427f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 205103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius*/ 20627f654740f2a26ad62a5c155af9199af9e69b889claireho 207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 208103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_PLATFORM_USES_ONLY_WIN32_API 209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the platform uses only the Win32 API. 210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Set to 1 for Windows/MSVC and MinGW but not Cygwin. 211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 212103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 213103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_PLATFORM_USES_ONLY_WIN32_API 214103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_MINGW) || defined(CYGWINMSVC) 216103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_USES_ONLY_WIN32_API 1 217103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 218103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Cygwin implements POSIX. */ 219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_USES_ONLY_WIN32_API 0 220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 221103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 222103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_PLATFORM_HAS_WIN32_API 224103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the Win32 API is available on the platform. 225103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Set to 1 for Windows/MSVC, MinGW and Cygwin. 226103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_PLATFORM_HAS_WIN32_API 229103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 230103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN 231103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_HAS_WIN32_API 1 232103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 233103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_HAS_WIN32_API 0 234103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 235103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 236103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 237103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_PLATFORM_IMPLEMENTS_POSIX 238103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the platform implements (most of) the POSIX API. 239103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Set to 1 for Cygwin and most other platforms. 240103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 241103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 242103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_PLATFORM_IMPLEMENTS_POSIX 243103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 244f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#elif U_PLATFORM_USES_ONLY_WIN32_API 245103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_IMPLEMENTS_POSIX 0 246103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 247103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_IMPLEMENTS_POSIX 1 248b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif 249b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 250103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 251103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_PLATFORM_IS_LINUX_BASED 252103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the platform is Linux or one of its derivatives. 253103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 254103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 255103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_PLATFORM_IS_LINUX_BASED 256103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 2571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#elif U_PF_LINUX <= U_PLATFORM && U_PLATFORM <= 4499 258103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_IS_LINUX_BASED 1 259103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 260103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_IS_LINUX_BASED 0 261103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 26227f654740f2a26ad62a5c155af9199af9e69b889claireho 263103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 264103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_PLATFORM_IS_DARWIN_BASED 265103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the platform is Darwin or one of its derivatives. 266103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 267103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 268103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_PLATFORM_IS_DARWIN_BASED 269103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 270103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PF_DARWIN <= U_PLATFORM && U_PLATFORM <= U_PF_IPHONE 271103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_IS_DARWIN_BASED 1 272103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 273103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_PLATFORM_IS_DARWIN_BASED 0 2747c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 2757c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 27685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** 277103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_STDINT_H 278103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether stdint.h is available. It is a C99 standard header. 279103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * We used to include inttypes.h which includes stdint.h but we usually do not need 280103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * the additional definitions from inttypes.h. 28127f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 28227f654740f2a26ad62a5c155af9199af9e69b889claireho */ 283103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_STDINT_H 284103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 285103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_USES_ONLY_WIN32_API 2868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius# if defined(__BORLANDC__) || U_PLATFORM == U_PF_MINGW || (defined(_MSC_VER) && _MSC_VER>=1600) 287103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Windows Visual Studio 9 and below do not have stdint.h & inttypes.h, but VS 2010 adds them. */ 288103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_STDINT_H 1 289103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# else 290103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_STDINT_H 0 291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# endif 292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_SOLARIS 293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Solaris has inttypes.h but not stdint.h. */ 294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_STDINT_H 0 29554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif U_PLATFORM == U_PF_AIX && !defined(_AIX51) && defined(_POWER) 29654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* PPC AIX <= 4.3 has inttypes.h but not stdint.h. */ 29754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_HAVE_STDINT_H 0 298103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 299103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_STDINT_H 1 30085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 30185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 302103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 303103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_INTTYPES_H 304103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether inttypes.h is available. It is a C99 standard header. 305103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * We include inttypes.h where it is available but stdint.h is not. 306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 307103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 308103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_INTTYPES_H 309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 310103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_SOLARIS 311103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Solaris has inttypes.h but not stdint.h. */ 312103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_INTTYPES_H 1 31354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif U_PLATFORM == U_PF_AIX && !defined(_AIX51) && defined(_POWER) 31454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* PPC AIX <= 4.3 has inttypes.h but not stdint.h. */ 31554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_HAVE_INTTYPES_H 1 316103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 317103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Most platforms have both inttypes.h and stdint.h, or neither. */ 318103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_INTTYPES_H U_HAVE_STDINT_H 3197c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 3207c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 32185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** 322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_IOSTREAM_SOURCE 323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines what support for C++ streams is available. 324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available 326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * (the ISO/IEC C++ FDIS was published in November 1997), and then 3277c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru * one should qualify streams using the std namespace in ICU header 3287c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru * files. 329103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Starting with ICU 49, this is the only supported version. 330103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 331103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is 332103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * available instead (in June 1985 Stroustrup published 3337c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru * "An Extensible I/O Facility for C++" at the summer USENIX conference). 334103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Starting with ICU 49, this version is not supported any more. 335103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 336103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * If U_IOSTREAM_SOURCE is 0 (or any value less than 199711), 337103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * then C++ streams are not available and 3387c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru * support for them will be silently suppressed in ICU. 3397c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru * 340103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 3417c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru */ 3427c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#ifndef U_IOSTREAM_SOURCE 3437c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#define U_IOSTREAM_SOURCE 199711 3447c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 3457c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 34685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** 34785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * \def U_HAVE_STD_STRING 348103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the standard C++ (STL) <string> header is available. 34927f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 35085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 351103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_STD_STRING 352103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 35385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#else 354103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_STD_STRING 1 35585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 35685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 3577c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*===========================================================================*/ 35827f654740f2a26ad62a5c155af9199af9e69b889claireho/** @{ Compiler and environment features */ 3597c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*===========================================================================*/ 3607c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 36254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \def U_GCC_MAJOR_MINOR 36354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Indicates whether the compiler is gcc (test for != 0), 36454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * and if so, contains its major (times 100) and minor version numbers. 36554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * If the compiler is not gcc, then U_GCC_MAJOR_MINOR == 0. 36654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * 36754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * For example, for testing for whether we have gcc, and whether it's 4.6 or higher, 36854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * use "#if U_GCC_MAJOR_MINOR >= 406". 36954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @internal 37054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 37154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifdef __GNUC__ 37254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_GCC_MAJOR_MINOR (__GNUC__ * 100 + __GNUC_MINOR__) 37354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#else 37454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_GCC_MAJOR_MINOR 0 37554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 37654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 37754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 378103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_IS_BIG_ENDIAN 379103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Determines the endianness of the platform. 380103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 381103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 382103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_IS_BIG_ENDIAN 383103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(BYTE_ORDER) && defined(BIG_ENDIAN) 385103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN) 386103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) 387103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* gcc */ 388103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) 389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN) 390103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN 1 391103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN) 392103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN 0 393103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS390 || U_PLATFORM == U_PF_OS400 || defined(__s390__) || defined(__s390x__) 394103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* These platforms do not appear to predefine any endianness macros. */ 395103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN 1 396103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_PA_RISC1_0) || defined(_PA_RISC1_1) || defined(_PA_RISC2_0) 397103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* HPPA do not appear to predefine any endianness macros. */ 398103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN 1 39954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif defined(sparc) || defined(__sparc) || defined(__sparc__) 40054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* Some sparc based systems (e.g. Linux) do not predefine any endianness macros. */ 40154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_IS_BIG_ENDIAN 1 4027c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#else 403103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IS_BIG_ENDIAN 0 40427f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 4057c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 406103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 407103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_PLACEMENT_NEW 408103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Determines whether to override placement new and delete for STL. 409103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.6 410103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 411103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_PLACEMENT_NEW 412103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 413103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__BORLANDC__) 414103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_PLACEMENT_NEW 0 415103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 416103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_PLACEMENT_NEW 1 4177c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 4187c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 419103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 420103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_DEBUG_LOCATION_NEW 421103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Define this to define the MFC debug version of the operator new. 422103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 423103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 3.4 424103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 425103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_DEBUG_LOCATION_NEW 426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 427103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_MSC_VER) 428103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_DEBUG_LOCATION_NEW 1 429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 430103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_DEBUG_LOCATION_NEW 0 4317c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 4327c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 4338de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert/* Compatibility with non clang compilers: http://clang.llvm.org/docs/LanguageExtensions.html */ 43454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef __has_attribute 43554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define __has_attribute(x) 0 43654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 4378de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#ifndef __has_cpp_attribute 4388de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# define __has_cpp_attribute(x) 0 4398de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#endif 440c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#ifndef __has_builtin 441c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define __has_builtin(x) 0 442c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#endif 443c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#ifndef __has_feature 444c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define __has_feature(x) 0 445c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#endif 446c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#ifndef __has_extension 447c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define __has_extension(x) 0 448c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#endif 4498de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#ifndef __has_warning 4508de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# define __has_warning(x) 0 4518de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#endif 45254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 45354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 45454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \def U_MALLOC_ATTR 45554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Attribute to mark functions as malloc-like 45654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @internal 45754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 45854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if defined(__GNUC__) && __GNUC__>=3 45954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_MALLOC_ATTR __attribute__ ((__malloc__)) 46054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#else 46154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_MALLOC_ATTR 46254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 46354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 46454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 46554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \def U_ALLOC_SIZE_ATTR 46654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Attribute to specify the size of the allocated buffer for malloc-like functions 46754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * @internal 46854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 46954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || __has_attribute(alloc_size) 47054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_ALLOC_SIZE_ATTR(X) __attribute__ ((alloc_size(X))) 47154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_ALLOC_SIZE_ATTR2(X,Y) __attribute__ ((alloc_size(X,Y))) 47254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#else 47354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_ALLOC_SIZE_ATTR(X) 47454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_ALLOC_SIZE_ATTR2(X,Y) 47554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 47654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 477c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert/** 478c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * \def U_CPLUSPLUS_VERSION 479c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * 0 if no C++; 1, 11, 14, ... if C++. 480c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * Support for specific features cannot always be determined by the C++ version alone. 481c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * @internal 482c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert */ 483c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#ifdef U_CPLUSPLUS_VERSION 484c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# if U_CPLUSPLUS_VERSION != 0 && !defined(__cplusplus) 485c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# undef U_CPLUSPLUS_VERSION 486c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_CPLUSPLUS_VERSION 0 487c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# endif 488c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert /* Otherwise use the predefined value. */ 489c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#elif !defined(__cplusplus) 490c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_CPLUSPLUS_VERSION 0 491c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#elif __cplusplus >= 201402L 492c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_CPLUSPLUS_VERSION 14 493c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#elif __cplusplus >= 201103L 494c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_CPLUSPLUS_VERSION 11 495c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#else 496c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // C++98 or C++03 497c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_CPLUSPLUS_VERSION 1 498c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#endif 499c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 500c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert/** 501c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * \def U_HAVE_RVALUE_REFERENCES 502c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * Set to 1 if the compiler supports rvalue references. 503c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * C++11 feature, necessary for move constructor & move assignment. 504c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * @internal 505c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert */ 506c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#ifdef U_HAVE_RVALUE_REFERENCES 507c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert /* Use the predefined value. */ 508c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#elif U_CPLUSPLUS_VERSION >= 11 || __has_feature(cxx_rvalue_references) \ 509c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert || defined(__GXX_EXPERIMENTAL_CXX0X__) \ 510c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert || (defined(_MSC_VER) && _MSC_VER >= 1600) /* Visual Studio 2010 */ 511c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_HAVE_RVALUE_REFERENCES 1 512c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#else 513c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_HAVE_RVALUE_REFERENCES 0 514c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#endif 515c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 516c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert/** 517c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * \def U_NOEXCEPT 518c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * "noexcept" if supported, otherwise empty. 519c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * Some code, especially STL containers, uses move semantics of objects only 520c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * if the move constructor and the move operator are declared as not throwing exceptions. 521c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert * @internal 522c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert */ 523c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#ifdef U_NOEXCEPT 524c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert /* Use the predefined value. */ 525441ab1c39b37ef773820d789652301c5f83e7c6bFredrik Roubert#elif defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS /* Visual Studio */ 526441ab1c39b37ef773820d789652301c5f83e7c6bFredrik Roubert# define U_NOEXCEPT 527c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#elif U_CPLUSPLUS_VERSION >= 11 || __has_feature(cxx_noexcept) || __has_extension(cxx_noexcept) \ 528c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert || (defined(_MSC_VER) && _MSC_VER >= 1900) /* Visual Studio 2015 */ 529c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_NOEXCEPT noexcept 530c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#else 531c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# define U_NOEXCEPT 532c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#endif 533c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 5348de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert/** 5358de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * \def U_FALLTHROUGH 5368de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * Annotate intentional fall-through between switch labels. 5378de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * http://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough 5388de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * @internal 5398de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert */ 5408de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#ifdef __cplusplus 5418de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# if __has_cpp_attribute(clang::fallthrough) || \ 5428de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert (__has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")) 5438de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# define U_FALLTHROUGH [[clang::fallthrough]] 5448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# else 5458de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# define U_FALLTHROUGH 5468de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# endif 5478de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#else 5488de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert# define U_FALLTHROUGH 5498de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#endif 5508de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 5518de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 552103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @} */ 5537c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 554103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 555103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ Character data types */ 556103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*===========================================================================*/ 5577c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 55827f654740f2a26ad62a5c155af9199af9e69b889claireho/** 559103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * U_CHARSET_FAMILY is equal to this value when the platform is an ASCII based platform. 560103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.0 56127f654740f2a26ad62a5c155af9199af9e69b889claireho */ 562103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_ASCII_FAMILY 0 56327f654740f2a26ad62a5c155af9199af9e69b889claireho 56427f654740f2a26ad62a5c155af9199af9e69b889claireho/** 565103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * U_CHARSET_FAMILY is equal to this value when the platform is an EBCDIC based platform. 566103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.0 56727f654740f2a26ad62a5c155af9199af9e69b889claireho */ 568103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_EBCDIC_FAMILY 1 56927f654740f2a26ad62a5c155af9199af9e69b889claireho 570103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 571103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_CHARSET_FAMILY 572103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 573103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <p>These definitions allow to specify the encoding of text 574103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * in the char data type as defined by the platform and the compiler. 575103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * It is enough to determine the code point values of "invariant characters", 576103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * which are the ones shared by all encodings that are in use 577103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * on a given platform.</p> 578103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 579103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <p>Those "invariant characters" should be all the uppercase and lowercase 580103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * latin letters, the digits, the space, and "basic punctuation". 581103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Also, '\\n', '\\r', '\\t' should be available.</p> 582103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 583103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <p>The list of "invariant characters" is:<br> 584103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \code 585103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * A-Z a-z 0-9 SPACE " % & ' ( ) * + , - . / : ; < = > ? _ 586103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \endcode 587103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <br> 588103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * (52 letters + 10 numbers + 20 punc/sym/space = 82 total)</p> 589103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 590103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <p>This matches the IBM Syntactic Character Set (CS 640).</p> 591103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 592103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <p>In other words, all the graphic characters in 7-bit ASCII should 593103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * be safely accessible except the following:</p> 594103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 595103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \code 596103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '\' <backslash> 597103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '[' <left bracket> 598103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * ']' <right bracket> 599103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '{' <left brace> 600103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '}' <right brace> 601103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '^' <circumflex> 602103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '~' <tilde> 603103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '!' <exclamation mark> 604103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '#' <number sign> 605103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '|' <vertical line> 606103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '$' <dollar sign> 607103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '@' <commercial at> 608103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * '`' <grave accent> 609103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \endcode 610103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.0 611103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 612103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_CHARSET_FAMILY 613103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS390 && (!defined(__CHARSET_LIB) || !__CHARSET_LIB) 615103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CHARSET_FAMILY U_EBCDIC_FAMILY 616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 && !defined(__UTF32__) 617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CHARSET_FAMILY U_EBCDIC_FAMILY 618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 619103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CHARSET_FAMILY U_ASCII_FAMILY 6207c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 6217c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 622103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 623103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_CHARSET_IS_UTF8 624103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Hardcode the default charset to UTF-8. 626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 627103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * If this is set to 1, then 628103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - ICU will assume that all non-invariant char*, StringPiece, std::string etc. 629103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * contain UTF-8 text, regardless of what the system API uses 630103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - some ICU code will use fast functions like u_strFromUTF8() 631103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * rather than the more general and more heavy-weight conversion API (ucnv.h) 632103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - ucnv_getDefaultName() always returns "UTF-8" 633103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - ucnv_setDefaultName() is disabled and will not change the default charset 634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - static builds of ICU are smaller 635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - more functionality is available with the UCONFIG_NO_CONVERSION build-time 636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * configuration option (see unicode/uconfig.h) 637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * - the UCONFIG_NO_CONVERSION build option in uconfig.h is more usable 638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 4.2 640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @see UCONFIG_NO_CONVERSION 641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_CHARSET_IS_UTF8 643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_ANDROID || U_PLATFORM_IS_DARWIN_BASED 645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CHARSET_IS_UTF8 1 64627b23dcdb60b720046b77b8e59ed633d12203425Fredrik Roubert#elif U_PLATFORM_IS_LINUX_BASED 64727b23dcdb60b720046b77b8e59ed633d12203425Fredrik Roubert /* 64827b23dcdb60b720046b77b8e59ed633d12203425Fredrik Roubert * Google-specific: Set to 1 to match the google3 execution environment's 64927b23dcdb60b720046b77b8e59ed633d12203425Fredrik Roubert * use of UTF-8, on both Linux server and workstation machines. 65027b23dcdb60b720046b77b8e59ed633d12203425Fredrik Roubert */ 65127b23dcdb60b720046b77b8e59ed633d12203425Fredrik Roubert# define U_CHARSET_IS_UTF8 1 652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CHARSET_IS_UTF8 0 6547c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 6557c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 65685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** @} */ 65785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 6587c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*===========================================================================*/ 659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ Information about wchar support */ 6607c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*===========================================================================*/ 66185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_WCHAR_H 664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Indicates whether <wchar.h> is available (1) or not (0). Set to 1 by default. 665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.0 667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_WCHAR_H 669103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_ANDROID && __ANDROID_API__ < 9 671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Android before Gingerbread (Android 2.3, API level 9) did not support wchar_t. 673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * The type and header existed, but the library functions did not work as expected. 674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * The size of wchar_t was 1 but L"xyz" string literals had 32-bit units anyway. 675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_WCHAR_H 0 6777c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#else 678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_HAVE_WCHAR_H 1 67985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 68085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_SIZEOF_WCHAR_T 683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * U_SIZEOF_WCHAR_T==sizeof(wchar_t) 684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.0 686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_SIZEOF_WCHAR_T 688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 689f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#elif (U_PLATFORM == U_PF_ANDROID && __ANDROID_API__ < 9) 690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Classic Mac OS and Mac OS X before 10.3 (Panther) did not support wchar_t or wstring. 692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Newer Mac OS X has size 4. 693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 1 695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM_HAS_WIN32_API || U_PLATFORM == U_PF_CYGWIN 696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 2 697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_AIX 698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * AIX 6.1 information, section "Wide character data representation": 700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * "... the wchar_t datatype is 32-bit in the 64-bit environment and 701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 16-bit in the 32-bit environment." 702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * and 703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * "All locales use Unicode for their wide character code values (process code), 704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * except the IBM-eucTW codeset." 705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# ifdef __64BIT__ 707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 4 708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# else 709103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 2 710103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# endif 711103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS390 712103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 713103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * z/OS V1R11 information center, section "LP64 | ILP32": 714103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * "In 31-bit mode, the size of long and pointers is 4 bytes and the size of wchar_t is 2 bytes. 715103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Under LP64, the size of long and pointer is 8 bytes and the size of wchar_t is 4 bytes." 716103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 717103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# ifdef _LP64 718103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 4 719103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# else 720103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 2 721103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# endif 722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_PLATFORM == U_PF_OS400 723103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# if defined(__UTF32__) 724103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 725103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * LOCALETYPE(*LOCALEUTF) is specified. 726103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Wide-character strings are in UTF-32, 727103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * narrow-character strings are in UTF-8. 728103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 729103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 4 730103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# elif defined(__UCS2__) 731103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 732103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * LOCALETYPE(*LOCALEUCS2) is specified. 733103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Wide-character strings are in UCS-2, 734103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * narrow-character strings are in EBCDIC. 735103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 736103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 2 737103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 738103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 739103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * LOCALETYPE(*CLD) or LOCALETYPE(*LOCALE) is specified. 740103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Wide-character strings are in 16-bit EBCDIC, 741103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * narrow-character strings are in EBCDIC. 742103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 743103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 2 744103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# endif 745103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 746103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_SIZEOF_WCHAR_T 4 74785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 7487c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 74985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifndef U_HAVE_WCSCPY 750103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define U_HAVE_WCSCPY U_HAVE_WCHAR_H 75185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 75285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 75385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** @} */ 75485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 7557c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/** 756103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_HAVE_CHAR16_T 757103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Defines whether the char16_t type is available for UTF-16 758103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * and u"abc" UTF-16 string literals are supported. 759103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This is a new standard type and standard string literal syntax in C++0x 760103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * but has been available in some compilers before. 761103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal 762103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 763103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_HAVE_CHAR16_T 764103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 765103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 766103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* 767103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Notes: 768103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Visual Studio 10 (_MSC_VER>=1600) defines char16_t but 769103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * does not support u"abc" string literals. 770103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * gcc 4.4 defines the __CHAR16_TYPE__ macro to a usable type but 771103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * does not support u"abc" string literals. 77254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * C++11 and C11 require support for UTF-16 literals 773103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 774c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert# if U_CPLUSPLUS_VERSION >= 11 || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) 77554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_HAVE_CHAR16_T 1 77654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# else 77754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# define U_HAVE_CHAR16_T 0 77854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius# endif 779103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 780103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 781103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 78285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @{ 7837c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru * \def U_DECLARE_UTF16 784103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Do not use this macro because it is not defined on all platforms. 785103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Use the UNICODE_STRING or U_STRING_DECL macros instead. 78627f654740f2a26ad62a5c155af9199af9e69b889claireho * @internal 7877c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru */ 788103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_DECLARE_UTF16 789103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 79054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#elif U_HAVE_CHAR16_T \ 79154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius || (defined(__xlC__) && defined(__IBM_UTF_LITERAL) && U_SIZEOF_WCHAR_T != 2) \ 7927c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru || (defined(__HP_aCC) && __HP_aCC >= 035000) \ 79354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius || (defined(__HP_cc) && __HP_cc >= 111106) 794103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_DECLARE_UTF16(string) u ## string 7957c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#elif U_SIZEOF_WCHAR_T == 2 \ 796103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && (U_CHARSET_FAMILY == 0 || (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400 && defined(__UCS2__))) 797103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_DECLARE_UTF16(string) L ## string 798103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 799103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Leave U_DECLARE_UTF16 undefined. See unistr.h. */ 8007c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 8017c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 80285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** @} */ 80385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8047c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*===========================================================================*/ 805103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** @{ Symbol import-export control */ 8067c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*===========================================================================*/ 8077c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_EXPORT 809103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 810103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(U_STATIC_IMPLEMENTATION) 811103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT 812103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(__GNUC__) 813103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT __attribute__((visibility("default"))) 81485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \ 81585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 816103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT __global 8177c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/*#elif defined(__HP_aCC) || defined(__HP_cc) 818103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT __declspec(dllexport)*/ 819103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_MSC_VER) 820103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT __declspec(dllexport) 8217c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#else 822103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT 8237c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#endif 8247c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru 8257c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru/* U_CALLCONV is releated to U_EXPORT2 */ 826103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_EXPORT2 827103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 828103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_MSC_VER) 829103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT2 __cdecl 8307c971b21cb09c84a9bd948bdf2918b727d46992cJean-Baptiste Queru#else 831103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_EXPORT2 8321239be49940bf5c71eeef0790705c6e451a3168bKenny Root#endif 8331239be49940bf5c71eeef0790705c6e451a3168bKenny Root 834103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef U_IMPORT 835103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Use the predefined value. */ 836103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif defined(_MSC_VER) 837103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Windows needs to export/import data. */ 838103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IMPORT __declspec(dllimport) 839103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 840103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_IMPORT 84127f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 84227f654740f2a26ad62a5c155af9199af9e69b889claireho 84385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** 844103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def U_CALLCONV 845103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Similar to U_CDECL_BEGIN/U_CDECL_END, this qualifier is necessary 846103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * in callback function typedefs to make sure that the calling convention 847103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * is compatible. 848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * 849103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * This is only used for non-ICU-API functions. 850103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * When a function is a public ICU API, 851103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * you must use the U_CAPI and U_EXPORT2 qualifiers. 85264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * 85364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * Please note, you need to use U_CALLCONV after the *. 85464339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * 85564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * NO : "static const char U_CALLCONV *func( . . . )" 85664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * YES: "static const char* U_CALLCONV func( . . . )" 85764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * 858103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 2.0 85985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 860103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM == U_PF_OS390 && defined(__cplusplus) 861103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CALLCONV __cdecl 862103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 863103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius# define U_CALLCONV U_EXPORT2 86485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 86585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 866103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* @} */ 86727f654740f2a26ad62a5c155af9199af9e69b889claireho 86885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 869