]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/platform.h
No changes, just add another case to a switch on wxMouseButton.
[wxWidgets.git] / include / wx / platform.h
index 9e7d5bf4f79de5777c3c2bf5d96032fc8cc479f1..6f2601ff46fe31b10cdb70491c08d306f1584f3b 100644 (file)
 #ifndef _WX_PLATFORM_H_
 #define _WX_PLATFORM_H_
 
 #ifndef _WX_PLATFORM_H_
 #define _WX_PLATFORM_H_
 
+/* GUI build by default */
+#if !defined(wxUSE_GUI)
+#   define wxUSE_GUI 1
+#endif /* !defined(wxUSE_GUI) */
+
 
 /*
     Codewarrior doesn't define any Windows symbols until some headers
 
 /*
     Codewarrior doesn't define any Windows symbols until some headers
 #  endif
 #endif
 
 #  endif
 #endif
 
+#ifdef __WXMAC_XCODE__
+#    include <unistd.h>
+#    include <TargetConditionals.h>
+#    include <AvailabilityMacros.h>
+#    include "wx/osx/config_xcode.h"
+#endif
+
 /*
 /*
-    WXMAC variants
-    __WXMAC_CLASSIC__ means ppc non-carbon builds, __WXMAC_CARBON__ means
-    carbon API available (mach or cfm builds) , __WXMAC_OSX__ means mach-o
-    builds, running under 10.2 + only
-*/
-#ifdef __WXMAC__
+ Handle Darwin gcc universal compilation.  Don't do this in an Apple-
+ specific case since no sane compiler should be defining either
+ __BIG_ENDIAN__ or __LITTLE_ENDIAN__ unless it really is generating
+ code that will be hosted on a machine with the appropriate endianness.
+ If a compiler defines neither, assume the user or configure set
+ WORDS_BIGENDIAN appropriately.
+ */
+#if defined(__BIG_ENDIAN__)
+#    undef WORDS_BIGENDIAN
+#    define WORDS_BIGENDIAN 1
+#elif defined(__LITTLE_ENDIAN__)
+#    undef WORDS_BIGENDIAN
+#elif defined(__WXMAC__) && !defined(WORDS_BIGENDIAN)
+/*  According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */
+#    warning "Compiling wxMac with probably wrong endianness"
+#endif
+/* also the 32/64 bit universal builds must be handled accordingly */
+#ifdef __DARWIN__
+#    ifdef __LP64__
+#        undef SIZEOF_VOID_P
+#        undef SIZEOF_LONG
+#        undef SIZEOF_SIZE_T
+#        define SIZEOF_VOID_P 8
+#        define SIZEOF_LONG 8
+#        define SIZEOF_SIZE_T 8
+#    else
+#        undef SIZEOF_VOID_P
+#        undef SIZEOF_LONG
+#        undef SIZEOF_SIZE_T
+#        define SIZEOF_VOID_P 4
+#        define SIZEOF_LONG 4
+#        define SIZEOF_SIZE_T 4
+#    endif
+#endif
+
+/*
+ Define various OS X symbols before including wx/chkconf.h which uses them.
+ __WXOSX_MAC__ means Mac OS X, non embedded
+ __WXOSX_IPHONE__ means OS X iPhone
+ */
+
+/*
+ Normally all of __WXOSX_XXX__, __WXOSX__ and __WXMAC__ are defined by
+ configure but ensure that we also define them if configure was not used for
+ whatever reason.
+ The primary symbol remains __WXOSX_XXX__ one, __WXOSX__ exists to allow
+ checking for any OS X port (Carbon and Cocoa) and __WXMAC__ is an old name
+ for it.
+ */
+#if defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__) || defined(__WXOSX_IPHONE__) \
+|| (defined(__DARWIN__) && !wxUSE_GUI)
+#   ifndef __WXOSX__
+#       define __WXOSX__ 1
+#   endif
+#   ifndef __WXMAC__
+#       define __WXMAC__ 1
+#   endif
+#endif
+
+#ifdef __WXOSX__
+/* setup precise defines according to sdk used */
+#   include <TargetConditionals.h>
+#   if defined(__WXOSX_IPHONE__)
+#       if !( defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE )
+#           error "incorrect SDK for an iPhone build"
+#       endif
+#   else
+#       if wxUSE_GUI && !(defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__))
+#           error "one of __WXOSX_IPHONE__, __WXOSX_CARBON__ or __WXOSX_COCOA__ must be defined for the GUI build"
+#       endif
+#       if !( defined(TARGET_OS_MAC) && TARGET_OS_MAC )
+#           error "incorrect SDK for a Mac OS X build"
+#       endif
+#       define __WXOSX_MAC__ 1
+#   endif
+#endif
+
+#ifdef __WXOSX_MAC__
 #    if defined(__MACH__)
 #    if defined(__MACH__)
