Annotation of embedaddon/libxml2/triodef.h, revision 1.1
1.1 ! misho 1: /*************************************************************************
! 2: *
! 3: * $Id$
! 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>