(root)/
libxml2-2.12.3/
triodef.h
       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   * MERCHANTABILITY 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(__OS400__)
      52  # define TRIO_PLATFORM_OS400
      53  #elif defined(unix) || defined(__unix) || defined(__unix__)
      54  # define TRIO_PLATFORM_UNIX
      55  #elif defined(TRIO_COMPILER_XLC) || defined(_AIX)
      56  # define TRIO_PLATFORM_UNIX
      57  #elif defined(TRIO_COMPILER_DECC) || defined(__osf___)
      58  # define TRIO_PLATFORM_UNIX
      59  #elif defined(__NetBSD__)
      60  # define TRIO_PLATFORM_UNIX
      61  #elif defined(__Lynx__)
      62  # define TRIO_PLATFORM_UNIX
      63  #elif defined(__QNX__)
      64  # define TRIO_PLATFORM_UNIX
      65  # define TRIO_PLATFORM_QNX
      66  #elif defined(__CYGWIN__)
      67  # define TRIO_PLATFORM_UNIX
      68  #elif defined(AMIGA) && defined(TRIO_COMPILER_GCC)
      69  # define TRIO_PLATFORM_UNIX
      70  #elif defined(TRIO_COMPILER_MSVC) || defined(WIN32) || defined(_WIN32)
      71  # define TRIO_PLATFORM_WIN32
      72  #elif defined(mpeix) || defined(__mpexl)
      73  # define TRIO_PLATFORM_MPEIX
      74  #endif
      75  
      76  #if defined(_AIX)
      77  # define TRIO_PLATFORM_AIX
      78  #elif defined(__hpux)
      79  # define TRIO_PLATFORM_HPUX
      80  #elif defined(sun) || defined(__sun__)
      81  # if defined(__SVR4) || defined(__svr4__)
      82  #  define TRIO_PLATFORM_SOLARIS
      83  # else
      84  #  define TRIO_PLATFORM_SUNOS
      85  # endif
      86  #endif
      87  
      88  #if defined(__STDC__) || defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
      89  # define TRIO_COMPILER_SUPPORTS_C89
      90  # if defined(__STDC_VERSION__)
      91  #  define TRIO_COMPILER_SUPPORTS_C90
      92  #  if (__STDC_VERSION__ >= 199409L)
      93  #   define TRIO_COMPILER_SUPPORTS_C94
      94  #  endif
      95  #  if (__STDC_VERSION__ >= 199901L)
      96  #   define TRIO_COMPILER_SUPPORTS_C99
      97  #  endif
      98  # elif defined(TRIO_COMPILER_SUNPRO)
      99  #  if (__SUNPRO_C >= 0x420)
     100  #   define TRIO_COMPILER_SUPPORTS_C94
     101  #  endif
     102  # endif
     103  #elif defined(TRIO_COMPILER_XLC) && defined(__EXTENDED__)
     104  # define TRIO_COMPILER_SUPPORTS_C89
     105  # define TRIO_COMPILER_SUPPORTS_C90
     106  # define TRIO_COMPILER_SUPPORTS_C94
     107  #endif
     108  
     109  #if defined(_XOPEN_SOURCE)
     110  # if defined(_XOPEN_SOURCE_EXTENDED)
     111  #  define TRIO_COMPILER_SUPPORTS_UNIX95
     112  # endif
     113  # if (_XOPEN_VERSION >= 500)
     114  #  define TRIO_COMPILER_SUPPORTS_UNIX98
     115  # endif
     116  # if (_XOPEN_VERSION >= 600)
     117  #  define TRIO_COMPILER_SUPPORTS_UNIX01
     118  # endif
     119  #endif
     120  
     121  /*************************************************************************
     122   * Generic defines
     123   */
     124  
     125  #if !defined(TRIO_PUBLIC)
     126  # define TRIO_PUBLIC
     127  #endif
     128  #if !defined(TRIO_PRIVATE)
     129  # define TRIO_PRIVATE static
     130  #endif
     131  
     132  #if !(defined(TRIO_COMPILER_SUPPORTS_C89) || defined(__cplusplus))
     133  # define TRIO_COMPILER_ANCIENT
     134  #endif
     135  
     136  #if defined(TRIO_COMPILER_ANCIENT)
     137  # define TRIO_CONST
     138  # define TRIO_VOLATILE
     139  # define TRIO_SIGNED
     140  typedef double trio_long_double_t;
     141  typedef char * trio_pointer_t;
     142  # define TRIO_SUFFIX_LONG(x) x
     143  # define TRIO_PROTO(x) ()
     144  # define TRIO_NOARGS
     145  # define TRIO_ARGS1(list,a1) list a1;
     146  # define TRIO_ARGS2(list,a1,a2) list a1; a2;
     147  # define TRIO_ARGS3(list,a1,a2,a3) list a1; a2; a3;
     148  # define TRIO_ARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4;
     149  # define TRIO_ARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5;
     150  # define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) list a1; a2; a3; a4; a5; a6;
     151  # define TRIO_VARGS2(list,a1,a2) list a1; a2
     152  # define TRIO_VARGS3(list,a1,a2,a3) list a1; a2; a3
     153  # define TRIO_VARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4
     154  # define TRIO_VARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5
     155  # define TRIO_VA_DECL va_dcl
     156  # define TRIO_VA_START(x,y) va_start(x)
     157  # define TRIO_VA_END(x) va_end(x)
     158  #else /* ANSI C */
     159  # define TRIO_CONST const
     160  # define TRIO_VOLATILE volatile
     161  # define TRIO_SIGNED signed
     162  typedef long double trio_long_double_t;
     163  typedef void * trio_pointer_t;
     164  # define TRIO_SUFFIX_LONG(x) x ## L
     165  # define TRIO_PROTO(x) x
     166  # define TRIO_NOARGS void
     167  # define TRIO_ARGS1(list,a1) (a1)
     168  # define TRIO_ARGS2(list,a1,a2) (a1,a2)
     169  # define TRIO_ARGS3(list,a1,a2,a3) (a1,a2,a3)
     170  # define TRIO_ARGS4(list,a1,a2,a3,a4) (a1,a2,a3,a4)
     171  # define TRIO_ARGS5(list,a1,a2,a3,a4,a5) (a1,a2,a3,a4,a5)
     172  # define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) (a1,a2,a3,a4,a5,a6)
     173  # define TRIO_VARGS2 TRIO_ARGS2
     174  # define TRIO_VARGS3 TRIO_ARGS3
     175  # define TRIO_VARGS4 TRIO_ARGS4
     176  # define TRIO_VARGS5 TRIO_ARGS5
     177  # define TRIO_VA_DECL ...
     178  # define TRIO_VA_START(x,y) va_start(x,y)
     179  # define TRIO_VA_END(x) va_end(x)
     180  #endif
     181  
     182  #if defined(TRIO_COMPILER_SUPPORTS_C99) || defined(__cplusplus)
     183  # define TRIO_INLINE inline
     184  #elif defined(TRIO_COMPILER_GCC)
     185  # define TRIO_INLINE __inline__
     186  #elif defined(TRIO_COMPILER_MSVC)
     187  # define TRIO_INLINE _inline
     188  #elif defined(TRIO_COMPILER_BCB)
     189  # define TRIO_INLINE __inline
     190  #else
     191  # define TRIO_INLINE
     192  #endif
     193  
     194  /*************************************************************************
     195   * Workarounds
     196   */
     197  
     198  #if defined(TRIO_PLATFORM_VMS)
     199  /*
     200   * Computations done with constants at compile time can trigger these
     201   * even when compiling with IEEE enabled.
     202   */
     203  # pragma message disable (UNDERFLOW, FLOATOVERFL)
     204  
     205  # if (__CRTL_VER < 80000000)
     206  /*
     207   * Although the compiler supports C99 language constructs, the C
     208   * run-time library does not contain all C99 functions.
     209   *
     210   * This was the case for 70300022. Update the 80000000 value when
     211   * it has been accurately determined what version of the library
     212   * supports C99.
     213   */
     214  #  if defined(TRIO_COMPILER_SUPPORTS_C99)
     215  #   undef TRIO_COMPILER_SUPPORTS_C99
     216  #  endif
     217  # endif
     218  #endif
     219  
     220  /*
     221   * Not all preprocessors supports the LL token.
     222   */
     223  #if defined(TRIO_COMPILER_BCB)
     224  #else
     225  # define TRIO_COMPILER_SUPPORTS_LL
     226  #endif
     227  
     228  #endif /* TRIO_TRIODEF_H */