/* ACC -- Automatic Compiler Configuration Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer All Rights Reserved. This software is a copyrighted work licensed under the terms of the GNU General Public License. Please consult the file "ACC_LICENSE" for details. Markus F.X.J. Oberhumer http://www.oberhumer.com/ */ /*********************************************************************** // preprocessor ************************************************************************/ /* workaround for preprocessor bugs in some compilers */ #if 0 #define ACC_0xffffL 0xfffful #define ACC_0xffffffffL 0xfffffffful #else #define ACC_0xffffL 65535ul #define ACC_0xffffffffL 4294967295ul #endif /* some things we cannot work around */ #if (ACC_0xffffL == ACC_0xffffffffL) # error "your preprocessor is broken 1" #endif #if (16ul * 16384ul != 262144ul) # error "your preprocessor is broken 2" #endif #if 0 #if (32767 >= 4294967295ul) # error "your preprocessor is broken 3" #endif #if (65535u >= 4294967295ul) # error "your preprocessor is broken 4" #endif #endif /*********************************************************************** // try to detect specific compilers ************************************************************************/ #if (UINT_MAX == ACC_0xffffL) #if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) # if !defined(MSDOS) # define MSDOS 1 # endif # if !defined(_MSDOS) # define _MSDOS 1 # endif #elif defined(__VERSION) && defined(MB_LEN_MAX) # if (__VERSION == 520) && (MB_LEN_MAX == 1) # if !defined(__AZTEC_C__) # define __AZTEC_C__ __VERSION # endif # if !defined(__DOS__) # define __DOS__ 1 # endif # endif #endif #endif /*********************************************************************** // fix incorrect and missing stuff ************************************************************************/ /* Microsoft C does not correctly define ptrdiff_t for * the 16-bit huge memory model. */ #if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == ACC_0xffffL) # define ptrdiff_t long # define _PTRDIFF_T_DEFINED #endif /* Fix old compiler versions. */ #if (UINT_MAX == ACC_0xffffL) # undef __ACC_RENAME_A # undef __ACC_RENAME_B # if defined(__AZTEC_C__) && defined(__DOS__) # define __ACC_RENAME_A 1 # elif defined(_MSC_VER) && defined(MSDOS) # if (_MSC_VER < 600) # define __ACC_RENAME_A 1 # elif (_MSC_VER < 700) # define __ACC_RENAME_B 1 # endif # elif defined(__TSC__) && defined(__OS2__) # define __ACC_RENAME_A 1 # elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) # define __ACC_RENAME_A 1 # elif defined(__PACIFIC__) && defined(DOS) # if !defined(__far) # define __far far # endif # if !defined(__near) # define __near near # endif # endif # if defined(__ACC_RENAME_A) # if !defined(__cdecl) # define __cdecl cdecl # endif # if !defined(__far) # define __far far # endif # if !defined(__huge) # define __huge huge # endif # if !defined(__near) # define __near near # endif # if !defined(__pascal) # define __pascal pascal # endif # if !defined(__huge) # define __huge huge # endif # elif defined(__ACC_RENAME_B) # if !defined(__cdecl) # define __cdecl _cdecl # endif # if !defined(__far) # define __far _far # endif # if !defined(__huge) # define __huge _huge # endif # if !defined(__near) # define __near _near # endif # if !defined(__pascal) # define __pascal _pascal # endif # elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) # if !defined(__cdecl) # define __cdecl cdecl # endif # if !defined(__pascal) # define __pascal pascal # endif # endif # undef __ACC_RENAME_A # undef __ACC_RENAME_B #endif #if (UINT_MAX == ACC_0xffffL) #if defined(__AZTEC_C__) && defined(__DOS__) # define ACC_BROKEN_CDECL_ALT_SYNTAX 1 #elif defined(_MSC_VER) && defined(MSDOS) # if (_MSC_VER < 600) # define ACC_BROKEN_INTEGRAL_CONSTANTS 1 # endif # if (_MSC_VER < 700) # define ACC_BROKEN_INTEGRAL_PROMOTION 1 # define ACC_BROKEN_SIZEOF 1 # endif #elif defined(__PACIFIC__) && defined(DOS) # define ACC_BROKEN_INTEGRAL_CONSTANTS 1 #elif defined(__TURBOC__) && defined(__MSDOS__) # if (__TURBOC__ < 0x0150) # define ACC_BROKEN_CDECL_ALT_SYNTAX 1 # define ACC_BROKEN_INTEGRAL_CONSTANTS 1 # define ACC_BROKEN_INTEGRAL_PROMOTION 1 # endif # if (__TURBOC__ < 0x0200) # define ACC_BROKEN_SIZEOF 1 # endif # if (__TURBOC__ < 0x0400) && defined(__cplusplus) # define ACC_BROKEN_CDECL_ALT_SYNTAX 1 # endif #elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) # define ACC_BROKEN_CDECL_ALT_SYNTAX 1 # define ACC_BROKEN_SIZEOF 1 #endif #endif #if defined(__WATCOMC__) && (__WATCOMC__ < 900) # define ACC_BROKEN_INTEGRAL_CONSTANTS 1 #endif /*********************************************************************** // ANSI C preprocessor macros (cpp) ************************************************************************/ #define ACC_CPP_STRINGIZE(x) #x #define ACC_CPP_MACRO_EXPAND(x) ACC_CPP_STRINGIZE(x) /* concatenate */ #define ACC_CPP_CONCAT2(a,b) a ## b #define ACC_CPP_CONCAT3(a,b,c) a ## b ## c #define ACC_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d #define ACC_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e /* expand and concatenate (by using one level of indirection) */ #define ACC_CPP_ECONCAT2(a,b) ACC_CPP_CONCAT2(a,b) #define ACC_CPP_ECONCAT3(a,b,c) ACC_CPP_CONCAT3(a,b,c) #define ACC_CPP_ECONCAT4(a,b,c,d) ACC_CPP_CONCAT4(a,b,c,d) #define ACC_CPP_ECONCAT5(a,b,c,d,e) ACC_CPP_CONCAT5(a,b,c,d,e) /*********************************************************************** // stdc macros ************************************************************************/ #if defined(__cplusplus) # undef __STDC_CONSTANT_MACROS # undef __STDC_LIMIT_MACROS # define __STDC_CONSTANT_MACROS 1 # define __STDC_LIMIT_MACROS 1 #endif /*********************************************************************** // misc macros ************************************************************************/ #if defined(__cplusplus) # define ACC_EXTERN_C extern "C" #else # define ACC_EXTERN_C extern #endif /* vi:ts=4:et */