]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/platform.h
Added wxVariant::Convert() implementations for wx(U)LongLong_t, so that wxVariant...
[wxWidgets.git] / include / wx / platform.h
index 9e7d5bf4f79de5777c3c2bf5d96032fc8cc479f1..713925585f7f2d29e61e77ed166456b93503dac4 100644 (file)
 #endif
 
 /*
 #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
+    WXOSX targets
+    __WXOSX_MAC__ means Mac OS X, non embedded
+    __WXOSX_IPHONE__ means OS X iPhone
 */
 */
-#ifdef __WXMAC__
+
+/*
+    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 primare 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__)
+#   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
+#   elif defined(__WXOSX_CARBON__) || defined(__WXOSX_COCOA__)
+#       if !( defined(TARGET_OS_MAC) && TARGET_OS_MAC )
+#           error "incorrect SDK for a Mac OS X build"
+#       endif
+#       define __WXOSX_MAC__ 1
+#   else
+#       error "one of __WXOSX_IPHONE__, __WXOSX_CARBON__ or __WXOSX_COCOA__ must be defined"
+#   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.
+    __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
 
     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
+    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.
 
     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
+    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
     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
     using OS X libraries like Carbon or CoreServices.
 
  */
     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 __WXOSX_OR_COCOA__
 #    ifdef __WXMAC_XCODE__
 #        include <unistd.h>
 #    ifdef __WXMAC_XCODE__
 #        include <unistd.h>
-#        include "wx/mac/config_xcode.h"
+#        include <TargetConditionals.h>
+#        include <AvailabilityMacros.h>
+#        include "wx/osx/config_xcode.h"
 #    endif
 #endif
 /*
 #    endif
 #endif
 /*
 #    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
 
+
 /*
    Hardware platform detection.
 
 /*
    Hardware platform detection.
 
 
 
 /*
 
 
 /*
-   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
 
 /**
 /*  According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */
 #    warning "Compiling wxMac with probably wrong endianness"
 #endif
 /*  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
 /*
    check the consistency of the settings in setup.h: note that this must be
    done after setting wxUSE_UNICODE correctly as it is used in wx/chkconf.h
 /*
    check the consistency of the settings in setup.h: note that this must be
    done after setting wxUSE_UNICODE correctly as it is used in wx/chkconf.h
  */
 
 #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 POSSEC_FILEFN
 #endif // __WXPALMOS5__
 
 #define POSSEC_FILEFN
 #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_ */