]> git.saurik.com Git - wxWidgets.git/blob - include/wx/compiler.h
Add wxActivateEvent::GetActivationReason().
[wxWidgets.git] / include / wx / compiler.h
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
19 #ifdef __INTEL_COMPILER
20 # define __INTELC__
21 #elif defined(_MSC_VER)
22 /*
23 define another standard symbol for Microsoft Visual C++: the standard
24 one (_MSC_VER) is also defined by some other compilers.
25 */
26 # define __VISUALC__ _MSC_VER
27
28 /*
29 define special symbols for different VC version instead of writing tests
30 for magic numbers such as 1200, 1300 &c repeatedly
31 */
32 #if __VISUALC__ < 1100
33 # error "This Visual C++ version is too old and not supported any longer."
34 #elif __VISUALC__ < 1200
35 # define __VISUALC5__
36 #elif __VISUALC__ < 1300
37 # define __VISUALC6__
38 #elif __VISUALC__ < 1400
39 # define __VISUALC7__
40 #elif __VISUALC__ < 1500
41 # define __VISUALC8__
42 #elif __VISUALC__ < 1600
43 # define __VISUALC9__
44 #elif __VISUALC__ < 1700
45 # define __VISUALC10__
46 #elif __VISUALC__ < 1800
47 # define __VISUALC11__
48 #elif __VISUALC__ < 1900
49 # define __VISUALC12__
50 #else
51 # pragma message("Please update wx/compiler.h to recognize this VC++ version")
52 #endif
53
54 #elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
55 # define __BORLANDC__
56 #elif defined(__WATCOMC__)
57 #elif defined(__SC__)
58 # define __SYMANTECC__
59 #elif defined(__SUNPRO_CC)
60 # ifndef __SUNCC__
61 # define __SUNCC__ __SUNPRO_CC
62 # endif /* Sun CC */
63 #elif defined(__SC__)
64 # ifdef __DMC__
65 # define __DIGITALMARS__
66 # else
67 # define __SYMANTEC__
68 # endif
69 #endif /* compiler */
70
71 /*
72 Macros for checking compiler version.
73 */
74
75 /*
76 This macro can be used to test the gcc version and can be used like this:
77
78 # if wxCHECK_GCC_VERSION(3, 1)
79 ... we have gcc 3.1 or later ...
80 # else
81 ... no gcc at all or gcc < 3.1 ...
82 # endif
83 */
84 #if defined(__GNUC__) && defined(__GNUC_MINOR__)
85 #define wxCHECK_GCC_VERSION( major, minor ) \
86 ( ( __GNUC__ > (major) ) \
87 || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) )
88 #else
89 #define wxCHECK_GCC_VERSION( major, minor ) 0
90 #endif
91
92 /*
93 This macro can be used to test the Visual C++ version.
94 */
95 #ifndef __VISUALC__
96 # define wxVISUALC_VERSION(major) 0
97 # define wxCHECK_VISUALC_VERSION(major) 0
98 #else
99 # define wxVISUALC_VERSION(major) ( (6 + major) * 100 )
100 # define wxCHECK_VISUALC_VERSION(major) ( __VISUALC__ >= wxVISUALC_VERSION(major) )
101 #endif
102
103 /**
104 This is similar to wxCHECK_GCC_VERSION but for Sun CC compiler.
105 */
106 #ifdef __SUNCC__
107 /*
108 __SUNCC__ is 0xVRP where V is major version, R release and P patch level
109 */
110 #define wxCHECK_SUNCC_VERSION(maj, min) (__SUNCC__ >= (((maj)<<8) | ((min)<<4)))
111 #else
112 #define wxCHECK_SUNCC_VERSION(maj, min) (0)
113 #endif
114
115 #ifndef __WATCOMC__
116 # define wxWATCOM_VERSION(major,minor) 0
117 # define wxCHECK_WATCOM_VERSION(major,minor) 0
118 # define wxONLY_WATCOM_EARLIER_THAN(major,minor) 0
119 # define WX_WATCOM_ONLY_CODE( x )
120 #else
121 # if __WATCOMC__ < 1200
122 # error "Only Open Watcom is supported in this release"
123 # endif
124
125 # define wxWATCOM_VERSION(major,minor) ( major * 100 + minor * 10 + 1100 )
126 # define wxCHECK_WATCOM_VERSION(major,minor) ( __WATCOMC__ >= wxWATCOM_VERSION(major,minor) )
127 # define wxONLY_WATCOM_EARLIER_THAN(major,minor) ( __WATCOMC__ < wxWATCOM_VERSION(major,minor) )
128 # define WX_WATCOM_ONLY_CODE( x ) x
129 #endif
130
131 /*
132 This macro can be used to check that the version of mingw32 compiler is
133 at least maj.min
134 */
135
136 /* Check for Mingw runtime version: */
137 #if defined(__MINGW32_MAJOR_VERSION) && defined(__MINGW32_MINOR_VERSION)
138 #define wxCHECK_MINGW32_VERSION( major, minor ) \
139 ( ( ( __MINGW32_MAJOR_VERSION > (major) ) \
140 || ( __MINGW32_MAJOR_VERSION == (major) && __MINGW32_MINOR_VERSION >= (minor) ) ) )
141
142 /*
143 MinGW-w64 project provides compilers for both Win32 and Win64 but only
144 defines the same __MINGW32__ symbol for the former as MinGW32 toolchain
145 which is quite different (notably doesn't provide many SDK headers that
146 MinGW-w64 does include). So we define a separate symbol which, unlike the
147 predefined __MINGW64__, can be used to detect this toolchain in both 32 and
148 64 bit builds.
149
150 And define __MINGW32_TOOLCHAIN__ for consistency and also because it's
151 convenient as we often want to have some workarounds only for the (old)
152 MinGW32 but not (newer) MinGW-w64, which still predefines __MINGW32__.
153 */
154 # ifdef __MINGW64_VERSION_MAJOR
155 # ifndef __MINGW64_TOOLCHAIN__
156 # define __MINGW64_TOOLCHAIN__
157 # endif
158 # else
159 # ifndef __MINGW32_TOOLCHAIN__
160 # define __MINGW32_TOOLCHAIN__
161 # endif
162 # endif
163 #else
164 #define wxCHECK_MINGW32_VERSION( major, minor ) (0)
165 #endif
166
167 #endif // _WX_COMPILER_H_