]> git.saurik.com Git - wxWidgets.git/blame - include/wx/platform.h
Dramatically optimise inserting many items in wxGenericListCtrl.
[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$
99d80019 8* Copyright: (c) 1997-2001 Vadim Zeitlin
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
f854ecb5 17
a203834e
MB
18
19/*
20 Codewarrior doesn't define any Windows symbols until some headers
21 are included
22*/
498919dd 23#ifdef __MWERKS__
4b4e81ee 24# include <stddef.h>
e2fc40b4
VZ
25
26# if !defined(__WXMAC__) && !defined(__WINDOWS__) && !defined(WIN32) && !defined(_WIN32_WCE)
27# define __PALMOS__ 0x05000000
28# endif
4b4e81ee
VZ
29#endif
30
382c4ade
VZ
31#ifdef __WXMAC_XCODE__
32# include <unistd.h>
33# include <TargetConditionals.h>
34# include <AvailabilityMacros.h>
35# include "wx/osx/config_xcode.h"
309f2b20
SC
36# ifndef __WXOSX__
37# define __WXOSX__ 1
38# endif
39# ifndef __WXMAC__
40# define __WXMAC__ 1
41# endif
17005cd7
VZ
42#endif
43
78340847
VZ
44/*
45 first define Windows symbols if they're not defined on the command line: we
46 can autodetect everything we need if _WIN32 is defined
47 */
7275146d 48#if defined(__CYGWIN__) && defined(__WINDOWS__)
ef620df0
VZ
49# ifndef __WXMSW__
50# define __WXMSW__
51# endif
d66dcb60
MB
52#endif
53
4055ed82 54#if defined(__PALMOS__)
63ccc659 55# if __PALMOS__ == 0x06000000
e2fc40b4 56# define __WXPALMOS6__ 1
63ccc659
WS
57# endif
58# if __PALMOS__ == 0x05000000
e2fc40b4 59# define __WXPALMOS5__ 1
63ccc659 60# endif
4055ed82 61# ifndef __WXPALMOS__
e2fc40b4 62# define __WXPALMOS__ 1
4055ed82
WS
63# endif
64# ifdef __WXMSW__
65# undef __WXMSW__
66# endif
67# ifdef __WINDOWS__
68# undef __WINDOWS__
69# endif
70# ifdef __WIN32__
71# undef __WIN32__
72# endif
73# ifdef WIN32
74# undef WIN32
75# endif
76# ifdef _WIN32
77# undef _WIN32
78# endif
79#endif
80
ef620df0
VZ
81#if defined(_WIN64)
82# ifndef _WIN32
83 /*
84 a lot of code (mistakenly) uses #ifdef _WIN32 to either test for
85 Windows or to test for !__WIN16__, so we must define _WIN32 for
86 Win64 as well to ensure that the existing code continues to work.
87 */
88# define _WIN32
89# endif /* !_WIN32 */
90
91# ifndef __WIN64__
92# define __WIN64__
93# endif /* !__WIN64__ */
94#endif /* _WIN64 */
95
d5cd19b4
VZ
96#if (defined(_WIN32) || defined(WIN32) || defined(__NT__) || defined(__WXWINCE__)) \
97 && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
ef620df0
VZ
98# ifndef __WXMSW__
99# define __WXMSW__
100# endif
78340847
VZ
101#endif /* Win32 */
102
c65f4634 103#if defined(__WXMSW__)
9b141468
WS
104# if !defined(__WINDOWS__)
105# define __WINDOWS__
106# endif
c65f4634
VZ
107
108# ifndef _WIN32
109# define _WIN32
110# endif
111
112# ifndef WIN32
113# define WIN32
114# endif
115
116# ifndef __WIN32__
117# define __WIN32__
118# endif
119#endif /* __WXMSW__ */
78340847 120
9b141468 121/* detect MS SmartPhone */
f2aa588b 122#if defined( WIN32_PLATFORM_WFSP )
9b141468
WS
123# ifndef __SMARTPHONE__
124# define __SMARTPHONE__
125# endif
126# ifndef __WXWINCE__
127# define __WXWINCE__
128# endif
f2aa588b
VS
129#endif
130
a9928e9d
JS
131/* detect PocketPC */
132#if defined( WIN32_PLATFORM_PSPC )
9b141468
WS
133# ifndef __POCKETPC__
134# define __POCKETPC__
135# endif
136# ifndef __WXWINCE__
137# define __WXWINCE__
138# endif
a9928e9d
JS
139#endif
140
141/* detect Standard WinCE SDK */
142#if defined( WCE_PLATFORM_STANDARDSDK )
9b141468
WS
143# ifndef __WINCE_STANDARDSDK__
144# define __WINCE_STANDARDSDK__
145# endif
146# ifndef __WXWINCE__
147# define __WXWINCE__
148# endif
a9928e9d
JS
149#endif
150
daeb8330
RR
151#if defined(_WIN32_WCE) && !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC)
152# if (_WIN32_WCE >= 400)
153# ifndef __WINCE_NET__
154# define __WINCE_NET__
155# endif
761fbb87 156# elif (_WIN32_WCE >= 200)
daeb8330
RR
157# ifndef __HANDHELDPC__
158# define __HANDHELDPC__
159# endif
160# endif
9b141468
WS
161# ifndef __WXWINCE__
162# define __WXWINCE__
163# endif
daeb8330
RR
164#endif
165
3795f11f
VZ
166#if defined(__WXWINCE__) && defined(_MSC_VER) && (_MSC_VER == 1201)
167 #define __EVC4__
168#endif
169
f1a4ca62
WS
170#if defined(__POCKETPC__) || defined(__SMARTPHONE__) || defined(__WXGPE__)
171# define __WXHANDHELD__
172#endif
173
592a7465
VZ
174/*
175 Include wx/setup.h for the Unix platform defines generated by configure and
176 the library compilation options
177
178 Note that it must be included before defining hardware symbols below as they
179 could be already defined by configure
180 */
601b9dfa
FM
181#include "wx/setup.h"
182
2f46438b
FM
183#ifdef __GCCXML__
184 /*
185 we're using gccxml to create an XML representation of the entire
601b9dfa
FM
186 wxWidgets interface; use a special setup_gccxml.h file to fix some
187 of the stuff #defined by the real setup.h
2f46438b
FM
188 */
189 #include "wx/setup_gccxml.h"
2f46438b 190#endif
592a7465 191
b4354db1
VZ
192/*
193 Convenience for any optional classes that use the wxAnyButton base class.
194 */
195#if wxUSE_TOGGLEBTN || wxUSE_BUTTON
196 #define wxHAS_ANY_BUTTON
197#endif
198
601b9dfa 199
748a4684
VZ
200/*
201 Hardware platform detection.
202
203 VC++ defines _M_xxx symbols.
204 */
205#if defined(_M_IX86) || defined(i386) || defined(__i386) || defined(__i386__)
206 #ifndef __INTEL__
207 #define __INTEL__
208 #endif
209#endif /* x86 */
210
211#if defined(_M_IA64)
212 #ifndef __IA64__
213 #define __IA64__
214 #endif
215#endif /* ia64 */
216
80da12bc 217#if defined(_M_MPPC) || defined(__PPC__) || defined(__ppc__)
748a4684
VZ
218 #ifndef __POWERPC__
219 #define __POWERPC__
220 #endif
221#endif /* alpha */
222
223#if defined(_M_ALPHA) || defined(__AXP__)
224 #ifndef __ALPHA__
225 #define __ALPHA__
226 #endif
227#endif /* alpha */
228
78340847 229
63e7198b
VZ
230/*
231 adjust the Unicode setting: wxUSE_UNICODE should be defined as 0 or 1
77ffb593 232 and is used by wxWidgets, _UNICODE and/or UNICODE may be defined or used by
63e7198b
VZ
233 the system headers so bring these settings in sync
234 */
235
236/* set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined */
237#if defined(_UNICODE) || defined(UNICODE)
238# undef wxUSE_UNICODE
239# define wxUSE_UNICODE 1
240#else /* !UNICODE */
241# ifndef wxUSE_UNICODE
242# define wxUSE_UNICODE 0
243# endif
244#endif /* UNICODE/!UNICODE */
245
246/* and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1 */
247#if wxUSE_UNICODE
248# ifndef _UNICODE
249# define _UNICODE
250# endif
251# ifndef UNICODE
252# define UNICODE
253# endif
254#endif /* wxUSE_UNICODE */
255
b3c35859 256#if defined( __MWERKS__ ) && !defined(__INTEL__)
3b2b40b4 257/* otherwise MSL headers bring in WIN32 dependant APIs */
b3c35859
SC
258#undef UNICODE
259#endif
79e70894
VZ
260
261
9eaadb1b
VZ
262/*
263 test for old versions of Borland C, normally need at least 5.82, Turbo
2f46438b 264 explorer, available for free at http://www.turboexplorer.com/downloads
6b73ac78 265*/
63ef7db3 266
6b73ac78 267
25859335
VZ
268/*
269 Older versions of Borland C have some compiler bugs that need
270 workarounds. Mostly pertains to the free command line compiler 5.5.1.
271*/
272#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x551)
273 /*
274 The Borland free compiler is unable to handle overloaded enum
275 comparisons under certain conditions e.g. when any class has a
276 conversion ctor for an integral type and there's an overload to
277 compare between an integral type and that class type.
278 */
279# define wxCOMPILER_NO_OVERLOAD_ON_ENUM
280
281 /*
282 This is needed to overcome bugs in 5.5.1 STL, linking errors will
283 result if it is not defined.
284 */
285# define _RWSTD_COMPILE_INSTANTIATE
286
287 /*
288 Preprocessor in older Borland compilers have major problems
289 concatenating with ##. Specifically, if the string operands being
d13b34d3 290 concatenated have special meaning (e.g. L"str", 123i64 etc)
25859335
VZ
291 then ## will not concatenate the operands correctly.
292
293 As a workaround, define wxPREPEND* and wxAPPEND* without using
294 wxCONCAT_HELPER.
295 */
296# define wxCOMPILER_BROKEN_CONCAT_OPER
297#endif /* __BORLANDC__ */
6b73ac78 298
6d3d756a 299/*
af588446 300 Define Watcom-specific macros.
6d3d756a
WS
301*/
302#ifndef __WATCOMC__
303# define wxWATCOM_VERSION(major,minor) 0
304# define wxCHECK_WATCOM_VERSION(major,minor) 0
305# define wxONLY_WATCOM_EARLIER_THAN(major,minor) 0
af588446 306# define WX_WATCOM_ONLY_CODE( x )
6d3d756a 307#else
af588446
VZ
308# if __WATCOMC__ < 1200
309# error "Only Open Watcom is supported in this release"
310# endif
311
6d3d756a
WS
312# define wxWATCOM_VERSION(major,minor) ( major * 100 + minor * 10 + 1100 )
313# define wxCHECK_WATCOM_VERSION(major,minor) ( __WATCOMC__ >= wxWATCOM_VERSION(major,minor) )
314# define wxONLY_WATCOM_EARLIER_THAN(major,minor) ( __WATCOMC__ < wxWATCOM_VERSION(major,minor) )
af588446 315# define WX_WATCOM_ONLY_CODE( x ) x
6d3d756a
WS
316#endif
317
78340847 318/*
865c589e
VS
319 OS: first of all, test for MS-DOS platform. We must do this before testing
320 for Unix, because DJGPP compiler defines __unix__ under MS-DOS
321 */
322#if defined(__GO32__) || defined(__DJGPP__) || defined(__DOS__)
ef620df0
VZ
323# ifndef __DOS__
324# define __DOS__
325# endif
865c589e
VS
326 /* size_t is the same as unsigned int for Watcom 11 compiler, */
327 /* so define it if it hadn't been done by configure yet */
ef620df0
VZ
328# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
329# ifdef __WATCOMC__
330# define wxSIZE_T_IS_UINT
331# endif
332# ifdef __DJGPP__
333# define wxSIZE_T_IS_ULONG
334# endif
335# endif
865c589e
VS
336
337/*
338 OS: then test for generic Unix defines, then for particular flavours and
78340847 339 finally for Unix-like systems
80da12bc 340 Mac OS X matches this case (__MACH__), prior Mac OS do not.
78340847 341 */
865c589e
VS
342#elif defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
343 defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
344 defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
80da12bc 345 defined(__EMX__) || defined(__VMS) || defined(__BEOS__) || defined(__MACH__)
78340847 346
ef620df0 347# define __UNIX_LIKE__
78340847
VZ
348
349 /* Helps SGI compilation, apparently */
ef620df0
VZ
350# ifdef __SGI__
351# ifdef __GNUG__
352# define __need_wchar_t
353# else /* !gcc */
78340847
VZ
354 /*
355 Note I use the term __SGI_CC__ for both cc and CC, its not a good
356 idea to mix gcc and cc/CC, the name mangling is different
357 */
ef620df0
VZ
358# define __SGI_CC__
359# endif /* gcc/!gcc */
ae072480
VZ
360
361 /* system headers use this symbol and not __cplusplus in some places */
362# ifndef _LANGUAGE_C_PLUS_PLUS
363# define _LANGUAGE_C_PLUS_PLUS
364# endif
ef620df0
VZ
365# endif /* SGI */
366
2686d933
VZ
367# if defined(__SUNPRO_CC)
368# ifndef __SUNCC__
369# define __SUNCC__ __SUNPRO_CC
370# endif /* Sun CC */
371# endif /* Sun CC */
ef620df0
VZ
372
373# ifdef __EMX__
374# define OS2EMX_PLAIN_CHAR
375# endif
6d8978f0
SN
376# if defined(__INNOTEK_LIBC__)
377 /* Ensure visibility of strnlen declaration */
378# define _GNU_SOURCE
379# endif
78340847
VZ
380
381 /* define __HPUX__ for HP-UX where standard macro is __hpux */
ef620df0
VZ
382# if defined(__hpux) && !defined(__HPUX__)
383# define __HPUX__
384# endif /* HP-UX */
385
386# if defined(__CYGWIN__) || defined(__WINE__)
387# if !defined(wxSIZE_T_IS_UINT)
388# define wxSIZE_T_IS_UINT
389# endif
390# endif
80da12bc
DE
391
392 /* All of these should already be defined by including configure-
393 generated setup.h but we wish to support Xcode compilation without
394 requiring the user to define these himself.
395 */
396# if defined(__APPLE__) && defined(__MACH__)
397# ifndef __UNIX__
398# define __UNIX__ 1
399# endif
400# ifndef __BSD__
401# define __BSD__ 1
402# endif
403 /* __DARWIN__ is our own define to mean OS X or pure Darwin */
404# ifndef __DARWIN__
405# define __DARWIN__ 1
406# endif
407 /* NOTE: TARGET_CARBON is actually a 0/1 and must be 1 for OS X */
408# ifndef TARGET_CARBON
409# define TARGET_CARBON 1
410# endif
411 /* OS X uses unsigned long size_t for both ILP32 and LP64 modes. */
412# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
413# define wxSIZE_T_IS_ULONG
414# endif
415# endif
416
417/*
418 OS: Classic Mac OS
419 */
78340847
VZ
420#elif defined(applec) || \
421 defined(THINK_C) || \
422 (defined(__MWERKS__) && !defined(__INTEL__))
423 /* MacOS */
ef620df0
VZ
424# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
425# define wxSIZE_T_IS_ULONG
426# endif
78340847 427
80da12bc
DE
428/*
429 OS: OS/2
430 */
78340847 431#elif defined(__OS2__)
55034339
WS
432
433 /* wxOS2 vs. non wxOS2 ports on OS2 platform */
fbf618df 434# if !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
55034339
WS
435# ifndef __WXPM__
436# define __WXPM__
437# endif
438# endif
439
ef620df0
VZ
440# if defined(__IBMCPP__)
441# define __VISAGEAVER__ __IBMCPP__
ef620df0 442# endif
78340847
VZ
443
444 /* Place other OS/2 compiler environment defines here */
ef620df0 445# if defined(__VISAGECPP__)
78340847 446 /* VisualAge is the only thing that understands _Optlink */
ef620df0
VZ
447# define LINKAGEMODE _Optlink
448# endif
449# define wxSIZE_T_IS_UINT
c427acc8 450
80da12bc
DE
451/*
452 OS: Palm OS
453 */
4055ed82
WS
454#elif defined(__PALMOS__)
455# ifdef __WIN32__
456# error "__WIN32__ should not be defined for PalmOS"
457# endif
458# ifdef __WINDOWS__
459# error "__WINDOWS__ should not be defined for PalmOS"
460# endif
461# ifdef __WXMSW__
462# error "__WXMSW__ should not be defined for PalmOS"
463# endif
464
80da12bc
DE
465/*
466 OS: Otherwise it must be Windows
467 */
78340847 468#else /* Windows */
ef620df0
VZ
469# ifndef __WINDOWS__
470# define __WINDOWS__
471# endif /* Windows */
78340847
VZ
472
473 /* to be changed for Win64! */
ef620df0 474# ifndef __WIN32__
3a5bcc4d 475# error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported"
ef620df0 476# endif
78340847
VZ
477
478 /*
479 define another standard symbol for Microsoft Visual C++: the standard
480 one (_MSC_VER) is also defined by Metrowerks compiler
481 */
ef620df0
VZ
482# if defined(_MSC_VER) && !defined(__MWERKS__)
483# define __VISUALC__ _MSC_VER
6b9c622a
VZ
484
485 /*
486 define special symbols for different VC version instead of writing tests
487 for magic numbers such as 1200, 1300 &c repeatedly
488 */
489# if __VISUALC__ < 1100
490# error "This Visual C++ version is too old and not supported any longer."
491# elif __VISUALC__ < 1200
492# define __VISUALC5__
493# elif __VISUALC__ < 1300
494# define __VISUALC6__
495# elif __VISUALC__ < 1400
496# define __VISUALC7__
497# elif __VISUALC__ < 1500
498# define __VISUALC8__
499# elif __VISUALC__ < 1600
500# define __VISUALC9__
5c892f57
VZ
501# elif __VISUALC__ < 1700
502# define __VISUALC10__
6b9c622a 503# else
5c892f57 504# pragma message("Please update wx/platform.h to recognize this VC++ version")
6b9c622a
VZ
505# endif
506
ef620df0
VZ
507# elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
508# define __BORLANDC__
6d3d756a 509# elif defined(__WATCOMC__)
ef620df0
VZ
510# elif defined(__SC__)
511# define __SYMANTECC__
512# endif /* compiler */
78340847
VZ
513
514 /* size_t is the same as unsigned int for all Windows compilers we know, */
515 /* so define it if it hadn't been done by configure yet */
3656eefc 516# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) && !defined(__WIN64__)
ef620df0
VZ
517# define wxSIZE_T_IS_UINT
518# endif
78340847
VZ
519#endif /* OS */
520
521/*
522 if we're on a Unix system but didn't use configure (so that setup.h didn't
523 define __UNIX__), do define __UNIX__ now
524 */
525#if !defined(__UNIX__) && defined(__UNIX_LIKE__)
ef620df0 526# define __UNIX__
78340847
VZ
527#endif /* Unix */
528
f79bd02d 529#if defined(__WXMOTIF__) || defined(__WXX11__)
ef620df0 530# define __X__
78340847
VZ
531#endif
532
4b41ab26 533#ifdef __SC__
ef620df0
VZ
534# ifdef __DMC__
535# define __DIGITALMARS__
536# else
537# define __SYMANTEC__
538# endif
4b41ab26
VS
539#endif
540
17a1ebd1
VZ
541#ifdef __INTEL_COMPILER
542# define __INTELC__
543#endif
544
7eb00c80
VZ
545/*
546 We get "Large Files (ILP32) not supported in strict ANSI mode." #error
547 from HP-UX standard headers when compiling with g++ without this:
548 */
549#if defined(__HPUX__) && !defined(__STDC_EXT__)
550# define __STDC_EXT__ 1
551#endif
552
a84d5f9d 553/* Force linking against required libraries under Windows: */
eddb3250
VS
554#ifdef __WXWINCE__
555# include "wx/msw/wince/libraries.h"
a84d5f9d
MW
556#elif defined __WINDOWS__
557# include "wx/msw/libraries.h"
eddb3250
VS
558#endif
559
44893b87
VZ
560/*
561 This macro can be used to test the gcc version and can be used like this:
562
ef620df0 563# if wxCHECK_GCC_VERSION(3, 1)
44893b87 564 ... we have gcc 3.1 or later ...
ef620df0 565# else
44893b87 566 ... no gcc at all or gcc < 3.1 ...
ef620df0 567# endif
44893b87 568*/
49ca2a99
PC
569#if defined(__GNUC__) && defined(__GNUC_MINOR__)
570 #define wxCHECK_GCC_VERSION( major, minor ) \
571 ( ( __GNUC__ > (major) ) \
572 || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) )
573#else
574 #define wxCHECK_GCC_VERSION( major, minor ) 0
575#endif
44893b87 576
459f812b
SN
577#if defined(__BORLANDC__) || (defined(__GNUC__) && __GNUC__ < 3)
578#define wxNEEDS_CHARPP
579#endif
580
a38c9b43
VS
581/*
582 This macro can be used to test the Visual C++ version.
583*/
584#ifndef __VISUALC__
585# define wxVISUALC_VERSION(major) 0
586# define wxCHECK_VISUALC_VERSION(major) 0
587#else
588# define wxVISUALC_VERSION(major) ( (6 + major) * 100 )
589# define wxCHECK_VISUALC_VERSION(major) ( __VISUALC__ >= wxVISUALC_VERSION(major) )
590#endif
591
78340847
VZ
592/*
593 This macro can be used to check that the version of mingw32 compiler is
594 at least maj.min
595 */
a0be6908 596#if ( defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || \
7275146d 597 ( defined( __CYGWIN__ ) && defined( __WINDOWS__ ) ) || \
6d3d756a 598 wxCHECK_WATCOM_VERSION(1,0) ) && \
a0be6908 599 !defined(__DOS__) && \
cb7d7375 600 !defined(__WXPM__) && \
a0be6908
WS
601 !defined(__WXMOTIF__) && \
602 !defined(__WXGTK__) && \
603 !defined(__WXX11__) && \
604 !defined(__WXPALMOS__)
ef620df0 605# include "wx/msw/gccpriv.h"
78340847 606#else
ef620df0
VZ
607# undef wxCHECK_W32API_VERSION
608# define wxCHECK_W32API_VERSION(maj, min) (0)
61a69259
MW
609# undef wxCHECK_MINGW32_VERSION
610# define wxCHECK_MINGW32_VERSION(maj, min) (0)
78340847
VZ
611#endif
612
2686d933
VZ
613/**
614 This is similar to wxCHECK_GCC_VERSION but for Sun CC compiler.
615 */
616#ifdef __SUNCC__
617 /*
618 __SUNCC__ is 0xVRP where V is major version, R release and P patch level
619 */
620 #define wxCHECK_SUNCC_VERSION(maj, min) (__SUNCC__ >= (((maj)<<8) | ((min)<<4)))
621#else
622 #define wxCHECK_SUNCC_VERSION(maj, min) (0)
623#endif
624
3d909cc4
SC
625/*
626 Handle Darwin gcc universal compilation. Don't do this in an Apple-
627 specific case since no sane compiler should be defining either
628 __BIG_ENDIAN__ or __LITTLE_ENDIAN__ unless it really is generating
629 code that will be hosted on a machine with the appropriate endianness.
630 If a compiler defines neither, assume the user or configure set
631 WORDS_BIGENDIAN appropriately.
632 */
633#if defined(__BIG_ENDIAN__)
634# undef WORDS_BIGENDIAN
635# define WORDS_BIGENDIAN 1
636#elif defined(__LITTLE_ENDIAN__)
637# undef WORDS_BIGENDIAN
638#elif defined(__WXMAC__) && !defined(WORDS_BIGENDIAN)
639/* According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */
640# warning "Compiling wxMac with probably wrong endianness"
641#endif
642/* also the 32/64 bit universal builds must be handled accordingly */
643#ifdef __DARWIN__
644# ifdef __LP64__
645# undef SIZEOF_VOID_P
646# undef SIZEOF_LONG
647# undef SIZEOF_SIZE_T
648# define SIZEOF_VOID_P 8
649# define SIZEOF_LONG 8
650# define SIZEOF_SIZE_T 8
651# else
652# undef SIZEOF_VOID_P
653# undef SIZEOF_LONG
654# undef SIZEOF_SIZE_T
655# define SIZEOF_VOID_P 4
656# define SIZEOF_LONG 4
657# define SIZEOF_SIZE_T 4
658# endif
659#endif
660
661/*
662 Define various OS X symbols before including wx/chkconf.h which uses them.
663
664 __WXOSX_MAC__ means Mac OS X, non embedded
665 __WXOSX_IPHONE__ means OS X iPhone
666 */
667
668/*
669 Normally all of __WXOSX_XXX__, __WXOSX__ and __WXMAC__ are defined by
670 configure but ensure that we also define them if configure was not used for
671 whatever reason.
672
673 The primary symbol remains __WXOSX_XXX__ one, __WXOSX__ exists to allow
674 checking for any OS X port (Carbon and Cocoa) and __WXMAC__ is an old name
675 for it.
676 */
677#if defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__) || defined(__WXOSX_IPHONE__) \
678 || (defined(__DARWIN__) && !wxUSE_GUI)
679# ifndef __WXOSX__
680# define __WXOSX__ 1
681# endif
682# ifndef __WXMAC__
683# define __WXMAC__ 1
684# endif
685#endif
686
687#ifdef __WXOSX__
688/* setup precise defines according to sdk used */
689# include <TargetConditionals.h>
690# if defined(__WXOSX_IPHONE__)
691# if !( defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE )
692# error "incorrect SDK for an iPhone build"
693# endif
694# else
695# if wxUSE_GUI && !(defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__))
696# error "one of __WXOSX_IPHONE__, __WXOSX_CARBON__ or __WXOSX_COCOA__ must be defined for the GUI build"
697# endif
698# if !( defined(TARGET_OS_MAC) && TARGET_OS_MAC )
699# error "incorrect SDK for a Mac OS X build"
700# endif
701# define __WXOSX_MAC__ 1
702# endif
703#endif
704
705#ifdef __WXOSX_MAC__
706# if defined(__MACH__)
707# include <AvailabilityMacros.h>
708# ifndef MAC_OS_X_VERSION_10_4
709# define MAC_OS_X_VERSION_10_4 1040
710# endif
711# ifndef MAC_OS_X_VERSION_10_5
712# define MAC_OS_X_VERSION_10_5 1050
713# endif
714# ifndef MAC_OS_X_VERSION_10_6
715# define MAC_OS_X_VERSION_10_6 1060
716# endif
717# else
718# error "only mach-o configurations are supported"
719# endif
720#endif
721
722/*
723 __WXOSX_OR_COCOA__ is a common define to wxOSX (Carbon or Cocoa) and wxCocoa ports under OS X.
724
725 DO NOT use this define in base library code. Although wxMac has its own
726 private base library (and thus __WXOSX_OR_COCOA__,__WXMAC__ and related defines are
727 valid there), wxCocoa shares its library with other ports like wxGTK and wxX11.
728
729 To keep wx authors from screwing this up, only enable __WXOSX_OR_COCOA__ for wxCocoa when
730 not compiling the base library. We determine this by first checking if
731 wxUSE_BASE is not defined. If it is not defined, then we're not buildling
732 the base library, and possibly not building wx at all (but actually building
733 user code that's using wx). If it is defined then we must check to make sure
734 it is not true. If it is true, we're building base.
735
736 If you want it in the common darwin base library then use __DARWIN__. You
737 can use any Darwin-available libraries like CoreFoundation but please avoid
738 using OS X libraries like Carbon or CoreServices.
739
740 */
741#if defined(__WXOSX__) || (defined(__WXCOCOA__) && (!defined(wxUSE_BASE) || !wxUSE_BASE))
742# define __WXOSX_OR_COCOA__ 1
743#endif
382c4ade 744
d6f2a891
VZ
745/*
746 check the consistency of the settings in setup.h: note that this must be
747 done after setting wxUSE_UNICODE correctly as it is used in wx/chkconf.h
748 and after defining the compiler macros which are used in it too
749 */
750#include "wx/chkconf.h"
751
752
753/*
754 some compilers don't support iostream.h any longer, while some of theme
755 are not updated with <iostream> yet, so override the users setting here
756 in such case.
757 */
758#if defined(_MSC_VER) && (_MSC_VER >= 1310)
759# undef wxUSE_IOSTREAMH
760# define wxUSE_IOSTREAMH 0
761#elif defined(__DMC__) || defined(__WATCOMC__)
762# undef wxUSE_IOSTREAMH
763# define wxUSE_IOSTREAMH 1
764#elif defined(__MINGW32__)
765# undef wxUSE_IOSTREAMH
766# define wxUSE_IOSTREAMH 0
767#endif /* compilers with/without iostream.h */
768
769/*
770 old C++ headers (like <iostream.h>) declare classes in the global namespace
771 while the new, standard ones (like <iostream>) do it in std:: namespace,
772 unless it's an old gcc version.
773
774 using this macro allows constuctions like "wxSTD iostream" to work in
775 either case
776 */
777#if !wxUSE_IOSTREAMH && (!defined(__GNUC__) || ( __GNUC__ > 2 ) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
778# define wxSTD std::
779#else
780# define wxSTD
781#endif
782
b6937696
JJ
783/* On OpenVMS with the most recent HP C++ compiler some function (i.e. wscanf)
784 * are only available in the std-namespace. (BUG???)
785 */
786#if defined( __VMS ) && (__DECCXX_VER >= 70100000) && !defined(__STD_CFRONT) && !defined( __NONAMESPACE_STD )
787# define wxVMS_USE_STD std::
788#else
789# define wxVMS_USE_STD
790#endif
791
455f7c82
VZ
792#ifdef __VMS
793#define XtDisplay XTDISPLAY
794#ifdef __WXMOTIF__
795#define XtParent XTPARENT
796#define XtScreen XTSCREEN
797#define XtWindow XTWINDOW
798#endif
799#endif
800
0b30bb0b
JS
801/* Choose which method we will use for updating menus
802 * - in OnIdle, or when we receive a wxEVT_MENU_OPEN event.
803 * Presently, only Windows and GTK+ support wxEVT_MENU_OPEN.
804 */
805#ifndef wxUSE_IDLEMENUUPDATES
12c19488 806# if (defined(__WXMSW__) || defined(__WXGTK__)) && !defined(__WXUNIVERSAL__)
ef620df0
VZ
807# define wxUSE_IDLEMENUUPDATES 0
808# else
809# define wxUSE_IDLEMENUUPDATES 1
810# endif
0b30bb0b
JS
811#endif
812
5e967044
JS
813/*
814 * Define symbols that are not yet in
815 * configure or possibly some setup.h files.
816 * They will need to be added.
817 */
818
819#ifndef wxUSE_FILECONFIG
6502dc68 820# if wxUSE_CONFIG && wxUSE_TEXTFILE
ef620df0
VZ
821# define wxUSE_FILECONFIG 1
822# else
823# define wxUSE_FILECONFIG 0
824# endif
5e967044
JS
825#endif
826
827#ifndef wxUSE_HOTKEY
ef620df0 828# define wxUSE_HOTKEY 0
5e967044
JS
829#endif
830
086b3a5b 831#if !defined(wxUSE_WXDIB) && defined(__WXMSW__)
ef620df0 832# define wxUSE_WXDIB 1
086b3a5b
JS
833#endif
834
e2fc40b4
VZ
835#if defined (__WXPALMOS__)
836#include "wx/palmos/missing.h"
e78c47e3 837#endif /* __WXPALMOS__ */
e2fc40b4
VZ
838
839#if !defined (__WXPALMOS5__)
840#define POSSEC_APPBASE
841#define POSSEC_ARCHIVE
842#define POSSEC_CLNTDATA
843#define POSSEC_CMDLINE
844#define POSSEC_CONFIG
845#define POSSEC_DATETIME
846#define POSSEC_DATETIME2
847#define POSSEC_DATSTRM
848#define POSSEC_DIRCMN
849#define POSSEC_DYNARRAY
850#define POSSEC_DYNLIB
851#define POSSEC_DYNLOAD
852#define POSSEC_ENCCONV
853#define POSSEC_EXTENDED
854#define POSSEC_FFILE
855#define POSSEC_FILE
856#define POSSEC_FILECONF
857#define POSSEC_FILEFN
e78c47e3 858#endif /* __WXPALMOS5__ */
e2fc40b4 859
e55e621e
VZ
860/*
861 Optionally supported C++ features.
862 */
863
864/*
865 RTTI: if it is disabled in build/msw/makefile.* then this symbol will
866 already be defined but it's also possible to do it from configure (with
867 g++) or by editing project files with MSVC so test for it here too.
868 */
869#ifndef wxNO_RTTI
3017880e
VZ
870 /*
871 Only 4.3 defines __GXX_RTTI by default so its absence is not an
872 indication of disabled RTTI with the previous versions.
873 */
874# if wxCHECK_GCC_VERSION(4, 3)
e55e621e
VZ
875# ifndef __GXX_RTTI
876# define wxNO_RTTI
877# endif
878# elif defined(_MSC_VER)
879# ifndef _CPPRTTI
880# define wxNO_RTTI
881# endif
882# endif
e78c47e3 883#endif /* wxNO_RTTI */
e55e621e 884
78340847 885#endif /* _WX_PLATFORM_H_ */