]> git.saurik.com Git - wxWidgets.git/blob - include/wx/platform.h
928ca3574366a928f937701161b5f04bceab7910
[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 Vadim Zeitlin
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 #ifdef __WXMAC_XCODE__
18 # include <unistd.h>
19 # include <TargetConditionals.h>
20 # include <AvailabilityMacros.h>
21 # ifndef MAC_OS_X_VERSION_10_4
22 # define MAC_OS_X_VERSION_10_4 1040
23 # endif
24 # ifndef MAC_OS_X_VERSION_10_5
25 # define MAC_OS_X_VERSION_10_5 1050
26 # endif
27 # ifndef MAC_OS_X_VERSION_10_6
28 # define MAC_OS_X_VERSION_10_6 1060
29 # endif
30 # ifndef MAC_OS_X_VERSION_10_7
31 # define MAC_OS_X_VERSION_10_7 1070
32 # endif
33 # ifndef MAC_OS_X_VERSION_10_8
34 # define MAC_OS_X_VERSION_10_8 1080
35 # endif
36 # include "wx/osx/config_xcode.h"
37 # ifndef __WXOSX__
38 # define __WXOSX__ 1
39 # endif
40 # ifndef __WXMAC__
41 # define __WXMAC__ 1
42 # endif
43 #endif
44
45 /*
46 first define Windows symbols if they're not defined on the command line: we
47 can autodetect everything we need if _WIN32 is defined
48 */
49 #if defined(__CYGWIN__) && defined(__WINDOWS__)
50 # ifndef __WXMSW__
51 # define __WXMSW__
52 # endif
53 #endif
54
55 #if defined(_WIN64)
56 # ifndef _WIN32
57 /*
58 a lot of code (mistakenly) uses #ifdef _WIN32 to either test for
59 Windows or to test for !__WIN16__, so we must define _WIN32 for
60 Win64 as well to ensure that the existing code continues to work.
61 */
62 # define _WIN32
63 # endif /* !_WIN32 */
64
65 # ifndef __WIN64__
66 # define __WIN64__
67 # endif /* !__WIN64__ */
68 #endif /* _WIN64 */
69
70 #if (defined(_WIN32) || defined(WIN32) || defined(__NT__) || defined(__WXWINCE__)) \
71 && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
72 # ifndef __WXMSW__
73 # define __WXMSW__
74 # endif
75 #endif /* Win32 */
76
77 #if defined(_WIN32)
78 # if !defined(__WINDOWS__)
79 # define __WINDOWS__
80 # endif
81
82 # ifndef WIN32
83 # define WIN32
84 # endif
85
86 # ifndef __WIN32__
87 # define __WIN32__
88 # endif
89 #endif /* _WIN32 */
90
91 /* Don't use widget toolkit specific code in non-GUI code */
92 #if defined(wxUSE_GUI) && !wxUSE_GUI
93 # ifdef __WXMSW__
94 # undef __WXMSW__
95 # endif
96 # ifdef __WXGTK__
97 # undef __WXGTK__
98 # endif
99 #endif
100
101 #if defined(__WXGTK__) && defined(__WINDOWS__)
102
103 # ifdef __WXMSW__
104 # undef __WXMSW__
105 # endif
106
107 #endif /* __WXGTK__ && __WINDOWS__ */
108
109 /* detect MS SmartPhone */
110 #if defined( WIN32_PLATFORM_WFSP )
111 # ifndef __SMARTPHONE__
112 # define __SMARTPHONE__
113 # endif
114 # ifndef __WXWINCE__
115 # define __WXWINCE__
116 # endif
117 #endif
118
119 /* detect PocketPC */
120 #if defined( WIN32_PLATFORM_PSPC )
121 # ifndef __POCKETPC__
122 # define __POCKETPC__
123 # endif
124 # ifndef __WXWINCE__
125 # define __WXWINCE__
126 # endif
127 #endif
128
129 /* detect Standard WinCE SDK */
130 #if defined( WCE_PLATFORM_STANDARDSDK )
131 # ifndef __WINCE_STANDARDSDK__
132 # define __WINCE_STANDARDSDK__
133 # endif
134 # ifndef __WXWINCE__
135 # define __WXWINCE__
136 # endif
137 #endif
138
139 #if defined(_WIN32_WCE) && !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC)
140 # if (_WIN32_WCE >= 400)
141 # ifndef __WINCE_NET__
142 # define __WINCE_NET__
143 # endif
144 # elif (_WIN32_WCE >= 200)
145 # ifndef __HANDHELDPC__
146 # define __HANDHELDPC__
147 # endif
148 # endif
149 # ifndef __WXWINCE__
150 # define __WXWINCE__
151 # endif
152 #endif
153
154 #if defined(__WXWINCE__) && defined(_MSC_VER) && (_MSC_VER == 1201)
155 #define __EVC4__
156 #endif
157
158 #if defined(__POCKETPC__) || defined(__SMARTPHONE__) || defined(__WXGPE__)
159 # define __WXHANDHELD__
160 #endif
161
162 #ifdef __ANDROID__
163 # define __WXANDROID__
164 # include "wx/android/config_android.h"
165 #endif
166
167 #include "wx/compiler.h"
168
169 /*
170 Include wx/setup.h for the Unix platform defines generated by configure and
171 the library compilation options
172
173 Note that it must be included before defining hardware symbols below as they
174 could be already defined by configure but it must be included after defining
175 the compiler macros above as msvc/wx/setup.h relies on them under Windows.
176 */
177 #include "wx/setup.h"
178
179 /*
180 Convenience for any optional classes that use the wxAnyButton base class.
181 */
182 #if wxUSE_TOGGLEBTN || wxUSE_BUTTON
183 #define wxHAS_ANY_BUTTON
184 #endif
185
186
187 /*
188 Hardware platform detection.
189
190 VC++ defines _M_xxx symbols.
191 */
192 #if defined(_M_IX86) || defined(i386) || defined(__i386) || defined(__i386__)
193 #ifndef __INTEL__
194 #define __INTEL__
195 #endif
196 #endif /* x86 */
197
198 #if defined(_M_IA64)
199 #ifndef __IA64__
200 #define __IA64__
201 #endif
202 #endif /* ia64 */
203
204 #if defined(_M_MPPC) || defined(__PPC__) || defined(__ppc__)
205 #ifndef __POWERPC__
206 #define __POWERPC__
207 #endif
208 #endif /* alpha */
209
210 #if defined(_M_ALPHA) || defined(__AXP__)
211 #ifndef __ALPHA__
212 #define __ALPHA__
213 #endif
214 #endif /* alpha */
215
216
217 /*
218 adjust the Unicode setting: wxUSE_UNICODE should be defined as 0 or 1
219 and is used by wxWidgets, _UNICODE and/or UNICODE may be defined or used by
220 the system headers so bring these settings in sync
221 */
222
223 /* set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined */
224 #if defined(_UNICODE) || defined(UNICODE)
225 # undef wxUSE_UNICODE
226 # define wxUSE_UNICODE 1
227 #else /* !UNICODE */
228 # ifndef wxUSE_UNICODE
229 # define wxUSE_UNICODE 0
230 # endif
231 #endif /* UNICODE/!UNICODE */
232
233 /* and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1 */
234 #if wxUSE_UNICODE
235 # ifndef _UNICODE
236 # define _UNICODE
237 # endif
238 # ifndef UNICODE
239 # define UNICODE
240 # endif
241 #endif /* wxUSE_UNICODE */
242
243
244 /*
245 test for old versions of Borland C, normally need at least 5.82, Turbo
246 explorer, available for free at http://www.turboexplorer.com/downloads
247 */
248
249
250 /*
251 Older versions of Borland C have some compiler bugs that need
252 workarounds. Mostly pertains to the free command line compiler 5.5.1.
253 */
254 #if defined(__BORLANDC__) && (__BORLANDC__ <= 0x551)
255 /*
256 The Borland free compiler is unable to handle overloaded enum
257 comparisons under certain conditions e.g. when any class has a
258 conversion ctor for an integral type and there's an overload to
259 compare between an integral type and that class type.
260 */
261 # define wxCOMPILER_NO_OVERLOAD_ON_ENUM
262
263 /*
264 This is needed to overcome bugs in 5.5.1 STL, linking errors will
265 result if it is not defined.
266 */
267 # define _RWSTD_COMPILE_INSTANTIATE
268
269 /*
270 Preprocessor in older Borland compilers have major problems
271 concatenating with ##. Specifically, if the string operands being
272 concatenated have special meaning (e.g. L"str", 123i64 etc)
273 then ## will not concatenate the operands correctly.
274
275 As a workaround, define wxPREPEND* and wxAPPEND* without using
276 wxCONCAT_HELPER.
277 */
278 # define wxCOMPILER_BROKEN_CONCAT_OPER
279 #endif /* __BORLANDC__ */
280
281 /*
282 OS: first of all, test for MS-DOS platform. We must do this before testing
283 for Unix, because DJGPP compiler defines __unix__ under MS-DOS
284 */
285 #if defined(__GO32__) || defined(__DJGPP__) || defined(__DOS__)
286 # ifndef __DOS__
287 # define __DOS__
288 # endif
289 /* size_t is the same as unsigned int for Watcom 11 compiler, */
290 /* so define it if it hadn't been done by configure yet */
291 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
292 # ifdef __WATCOMC__
293 # define wxSIZE_T_IS_UINT
294 # endif
295 # ifdef __DJGPP__
296 # define wxSIZE_T_IS_ULONG
297 # endif
298 # endif
299
300 /*
301 OS: then test for generic Unix defines, then for particular flavours and
302 finally for Unix-like systems
303 Mac OS X matches this case (__MACH__), prior Mac OS do not.
304 */
305 #elif defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
306 defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
307 defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
308 defined(__EMX__) || defined(__VMS) || defined(__BEOS__) || defined(__MACH__)
309
310 # define __UNIX_LIKE__
311
312 /* Helps SGI compilation, apparently */
313 # ifdef __SGI__
314 # ifdef __GNUG__
315 # define __need_wchar_t
316 # else /* !gcc */
317 /*
318 Note I use the term __SGI_CC__ for both cc and CC, its not a good
319 idea to mix gcc and cc/CC, the name mangling is different
320 */
321 # define __SGI_CC__
322 # endif /* gcc/!gcc */
323
324 /* system headers use this symbol and not __cplusplus in some places */
325 # ifndef _LANGUAGE_C_PLUS_PLUS
326 # define _LANGUAGE_C_PLUS_PLUS
327 # endif
328 # endif /* SGI */
329
330 # ifdef __EMX__
331 # define OS2EMX_PLAIN_CHAR
332 # endif
333 # if defined(__INNOTEK_LIBC__)
334 /* Ensure visibility of strnlen declaration */
335 # define _GNU_SOURCE
336 # endif
337
338 /* define __HPUX__ for HP-UX where standard macro is __hpux */
339 # if defined(__hpux) && !defined(__HPUX__)
340 # define __HPUX__
341 # endif /* HP-UX */
342
343 # if defined(__CYGWIN__) || defined(__WINE__)
344 # if !defined(wxSIZE_T_IS_UINT)
345 # define wxSIZE_T_IS_UINT
346 # endif
347 # endif
348
349 /* All of these should already be defined by including configure-
350 generated setup.h but we wish to support Xcode compilation without
351 requiring the user to define these himself.
352 */
353 # if defined(__APPLE__) && defined(__MACH__)
354 # ifndef __UNIX__
355 # define __UNIX__ 1
356 # endif
357 # ifndef __BSD__
358 # define __BSD__ 1
359 # endif
360 /* __DARWIN__ is our own define to mean OS X or pure Darwin */
361 # ifndef __DARWIN__
362 # define __DARWIN__ 1
363 # endif
364 /* NOTE: TARGET_CARBON is actually a 0/1 and must be 1 for OS X */
365 # ifndef TARGET_CARBON
366 # define TARGET_CARBON 1
367 # endif
368 /* OS X uses unsigned long size_t for both ILP32 and LP64 modes. */
369 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
370 # define wxSIZE_T_IS_ULONG
371 # endif
372 # endif
373
374 /*
375 OS: OS/2
376 */
377 #elif defined(__OS2__)
378
379 /* wxOS2 vs. non wxOS2 ports on OS2 platform */
380 # if !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__)
381 # ifndef __WXPM__
382 # define __WXPM__
383 # endif
384 # endif
385
386 # if defined(__IBMCPP__)
387 # define __VISAGEAVER__ __IBMCPP__
388 # endif
389
390 /* Place other OS/2 compiler environment defines here */
391 # if defined(__VISAGECPP__)
392 /* VisualAge is the only thing that understands _Optlink */
393 # define LINKAGEMODE _Optlink
394 # endif
395 # define wxSIZE_T_IS_UINT
396
397 /*
398 OS: Otherwise it must be Windows
399 */
400 #else /* Windows */
401 # ifndef __WINDOWS__
402 # define __WINDOWS__
403 # endif /* Windows */
404
405 /* to be changed for Win64! */
406 # ifndef __WIN32__
407 # error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported"
408 # endif
409
410 /* size_t is the same as unsigned int for all Windows compilers we know, */
411 /* so define it if it hadn't been done by configure yet */
412 # if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) && !defined(__WIN64__)
413 # define wxSIZE_T_IS_UINT
414 # endif
415 #endif /* OS */
416
417 /*
418 if we're on a Unix system but didn't use configure (so that setup.h didn't
419 define __UNIX__), do define __UNIX__ now
420 */
421 #if !defined(__UNIX__) && defined(__UNIX_LIKE__)
422 # define __UNIX__
423 #endif /* Unix */
424
425 #if defined(__WXMOTIF__) || defined(__WXX11__)
426 # define __X__
427 #endif
428
429 /*
430 We get "Large Files (ILP32) not supported in strict ANSI mode." #error
431 from HP-UX standard headers when compiling with g++ without this:
432 */
433 #if defined(__HPUX__) && !defined(__STDC_EXT__)
434 # define __STDC_EXT__ 1
435 #endif
436
437 /* Force linking against required libraries under Windows: */
438 #ifdef __WXWINCE__
439 # include "wx/msw/wince/libraries.h"
440 #elif defined __WINDOWS__
441 # include "wx/msw/libraries.h"
442 #endif
443
444 #if defined(__BORLANDC__) || (defined(__GNUC__) && __GNUC__ < 3)
445 #define wxNEEDS_CHARPP
446 #endif
447
448 /*
449 Handle Darwin gcc universal compilation. Don't do this in an Apple-
450 specific case since no sane compiler should be defining either
451 __BIG_ENDIAN__ or __LITTLE_ENDIAN__ unless it really is generating
452 code that will be hosted on a machine with the appropriate endianness.
453 If a compiler defines neither, assume the user or configure set
454 WORDS_BIGENDIAN appropriately.
455 */
456 #if defined(__BIG_ENDIAN__)
457 # undef WORDS_BIGENDIAN
458 # define WORDS_BIGENDIAN 1
459 #elif defined(__LITTLE_ENDIAN__)
460 # undef WORDS_BIGENDIAN
461 #elif defined(__WXMAC__) && !defined(WORDS_BIGENDIAN)
462 /* According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */
463 # warning "Compiling wxMac with probably wrong endianness"
464 #endif
465 /* also the 32/64 bit universal builds must be handled accordingly */
466 #ifdef __DARWIN__
467 # ifdef __LP64__
468 # undef SIZEOF_VOID_P
469 # undef SIZEOF_LONG
470 # undef SIZEOF_SIZE_T
471 # define SIZEOF_VOID_P 8
472 # define SIZEOF_LONG 8
473 # define SIZEOF_SIZE_T 8
474 # else
475 # undef SIZEOF_VOID_P
476 # undef SIZEOF_LONG
477 # undef SIZEOF_SIZE_T
478 # define SIZEOF_VOID_P 4
479 # define SIZEOF_LONG 4
480 # define SIZEOF_SIZE_T 4
481 # endif
482 #endif
483
484 /*
485 Define various OS X symbols before including wx/chkconf.h which uses them.
486
487 __WXOSX_MAC__ means Mac OS X, non embedded
488 __WXOSX_IPHONE__ means OS X iPhone
489 */
490
491 /*
492 Normally all of __WXOSX_XXX__, __WXOSX__ and __WXMAC__ are defined by
493 configure but ensure that we also define them if configure was not used for
494 whatever reason.
495
496 The primary symbol remains __WXOSX_XXX__ one, __WXOSX__ exists to allow
497 checking for any OS X port (Carbon and Cocoa) and __WXMAC__ is an old name
498 for it.
499 */
500 #if defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__) || defined(__WXOSX_IPHONE__)
501 # ifndef __WXOSX__
502 # define __WXOSX__ 1
503 # endif
504 # ifndef __WXMAC__
505 # define __WXMAC__ 1
506 # endif
507 #endif
508
509 #ifdef __WXOSX__
510 /* setup precise defines according to sdk used */
511 # include <TargetConditionals.h>
512 # if defined(__WXOSX_IPHONE__)
513 # if !( defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE )
514 # error "incorrect SDK for an iPhone build"
515 # endif
516 # else
517 # if wxUSE_GUI && !(defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__))
518 # error "one of __WXOSX_IPHONE__, __WXOSX_CARBON__ or __WXOSX_COCOA__ must be defined for the GUI build"
519 # endif
520 # if !( defined(TARGET_OS_MAC) && TARGET_OS_MAC )
521 # error "incorrect SDK for a Mac OS X build"
522 # endif
523 # define __WXOSX_MAC__ 1
524 # endif
525 #endif
526
527 #ifdef __WXOSX_MAC__
528 # if defined(__MACH__)
529 # include <AvailabilityMacros.h>
530 # ifndef MAC_OS_X_VERSION_10_4
531 # define MAC_OS_X_VERSION_10_4 1040
532 # endif
533 # ifndef MAC_OS_X_VERSION_10_5
534 # define MAC_OS_X_VERSION_10_5 1050
535 # endif
536 # ifndef MAC_OS_X_VERSION_10_6
537 # define MAC_OS_X_VERSION_10_6 1060
538 # endif
539 # ifndef MAC_OS_X_VERSION_10_7
540 # define MAC_OS_X_VERSION_10_7 1070
541 # endif
542 # ifndef MAC_OS_X_VERSION_10_8
543 # define MAC_OS_X_VERSION_10_8 1080
544 # endif
545 # else
546 # error "only mach-o configurations are supported"
547 # endif
548 #endif
549
550 /*
551 __WXOSX_OR_COCOA__ is a common define to wxOSX (Carbon or Cocoa) and wxCocoa ports under OS X.
552
553 DO NOT use this define in base library code. Although wxMac has its own
554 private base library (and thus __WXOSX_OR_COCOA__,__WXMAC__ and related defines are
555 valid there), wxCocoa shares its library with other ports like wxGTK and wxX11.
556
557 To keep wx authors from screwing this up, only enable __WXOSX_OR_COCOA__ for wxCocoa when
558 not compiling the base library. We determine this by first checking if
559 wxUSE_BASE is not defined. If it is not defined, then we're not buildling
560 the base library, and possibly not building wx at all (but actually building
561 user code that's using wx). If it is defined then we must check to make sure
562 it is not true. If it is true, we're building base.
563
564 If you want it in the common darwin base library then use __DARWIN__. You
565 can use any Darwin-available libraries like CoreFoundation but please avoid
566 using OS X libraries like Carbon or CoreServices.
567
568 */
569 #if defined(__WXOSX__) || (defined(__WXCOCOA__) && (!defined(wxUSE_BASE) || !wxUSE_BASE))
570 # define __WXOSX_OR_COCOA__ 1
571 #endif
572
573 /*
574 check the consistency of the settings in setup.h: note that this must be
575 done after setting wxUSE_UNICODE correctly as it is used in wx/chkconf.h
576 and after defining the compiler macros which are used in it too
577 */
578 #include "wx/chkconf.h"
579
580
581 /*
582 some compilers don't support iostream.h any longer, while some of theme
583 are not updated with <iostream> yet, so override the users setting here
584 in such case.
585 */
586 #if defined(_MSC_VER) && (_MSC_VER >= 1310)
587 # undef wxUSE_IOSTREAMH
588 # define wxUSE_IOSTREAMH 0
589 #elif defined(__DMC__) || defined(__WATCOMC__)
590 # undef wxUSE_IOSTREAMH
591 # define wxUSE_IOSTREAMH 1
592 #elif defined(__MINGW32__)
593 # undef wxUSE_IOSTREAMH
594 # define wxUSE_IOSTREAMH 0
595 #endif /* compilers with/without iostream.h */
596
597 /*
598 old C++ headers (like <iostream.h>) declare classes in the global namespace
599 while the new, standard ones (like <iostream>) do it in std:: namespace,
600 unless it's an old gcc version.
601
602 using this macro allows constuctions like "wxSTD iostream" to work in
603 either case
604 */
605 #if !wxUSE_IOSTREAMH && (!defined(__GNUC__) || ( __GNUC__ > 2 ) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
606 # define wxSTD std::
607 #else
608 # define wxSTD
609 #endif
610
611 /* On OpenVMS with the most recent HP C++ compiler some function (i.e. wscanf)
612 * are only available in the std-namespace. (BUG???)
613 */
614 #if defined( __VMS ) && (__DECCXX_VER >= 70100000) && !defined(__STD_CFRONT) && !defined( __NONAMESPACE_STD )
615 # define wxVMS_USE_STD std::
616 #else
617 # define wxVMS_USE_STD
618 #endif
619
620 #ifdef __VMS
621 #define XtDisplay XTDISPLAY
622 #ifdef __WXMOTIF__
623 #define XtParent XTPARENT
624 #define XtScreen XTSCREEN
625 #define XtWindow XTWINDOW
626 #endif
627 #endif
628
629 /* Choose which method we will use for updating menus
630 * - in OnIdle, or when we receive a wxEVT_MENU_OPEN event.
631 * Presently, only Windows, OS X and GTK+ support wxEVT_MENU_OPEN.
632 */
633 #ifndef wxUSE_IDLEMENUUPDATES
634 # if (defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXOSX__)) && !defined(__WXUNIVERSAL__)
635 # define wxUSE_IDLEMENUUPDATES 0
636 # else
637 # define wxUSE_IDLEMENUUPDATES 1
638 # endif
639 #endif
640
641 /*
642 * Define symbols that are not yet in
643 * configure or possibly some setup.h files.
644 * They will need to be added.
645 */
646
647 #ifndef wxUSE_FILECONFIG
648 # if wxUSE_CONFIG && wxUSE_TEXTFILE
649 # define wxUSE_FILECONFIG 1
650 # else
651 # define wxUSE_FILECONFIG 0
652 # endif
653 #endif
654
655 #ifndef wxUSE_HOTKEY
656 # define wxUSE_HOTKEY 0
657 #endif
658
659 #if !defined(wxUSE_WXDIB) && defined(__WXMSW__)
660 # define wxUSE_WXDIB 1
661 #endif
662
663 /*
664 Optionally supported C++ features.
665 */
666
667 /*
668 RTTI: if it is disabled in build/msw/makefile.* then this symbol will
669 already be defined but it's also possible to do it from configure (with
670 g++) or by editing project files with MSVC so test for it here too.
671 */
672 #ifndef wxNO_RTTI
673 /*
674 Only 4.3 defines __GXX_RTTI by default so its absence is not an
675 indication of disabled RTTI with the previous versions.
676 */
677 # if wxCHECK_GCC_VERSION(4, 3)
678 # ifndef __GXX_RTTI
679 # define wxNO_RTTI
680 # endif
681 # elif defined(_MSC_VER)
682 # ifndef _CPPRTTI
683 # define wxNO_RTTI
684 # endif
685 # endif
686 #endif /* wxNO_RTTI */
687
688 #endif /* _WX_PLATFORM_H_ */