source: trunk/third/libxml2/triodef.h @ 20735

Revision 20735, 6.6 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20734, which included commits to RCS files with non-trunk default branches.
RevLine 
[17095]1/*************************************************************************
2 *
[20734]3 * $Id: triodef.h,v 1.1.1.3 2004-09-22 23:17:28 ghudson Exp $
[17095]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
[18209]37#elif defined(__osf__) && defined(__LANGUAGE_C__)
38# define TRIO_COMPILER_DECC /* Workaround for old DEC C compilers */
[17095]39#elif defined(_MSC_VER)
40# define TRIO_COMPILER_MSVC
[18209]41#elif defined(__BORLANDC__)
42# define TRIO_COMPILER_BCB
[17095]43#endif
44
[20734]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__)
[17095]52# define TRIO_PLATFORM_UNIX
53#elif defined(TRIO_COMPILER_XLC) || defined(_AIX)
54# define TRIO_PLATFORM_UNIX
[20734]55#elif defined(TRIO_COMPILER_DECC) || defined(__osf___)
[17095]56# define TRIO_PLATFORM_UNIX
57#elif defined(__NetBSD__)
58# define TRIO_PLATFORM_UNIX
59#elif defined(__QNX__)
60# define TRIO_PLATFORM_UNIX
61# define TRIO_PLATFORM_QNX
62#elif defined(__CYGWIN__)
63# define TRIO_PLATFORM_UNIX
64#elif defined(AMIGA) && defined(TRIO_COMPILER_GCC)
65# define TRIO_PLATFORM_UNIX
66#elif defined(TRIO_COMPILER_MSVC) || defined(WIN32) || defined(_WIN32)
67# define TRIO_PLATFORM_WIN32
68#elif defined(mpeix) || defined(__mpexl)
69# define TRIO_PLATFORM_MPEIX
70#endif
71
[20734]72#if defined(_AIX)
73# define TRIO_PLATFORM_AIX
74#elif defined(__hpux)
75# define TRIO_PLATFORM_HPUX
76#elif defined(sun) || defined(__sun__)
77# if defined(__SVR4) || defined(__svr4__)
78#  define TRIO_PLATFORM_SOLARIS
79# else
80#  define TRIO_PLATFORM_SUNOS
81# endif
82#endif
83
84#if defined(__STDC__) || defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
[18209]85# define TRIO_COMPILER_SUPPORTS_C89
[17095]86# if defined(__STDC_VERSION__)
[18209]87#  define TRIO_COMPILER_SUPPORTS_C90
[17095]88#  if (__STDC_VERSION__ >= 199409L)
89#   define TRIO_COMPILER_SUPPORTS_C94
90#  endif
91#  if (__STDC_VERSION__ >= 199901L)
92#   define TRIO_COMPILER_SUPPORTS_C99
93#  endif
94# elif defined(TRIO_COMPILER_SUNPRO)
95#  if (__SUNPRO_C >= 0x420)
96#   define TRIO_COMPILER_SUPPORTS_C94
97#  endif
98# endif
99#endif
100
101#if defined(_XOPEN_SOURCE)
102# if defined(_XOPEN_SOURCE_EXTENDED)
103#  define TRIO_COMPILER_SUPPORTS_UNIX95
104# endif
105# if (_XOPEN_VERSION >= 500)
106#  define TRIO_COMPILER_SUPPORTS_UNIX98
107# endif
[18209]108# if (_XOPEN_VERSION >= 600)
109#  define TRIO_COMPILER_SUPPORTS_UNIX01
110# endif
[17095]111#endif
112
113/*************************************************************************
114 * Generic defines
115 */
116
117#if !defined(TRIO_PUBLIC)
118# define TRIO_PUBLIC
119#endif
120#if !defined(TRIO_PRIVATE)
121# define TRIO_PRIVATE static
122#endif
123
[18209]124#if !(defined(TRIO_COMPILER_SUPPORTS_C89) || defined(__cplusplus))
125# define TRIO_COMPILER_ANCIENT
126#endif
127
128#if defined(TRIO_COMPILER_ANCIENT)
129# define TRIO_CONST
130# define TRIO_VOLATILE
131# define TRIO_SIGNED
132typedef double trio_long_double_t;
133typedef char * trio_pointer_t;
134# define TRIO_SUFFIX_LONG(x) x
135# define TRIO_PROTO(x) ()
136# define TRIO_NOARGS
137# define TRIO_ARGS1(list,a1) list a1;
138# define TRIO_ARGS2(list,a1,a2) list a1; a2;
139# define TRIO_ARGS3(list,a1,a2,a3) list a1; a2; a3;
140# define TRIO_ARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4;
141# define TRIO_ARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5;
142# define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) list a1; a2; a3; a4; a5; a6;
143# define TRIO_VARGS2(list,a1,a2) list a1; a2
144# define TRIO_VARGS3(list,a1,a2,a3) list a1; a2; a3
145# define TRIO_VARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4
146# define TRIO_VARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5
147# define TRIO_VA_DECL va_dcl
[20734]148# define TRIO_VA_START(x,y) va_start(x)
[18209]149# define TRIO_VA_END(x) va_end(x)
150#else /* ANSI C */
[17095]151# define TRIO_CONST const
152# define TRIO_VOLATILE volatile
[18209]153# define TRIO_SIGNED signed
154typedef long double trio_long_double_t;
155typedef void * trio_pointer_t;
156# define TRIO_SUFFIX_LONG(x) x ## L
[17095]157# define TRIO_PROTO(x) x
[18209]158# define TRIO_NOARGS void
159# define TRIO_ARGS1(list,a1) (a1)
160# define TRIO_ARGS2(list,a1,a2) (a1,a2)
161# define TRIO_ARGS3(list,a1,a2,a3) (a1,a2,a3)
162# define TRIO_ARGS4(list,a1,a2,a3,a4) (a1,a2,a3,a4)
163# define TRIO_ARGS5(list,a1,a2,a3,a4,a5) (a1,a2,a3,a4,a5)
164# define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) (a1,a2,a3,a4,a5,a6)
165# define TRIO_VARGS2 TRIO_ARGS2
166# define TRIO_VARGS3 TRIO_ARGS3
167# define TRIO_VARGS4 TRIO_ARGS4
168# define TRIO_VARGS5 TRIO_ARGS5
169# define TRIO_VA_DECL ...
[20734]170# define TRIO_VA_START(x,y) va_start(x,y)
[18209]171# define TRIO_VA_END(x) va_end(x)
[17095]172#endif
173
174#if defined(TRIO_COMPILER_SUPPORTS_C99) || defined(__cplusplus)
175# define TRIO_INLINE inline
176#elif defined(TRIO_COMPILER_GCC)
177# define TRIO_INLINE __inline__
[18209]178#elif defined(TRIO_COMPILER_MSVC)
179# define TRIO_INLINE _inline
180#elif defined(TRIO_COMPILER_BCB)
181# define TRIO_INLINE __inline
[17095]182#else
183# define TRIO_INLINE
184#endif
185
[20734]186/*************************************************************************
187 * Workarounds
188 */
189
190#if defined(TRIO_PLATFORM_VMS)
191/*
192 * Computations done with constants at compile time can trigger these
193 * even when compiling with IEEE enabled.
194 */
195# pragma message disable (UNDERFLOW, FLOATOVERFL)
196
197# if (__CRTL_VER < 80000000)
198/*
199 * Although the compiler supports C99 language constructs, the C
200 * run-time library does not contain all C99 functions.
201 *
202 * This was the case for 70300022. Update the 80000000 value when
203 * it has been accurately determined what version of the library
204 * supports C99.
205 */
206#  if defined(TRIO_COMPILER_SUPPORTS_C99)
207#   undef TRIO_COMPILER_SUPPORTS_C99
208#  endif
209# endif
210#endif
211
212/*
213 * Not all preprocessors supports the LL token.
214 */
215#if defined(TRIO_COMPILER_BCB)
216#else
217# define TRIO_COMPILER_SUPPORTS_LL
218#endif
219
[17095]220#endif /* TRIO_TRIODEF_H */
Note: See TracBrowser for help on using the repository browser.