further routing into wxApp
[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 #if ( defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || \
449 ( defined( __CYGWIN__ ) && defined( __WINDOWS__ ) ) || \
450 wxCHECK_WATCOM_VERSION(1,0) ) && \
451 !defined(__DOS__) && \
452 !defined(__WXPM__) && \
453 !defined(__WXMOTIF__) && \
454 !defined(__WXX11__)
455 # include "wx/msw/gccpriv.h"
456 #else
457 # undef wxCHECK_W32API_VERSION
458 # define wxCHECK_W32API_VERSION(maj, min) (0)
459 #endif
460
461
462 /*
463 Handle Darwin gcc universal compilation. Don't do this in an Apple-
464 specific case since no sane compiler should be defining either
465 __BIG_ENDIAN__ or __LITTLE_ENDIAN__ unless it really is generating
466 code that will be hosted on a machine with the appropriate endianness.
467 If a compiler defines neither, assume the user or configure set
468 WORDS_BIGENDIAN appropriately.
469 */
470 #if defined(__BIG_ENDIAN__)
471 # undef WORDS_BIGENDIAN
472 # define WORDS_BIGENDIAN 1
473 #elif defined(__LITTLE_ENDIAN__)
474 # undef WORDS_BIGENDIAN
475 #elif defined(__WXMAC__) && !defined(WORDS_BIGENDIAN)
476 /* According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */
477 # warning "Compiling wxMac with probably wrong endianness"
478 #endif
479 /* also the 32/64 bit universal builds must be handled accordingly */
480 #ifdef __DARWIN__
481 # ifdef __LP64__
482 # undef SIZEOF_VOID_P
483 # undef SIZEOF_LONG
484 # undef SIZEOF_SIZE_T
485 # define SIZEOF_VOID_P 8
486 # define SIZEOF_LONG 8
487 # define SIZEOF_SIZE_T 8
488 # else
489 # undef SIZEOF_VOID_P
490 # undef SIZEOF_LONG
491 # undef SIZEOF_SIZE_T
492 # define SIZEOF_VOID_P 4
493 # define SIZEOF_LONG 4
494 # define SIZEOF_SIZE_T 4
495 # endif
496 #endif
497
498 /*
499 Define various OS X symbols before including wx/chkconf.h which uses them.
500
501 __WXOSX_MAC__ means Mac OS X, non embedded
502 __WXOSX_IPHONE__ means OS X iPhone
503 */
504
505 /*
506 Normally all of __WXOSX_XXX__, __WXOSX__ and __WXMAC__ are defined by
507 configure but ensure that we also define them if configure was not used for
508 whatever reason.
509
510 The primary symbol remains __WXOSX_XXX__ one, __WXOSX__ exists to allow
511 checking for any OS X port (Carbon and Cocoa) and __WXMAC__ is an old name
512 for it.
513 */
514 #if defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__) || defined(__WXOSX_IPHONE__)
515 # ifndef __WXOSX__
516 # define __WXOSX__ 1
517 # endif
518 # ifndef __WXMAC__
519 # define __WXMAC__ 1
520 # endif
521 #endif
522
523 #ifdef __WXOSX__
524 /* setup precise defines according to sdk used */
525 # include <TargetConditionals.h>
526 # if defined(__WXOSX_IPHONE__)
527 # if !( defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE )
528 # error "incorrect SDK for an iPhone build"
529 # endif
530 # else
531 # if wxUSE_GUI && !(defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__))
532 # error "one of __WXOSX_IPHONE__, __WXOSX_CARBON__ or __WXOSX_COCOA__ must be defined for the GUI build"
533 # endif
534 # if !( defined(TARGET_OS_MAC) && TARGET_OS_MAC )
535 # error "incorrect SDK for a Mac OS X build"
536 # endif
537 # define __WXOSX_MAC__ 1
538 # endif
539 #endif
540
541 #ifdef __WXOSX_MAC__
542 # if defined(__MACH__)
543 # include <AvailabilityMacros.h>
544 # ifndef MAC_OS_X_VERSION_10_4
545 # define MAC_OS_X_VERSION_10_4 1040
546 # endif
547 # ifndef MAC_OS_X_VERSION_10_5
548 # define MAC_OS_X_VERSION_10_5 1050
549 # endif
550 # ifndef MAC_OS_X_VERSION_10_6
551 # define MAC_OS_X_VERSION_10_6 1060
552 # endif
553 # ifndef MAC_OS_X_VERSION_10_7
554 # define MAC_OS_X_VERSION_10_7 1070
555 # endif
556 # ifndef MAC_OS_X_VERSION_10_8
557 # define MAC_OS_X_VERSION_10_8 1080
558 # endif
559 # else
560 # error "only mach-o configurations are supported"
561 # endif
562 #endif
563
564 /*
565 __WXOSX_OR_COCOA__ is a common define to wxOSX (Carbon or Cocoa) and wxCocoa ports under OS X.
566
567 DO NOT use this define in base library code. Although wxMac has its own
568 private base library (and thus __WXOSX_OR_COCOA__,__WXMAC__ and related defines are
569 valid there), wxCocoa shares its library with other ports like wxGTK and wxX11.
570
571 To keep wx authors from screwing this up, only enable __WXOSX_OR_COCOA__ for wxCocoa when
572 not compiling the base library. We determine this by first checking if
573 wxUSE_BASE is not defined. If it is not defined, then we're not buildling
574 the base library, and possibly not building wx at all (but actually building
575 user code that's using wx). If it is defined then we must check to make sure
576 it is not true. If it is true, we're building base.
577
578 If you want it in the common darwin base library then use __DARWIN__. You
579 can use any Darwin-available libraries like CoreFoundation but please avoid
580 using OS X libraries like Carbon or CoreServices.
581
582 */
583 #if defined(__WXOSX__) || (defined(__WXCOCOA__) && (!defined(wxUSE_BASE) || !wxUSE_BASE))
584 # define __WXOSX_OR_COCOA__ 1
585 #endif
586
587 /*
588 check the consistency of the settings in setup.h: note that this must be
589 done after setting wxUSE_UNICODE correctly as it is used in wx/chkconf.h
590 and after defining the compiler macros which are used in it too
591 */
592 #include "wx/chkconf.h"
593
594
595 /*
596 some compilers don't support iostream.h any longer, while some of theme
597 are not updated with <iostream> yet, so override the users setting here
598 in such case.
599 */
600 #if defined(_MSC_VER) && (_MSC_VER >= 1310)
601 # undef wxUSE_IOSTREAMH
602 # define wxUSE_IOSTREAMH 0
603 #elif defined(__DMC__) || defined(__WATCOMC__)
604 # undef wxUSE_IOSTREAMH
605 # define wxUSE_IOSTREAMH 1
606 #elif defined(__MINGW32__)
607 # undef wxUSE_IOSTREAMH
608 # define wxUSE_IOSTREAMH 0
609 #endif /* compilers with/without iostream.h */
610
611 /*
612 old C++ headers (like <iostream.h>) declare classes in the global namespace
613 while the new, standard ones (like <iostream>) do it in std:: namespace,
614 unless it's an old gcc version.
615
616 using this macro allows constuctions like "wxSTD iostream" to work in
617 either case
618 */
619 #if !wxUSE_IOSTREAMH && (!defined(__GNUC__) || ( __GNUC__ > 2 ) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
620 # define wxSTD std::
621 #else
622 # define wxSTD
623 #endif
624
625 /* On OpenVMS with the most recent HP C++ compiler some function (i.e. wscanf)
626 * are only available in the std-namespace. (BUG???)
627 */
628 #if defined( __VMS ) && (__DECCXX_VER >= 70100000) && !defined(__STD_CFRONT) && !defined( __NONAMESPACE_STD )
629 # define wxVMS_USE_STD std::
630 #else
631 # define wxVMS_USE_STD
632 #endif
633
634 #ifdef __VMS
635 #define XtDisplay XTDISPLAY
636 #ifdef __WXMOTIF__
637 #define XtParent XTPARENT
638 #define XtScreen XTSCREEN
639 #define XtWindow XTWINDOW
640 #endif
641 #endif
642
643 /* Choose which method we will use for updating menus
644 * - in OnIdle, or when we receive a wxEVT_MENU_OPEN event.
645 * Presently, only Windows, OS X and GTK+ support wxEVT_MENU_OPEN.
646 */
647 #ifndef wxUSE_IDLEMENUUPDATES
648 # if (defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXOSX__)) && !defined(__WXUNIVERSAL__)
649 # define wxUSE_IDLEMENUUPDATES 0
650 # else
651 # define wxUSE_IDLEMENUUPDATES 1
652 # endif
653 #endif
654
655 /*
656 * Define symbols that are not yet in
657 * configure or possibly some setup.h files.
658 * They will need to be added.
659 */
660
661 #ifndef wxUSE_FILECONFIG
662 # if wxUSE_CONFIG && wxUSE_TEXTFILE
663 # define wxUSE_FILECONFIG 1
664 # else
665 # define wxUSE_FILECONFIG 0
666 # endif
667 #endif
668
669 #ifndef wxUSE_HOTKEY
670 # define wxUSE_HOTKEY 0
671 #endif
672
673 #if !defined(wxUSE_WXDIB) && defined(__WXMSW__)
674 # define wxUSE_WXDIB 1
675 #endif
676
677 /*
678 Optionally supported C++ features.
679 */
680
681 /*
682 RTTI: if it is disabled in build/msw/makefile.* then this symbol will
683 already be defined but it's also possible to do it from configure (with
684 g++) or by editing project files with MSVC so test for it here too.
685 */
686 #ifndef wxNO_RTTI
687 /*
688 Only 4.3 defines __GXX_RTTI by default so its absence is not an
689 indication of disabled RTTI with the previous versions.
690 */
691 # if wxCHECK_GCC_VERSION(4, 3)
692 # ifndef __GXX_RTTI
693 # define wxNO_RTTI
694 # endif
695 # elif defined(_MSC_VER)
696 # ifndef _CPPRTTI
697 # define wxNO_RTTI
698 # endif
699 # endif
700 #endif /* wxNO_RTTI */
701
702 #endif /* _WX_PLATFORM_H_ */