]> git.saurik.com Git - wxWidgets.git/blame - include/wx/platform.h
Missed include due to wxBookCtrlSizer existence.
[wxWidgets.git] / include / wx / platform.h
CommitLineData
e0c749a7
RN
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$
77ffb593 8* Copyright: (c) 1997-2001 wxWidgets team
65571936 9* Licence: wxWindows licence
e0c749a7 10*/
78340847
VZ
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
a203834e
MB
17
18/*
19 Codewarrior doesn't define any Windows symbols until some headers
20 are included
21*/
22#if __MWERKS__
ef620df0 23# include <stddef.h>
a203834e
MB
24#endif
25
cf6fa9b9
SC
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
77f2f1d3
SC
37 #ifdef __WXMAC_XCODE__
38 #include "wx/mac/carbon/config_xcode.h"
39 #endif
cf6fa9b9
SC
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
78340847
VZ
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 */
d66dcb60
MB
56#if defined(__CYGWIN32__) && !defined(__WXMOTIF__) && !defined(__WXGTK__) \
57 && !defined(__WXX11__)
58 /* for Cygwin, default to wxMSW unless otherwise specified */
ef620df0
VZ
59# ifndef __WXMSW__
60# define __WXMSW__
61# endif
d66dcb60 62
ef620df0
VZ
63# ifndef _WIN32
64# define _WIN32
65# endif
d66dcb60 66
ef620df0
VZ
67# ifndef WIN32
68# define WIN32
69# endif
d66dcb60
MB
70#endif
71
ef620df0
VZ
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
d5cd19b4
VZ
87#if (defined(_WIN32) || defined(WIN32) || defined(__NT__) || defined(__WXWINCE__)) \
88 && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
ef620df0
VZ
89# ifndef __WXMSW__
90# define __WXMSW__
91# endif
78340847 92
ef620df0
VZ
93# ifndef __WIN32__
94# define __WIN32__
95# endif
78340847 96
7863fab4 97 /*
b96f8e9a
VZ
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.
7863fab4 104 */
ef620df0 105# ifndef WINVER
b96f8e9a 106# define WINVER 0x0502
ef620df0 107# endif
7863fab4 108
78340847 109 /* Win95 means Win95-style UI, i.e. Win9x/NT 4+ */
ef620df0
VZ
110# if !defined(__WIN95__) && (WINVER >= 0x0400)
111# define __WIN95__
112# endif
78340847
VZ
113#endif /* Win32 */
114
115#if defined(__WXMSW__) || defined(__WIN32__)
ef620df0
VZ
116# if !defined(__WINDOWS__)
117# define __WINDOWS__
118# endif
78340847
VZ
119#endif
120
b4da152e 121#ifdef __WINE__
ef620df0
VZ
122# ifndef __WIN95__
123# define __WIN95__
124# endif
78340847
VZ
125#endif /* WINE */
126
f2aa588b
VS
127/* detect SmartPhone */
128#if defined( WIN32_PLATFORM_WFSP )
129# ifndef __SMARTPHONE__
130# define __SMARTPHONE__
131# endif
132#endif
133
a9928e9d
JS
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
daeb8330
RR
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
78340847
VZ
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
63e7198b
VZ
169/*
170 adjust the Unicode setting: wxUSE_UNICODE should be defined as 0 or 1
77ffb593 171 and is used by wxWidgets, _UNICODE and/or UNICODE may be defined or used by
63e7198b
VZ
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
b3c35859
SC
195#if defined( __MWERKS__ ) && !defined(__INTEL__)
196// otherwise MSL headers bring in WIN32 dependant APIs
197#undef UNICODE
198#endif
eb382f3e 199/*
fb21f36d 200 some compilers don't support iostream.h any longer, while some of theme
31bb37a2 201 are not updated with <iostream> yet, so override the users setting here
fb21f36d 202 in such case.
eb382f3e
VZ
203 */
204#if defined(_MSC_VER) && (_MSC_VER >= 1310)
ef620df0
VZ
205# undef wxUSE_IOSTREAMH
206# define wxUSE_IOSTREAMH 0
5c9f6bf4 207#elif defined(__DMC__) || defined(__WATCOMC__)
fb21f36d 208# undef wxUSE_IOSTREAMH
31bb37a2 209# define wxUSE_IOSTREAMH 1
1bfb7cc6
WS
210#elif defined(__MINGW32__)
211# undef wxUSE_IOSTREAMH
212# define wxUSE_IOSTREAMH 0
213#endif /* compilers with/without iostream.h */
eb382f3e 214
78340847
VZ
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
ef620df0 223# define wxSTD std::
78340847 224#else
ef620df0 225# define wxSTD
78340847
VZ
226#endif
227
228/*
865c589e
VS
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__)
ef620df0
VZ
233# ifndef __DOS__
234# define __DOS__
235# endif
865c589e
VS
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 */
ef620df0
VZ
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
865c589e
VS
246
247/*
248 OS: then test for generic Unix defines, then for particular flavours and
78340847
VZ
249 finally for Unix-like systems
250 */
865c589e
VS
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__)
78340847 255
ef620df0 256# define __UNIX_LIKE__
78340847
VZ
257
258 /* Helps SGI compilation, apparently */
ef620df0
VZ
259# ifdef __SGI__
260# ifdef __GNUG__
261# define __need_wchar_t
262# else /* !gcc */
78340847
VZ
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 */
ef620df0
VZ
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
78340847
VZ
282
283 /* define __HPUX__ for HP-UX where standard macro is __hpux */
ef620df0
VZ
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
78340847
VZ
293#elif defined(applec) || \
294 defined(THINK_C) || \
295 (defined(__MWERKS__) && !defined(__INTEL__))
296 /* MacOS */
ef620df0
VZ
297# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
298# define wxSIZE_T_IS_ULONG
299# endif
67087ab4 300#elif defined(__WXMAC__) && defined(__APPLE__)
78340847 301 /* Mac OS X */
ef620df0 302# define __UNIX_LIKE__
78340847 303
67087ab4
GD
304 /*
305 These defines are needed when compiling using Project Builder
306 with a non generated setup0.h
307 */
ef620df0
VZ
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
78340847
VZ
327 /*
328 Some code has been added to workaround defects(?) in the
67087ab4
GD
329 bundled gcc compiler. These corrections are identified by
330 __DARWIN__ for Darwin related corrections (wxMac, wxMotif)
78340847 331 */
78340847 332#elif defined(__OS2__)
ef620df0
VZ
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
78340847
VZ
342
343 /* Place other OS/2 compiler environment defines here */
ef620df0 344# if defined(__VISAGECPP__)
78340847 345 /* VisualAge is the only thing that understands _Optlink */
ef620df0
VZ
346# define LINKAGEMODE _Optlink
347# endif
348# define wxSIZE_T_IS_UINT
c427acc8 349
78340847 350#else /* Windows */
ef620df0
VZ
351# ifndef __WINDOWS__
352# define __WINDOWS__
353# endif /* Windows */
78340847
VZ
354
355 /* to be changed for Win64! */
ef620df0 356# ifndef __WIN32__
3a5bcc4d 357# error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported"
ef620df0 358# endif
78340847
VZ
359
360 /*
361 define another standard symbol for Microsoft Visual C++: the standard
362 one (_MSC_VER) is also defined by Metrowerks compiler
363 */
ef620df0
VZ
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 */
78340847
VZ
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 */
ef620df0
VZ
375# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
376# define wxSIZE_T_IS_UINT
377# endif
78340847
VZ
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__)
ef620df0 385# define __UNIX__
78340847
VZ
386#endif /* Unix */
387
388#if defined(__HPUX__) && !defined(__WXGTK__)
ef620df0
VZ
389# ifndef __WXMOTIF__
390# define __WXMOTIF__
391# endif /* __WXMOTIF__ */
78340847
VZ
392#endif
393
f79bd02d 394#if defined(__WXMOTIF__) || defined(__WXX11__)
ef620df0 395# define __X__
78340847
VZ
396#endif
397
4b41ab26 398#ifdef __SC__
ef620df0
VZ
399# ifdef __DMC__
400# define __DIGITALMARS__
401# else
402# define __SYMANTEC__
403# endif
4b41ab26
VS
404#endif
405
eddb3250
VS
406/* Force linking against required libraries under Windows CE: */
407#ifdef __WXWINCE__
408# include "wx/msw/wince/libraries.h"
409#endif
410
44893b87
VZ
411/*
412 This macro can be used to test the gcc version and can be used like this:
413
ef620df0 414# if wxCHECK_GCC_VERSION(3, 1)
44893b87 415 ... we have gcc 3.1 or later ...
ef620df0 416# else
44893b87 417 ... no gcc at all or gcc < 3.1 ...
ef620df0 418# endif
44893b87
VZ
419*/
420#define wxCHECK_GCC_VERSION( major, minor ) \
421 ( defined(__GNUC__) && defined(__GNUC_MINOR__) \
422 && ( ( __GNUC__ > (major) ) \
423 || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) ) )
424
78340847
VZ
425/*
426 This macro can be used to check that the version of mingw32 compiler is
427 at least maj.min
428 */
1c53456f 429#if ( defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || \
ac776ec9 430 defined( __CYGWIN__ ) || \
1c53456f 431 (defined(__WATCOMC__) && __WATCOMC__ >= 1200) ) && \
d5cd19b4 432 !defined(__DOS__) && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
ef620df0 433# include "wx/msw/gccpriv.h"
78340847 434#else
ef620df0
VZ
435# undef wxCHECK_W32API_VERSION
436# define wxCHECK_W32API_VERSION(maj, min) (0)
78340847
VZ
437#endif
438
1e3c12d7 439#if defined (__WXMSW__)
ef620df0
VZ
440# if !defined(__WATCOMC__)
441# define wxHAVE_RAW_BITMAP
442# endif
1e3c12d7 443#endif
bf978f96 444
01ebf752 445#if defined (__WXMAC__)
ef620df0
VZ
446# ifndef WORDS_BIGENDIAN
447# define WORDS_BIGENDIAN 1
448# endif
01ebf752
JS
449#endif
450
0b30bb0b
JS
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
12c19488 456# if (defined(__WXMSW__) || defined(__WXGTK__)) && !defined(__WXUNIVERSAL__)
ef620df0
VZ
457# define wxUSE_IDLEMENUUPDATES 0
458# else
459# define wxUSE_IDLEMENUUPDATES 1
460# endif
0b30bb0b
JS
461#endif
462
5e967044
JS
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
ef620df0
VZ
470# if wxUSE_CONFIG
471# define wxUSE_FILECONFIG 1
472# else
473# define wxUSE_FILECONFIG 0
474# endif
5e967044
JS
475#endif
476
477#ifndef wxUSE_HOTKEY
ef620df0 478# define wxUSE_HOTKEY 0
5e967044
JS
479#endif
480
086b3a5b 481#if !defined(wxUSE_WXDIB) && defined(__WXMSW__)
ef620df0 482# define wxUSE_WXDIB 1
086b3a5b
JS
483#endif
484
78340847
VZ
485#endif /* _WX_PLATFORM_H_ */
486