File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / triodef.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:58 2012 UTC (12 years, 3 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

    1: /*************************************************************************
    2:  *
    3:  * $Id: triodef.h,v 1.1.1.1 2012/02/21 23:37:58 misho Exp $
    4:  *
    5:  * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
    6:  *
    7:  * Permission to use, copy, modify, and distribute this software for any
    8:  * purpose with or without fee is hereby granted, provided that the above
    9:  * copyright notice and this permission notice appear in all copies.
   10:  *
   11:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
   12:  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
   13:  * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
   14:  * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
   15:  *
   16:  ************************************************************************/
   17: 
   18: #ifndef TRIO_TRIODEF_H
   19: #define TRIO_TRIODEF_H
   20: 
   21: /*************************************************************************
   22:  * Platform and compiler support detection
   23:  */
   24: #if defined(__GNUC__)
   25: # define TRIO_COMPILER_GCC
   26: #elif defined(__SUNPRO_C)
   27: # define TRIO_COMPILER_SUNPRO
   28: #elif defined(__SUNPRO_CC)
   29: # define TRIO_COMPILER_SUNPRO
   30: # define __SUNPRO_C __SUNPRO_CC
   31: #elif defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)
   32: # define TRIO_COMPILER_XLC
   33: #elif defined(_AIX) && !defined(__GNUC__)
   34: # define TRIO_COMPILER_XLC /* Workaround for old xlc */
   35: #elif defined(__DECC) || defined(__DECCXX)
   36: # define TRIO_COMPILER_DECC
   37: #elif defined(__osf__) && defined(__LANGUAGE_C__)
   38: # define TRIO_COMPILER_DECC /* Workaround for old DEC C compilers */
   39: #elif defined(_MSC_VER)
   40: # define TRIO_COMPILER_MSVC
   41: #elif defined(__BORLANDC__)
   42: # define TRIO_COMPILER_BCB
   43: #endif
   44: 
   45: #if defined(VMS) || defined(__VMS)
   46: /*
   47:  * VMS is placed first to avoid identifying the platform as Unix
   48:  * based on the DECC compiler later on.
   49:  */
   50: # define TRIO_PLATFORM_VMS
   51: #elif defined(unix) || defined(__unix) || defined(__unix__)
   52: # define TRIO_PLATFORM_UNIX
   53: #elif defined(TRIO_COMPILER_XLC) || defined(_AIX)
   54: # define TRIO_PLATFORM_UNIX
   55: #elif defined(TRIO_COMPILER_DECC) || defined(__osf___)
   56: # define TRIO_PLATFORM_UNIX
   57: #elif defined(__NetBSD__)
   58: # define TRIO_PLATFORM_UNIX
   59: #elif defined(__Lynx__)
   60: # define TRIO_PLATFORM_UNIX
   61: #elif defined(__QNX__)
   62: # define TRIO_PLATFORM_UNIX
   63: # define TRIO_PLATFORM_QNX
   64: #elif defined(__CYGWIN__)
   65: # define TRIO_PLATFORM_UNIX
   66: #elif defined(AMIGA) && defined(TRIO_COMPILER_GCC)
   67: # define TRIO_PLATFORM_UNIX
   68: #elif defined(TRIO_COMPILER_MSVC) || defined(WIN32) || defined(_WIN32)
   69: # define TRIO_PLATFORM_WIN32
   70: #elif defined(mpeix) || defined(__mpexl)
   71: # define TRIO_PLATFORM_MPEIX
   72: #endif
   73: 
   74: #if defined(_AIX)
   75: # define TRIO_PLATFORM_AIX
   76: #elif defined(__hpux)
   77: # define TRIO_PLATFORM_HPUX
   78: #elif defined(sun) || defined(__sun__)
   79: # if defined(__SVR4) || defined(__svr4__)
   80: #  define TRIO_PLATFORM_SOLARIS
   81: # else
   82: #  define TRIO_PLATFORM_SUNOS
   83: # endif
   84: #endif
   85: 
   86: #if defined(__STDC__) || defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
   87: # define TRIO_COMPILER_SUPPORTS_C89
   88: # if defined(__STDC_VERSION__)
   89: #  define TRIO_COMPILER_SUPPORTS_C90
   90: #  if (__STDC_VERSION__ >= 199409L)
   91: #   define TRIO_COMPILER_SUPPORTS_C94
   92: #  endif
   93: #  if (__STDC_VERSION__ >= 199901L)
   94: #   define TRIO_COMPILER_SUPPORTS_C99
   95: #  endif
   96: # elif defined(TRIO_COMPILER_SUNPRO)
   97: #  if (__SUNPRO_C >= 0x420)
   98: #   define TRIO_COMPILER_SUPPORTS_C94
   99: #  endif
  100: # endif
  101: #endif
  102: 
  103: #if defined(_XOPEN_SOURCE)
  104: # if defined(_XOPEN_SOURCE_EXTENDED)
  105: #  define TRIO_COMPILER_SUPPORTS_UNIX95
  106: # endif
  107: # if (_XOPEN_VERSION >= 500)
  108: #  define TRIO_COMPILER_SUPPORTS_UNIX98
  109: # endif
  110: # if (_XOPEN_VERSION >= 600)
  111: #  define TRIO_COMPILER_SUPPORTS_UNIX01
  112: # endif
  113: #endif
  114: 
  115: /*************************************************************************
  116:  * Generic defines
  117:  */
  118: 
  119: #if !defined(TRIO_PUBLIC)
  120: # define TRIO_PUBLIC
  121: #endif
  122: #if !defined(TRIO_PRIVATE)
  123: # define TRIO_PRIVATE static
  124: #endif
  125: 
  126: #if !(defined(TRIO_COMPILER_SUPPORTS_C89) || defined(__cplusplus))
  127: # define TRIO_COMPILER_ANCIENT
  128: #endif
  129: 
  130: #if defined(TRIO_COMPILER_ANCIENT)
  131: # define TRIO_CONST
  132: # define TRIO_VOLATILE
  133: # define TRIO_SIGNED
  134: typedef double trio_long_double_t;
  135: typedef char * trio_pointer_t;
  136: # define TRIO_SUFFIX_LONG(x) x
  137: # define TRIO_PROTO(x) ()
  138: # define TRIO_NOARGS
  139: # define TRIO_ARGS1(list,a1) list a1;
  140: # define TRIO_ARGS2(list,a1,a2) list a1; a2;
  141: # define TRIO_ARGS3(list,a1,a2,a3) list a1; a2; a3;
  142: # define TRIO_ARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4;
  143: # define TRIO_ARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5;
  144: # define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) list a1; a2; a3; a4; a5; a6;
  145: # define TRIO_VARGS2(list,a1,a2) list a1; a2
  146: # define TRIO_VARGS3(list,a1,a2,a3) list a1; a2; a3
  147: # define TRIO_VARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4
  148: # define TRIO_VARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5
  149: # define TRIO_VA_DECL va_dcl
  150: # define TRIO_VA_START(x,y) va_start(x)
  151: # define TRIO_VA_END(x) va_end(x)
  152: #else /* ANSI C */
  153: # define TRIO_CONST const
  154: # define TRIO_VOLATILE volatile
  155: # define TRIO_SIGNED signed
  156: typedef long double trio_long_double_t;
  157: typedef void * trio_pointer_t;
  158: # define TRIO_SUFFIX_LONG(x) x ## L
  159: # define TRIO_PROTO(x) x
  160: # define TRIO_NOARGS void
  161: # define TRIO_ARGS1(list,a1) (a1)
  162: # define TRIO_ARGS2(list,a1,a2) (a1,a2)
  163: # define TRIO_ARGS3(list,a1,a2,a3) (a1,a2,a3)
  164: # define TRIO_ARGS4(list,a1,a2,a3,a4) (a1,a2,a3,a4)
  165: # define TRIO_ARGS5(list,a1,a2,a3,a4,a5) (a1,a2,a3,a4,a5)
  166: # define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) (a1,a2,a3,a4,a5,a6)
  167: # define TRIO_VARGS2 TRIO_ARGS2
  168: # define TRIO_VARGS3 TRIO_ARGS3
  169: # define TRIO_VARGS4 TRIO_ARGS4
  170: # define TRIO_VARGS5 TRIO_ARGS5
  171: # define TRIO_VA_DECL ...
  172: # define TRIO_VA_START(x,y) va_start(x,y)
  173: # define TRIO_VA_END(x) va_end(x)
  174: #endif
  175: 
  176: #if defined(TRIO_COMPILER_SUPPORTS_C99) || defined(__cplusplus)
  177: # define TRIO_INLINE inline
  178: #elif defined(TRIO_COMPILER_GCC)
  179: # define TRIO_INLINE __inline__
  180: #elif defined(TRIO_COMPILER_MSVC)
  181: # define TRIO_INLINE _inline
  182: #elif defined(TRIO_COMPILER_BCB)
  183: # define TRIO_INLINE __inline
  184: #else
  185: # define TRIO_INLINE
  186: #endif
  187: 
  188: /*************************************************************************
  189:  * Workarounds
  190:  */
  191: 
  192: #if defined(TRIO_PLATFORM_VMS)
  193: /*
  194:  * Computations done with constants at compile time can trigger these
  195:  * even when compiling with IEEE enabled.
  196:  */
  197: # pragma message disable (UNDERFLOW, FLOATOVERFL)
  198: 
  199: # if (__CRTL_VER < 80000000)
  200: /*
  201:  * Although the compiler supports C99 language constructs, the C
  202:  * run-time library does not contain all C99 functions.
  203:  *
  204:  * This was the case for 70300022. Update the 80000000 value when
  205:  * it has been accurately determined what version of the library
  206:  * supports C99.
  207:  */
  208: #  if defined(TRIO_COMPILER_SUPPORTS_C99)
  209: #   undef TRIO_COMPILER_SUPPORTS_C99
  210: #  endif
  211: # endif
  212: #endif
  213: 
  214: /*
  215:  * Not all preprocessors supports the LL token.
  216:  */
  217: #if defined(TRIO_COMPILER_BCB)
  218: #else
  219: # define TRIO_COMPILER_SUPPORTS_LL
  220: #endif
  221: 
  222: #endif /* TRIO_TRIODEF_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>