238 lines
6.3 KiB
C
238 lines
6.3 KiB
C
/* 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
|
|
<markus@oberhumer.com>
|
|
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
|
|
*/
|