]> git.saurik.com Git - wxWidgets.git/blame - include/wx/compiler.h
Add wxDataViewRendererBase::GetEffectiveAlignment() and use it.
[wxWidgets.git] / include / wx / compiler.h
CommitLineData
20125017
VZ
1/*
2 * Name: wx/compiler.h
3 * Purpose: Compiler-specific macro definitions.
4 * Author: Vadim Zeitlin
5 * Created: 2013-07-13 (extracted from wx/platform.h)
6 * Copyright: (c) 1997-2013 Vadim Zeitlin <vadim@wxwidgets.org>
7 * Licence: wxWindows licence
8 */
9
10/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
11
12#ifndef _WX_COMPILER_H_
13#define _WX_COMPILER_H_
14
15/*
16 Compiler detection and related helpers.
17 */
18
401aad6c
VZ
19/*
20 Notice that Intel compiler can be used as Microsoft Visual C++ add-on and
21 so we should define both __INTELC__ and __VISUALC__ for it.
22 */
20125017
VZ
23#ifdef __INTEL_COMPILER
24# define __INTELC__
401aad6c
VZ
25#endif
26
27#if defined(_MSC_VER)
20125017
VZ
28 /*
29 define another standard symbol for Microsoft Visual C++: the standard
30 one (_MSC_VER) is also defined by some other compilers.
31 */
32# define __VISUALC__ _MSC_VER
33
34 /*
35 define special symbols for different VC version instead of writing tests
36 for magic numbers such as 1200, 1300 &c repeatedly
37 */
38#if __VISUALC__ < 1100
39# error "This Visual C++ version is too old and not supported any longer."
40#elif __VISUALC__ < 1200
41# define __VISUALC5__
42#elif __VISUALC__ < 1300
43# define __VISUALC6__
44#elif __VISUALC__ < 1400
45# define __VISUALC7__
46#elif __VISUALC__ < 1500
47# define __VISUALC8__
48#elif __VISUALC__ < 1600
49# define __VISUALC9__
50#elif __VISUALC__ < 1700
51# define __VISUALC10__
52#elif __VISUALC__ < 1800
53# define __VISUALC11__
54#elif __VISUALC__ < 1900
55# define __VISUALC12__
56#else
57# pragma message("Please update wx/compiler.h to recognize this VC++ version")
58#endif
59
60#elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
61# define __BORLANDC__
62#elif defined(__WATCOMC__)
63#elif defined(__SC__)
64# define __SYMANTECC__
65#elif defined(__SUNPRO_CC)
66# ifndef __SUNCC__
67# define __SUNCC__ __SUNPRO_CC
68# endif /* Sun CC */
69#elif defined(__SC__)
70# ifdef __DMC__
71# define __DIGITALMARS__
72# else
73# define __SYMANTEC__
74# endif
75#endif /* compiler */
76
77/*
78 Macros for checking compiler version.
79*/
80
81/*
82 This macro can be used to test the gcc version and can be used like this:
83
84# if wxCHECK_GCC_VERSION(3, 1)
85 ... we have gcc 3.1 or later ...
86# else
87 ... no gcc at all or gcc < 3.1 ...
88# endif
89*/
90#if defined(__GNUC__) && defined(__GNUC_MINOR__)
91 #define wxCHECK_GCC_VERSION( major, minor ) \
92 ( ( __GNUC__ > (major) ) \
93 || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) )
94#else
95 #define wxCHECK_GCC_VERSION( major, minor ) 0
96#endif
97
98/*
99 This macro can be used to test the Visual C++ version.
100*/
101#ifndef __VISUALC__
102# define wxVISUALC_VERSION(major) 0
103# define wxCHECK_VISUALC_VERSION(major) 0
104#else
105# define wxVISUALC_VERSION(major) ( (6 + major) * 100 )
106# define wxCHECK_VISUALC_VERSION(major) ( __VISUALC__ >= wxVISUALC_VERSION(major) )
107#endif
108
109/**
110 This is similar to wxCHECK_GCC_VERSION but for Sun CC compiler.
111 */
112#ifdef __SUNCC__
113 /*
114 __SUNCC__ is 0xVRP where V is major version, R release and P patch level
115 */
116 #define wxCHECK_SUNCC_VERSION(maj, min) (__SUNCC__ >= (((maj)<<8) | ((min)<<4)))
117#else
118 #define wxCHECK_SUNCC_VERSION(maj, min) (0)
119#endif
120
121#ifndef __WATCOMC__
122# define wxWATCOM_VERSION(major,minor) 0
123# define wxCHECK_WATCOM_VERSION(major,minor) 0
124# define wxONLY_WATCOM_EARLIER_THAN(major,minor) 0
125# define WX_WATCOM_ONLY_CODE( x )
126#else
127# if __WATCOMC__ < 1200
128# error "Only Open Watcom is supported in this release"
129# endif
130
131# define wxWATCOM_VERSION(major,minor) ( major * 100 + minor * 10 + 1100 )
132# define wxCHECK_WATCOM_VERSION(major,minor) ( __WATCOMC__ >= wxWATCOM_VERSION(major,minor) )
133# define wxONLY_WATCOM_EARLIER_THAN(major,minor) ( __WATCOMC__ < wxWATCOM_VERSION(major,minor) )
134# define WX_WATCOM_ONLY_CODE( x ) x
135#endif
136
137/*
138 This macro can be used to check that the version of mingw32 compiler is
139 at least maj.min
140 */
e87d78bb
VZ
141
142/* Check for Mingw runtime version: */
143#if defined(__MINGW32_MAJOR_VERSION) && defined(__MINGW32_MINOR_VERSION)
144 #define wxCHECK_MINGW32_VERSION( major, minor ) \
145 ( ( ( __MINGW32_MAJOR_VERSION > (major) ) \
146 || ( __MINGW32_MAJOR_VERSION == (major) && __MINGW32_MINOR_VERSION >= (minor) ) ) )
20125017 147#else
e87d78bb 148 #define wxCHECK_MINGW32_VERSION( major, minor ) (0)
20125017
VZ
149#endif
150
20125017 151#endif // _WX_COMPILER_H_