/*
*******************************************************************************
*
*   Copyright (C) 1997-2003, International Business Machines
*   Corporation and others.  All Rights Reserved.
*
*******************************************************************************
*
*  FILE NAME : platform.h
*
*   Date        Name        Description
*   05/13/98    nos         Creation (content moved here from ptypes.h).
*   03/02/99    stephen     Added AS400 support.
*   03/30/99    stephen     Added Linux support.
*   04/13/99    stephen     Reworked for autoconf.
*******************************************************************************
*/

/* Define the platform we're on. */
#ifndef @platform@
#define @platform@
#endif

/* Define whether inttypes.h is available */
#ifndef U_HAVE_INTTYPES_H
#define U_HAVE_INTTYPES_H @U_HAVE_INTTYPES_H@
#endif

/*
 * Define what support for C++ streams is available.
 *     If U_IOSTREAM_SOURCE is set to 199711, then <iostream> 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
 * 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
 * support for them will be silently suppressed in ICU.
 *
 */

#ifndef U_IOSTREAM_SOURCE
#define U_IOSTREAM_SOURCE @U_IOSTREAM_SOURCE@
#endif

#ifndef U_DEBUG
#define U_DEBUG @ENABLE_DEBUG@
#endif

#ifndef U_RELEASE
#define U_RELEASE @ENABLE_RELEASE@
#endif

/* Determines whether specific types are available */
#ifndef U_HAVE_INT8_T
#define U_HAVE_INT8_T @HAVE_INT8_T@
#endif

#ifndef U_HAVE_UINT8_T
#define U_HAVE_UINT8_T @HAVE_UINT8_T@
#endif

#ifndef U_HAVE_INT16_T
#define U_HAVE_INT16_T @HAVE_INT16_T@
#endif

#ifndef U_HAVE_UINT16_T
#define U_HAVE_UINT16_T @HAVE_UINT16_T@
#endif

#ifndef U_HAVE_INT32_T
#define U_HAVE_INT32_T @HAVE_INT32_T@
#endif

#ifndef U_HAVE_UINT32_T
#define U_HAVE_UINT32_T @HAVE_UINT32_T@
#endif

#ifndef U_HAVE_INT64_T
#define U_HAVE_INT64_T @HAVE_INT64_T@
#endif

#ifndef U_HAVE_UINT64_T
#define U_HAVE_UINT64_T @HAVE_UINT64_T@
#endif


/* Define whether namespace is supported */
#ifndef U_HAVE_NAMESPACE
#define U_HAVE_NAMESPACE @U_HAVE_NAMESPACE@
#endif

/* Determines the endianness of the platform */
#define U_IS_BIG_ENDIAN @U_IS_BIG_ENDIAN@

/* 1 or 0 to enable or disable threads.  If undefined, default is: enable threads. */
#define ICU_USE_THREADS @ICU_USE_THREADS@

/* Determine whether to disable renaming or not. This overrides the
   setting in umachine.h which is for all platforms. */
#ifndef U_DISABLE_RENAMING
#define U_DISABLE_RENAMING @U_DISABLE_RENAMING@
#endif

/* Determine whether to override new and delete. */
#ifndef U_OVERRIDE_CXX_ALLOCATION
#define U_OVERRIDE_CXX_ALLOCATION @U_OVERRIDE_CXX_ALLOCATION@
#endif
/* Determine whether to override placement new and delete for STL. */
#ifndef U_HAVE_PLACEMENT_NEW
#define U_HAVE_PLACEMENT_NEW @U_HAVE_PLACEMENT_NEW@
#endif

/* Define the library suffix in a C syntax. */
#define U_HAVE_LIB_SUFFIX @U_HAVE_LIB_SUFFIX@
#define U_LIB_SUFFIX_C_NAME @ICULIBSUFFIXCNAME@
#define U_LIB_SUFFIX_C_NAME_STRING "@ICULIBSUFFIXCNAME@"

/*===========================================================================*/
/* Platform/Language determination                                           */
/*===========================================================================*/

#ifdef macintosh
#ifdef XP_MAC
#undef XP_MAC
#endif
#define XP_MAC 1
#include <string.h>
#endif

/*===========================================================================*/
/* Generic data types                                                        */
/*===========================================================================*/

/* 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 */

#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif /* STDC_HEADERS */

#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
#   if defined(_LP64)
      typedef signed int  int32_t;
#   else
      typedef signed long int32_t;
#   endif
#endif

#if ! U_HAVE_UINT32_T
#   if defined(_LP64)
      typedef unsigned int  uint32_t;
#   else
      typedef unsigned long uint32_t;
#   endif
#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

/*===========================================================================*/
/* Character data types                                                      */
/*===========================================================================*/

#ifdef OS390
#   define U_CHARSET_FAMILY 1
#endif

/*===========================================================================*/
/* Information about wchar support                                           */
/*===========================================================================*/

#define U_HAVE_WCHAR_H      @U_HAVE_WCHAR_H@
#define U_SIZEOF_WCHAR_T    @U_SIZEOF_WCHAR_T@

#define U_HAVE_WCSCPY       @U_HAVE_WCSCPY@

/*===========================================================================*/
/* Information about POSIX support                                           */
/*===========================================================================*/

#define U_HAVE_NL_LANGINFO          @U_HAVE_NL_LANGINFO@
#define U_HAVE_NL_LANGINFO_CODESET  @U_HAVE_NL_LANGINFO_CODESET@
#define U_NL_LANGINFO_CODESET       @U_NL_LANGINFO_CODESET@

#define U_TZSET         @U_TZSET@
#define U_HAVE_TIMEZONE @U_HAVE_TIMEZONE@
#if U_HAVE_TIMEZONE
#   define U_TIMEZONE   @U_TIMEZONE@
#endif
#define U_TZNAME        @U_TZNAME@

#define U_HAVE_MMAP     @HAVE_MMAP@
#define U_HAVE_POPEN    @U_HAVE_POPEN@

/*===========================================================================*/
/* Symbol import-export control                                              */
/*===========================================================================*/

#define U_EXPORT
/* U_CALLCONV is releated to U_EXPORT2 */
#define U_EXPORT2

/* cygwin needs to export/import data */
#ifdef U_CYGWIN
#define U_IMPORT __declspec(dllimport)
#else
#define U_IMPORT 
#endif

/*===========================================================================*/
/* Code alignment and C function inlining                                    */
/*===========================================================================*/

#ifndef U_INLINE
#define U_INLINE @U_INLINE@
#endif

#define U_ALIGN_CODE(n) 

/*===========================================================================*/
/* Programs used by ICU code                                                 */
/*===========================================================================*/

#define U_MAKE  "@U_MAKE@"
