]> git.saurik.com Git - wxWidgets.git/blame - include/wx/platform.h
renamed wxFileLocator to wxStandardPaths
[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 26/*
761fbb87
WS
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
cf6fa9b9
SC
31*/
32#ifdef __WXMAC__
761fbb87
WS
33 #if defined(__MACH__)
34 #define __WXMAC_OSX__ 1
35 #define __WXMAC_CARBON__ 1
77f2f1d3
SC
36 #ifdef __WXMAC_XCODE__
37 #include "wx/mac/carbon/config_xcode.h"
38 #endif
761fbb87 39 #else
761fbb87
WS
40 #if TARGET_CARBON
41 #define __WXMAC_CARBON__ 1
761fbb87 42 #else
761fbb87
WS
43 #define __WXMAC_CLASSIC__ 1
44 #endif
45 #endif
cf6fa9b9
SC
46#endif
47
78340847
VZ
48/*
49 first define Windows symbols if they're not defined on the command line: we
50 can autodetect everything we need if _WIN32 is defined
51 */
d66dcb60
MB
52#if defined(__CYGWIN32__) && !defined(__WXMOTIF__) && !defined(__WXGTK__) \
53 && !defined(__WXX11__)
54 /* for Cygwin, default to wxMSW unless otherwise specified */
ef620df0
VZ
55# ifndef __WXMSW__
56# define __WXMSW__
57# endif
d66dcb60 58
ef620df0
VZ
59# ifndef _WIN32
60# define _WIN32
61# endif
d66dcb60 62
ef620df0
VZ
63# ifndef WIN32
64# define WIN32
65# endif
d66dcb60
MB
66#endif
67
ef620df0
VZ
68#if defined(_WIN64)
69# ifndef _WIN32
70 /*
71 a lot of code (mistakenly) uses #ifdef _WIN32 to either test for
72 Windows or to test for !__WIN16__, so we must define _WIN32 for
73 Win64 as well to ensure that the existing code continues to work.
74 */
75# define _WIN32
76# endif /* !_WIN32 */
77
78# ifndef __WIN64__
79# define __WIN64__
80# endif /* !__WIN64__ */
81#endif /* _WIN64 */
82
d5cd19b4
VZ
83#if (defined(_WIN32) || defined(WIN32) || defined(__NT__) || defined(__WXWINCE__)) \
84 && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
ef620df0
VZ
85# ifndef __WXMSW__
86# define __WXMSW__
87# endif
78340847 88
ef620df0
VZ
89# ifndef __WIN32__
90# define __WIN32__
91# endif
78340847 92
7863fab4 93 /*
664df6e9
VZ
94 The library user may override the default setting of WINVER by defining
95 it in his own makefile or project file -- if it is defined, we don't
96 touch it at all.
97
98 It makes sense to define WINVER as:
99 - either some lowish value (e.g. 0x0302) to not even compile in the
100 features not available in Windows version lower than some given
101 one
102 - or to a higher value than the one used by default for the given
103 compiler if you updated its headers to newer version of Platform
104 SDK, e.g. VC6 ships with 0x0400 headers by default but may also
105 work with 0x0500 headers and beyond
106 */
107# ifndef WINVER
108# if defined(_MSC_VER) && _MSC_VER < 1300
109 /*
110 VC6 defines some stuff in its default headers which is normally
111 only present if WINVER >= 0x0500 (FLASHW_XXX constants) which
112 means that our usual tests not involving WINVER sometimes fail
113 with it, hence explicitly define a lower WINVER value for it.
114 */
115# define WINVER 0x0400
761fbb87
WS
116# elif defined(__DMC__)
117 /*
118 Digital Mars is distributed with a little outdated headers.
119 */
120# define WINVER 0x0400
664df6e9
VZ
121# else /* !VC++ 6 */
122 /*
123 see MSDN for the description of possible WINVER values, this one
124 is the highest one defined right now (Windows Server 2003) and
125 we use it unless it was explicitly overridden by the user to
126 disable recent features support as we check for all of the
127 features we use which could be not available on earlier Windows
128 systems during run-time anyhow, so there is almost no
129 disadvantage in using it.
130 */
131# define WINVER 0x0502
132# endif /* VC++ 6/!VC++6 */
133# endif
7863fab4 134
78340847 135 /* Win95 means Win95-style UI, i.e. Win9x/NT 4+ */
ef620df0
VZ
136# if !defined(__WIN95__) && (WINVER >= 0x0400)
137# define __WIN95__
138# endif
78340847
VZ
139#endif /* Win32 */
140
141#if defined(__WXMSW__) || defined(__WIN32__)
9b141468
WS
142# if !defined(__WINDOWS__)
143# define __WINDOWS__
144# endif
78340847
VZ
145#endif
146
b4da152e 147#ifdef __WINE__
9b141468
WS
148# ifndef __WIN95__
149# define __WIN95__
150# endif
78340847
VZ
151#endif /* WINE */
152
9b141468 153/* detect MS SmartPhone */
f2aa588b 154#if defined( WIN32_PLATFORM_WFSP )
9b141468
WS
155# ifndef __SMARTPHONE__
156# define __SMARTPHONE__
157# endif
158# ifndef __WXWINCE__
159# define __WXWINCE__
160# endif
f2aa588b
VS
161#endif
162
a9928e9d
JS
163/* detect PocketPC */
164#if defined( WIN32_PLATFORM_PSPC )
9b141468
WS
165# ifndef __POCKETPC__
166# define __POCKETPC__
167# endif
168# ifndef __WXWINCE__
169# define __WXWINCE__
170# endif
a9928e9d
JS
171#endif
172
173/* detect Standard WinCE SDK */
174#if defined( WCE_PLATFORM_STANDARDSDK )
9b141468
WS
175# ifndef __WINCE_STANDARDSDK__
176# define __WINCE_STANDARDSDK__
177# endif
178# ifndef __WXWINCE__
179# define __WXWINCE__
180# endif
a9928e9d
JS
181#endif
182
daeb8330
RR
183#if defined(_WIN32_WCE) && !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC)
184# if (_WIN32_WCE >= 400)
185# ifndef __WINCE_NET__
186# define __WINCE_NET__
187# endif
761fbb87 188# elif (_WIN32_WCE >= 200)
daeb8330
RR
189# ifndef __HANDHELDPC__
190# define __HANDHELDPC__
191# endif
192# endif
9b141468
WS
193# ifndef __WXWINCE__
194# define __WXWINCE__
195# endif
daeb8330
RR
196#endif
197
78340847
VZ
198/*
199 Include wx/setup.h for the Unix platform defines generated by configure and
200 the library compilation options
201 */
202#include "wx/setup.h"
203
204/* check the consistency of the settings in setup.h */
205#include "wx/chkconf.h"
206
63e7198b
VZ
207/*
208 adjust the Unicode setting: wxUSE_UNICODE should be defined as 0 or 1
77ffb593 209 and is used by wxWidgets, _UNICODE and/or UNICODE may be defined or used by
63e7198b
VZ
210 the system headers so bring these settings in sync
211 */
212
213/* set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined */
214#if defined(_UNICODE) || defined(UNICODE)
215# undef wxUSE_UNICODE
216# define wxUSE_UNICODE 1
217#else /* !UNICODE */
218# ifndef wxUSE_UNICODE
219# define wxUSE_UNICODE 0
220# endif
221#endif /* UNICODE/!UNICODE */
222
223/* and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1 */
224#if wxUSE_UNICODE
225# ifndef _UNICODE
226# define _UNICODE
227# endif
228# ifndef UNICODE
229# define UNICODE
230# endif
231#endif /* wxUSE_UNICODE */
232
b3c35859
SC
233#if defined( __MWERKS__ ) && !defined(__INTEL__)
234// otherwise MSL headers bring in WIN32 dependant APIs
235#undef UNICODE
236#endif
eb382f3e 237/*
fb21f36d 238 some compilers don't support iostream.h any longer, while some of theme
31bb37a2 239 are not updated with <iostream> yet, so override the users setting here
fb21f36d 240 in such case.
eb382f3e
VZ
241 */
242#if defined(_MSC_VER) && (_MSC_VER >= 1310)
ef620df0
VZ
243# undef wxUSE_IOSTREAMH
244# define wxUSE_IOSTREAMH 0
5c9f6bf4 245#elif defined(__DMC__) || defined(__WATCOMC__)
fb21f36d 246# undef wxUSE_IOSTREAMH
31bb37a2 247# define wxUSE_IOSTREAMH 1
1bfb7cc6
WS
248#elif defined(__MINGW32__)
249# undef wxUSE_IOSTREAMH
250# define wxUSE_IOSTREAMH 0
251#endif /* compilers with/without iostream.h */
eb382f3e 252
78340847
VZ
253/*
254 old C++ headers (like <iostream.h>) declare classes in the global namespace
255 while the new, standard ones (like <iostream>) do it in std:: namespace
256
257 using this macro allows constuctions like "wxSTD iostream" to work in
258 either case
259 */
260#if !wxUSE_IOSTREAMH
ef620df0 261# define wxSTD std::
78340847 262#else
ef620df0 263# define wxSTD
78340847
VZ
264#endif
265
266/*
865c589e
VS
267 OS: first of all, test for MS-DOS platform. We must do this before testing
268 for Unix, because DJGPP compiler defines __unix__ under MS-DOS
269 */
270#if defined(__GO32__) || defined(__DJGPP__) || defined(__DOS__)
ef620df0
VZ
271# ifndef __DOS__
272# define __DOS__
273# endif
865c589e
VS
274 /* size_t is the same as unsigned int for Watcom 11 compiler, */
275 /* so define it if it hadn't been done by configure yet */
ef620df0
VZ
276# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
277# ifdef __WATCOMC__
278# define wxSIZE_T_IS_UINT
279# endif
280# ifdef __DJGPP__
281# define wxSIZE_T_IS_ULONG
282# endif
283# endif
865c589e
VS
284
285/*
286 OS: then test for generic Unix defines, then for particular flavours and
78340847
VZ
287 finally for Unix-like systems
288 */
865c589e
VS
289#elif defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
290 defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
291 defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
292 defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
78340847 293
ef620df0 294# define __UNIX_LIKE__
78340847
VZ
295
296 /* Helps SGI compilation, apparently */
ef620df0
VZ
297# ifdef __SGI__
298# ifdef __GNUG__
299# define __need_wchar_t
300# else /* !gcc */
78340847
VZ
301 /*
302 Note I use the term __SGI_CC__ for both cc and CC, its not a good
303 idea to mix gcc and cc/CC, the name mangling is different
304 */
ef620df0
VZ
305# define __SGI_CC__
306# endif /* gcc/!gcc */
307# endif /* SGI */
308
309# if defined(sun) || defined(__SUN__)
310# ifndef __GNUG__
311# ifndef __SUNCC__
312# define __SUNCC__
313# endif /* Sun CC */
314# endif
315# endif /* Sun */
316
317# ifdef __EMX__
318# define OS2EMX_PLAIN_CHAR
319# endif
78340847
VZ
320
321 /* define __HPUX__ for HP-UX where standard macro is __hpux */
ef620df0
VZ
322# if defined(__hpux) && !defined(__HPUX__)
323# define __HPUX__
324# endif /* HP-UX */
325
326# if defined(__CYGWIN__) || defined(__WINE__)
327# if !defined(wxSIZE_T_IS_UINT)
328# define wxSIZE_T_IS_UINT
329# endif
330# endif
78340847
VZ
331#elif defined(applec) || \
332 defined(THINK_C) || \
333 (defined(__MWERKS__) && !defined(__INTEL__))
334 /* MacOS */
ef620df0
VZ
335# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
336# define wxSIZE_T_IS_ULONG
337# endif
67087ab4 338#elif defined(__WXMAC__) && defined(__APPLE__)
78340847 339 /* Mac OS X */
ef620df0 340# define __UNIX_LIKE__
78340847 341
67087ab4
GD
342 /*
343 These defines are needed when compiling using Project Builder
344 with a non generated setup0.h
345 */
ef620df0
VZ
346# ifndef __UNIX__
347# define __UNIX__ 1
348# endif
349# ifndef __BSD__
350# define __BSD__ 1
351# endif
352# ifndef __DARWIN__
353# define __DARWIN__ 1
354# endif
355# ifndef __POWERPC__
356# define __POWERPC__ 1
357# endif
358# ifndef TARGET_CARBON
359# define TARGET_CARBON 1
360# endif
361
362# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
363# define wxSIZE_T_IS_ULONG
364# endif
78340847
VZ
365 /*
366 Some code has been added to workaround defects(?) in the
67087ab4
GD
367 bundled gcc compiler. These corrections are identified by
368 __DARWIN__ for Darwin related corrections (wxMac, wxMotif)
78340847 369 */
78340847 370#elif defined(__OS2__)
ef620df0
VZ
371# if defined(__IBMCPP__)
372# define __VISAGEAVER__ __IBMCPP__
373# endif
374# ifndef __WXOS2__
375# define __WXOS2__
376# endif
377# ifndef __WXPM__
378# define __WXPM__
379# endif
78340847
VZ
380
381 /* Place other OS/2 compiler environment defines here */
ef620df0 382# if defined(__VISAGECPP__)
78340847 383 /* VisualAge is the only thing that understands _Optlink */
ef620df0
VZ
384# define LINKAGEMODE _Optlink
385# endif
386# define wxSIZE_T_IS_UINT
c427acc8 387
78340847 388#else /* Windows */
ef620df0
VZ
389# ifndef __WINDOWS__
390# define __WINDOWS__
391# endif /* Windows */
78340847
VZ
392
393 /* to be changed for Win64! */
ef620df0 394# ifndef __WIN32__
3a5bcc4d 395# error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported"
ef620df0 396# endif
78340847
VZ
397
398 /*
399 define another standard symbol for Microsoft Visual C++: the standard
400 one (_MSC_VER) is also defined by Metrowerks compiler
401 */
ef620df0
VZ
402# if defined(_MSC_VER) && !defined(__MWERKS__)
403# define __VISUALC__ _MSC_VER
404# elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
405# define __BORLANDC__
406# elif defined(__WATCOMC__)
407# elif defined(__SC__)
408# define __SYMANTECC__
409# endif /* compiler */
78340847
VZ
410
411 /* size_t is the same as unsigned int for all Windows compilers we know, */
412 /* so define it if it hadn't been done by configure yet */
ef620df0
VZ
413# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
414# define wxSIZE_T_IS_UINT
415# endif
78340847
VZ
416#endif /* OS */
417
418/*
419 if we're on a Unix system but didn't use configure (so that setup.h didn't
420 define __UNIX__), do define __UNIX__ now
421 */
422#if !defined(__UNIX__) && defined(__UNIX_LIKE__)
ef620df0 423# define __UNIX__
78340847
VZ
424#endif /* Unix */
425
f79bd02d 426#if defined(__WXMOTIF__) || defined(__WXX11__)
ef620df0 427# define __X__
78340847
VZ
428#endif
429
4b41ab26 430#ifdef __SC__
ef620df0
VZ
431# ifdef __DMC__
432# define __DIGITALMARS__
433# else
434# define __SYMANTEC__
435# endif
4b41ab26
VS
436#endif
437
eddb3250
VS
438/* Force linking against required libraries under Windows CE: */
439#ifdef __WXWINCE__
440# include "wx/msw/wince/libraries.h"
441#endif
442
44893b87
VZ
443/*
444 This macro can be used to test the gcc version and can be used like this:
445
ef620df0 446# if wxCHECK_GCC_VERSION(3, 1)
44893b87 447 ... we have gcc 3.1 or later ...
ef620df0 448# else
44893b87 449 ... no gcc at all or gcc < 3.1 ...
ef620df0 450# endif
44893b87
VZ
451*/
452#define wxCHECK_GCC_VERSION( major, minor ) \
453 ( defined(__GNUC__) && defined(__GNUC_MINOR__) \
454 && ( ( __GNUC__ > (major) ) \
455 || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) ) )
456
78340847
VZ
457/*
458 This macro can be used to check that the version of mingw32 compiler is
459 at least maj.min
460 */
1c53456f 461#if ( defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || \
ac776ec9 462 defined( __CYGWIN__ ) || \
1c53456f 463 (defined(__WATCOMC__) && __WATCOMC__ >= 1200) ) && \
d5cd19b4 464 !defined(__DOS__) && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
ef620df0 465# include "wx/msw/gccpriv.h"
78340847 466#else
ef620df0
VZ
467# undef wxCHECK_W32API_VERSION
468# define wxCHECK_W32API_VERSION(maj, min) (0)
78340847
VZ
469#endif
470
1e3c12d7 471#if defined (__WXMSW__)
ef620df0
VZ
472# if !defined(__WATCOMC__)
473# define wxHAVE_RAW_BITMAP
474# endif
1e3c12d7 475#endif
bf978f96 476
01ebf752 477#if defined (__WXMAC__)
ef620df0
VZ
478# ifndef WORDS_BIGENDIAN
479# define WORDS_BIGENDIAN 1
480# endif
01ebf752
JS
481#endif
482
0b30bb0b
JS
483/* Choose which method we will use for updating menus
484 * - in OnIdle, or when we receive a wxEVT_MENU_OPEN event.
485 * Presently, only Windows and GTK+ support wxEVT_MENU_OPEN.
486 */
487#ifndef wxUSE_IDLEMENUUPDATES
12c19488 488# if (defined(__WXMSW__) || defined(__WXGTK__)) && !defined(__WXUNIVERSAL__)
ef620df0
VZ
489# define wxUSE_IDLEMENUUPDATES 0
490# else
491# define wxUSE_IDLEMENUUPDATES 1
492# endif
0b30bb0b
JS
493#endif
494
5e967044
JS
495/*
496 * Define symbols that are not yet in
497 * configure or possibly some setup.h files.
498 * They will need to be added.
499 */
500
501#ifndef wxUSE_FILECONFIG
ef620df0
VZ
502# if wxUSE_CONFIG
503# define wxUSE_FILECONFIG 1
504# else
505# define wxUSE_FILECONFIG 0
506# endif
5e967044
JS
507#endif
508
509#ifndef wxUSE_HOTKEY
ef620df0 510# define wxUSE_HOTKEY 0
5e967044
JS
511#endif
512
086b3a5b 513#if !defined(wxUSE_WXDIB) && defined(__WXMSW__)
ef620df0 514# define wxUSE_WXDIB 1
086b3a5b
JS
515#endif
516
e40bae72
RN
517/*
518 We need AvailabilityMacros.h for ifdefing out things that don't exist on
519 OSX 10.2 and lower
520 FIXME: We need a better way to detect for 10.3 then including a system header
521*/
522#ifdef __DARWIN__
523 #include <AvailabilityMacros.h>
524#endif
525
78340847
VZ
526#endif /* _WX_PLATFORM_H_ */
527