-#        define __WXMAC_OSX__
-#        define __WXMAC_CARBON__ /* for backwards compat in user code still defined */
 #        include <AvailabilityMacros.h>
 #        ifndef MAC_OS_X_VERSION_10_4
 #           define MAC_OS_X_VERSION_10_4 1040
 #        include <AvailabilityMacros.h>
 #        ifndef MAC_OS_X_VERSION_10_4
 #           define MAC_OS_X_VERSION_10_4 1040
 #        ifndef MAC_OS_X_VERSION_10_5
 #           define MAC_OS_X_VERSION_10_5 1050
 #        endif
 #        ifndef MAC_OS_X_VERSION_10_5
 #           define MAC_OS_X_VERSION_10_5 1050
 #        endif
+#        ifndef MAC_OS_X_VERSION_10_6
+#           define MAC_OS_X_VERSION_10_6 1060
+#        endif
 #    else
 #        error "only mach-o configurations are supported"
 #    endif
 #endif
 
 /*
 #    else
 #        error "only mach-o configurations are supported"
 #    endif
 #endif
 
 /*
   __WXOSX__ is a common define to wxMac (Carbon) and wxCocoa ports under OS X.
-
   DO NOT use this define in base library code.  Although wxMac has its own
   private base library (and thus __WXOSX__,__WXMAC__ and related defines are
   valid there), wxCocoa shares its library with other ports like wxGTK and wxX11.
-
   To keep wx authors from screwing this up, only enable __WXOSX__ for wxCocoa when
   not compiling the base library.  We determine this by first checking if
   wxUSE_BASE is not defined.  If it is not defined, then we're not buildling
   the base library, and possibly not building wx at all (but actually building
   user code that's using wx). If it is defined then we must check to make sure
   it is not true.  If it is true, we're building base.
-
   If you want it in the common darwin base library then use __DARWIN__.  You
   can use any Darwin-available libraries like CoreFoundation but please avoid
   using OS X libraries like Carbon or CoreServices.
-
__WXOSX_OR_COCOA__ is a common define to wxOSX (Carbon or Cocoa) and wxCocoa ports under OS X.
+ DO NOT use this define in base library code.  Although wxMac has its own
private base library (and thus __WXOSX_OR_COCOA__,__WXMAC__ and related defines are
+ valid there), wxCocoa shares its library with other ports like wxGTK and wxX11.
To keep wx authors from screwing this up, only enable __WXOSX_OR_COCOA__ for wxCocoa when
+ not compiling the base library.  We determine this by first checking if
+ wxUSE_BASE is not defined.  If it is not defined, then we're not buildling
+ the base library, and possibly not building wx at all (but actually building
+ user code that's using wx). If it is defined then we must check to make sure
+ it is not true.  If it is true, we're building base.
+ If you want it in the common darwin base library then use __DARWIN__.  You
+ can use any Darwin-available libraries like CoreFoundation but please avoid
+ using OS X libraries like Carbon or CoreServices.
  */
  */
-#if defined(__WXMAC_OSX__) || (defined(__WXCOCOA__) && (!defined(wxUSE_BASE) || !wxUSE_BASE)) || defined(__WXASPEN__)
-#   define __WXOSX__
+#if defined(__WXOSX__) || (defined(__WXCOCOA__) && (!defined(wxUSE_BASE) || !wxUSE_BASE))
+#   define __WXOSX_OR_COCOA__ 1
 #endif
 
 #endif
 
