2013-07-12 22:30:21 -04:00
|
|
|
/*
|
|
|
|
* Name: wx/compiler.h
|
|
|
|
* Purpose: Compiler-specific macro definitions.
|
|
|
|
* Author: Vadim Zeitlin
|
|
|
|
* Created: 2013-07-13 (extracted from wx/platform.h)
|
|
|
|
* Copyright: (c) 1997-2013 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
|
|
* Licence: wxWindows licence
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
|
|
|
|
|
|
|
|
#ifndef _WX_COMPILER_H_
|
|
|
|
#define _WX_COMPILER_H_
|
|
|
|
|
|
|
|
/*
|
|
|
|
Compiler detection and related helpers.
|
|
|
|
*/
|
|
|
|
|
2013-10-14 11:08:06 -04:00
|
|
|
/*
|
|
|
|
Notice that Intel compiler can be used as Microsoft Visual C++ add-on and
|
|
|
|
so we should define both __INTELC__ and __VISUALC__ for it.
|
|
|
|
*/
|
2013-07-12 22:30:21 -04:00
|
|
|
#ifdef __INTEL_COMPILER
|
|
|
|
# define __INTELC__
|
2013-10-14 11:08:06 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(_MSC_VER)
|
2013-07-12 22:30:21 -04:00
|
|
|
/*
|
|
|
|
define another standard symbol for Microsoft Visual C++: the standard
|
|
|
|
one (_MSC_VER) is also defined by some other compilers.
|
|
|
|
*/
|
|
|
|
# define __VISUALC__ _MSC_VER
|
|
|
|
|
|
|
|
/*
|
|
|
|
define special symbols for different VC version instead of writing tests
|
|
|
|
for magic numbers such as 1200, 1300 &c repeatedly
|
|
|
|
*/
|
2014-05-15 18:32:17 -04:00
|
|
|
#if __VISUALC__ < 1300
|
|
|
|
# error "This Visual C++ version is not supported any longer (at least MSVC 2003 required)."
|
2013-07-12 22:30:21 -04:00
|
|
|
#elif __VISUALC__ < 1400
|
|
|
|
# define __VISUALC7__
|
|
|
|
#elif __VISUALC__ < 1500
|
|
|
|
# define __VISUALC8__
|
|
|
|
#elif __VISUALC__ < 1600
|
|
|
|
# define __VISUALC9__
|
|
|
|
#elif __VISUALC__ < 1700
|
|
|
|
# define __VISUALC10__
|
|
|
|
#elif __VISUALC__ < 1800
|
|
|
|
# define __VISUALC11__
|
|
|
|
#elif __VISUALC__ < 1900
|
|
|
|
# define __VISUALC12__
|
|
|
|
#else
|
|
|
|
# pragma message("Please update wx/compiler.h to recognize this VC++ version")
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
|
|
|
|
# define __BORLANDC__
|
|
|
|
#elif defined(__SUNPRO_CC)
|
|
|
|
# ifndef __SUNCC__
|
|
|
|
# define __SUNCC__ __SUNPRO_CC
|
|
|
|
# endif /* Sun CC */
|
|
|
|
#endif /* compiler */
|
|
|
|
|
|
|
|
/*
|
|
|
|
Macros for checking compiler version.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
This macro can be used to test the gcc version and can be used like this:
|
|
|
|
|
|
|
|
# if wxCHECK_GCC_VERSION(3, 1)
|
|
|
|
... we have gcc 3.1 or later ...
|
|
|
|
# else
|
|
|
|
... no gcc at all or gcc < 3.1 ...
|
|
|
|
# endif
|
|
|
|
*/
|
|
|
|
#if defined(__GNUC__) && defined(__GNUC_MINOR__)
|
|
|
|
#define wxCHECK_GCC_VERSION( major, minor ) \
|
|
|
|
( ( __GNUC__ > (major) ) \
|
|
|
|
|| ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) )
|
|
|
|
#else
|
|
|
|
#define wxCHECK_GCC_VERSION( major, minor ) 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
This macro can be used to test the Visual C++ version.
|
|
|
|
*/
|
|
|
|
#ifndef __VISUALC__
|
|
|
|
# define wxVISUALC_VERSION(major) 0
|
|
|
|
# define wxCHECK_VISUALC_VERSION(major) 0
|
|
|
|
#else
|
|
|
|
# define wxVISUALC_VERSION(major) ( (6 + major) * 100 )
|
|
|
|
# define wxCHECK_VISUALC_VERSION(major) ( __VISUALC__ >= wxVISUALC_VERSION(major) )
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
This is similar to wxCHECK_GCC_VERSION but for Sun CC compiler.
|
|
|
|
*/
|
|
|
|
#ifdef __SUNCC__
|
|
|
|
/*
|
|
|
|
__SUNCC__ is 0xVRP where V is major version, R release and P patch level
|
|
|
|
*/
|
|
|
|
#define wxCHECK_SUNCC_VERSION(maj, min) (__SUNCC__ >= (((maj)<<8) | ((min)<<4)))
|
|
|
|
#else
|
|
|
|
#define wxCHECK_SUNCC_VERSION(maj, min) (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
2013-11-27 11:12:44 -05:00
|
|
|
This macro can be used to check that the version of mingw32 CRT is at least
|
|
|
|
maj.min
|
2013-07-12 22:30:21 -04:00
|
|
|
*/
|
2013-07-13 19:23:14 -04:00
|
|
|
|
2014-01-05 08:56:04 -05:00
|
|
|
/*
|
|
|
|
Define Mingw identification symbols, wxCHECK_MINGW32_VERSION() is defined in
|
|
|
|
wx/msw/gccpriv.h which is included later, see comments there.
|
|
|
|
*/
|
2013-11-27 11:12:44 -05:00
|
|
|
#ifdef __MINGW32__
|
2013-09-30 19:49:02 -04:00
|
|
|
/*
|
|
|
|
MinGW-w64 project provides compilers for both Win32 and Win64 but only
|
|
|
|
defines the same __MINGW32__ symbol for the former as MinGW32 toolchain
|
|
|
|
which is quite different (notably doesn't provide many SDK headers that
|
|
|
|
MinGW-w64 does include). So we define a separate symbol which, unlike the
|
|
|
|
predefined __MINGW64__, can be used to detect this toolchain in both 32 and
|
|
|
|
64 bit builds.
|
|
|
|
|
|
|
|
And define __MINGW32_TOOLCHAIN__ for consistency and also because it's
|
|
|
|
convenient as we often want to have some workarounds only for the (old)
|
|
|
|
MinGW32 but not (newer) MinGW-w64, which still predefines __MINGW32__.
|
|
|
|
*/
|
|
|
|
# ifdef __MINGW64_VERSION_MAJOR
|
|
|
|
# ifndef __MINGW64_TOOLCHAIN__
|
|
|
|
# define __MINGW64_TOOLCHAIN__
|
|
|
|
# endif
|
|
|
|
# else
|
|
|
|
# ifndef __MINGW32_TOOLCHAIN__
|
|
|
|
# define __MINGW32_TOOLCHAIN__
|
|
|
|
# endif
|
|
|
|
# endif
|
2013-07-12 22:30:21 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif // _WX_COMPILER_H_
|