/*
*******************************************************************************
*
*   Copyright (C) 1997-2001, 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

/* 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 disable renaming or not. This overrides the
   setting in umachine.h which is for all platforms. */
#ifndef U_OVERRIDE_CXX_ALLOCATION
#define U_OVERRIDE_CXX_ALLOCATION @U_OVERRIDE_CXX_ALLOCATION@
#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@"