-#ifdef __WXOSX__
-#    ifdef __WXMAC_XCODE__
-#        include <unistd.h>
-#        include "wx/mac/config_xcode.h"
-#    endif
-#endif
 /*
    first define Windows symbols if they're not defined on the command line: we
    can autodetect everything we need if _WIN32 is defined
 /*
    first define Windows symbols if they're not defined on the command line: we
    can autodetect everything we need if _WIN32 is defined
 #    ifndef __WXMSW__
 #        define __WXMSW__
 #    endif
 #    ifndef __WXMSW__
 #        define __WXMSW__
 #    endif
-
-#    ifndef _WIN32
-#        define _WIN32
-#    endif
-
-#    ifndef WIN32
-#        define WIN32
-#    endif
 #endif
 
 #if defined(__PALMOS__)
 #endif
 
 #if defined(__PALMOS__)
 #    ifndef __WXMSW__
 #        define __WXMSW__
 #    endif
 #    ifndef __WXMSW__
 #        define __WXMSW__
 #    endif
-
-#    ifndef __WIN32__
-#        define __WIN32__
-#    endif
 #endif /* Win32 */
 
 #endif /* Win32 */
 
-#if defined(__WXMSW__) || defined(__WIN32__)
+#if defined(__WXMSW__)
 #   if !defined(__WINDOWS__)
 #       define __WINDOWS__
 #   endif
 #   if !defined(__WINDOWS__)
 #       define __WINDOWS__
 #   endif
-#endif
+
+#   ifndef _WIN32
+#        define _WIN32
+#   endif
+
+#   ifndef WIN32
+#        define WIN32
+#   endif
+
+#   ifndef __WIN32__
+#        define __WIN32__
+#   endif
+#endif /* __WXMSW__ */
 
 /* detect MS SmartPhone */
 #if defined( WIN32_PLATFORM_WFSP )
 
 /* detect MS SmartPhone */
 #if defined( WIN32_PLATFORM_WFSP )
 #   endif
 #endif
 
 #   endif
 #endif
 
+#if defined(__WXWINCE__) && defined(_MSC_VER) && (_MSC_VER == 1201)
+    #define __EVC4__
+#endif
+
 #if defined(__POCKETPC__) || defined(__SMARTPHONE__) || defined(__WXGPE__)
 #   define __WXHANDHELD__
 #endif
 #if defined(__POCKETPC__) || defined(__SMARTPHONE__) || defined(__WXGPE__)
 #   define __WXHANDHELD__
 #endif
    Note that it must be included before defining hardware symbols below as they
    could be already defined by configure
  */
    Note that it must be included before defining hardware symbols below as they
    could be already defined by configure
  */
+#include "wx/setup.h"
+
 #ifdef __GCCXML__
     /*
         we're using gccxml to create an XML representation of the entire
 #ifdef __GCCXML__
     /*
         we're using gccxml to create an XML representation of the entire
-        wxWidgets interface; pass it a special setup.h file
+        wxWidgets interface; use a special setup_gccxml.h file to fix some
+        of the stuff #defined by the real setup.h
     */
     #include "wx/setup_gccxml.h"
     */
     #include "wx/setup_gccxml.h"
-#else
-    #include "wx/setup.h"
 #endif
 
 #endif
 
+/*
+   Convenience for any optional classes that use the wxAnyButton base class.
+ */
+#if wxUSE_TOGGLEBTN || wxUSE_BUTTON
+    #define wxHAS_ANY_BUTTON
+#endif
+
+
 /*
    Hardware platform detection.
 
 /*
    Hardware platform detection.
 
    test for old versions of Borland C, normally need at least 5.82, Turbo
    explorer, available for free at http://www.turboexplorer.com/downloads
 */
    test for old versions of Borland C, normally need at least 5.82, Turbo
    explorer, available for free at http://www.turboexplorer.com/downloads
 */
