]> git.saurik.com Git - wxWidgets.git/blob - include/wx/platform.h
define WINVER as 0x0502 by default (highest possible), not 0x0400; made the comment...
[wxWidgets.git] / include / wx / platform.h
1 /**
2 * Name: wx/platform.h
3 * Purpose: define the OS and compiler identification macros
4 * Author: Vadim Zeitlin
5 * Modified by:
6 * Created: 29.10.01 (extracted from wx/defs.h)
7 * RCS-ID: $Id$
8 * Copyright: (c) 1997-2001 wxWidgets team
9 * Licence: wxWindows licence
10 */
11
12 /* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
13
14 #ifndef _WX_PLATFORM_H_
15 #define _WX_PLATFORM_H_
16
17
18 /*
19 Codewarrior doesn't define any Windows symbols until some headers
20 are included
21 */
22 #if __MWERKS__
23 # include <stddef.h>
24 #endif
25
26 /*
27 WXMAC variants
28 __WXMAC_CLASSIC__ means ppc non-carbon builds, __WXMAC_CARBON__ means
29 carbon API available (mach or cfm builds) , __WXMAC_OSX__ means mach-o
30 builds, running under 10.2 + only
31 */
32 #ifdef __WXMAC__
33 #if defined(__MACH__)
34 #define __WXMAC_OSX__ 1
35 #define __WXMAC_CARBON__ 1
36 #define __WXMAC_CLASSIC__ 0
37 #ifdef __WXMAC_XCODE__
38 #include "wx/mac/carbon/config_xcode.h"
39 #endif
40 #else
41 #define __WXMAC_OSX__ 0
42 #if TARGET_CARBON
43 #define __WXMAC_CARBON__ 1
44 #define __WXMAC_CLASSIC__ 0
45 #else
46 #define __WXMAC_CARBON__ 0
47 #define __WXMAC_CLASSIC__ 1
48 #endif
49 #endif
50 #endif
51
52 /*
53 first define Windows symbols if they're not defined on the command line: we
54 can autodetect everything we need if _WIN32 is defined
55 */
56 #if defined(__CYGWIN32__) && !defined(__WXMOTIF__) && !defined(__WXGTK__) \
57 && !defined(__WXX11__)
58 /* for Cygwin, default to wxMSW unless otherwise specified */
59 # ifndef __WXMSW__
60 # define __WXMSW__
61 # endif
62
63 # ifndef _WIN32
64 # define _WIN32
65 # endif
66
67 # ifndef WIN32
68 # define WIN32
69 # endif
70 #endif
71
72 #if defined(_WIN64)
73 # ifndef _WIN32
74 /*
75 a lot of code (mistakenly) uses #ifdef _WIN32 to either test for
76 Windows or to test for !__WIN16__, so we must define _WIN32 for
77 Win64 as well to ensure that the existing code continues to work.
78 */
79 # define _WIN32
80 # endif /* !_WIN32 */
81
82 # ifndef __WIN64__
83 # define __WIN64__
84 # endif /* !__WIN64__ */
85 #endif /* _WIN64 */
86
87 #if (defined(_WIN32) || defined(WIN32) || defined(__NT__) || defined(__WXWINCE__)) \
88 && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
89 # ifndef __WXMSW__
90 # define __WXMSW__
91 # endif
92
93 # ifndef __WIN32__
94 # define __WIN32__
95 # endif
96
97 /*
98 see MSDN for the description of possible WINVER values, this one is the
99 highest one defined right now (Windows Server 2003) and we use it unless
100 it was explicitly overridden by the user to disable recent features
101 support as we check for all of the features we use which could be not
102 available on earlier Windows systems during run-time anyhow, so there is
103 almost no disadvantage in using it.
104 */
105 # ifndef WINVER
106 # define WINVER 0x0502
107 # endif
108
109 /* Win95 means Win95-style UI, i.e. Win9x/NT 4+ */
110 # if !defined(__WIN95__) && (WINVER >= 0x0400)
111 # define __WIN95__
112 # endif
113 #endif /* Win32 */
114
115 #if defined(__WXMSW__) || defined(__WIN32__)
116 # if !defined(__WINDOWS__)
117 # define __WINDOWS__
118 # endif
119 #endif
120
121 #ifdef __WINE__
122 # ifndef __WIN95__
123 # define __WIN95__
124 # endif
125 #endif /* WINE */
126
127 /* detect SmartPhone */
128 #if defined( WIN32_PLATFORM_WFSP )
129 # ifndef __SMARTPHONE__
130 # define __SMARTPHONE__
131 # endif
132 #endif
133
134 /* detect PocketPC */
135 #if defined( WIN32_PLATFORM_PSPC )
136 # ifndef __POCKETPC__
137 # define __POCKETPC__
138 # endif
139 #endif
140
141 /* detect Standard WinCE SDK */
142 #if defined( WCE_PLATFORM_STANDARDSDK )
143 # ifndef __WINCE_STANDARDSDK__
144 # define __WINCE_STANDARDSDK__
145 # endif
146 #endif
147
148 #if defined(_WIN32_WCE) && !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC)
149 # if (_WIN32_WCE >= 400)
150 # ifndef __WINCE_NET__
151 # define __WINCE_NET__
152 # endif
153 # elif (_WIN32_WCE >= 200)
154 # ifndef __HANDHELDPC__
155 # define __HANDHELDPC__
156 # endif
157 # endif
158 #endif
159
160 /*
161 Include wx/setup.h for the Unix platform defines generated by configure and
162 the library compilation options
163 */
164 #include "wx/setup.h"
165
166 /* check the consistency of the settings in setup.h */
167 #include "wx/chkconf.h"
168
169 /*
170 adjust the Unicode setting: wxUSE_UNICODE should be defined as 0 or 1
171 and is used by wxWidgets, _UNICODE and/or UNICODE may be defined or used by
172 the system headers so bring these settings in sync
173 */
174
175 /* set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined */
176 #if defined(_UNICODE) || defined(UNICODE)
177 # undef wxUSE_UNICODE
178 # define wxUSE_UNICODE 1
179 #else /* !UNICODE */
180 # ifndef wxUSE_UNICODE
181 # define wxUSE_UNICODE 0
182 # endif
183 #endif /* UNICODE/!UNICODE */
184
185 /* and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1 */
186 #if wxUSE_UNICODE
187 # ifndef _UNICODE
188 # define _UNICODE
189 # endif
190 # ifndef UNICODE
191 # define UNICODE
192 # endif
193 #endif /* wxUSE_UNICODE */
194
195 #if defined( __MWERKS__ ) && !defined(__INTEL__)
196 // otherwise MSL headers bring in WIN32 dependant APIs
197 #undef UNICODE
198 #endif
199 /*
200 some compilers don't support iostream.h any longer, while some of theme
201 are not updated with <iostream> yet, so override the users setting here
202 in such case.
203 */
204 #if defined(_MSC_VER) && (_MSC_VER >= 1310)
205 # undef wxUSE_IOSTREAMH
206 # define wxUSE_IOSTREAMH 0
207 #elif defined(__DMC__) || defined(__WATCOMC__)
208 # undef wxUSE_IOSTREAMH
209 # define wxUSE_IOSTREAMH 1
210 #elif defined(__MINGW32__)
211 # undef wxUSE_IOSTREAMH
212 # define wxUSE_IOSTREAMH 0
213 #endif /* compilers with/without iostream.h */
214
215 /*
216 old C++ headers (like <iostream.h>) declare classes in the global namespace
217 while the new, standard ones (like <iostream>) do it in std:: namespace
218
219 using this macro allows constuctions like "wxSTD iostream" to work in
220 either case
221 */
222 #if !wxUSE_IOSTREAMH
223 # define wxSTD std::
224 #else
225 # define wxSTD
226 #endif
227
228 /*
229 OS: first of all, test for MS-DOS platform. We must do this before testing
230 for Unix, because DJGPP compiler defines __unix__ under MS-DOS
231 */
232 #if defined(__GO32__) || defined(__DJGPP__) || defined(__DOS__)
233 # ifndef __DOS__
234 # define __DOS__
235 # endif
236 /* size_t is the same as unsigned int for Watcom 11 compiler, */
237 /* so define it if it hadn't been done by configure yet */
238 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
239 # ifdef __WATCOMC__
240 # define wxSIZE_T_IS_UINT
241 # endif
242 # ifdef __DJGPP__
243 # define wxSIZE_T_IS_ULONG
244 # endif
245 # endif
246
247 /*
248 OS: then test for generic Unix defines, then for particular flavours and
249 finally for Unix-like systems
250 */
251 #elif defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
252 defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
253 defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
254 defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
255
256 # define __UNIX_LIKE__
257
258 /* Helps SGI compilation, apparently */
259 # ifdef __SGI__
260 # ifdef __GNUG__
261 # define __need_wchar_t
262 # else /* !gcc */
263 /*
264 Note I use the term __SGI_CC__ for both cc and CC, its not a good
265 idea to mix gcc and cc/CC, the name mangling is different
266 */
267 # define __SGI_CC__
268 # endif /* gcc/!gcc */
269 # endif /* SGI */
270
271 # if defined(sun) || defined(__SUN__)
272 # ifndef __GNUG__
273 # ifndef __SUNCC__
274 # define __SUNCC__
275 # endif /* Sun CC */
276 # endif
277 # endif /* Sun */
278
279 # ifdef __EMX__
280 # define OS2EMX_PLAIN_CHAR
281 # endif
282
283 /* define __HPUX__ for HP-UX where standard macro is __hpux */
284 # if defined(__hpux) && !defined(__HPUX__)
285 # define __HPUX__
286 # endif /* HP-UX */
287
288 # if defined(__CYGWIN__) || defined(__WINE__)
289 # if !defined(wxSIZE_T_IS_UINT)
290 # define wxSIZE_T_IS_UINT
291 # endif
292 # endif
293 #elif defined(applec) || \
294 defined(THINK_C) || \
295 (defined(__MWERKS__) && !defined(__INTEL__))
296 /* MacOS */
297 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
298 # define wxSIZE_T_IS_ULONG
299 # endif
300 #elif defined(__WXMAC__) && defined(__APPLE__)
301 /* Mac OS X */
302 # define __UNIX_LIKE__
303
304 /*
305 These defines are needed when compiling using Project Builder
306 with a non generated setup0.h
307 */
308 # ifndef __UNIX__
309 # define __UNIX__ 1
310 # endif
311 # ifndef __BSD__
312 # define __BSD__ 1
313 # endif
314 # ifndef __DARWIN__
315 # define __DARWIN__ 1
316 # endif
317 # ifndef __POWERPC__
318 # define __POWERPC__ 1
319 # endif
320 # ifndef TARGET_CARBON
321 # define TARGET_CARBON 1
322 # endif
323
324 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
325 # define wxSIZE_T_IS_ULONG
326 # endif
327 /*
328 Some code has been added to workaround defects(?) in the
329 bundled gcc compiler. These corrections are identified by
330 __DARWIN__ for Darwin related corrections (wxMac, wxMotif)
331 */
332 #elif defined(__OS2__)
333 # if defined(__IBMCPP__)
334 # define __VISAGEAVER__ __IBMCPP__
335 # endif
336 # ifndef __WXOS2__
337 # define __WXOS2__
338 # endif
339 # ifndef __WXPM__
340 # define __WXPM__
341 # endif
342
343 /* Place other OS/2 compiler environment defines here */
344 # if defined(__VISAGECPP__)
345 /* VisualAge is the only thing that understands _Optlink */
346 # define LINKAGEMODE _Optlink
347 # endif
348 # define wxSIZE_T_IS_UINT
349
350 #else /* Windows */
351 # ifndef __WINDOWS__
352 # define __WINDOWS__
353 # endif /* Windows */
354
355 /* to be changed for Win64! */
356 # ifndef __WIN32__
357 # error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported"
358 # endif
359
360 /*
361 define another standard symbol for Microsoft Visual C++: the standard
362 one (_MSC_VER) is also defined by Metrowerks compiler
363 */
364 # if defined(_MSC_VER) && !defined(__MWERKS__)
365 # define __VISUALC__ _MSC_VER
366 # elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
367 # define __BORLANDC__
368 # elif defined(__WATCOMC__)
369 # elif defined(__SC__)
370 # define __SYMANTECC__
371 # endif /* compiler */
372
373 /* size_t is the same as unsigned int for all Windows compilers we know, */
374 /* so define it if it hadn't been done by configure yet */
375 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
376 # define wxSIZE_T_IS_UINT
377 # endif
378 #endif /* OS */
379
380 /*
381 if we're on a Unix system but didn't use configure (so that setup.h didn't
382 define __UNIX__), do define __UNIX__ now
383 */
384 #if !defined(__UNIX__) && defined(__UNIX_LIKE__)
385 # define __UNIX__
386 #endif /* Unix */
387
388 #if defined(__HPUX__) && !defined(__WXGTK__)
389 # ifndef __WXMOTIF__
390 # define __WXMOTIF__
391 # endif /* __WXMOTIF__ */
392 #endif
393
394 #if defined(__WXMOTIF__) || defined(__WXX11__)
395 # define __X__
396 #endif
397
398 #ifdef __SC__
399 # ifdef __DMC__
400 # define __DIGITALMARS__
401 # else
402 # define __SYMANTEC__
403 # endif
404 #endif
405
406 /* Force linking against required libraries under Windows CE: */
407 #ifdef __WXWINCE__
408 # include "wx/msw/wince/libraries.h"
409 #endif
410
411 /*
412 This macro can be used to test the gcc version and can be used like this:
413
414 # if wxCHECK_GCC_VERSION(3, 1)
415 ... we have gcc 3.1 or later ...
416 # else
417 ... no gcc at all or gcc < 3.1 ...
418 # endif
419 */
420 #define wxCHECK_GCC_VERSION( major, minor ) \
421 ( defined(__GNUC__) && defined(__GNUC_MINOR__) \
422 && ( ( __GNUC__ > (major) ) \
423 || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) ) )
424
425 /*
426 This macro can be used to check that the version of mingw32 compiler is
427 at least maj.min
428 */
429 #if ( defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || \
430 defined( __CYGWIN__ ) || \
431 (defined(__WATCOMC__) && __WATCOMC__ >= 1200) ) && \
432 !defined(__DOS__) && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
433 # include "wx/msw/gccpriv.h"
434 #else
435 # undef wxCHECK_W32API_VERSION
436 # define wxCHECK_W32API_VERSION(maj, min) (0)
437 #endif
438
439 #if defined (__WXMSW__)
440 # if !defined(__WATCOMC__)
441 # define wxHAVE_RAW_BITMAP
442 # endif
443 #endif
444
445 #if defined (__WXMAC__)
446 # ifndef WORDS_BIGENDIAN
447 # define WORDS_BIGENDIAN 1
448 # endif
449 #endif
450
451 /* Choose which method we will use for updating menus
452 * - in OnIdle, or when we receive a wxEVT_MENU_OPEN event.
453 * Presently, only Windows and GTK+ support wxEVT_MENU_OPEN.
454 */
455 #ifndef wxUSE_IDLEMENUUPDATES
456 # if (defined(__WXMSW__) || defined(__WXGTK__)) && !defined(__WXUNIVERSAL__)
457 # define wxUSE_IDLEMENUUPDATES 0
458 # else
459 # define wxUSE_IDLEMENUUPDATES 1
460 # endif
461 #endif
462
463 /*
464 * Define symbols that are not yet in
465 * configure or possibly some setup.h files.
466 * They will need to be added.
467 */
468
469 #ifndef wxUSE_FILECONFIG
470 # if wxUSE_CONFIG
471 # define wxUSE_FILECONFIG 1
472 # else
473 # define wxUSE_FILECONFIG 0
474 # endif
475 #endif
476
477 #ifndef wxUSE_HOTKEY
478 # define wxUSE_HOTKEY 0
479 #endif
480
481 #if !defined(wxUSE_WXDIB) && defined(__WXMSW__)
482 # define wxUSE_WXDIB 1
483 #endif
484
485 #endif /* _WX_PLATFORM_H_ */
486