-#if defined(__BORLANDC__) && (__BORLANDC__ < 0x550)
-#   error "wxWidgets requires a newer version of Borland, we recommend upgrading to 5.82 (Turbo Explorer). You may at your own risk remove this line and try building but be prepared to get build errors."
-#endif /* __BORLANDC__ */
 
 
-#if defined(__BORLANDC__) && (__BORLANDC__ < 0x582) && (__BORLANDC__ > 0x559)
-#   ifndef _USE_OLD_RW_STL
-#       error "wxWidgets is incompatible with default Borland C++ 5.6 STL library, please add -D_USE_OLD_RW_STL to your bcc32.cfg to use RogueWave STL implementation."
-#   endif
-#endif /* __BORLANDC__ */
 
 
+/*
+    Older versions of Borland C have some compiler bugs that need
+    workarounds. Mostly pertains to the free command line compiler 5.5.1.
+*/
+#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x551)
+    /*
+        The Borland free compiler is unable to handle overloaded enum
+        comparisons under certain conditions e.g. when any class has a
+        conversion ctor for an integral type and there's an overload to
+        compare between an integral type and that class type.
+    */
+#   define wxCOMPILER_NO_OVERLOAD_ON_ENUM
+
+    /*
+        This is needed to overcome bugs in 5.5.1 STL, linking errors will
+        result if it is not defined.
+     */
+#   define _RWSTD_COMPILE_INSTANTIATE
+
+    /*
+        Preprocessor in older Borland compilers have major problems
+        concatenating with ##. Specifically, if the string operands being
+        concatenated have special meaning (e.g. L"str", 123i64 etc)
+        then ## will not concatenate the operands correctly.
+
+        As a workaround, define wxPREPEND* and wxAPPEND* without using
+        wxCONCAT_HELPER.
+    */
+#   define wxCOMPILER_BROKEN_CONCAT_OPER
+#endif /* __BORLANDC__ */
 
 /*
 
 /*
-   This macro can be used to test the Open Watcom version.
+   Define Watcom-specific macros.
 */
 #ifndef __WATCOMC__
 #   define wxWATCOM_VERSION(major,minor) 0
 #   define wxCHECK_WATCOM_VERSION(major,minor) 0
 #   define wxONLY_WATCOM_EARLIER_THAN(major,minor) 0
 */
 #ifndef __WATCOMC__
 #   define wxWATCOM_VERSION(major,minor) 0
 #   define wxCHECK_WATCOM_VERSION(major,minor) 0
 #   define wxONLY_WATCOM_EARLIER_THAN(major,minor) 0
-#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
-#   error "Only Open Watcom is supported in this release"
+#   define WX_WATCOM_ONLY_CODE( x )
 #else
 #else
+#   if __WATCOMC__ < 1200
+#       error "Only Open Watcom is supported in this release"
+#   endif
+
 #   define wxWATCOM_VERSION(major,minor) ( major * 100 + minor * 10 + 1100 )
 #   define wxCHECK_WATCOM_VERSION(major,minor) ( __WATCOMC__ >= wxWATCOM_VERSION(major,minor) )
 #   define wxONLY_WATCOM_EARLIER_THAN(major,minor) ( __WATCOMC__ < wxWATCOM_VERSION(major,minor) )
 #   define wxWATCOM_VERSION(major,minor) ( major * 100 + minor * 10 + 1100 )
 #   define wxCHECK_WATCOM_VERSION(major,minor) ( __WATCOMC__ >= wxWATCOM_VERSION(major,minor) )
 #   define wxONLY_WATCOM_EARLIER_THAN(major,minor) ( __WATCOMC__ < wxWATCOM_VERSION(major,minor) )
+#   define WX_WATCOM_ONLY_CODE( x )  x
 #endif
 
 /*
 #endif
 
 /*
 
 #    ifdef __EMX__
 #        define OS2EMX_PLAIN_CHAR
 
 #    ifdef __EMX__
 #        define OS2EMX_PLAIN_CHAR
+#    endif
+#    if defined(__INNOTEK_LIBC__)
+        /* Ensure visibility of strnlen declaration */
+#        define _GNU_SOURCE
 #    endif
 
     /* define __HPUX__ for HP-UX where standard macro is __hpux */
 #    endif
 
     /* define __HPUX__ for HP-UX where standard macro is __hpux */
 #       define __VISUALC8__
 #   elif __VISUALC__ < 1600
 #       define __VISUALC9__
 #       define __VISUALC8__
 #   elif __VISUALC__ < 1600
 #       define __VISUALC9__
+#   elif __VISUALC__ < 1700
+#       define __VISUALC10__
 #   else
 #   else
-#       pragma message("Please update this code for the next VC++ version")
+#       pragma message("Please update wx/platform.h to recognize this VC++ version")
 #   endif
 
 #    elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
 #   endif
 
 #    elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
 #else
 #    undef wxCHECK_W32API_VERSION
 #    define wxCHECK_W32API_VERSION(maj, min) (0)
 #else
 #    undef wxCHECK_W32API_VERSION
 #    define wxCHECK_W32API_VERSION(maj, min) (0)
+#    undef wxCHECK_MINGW32_VERSION
+#    define wxCHECK_MINGW32_VERSION(maj, min) (0)
 #endif
 
 /**
 #endif
 
 /**
     #define wxCHECK_SUNCC_VERSION(maj, min) (0)
 #endif
 
     #define wxCHECK_SUNCC_VERSION(maj, min) (0)
 #endif
 
-/*
-    Handle Darwin gcc universal compilation.  Don't do this in an Apple-
-    specific case since no sane compiler should be defining either
-    __BIG_ENDIAN__ or __LITTLE_ENDIAN__ unless it really is generating
-    code that will be hosted on a machine with the appropriate endianness.
-    If a compiler defines neither, assume the user or configure set
-    WORDS_BIGENDIAN appropriately.
- */
-#if defined(__BIG_ENDIAN__)
-#    undef WORDS_BIGENDIAN
-#    define WORDS_BIGENDIAN 1
-#elif defined(__LITTLE_ENDIAN__)
-#    undef WORDS_BIGENDIAN
-#elif defined(__WXMAC__) && !defined(WORDS_BIGENDIAN)
-/*  According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */
-#    warning "Compiling wxMac with probably wrong endianness"
-#endif
 
 /*
    check the consistency of the settings in setup.h: note that this must be
 
 /*
    check the consistency of the settings in setup.h: note that this must be
  */
 
 #ifndef wxUSE_FILECONFIG
  */
 
 #ifndef wxUSE_FILECONFIG
-#    if wxUSE_CONFIG
+#    if wxUSE_CONFIG && wxUSE_TEXTFILE
 #        define wxUSE_FILECONFIG 1
 #    else
 #        define wxUSE_FILECONFIG 0
 #        define wxUSE_FILECONFIG 1
 #    else
 #        define wxUSE_FILECONFIG 0
 #    define wxUSE_WXDIB 1
 #endif
 
 #    define wxUSE_WXDIB 1
 #endif
 
-/*
-    We need AvailabilityMacros.h for ifdefing out things that don't exist on
-    OSX 10.2 and lower
-    FIXME:  We need a better way to detect for 10.3 then including a system header
-*/
-#ifdef __DARWIN__
-    #include <AvailabilityMacros.h>
-#endif
-
 #if defined (__WXPALMOS__)
 #include "wx/palmos/missing.h"
 #if defined (__WXPALMOS__)
 #include "wx/palmos/missing.h"
-#endif // __WXPALMOS__
+#endif /* __WXPALMOS__ */
 
 #if !defined (__WXPALMOS5__)
 #define POSSEC_APPBASE
 
 #if !defined (__WXPALMOS5__)
 #define POSSEC_APPBASE
 #define POSSEC_FILE
 #define POSSEC_FILECONF
 #define POSSEC_FILEFN
 #define POSSEC_FILE
 #define POSSEC_FILECONF
 #define POSSEC_FILEFN
-#endif // __WXPALMOS5__
+#endif /* __WXPALMOS5__ */
+
+/*
+    Optionally supported C++ features.
+ */
+
+/*
+    RTTI: if it is disabled in build/msw/makefile.* then this symbol will
+    already be defined but it's also possible to do it from configure (with
+    g++) or by editing project files with MSVC so test for it here too.
+ */
+#ifndef wxNO_RTTI
+    /*
+        Only 4.3 defines __GXX_RTTI by default so its absence is not an
+        indication of disabled RTTI with the previous versions.
+     */
+#   if wxCHECK_GCC_VERSION(4, 3)
+#       ifndef __GXX_RTTI
+#           define wxNO_RTTI
+#       endif
+#   elif defined(_MSC_VER)
+#       ifndef _CPPRTTI
+#           define wxNO_RTTI
+#       endif
+#   endif
+#endif /* wxNO_RTTI */
 
 #endif /* _WX_PLATFORM_H_ */
 
 #endif /* _WX_PLATFORM_H_ */