From 78340847c912f28ddd156b7d15a4a26cdd11b9eb Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 29 Oct 2001 14:33:46 +0000 Subject: [PATCH] extracted platform/compiler detection macros from wx/defs,h into wx/platform.h git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12198 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/defs.h | 283 +++++++----------------------------------- include/wx/platform.h | 230 ++++++++++++++++++++++++++++++++++ src/common/unzip.c | 6 +- 3 files changed, 277 insertions(+), 242 deletions(-) create mode 100644 include/wx/platform.h diff --git a/include/wx/defs.h b/include/wx/defs.h index 8a70d08344..8f7d9f9ec3 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -20,191 +20,21 @@ // compiler and OS identification // ---------------------------------------------------------------------------- -// first define Windows symbols if they're not defined on the command line: we -// can autodetect everything we need if _WIN32 is defined -#if defined(_WIN32) || defined(WIN32) || defined(__NT__) - #ifndef __WXMSW__ - #define __WXMSW__ - #endif - - #ifndef __WIN32__ - #define __WIN32__ - #endif - - // Win95 means Win95-style UI, i.e. Win9x/NT 4+ - #if !defined(__WIN95__) && defined(WINVER) && (WINVER >= 0x0400) - #define __WIN95__ - #endif -#endif // Win32 - -#if defined(__WXMSW__) || defined(__WIN32__) - #if !defined(__WINDOWS__) - #define __WINDOWS__ - #endif -#endif +#include "wx/platform.h" -#ifdef __WXWINE__ - #ifndef __WIN32__ - #define __WIN32__ - #endif - #ifndef __WIN95__ - #define __WIN95__ - #endif - #ifndef STRICT - #define STRICT - #endif -#endif // WINE - -#if defined(TWIN32) && !defined(__TWIN32__) - #define __TWIN32__ -#endif // Twin32 - -#include "wx/setup.h" - -// check the consistency of the settings in setup.h -#include "wx/chkconf.h" - -// old C++ headers (like ) declare classes in the global namespace -// while the new, standard ones (like ) do it in std:: namespace -// -// using this macro allows constuctions like "wxSTD iostream" to work in -// either case -#if !wxUSE_IOSTREAMH - #define wxSTD std:: -#else - #define wxSTD -#endif - -// just in case they were defined in setup.h -#ifdef PACKAGE -#undef PACKAGE -#endif - -#ifdef VERSION -#undef VERSION +// Make sure the environment is set correctly +#if defined(__WXMSW__) && defined(__X__) + #error "Target can't be both X and Windows" +#elif !defined(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && \ + !defined(__WXPM__) && !defined(__WXMAC__) && !defined(__X__) && \ + !defined(__WXMGL__) && wxUSE_GUI + #ifdef __UNIX__ + #error "No Target! You should use wx-config program for compilation flags!" + #else // !Unix + #error "No Target! You should use supplied makefiles for compilation!" + #endif // Unix/!Unix #endif -// OS: first test for generic Unix defines, then for particular flavours and -// finally for Unix-like systems -#if defined(__UNIX__) || defined(__unix) || defined(__unix__) || \ - defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \ - defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \ - defined(__EMX__) || defined(__VMS) || defined(__BEOS__) - - #define __UNIX_LIKE__ - - // Helps SGI compilation, apparently - #ifdef __SGI__ - #ifdef __GNUG__ - #define __need_wchar_t - #else // !gcc - // Note I use the term __SGI_CC__ for both cc and CC, its not a good - // idea to mix gcc and cc/CC, the name mangling is different - #define __SGI_CC__ - #endif // gcc/!gcc - #endif // SGI - - #if defined(sun) || defined(__SUN__) - #ifndef __GNUG__ - #ifndef __SUNCC__ - #define __SUNCC__ - #endif // Sun CC - #endif - #endif // Sun - - #ifdef __EMX__ - #define OS2EMX_PLAIN_CHAR - #endif - - // define __HPUX__ for HP-UX where standard macro is __hpux - #if defined(__hpux) && !defined(__HPUX__) - #define __HPUX__ - #endif // HP-UX - - #if defined(__WXMAC__) && defined(__DARWIN__) - // Mac OS X - - // Some code has been added to workaround defects(?) in the - // bundled gcc compiler. These corrections are identified by: - // __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif) - - #include - #endif // __WXMAC__ && __DARWIN__ - - #if defined(__CYGWIN__) - #if !defined(wxSIZE_T_IS_UINT) - #define wxSIZE_T_IS_UINT - #endif - #endif -#elif defined(applec) || \ - defined(THINK_C) || \ - (defined(__MWERKS__) && !defined(__INTEL__)) - // MacOS -#elif defined(__WXMAC__) && defined(__DARWIN__) - // Mac OS X - #define __UNIX_LIKE__ - - // Some code has been added to workaround defects(?) in the - // bundled gcc compiler. These corrections are identified by: - // __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif) - - #include -#elif defined(__OS2__) - #if defined(__IBMCPP__) - #define __VISAGEAVER__ __IBMCPP__ - #endif - #ifndef __WXOS2__ - #define __WXOS2__ - #endif - #ifndef __WXPM__ - #define __WXPM__ - #endif - - // Place other OS/2 compiler environment defines here - #if defined(__VISAGECPP__) - // VisualAge is the only thing that understands _Optlink - #define LINKAGEMODE _Optlink - #endif - #define wxSIZE_T_IS_UINT -#else // Windows - #ifndef __WINDOWS__ - #define __WINDOWS__ - #endif // Windows - - // to be changed for Win64! - #ifndef __WIN32__ - #define __WIN16__ - #endif - - // define another standard symbol for Microsoft Visual C++: the standard one - // (_MSC_VER) is also defined by Metrowerks compiler - #if defined(_MSC_VER) && !defined(__MWERKS__) - #define __VISUALC__ _MSC_VER - #elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__) - #define __BORLANDC__ - #elif defined(__WATCOMC__) - #elif defined(__SC__) - #define __SYMANTECC__ - #endif // compiler - - // size_t is the same as unsigned int for all Windows compilers we know, - // so define it if it hadn't been done by configure yet - #if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) - #define wxSIZE_T_IS_UINT - #endif -#endif // OS - -// if we're on a Unix system but didn't use configure (so that setup.h didn't -// define __UNIX__), do define __UNIX__ now -#if !defined(__UNIX__) && defined(__UNIX_LIKE__) - #define __UNIX__ -#endif // Unix - -// LINKAGEMODE mode is empty for everyting except OS/2 -#ifndef LINKAGEMODE - #define LINKAGEMODE -#endif // LINKAGEMODE - // suppress some Visual C++ warnings #ifdef __VISUALC__ # pragma warning(disable:4201) // nonstandard extension used: nameless struct/union @@ -238,64 +68,12 @@ # pragma suppress 571 // Virtual function hiding #endif // __SALFORDC__ -#if defined(__VISUALC__) && !defined(WIN32) - // VC1.5 does not have LPTSTR type - #define LPTSTR LPSTR - #define LPCTSTR LPCSTR -#endif // VC++ 1.5 - -// Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files, -// so define it ourselves (newer versions do it for all files, though, and -// don't allow it to be redefined) -#ifdef __DECCXX - #if !defined(__VMS) && !defined(__cplusplus) - #define __cplusplus - #endif -#endif // __DECCXX - -// Resolves linking problems under HP-UX -#if defined(__HPUX__) && defined(__GNUG__) - #define va_list __gnuc_va_list -#endif // HP-UX - -// This macro can be used to check that the version of mingw32 compiler is -// at least maj.min -#if defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || defined( __CYGWIN__ ) - #include "wx/msw/gccpriv.h" -#else - #undef wxCHECK_W32API_VERSION - #define wxCHECK_W32API_VERSION(maj, min) (0) -#endif - -#if defined(__HPUX__) && !defined(__WXGTK__) - #ifndef __WXMOTIF__ - #define __WXMOTIF__ - #endif // __WXMOTIF__ -#endif - -#if defined(__WXMOTIF__) - #define __X__ -#endif - -// Make sure the environment is set correctly -#if defined(__WXMSW__) && defined(__X__) - #error "Target can't be both X and Windows" -#elif !defined(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && \ - !defined(__WXPM__) && !defined(__WXMAC__) && !defined(__X__) && \ - !defined(__WXMGL__) && wxUSE_GUI - #ifdef __UNIX__ - #error "No Target! You should use wx-config program for compilation flags!" - #else // !Unix - #error "No Target! You should use supplied makefiles for compilation!" - #endif // Unix/!Unix -#endif - -#include "wx/version.h" - // ---------------------------------------------------------------------------- -// compatibility defines +// wxWindows version and compatibility defines // ---------------------------------------------------------------------------- +#include "wx/version.h" + // possibility to build non GUI apps is new, so don't burden ourselves with // compatibility code #if !wxUSE_GUI @@ -310,6 +88,32 @@ // non portable C++ features // ============================================================================ +// ---------------------------------------------------------------------------- +// compiler defects workarounds +// ---------------------------------------------------------------------------- + +#if defined(__VISUALC__) && !defined(WIN32) + // VC1.5 does not have LPTSTR type + #define LPTSTR LPSTR + #define LPCTSTR LPCSTR +#endif // VC++ 1.5 + +/* + Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files, + so define it ourselves (newer versions do it for all files, though, and + don't allow it to be redefined) + */ +#ifdef __DECCXX + #if !defined(__VMS) && !defined(__cplusplus) + #define __cplusplus + #endif +#endif /* __DECCXX */ + +// Resolves linking problems under HP-UX when compiling with gcc/g++ +#if defined(__HPUX__) && defined(__GNUG__) + #define va_list __gnuc_va_list +#endif // HP-UX + // ---------------------------------------------------------------------------- // check for native bool type and TRUE/FALSE constants // ---------------------------------------------------------------------------- @@ -396,6 +200,11 @@ typedef int wxWindowID; #define wxSTDCALL #endif // platform +// LINKAGEMODE mode is empty for everyting except OS/2 +#ifndef LINKAGEMODE + #define LINKAGEMODE +#endif // LINKAGEMODE + // wxCALLBACK should be used for the functions which are called back by // Windows (such as compare function for wxListCtrl) #if defined(__WIN32__) && !defined(__WXMICROWIN__) diff --git a/include/wx/platform.h b/include/wx/platform.h new file mode 100644 index 0000000000..b0443cb2b2 --- /dev/null +++ b/include/wx/platform.h @@ -0,0 +1,230 @@ +/* + * Name: wx/platform.h + * Purpose: define the OS and compiler identification macros + * Author: Vadim Zeitlin + * Modified by: + * Created: 29.10.01 (extracted from wx/defs.h) + * RCS-ID: $Id$ + * Copyright: (c) 1997-2001 wxWindows team + * Licence: wxWindows license + */ + +/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ + +#ifndef _WX_PLATFORM_H_ +#define _WX_PLATFORM_H_ + +/* + first define Windows symbols if they're not defined on the command line: we + can autodetect everything we need if _WIN32 is defined + */ +#if defined(_WIN32) || defined(WIN32) || defined(__NT__) + #ifndef __WXMSW__ + #define __WXMSW__ + #endif + + #ifndef __WIN32__ + #define __WIN32__ + #endif + + /* Win95 means Win95-style UI, i.e. Win9x/NT 4+ */ + #if !defined(__WIN95__) && defined(WINVER) && (WINVER >= 0x0400) + #define __WIN95__ + #endif +#endif /* Win32 */ + +#if defined(__WXMSW__) || defined(__WIN32__) + #if !defined(__WINDOWS__) + #define __WINDOWS__ + #endif +#endif + +#ifdef __WXWINE__ + #ifndef __WIN32__ + #define __WIN32__ + #endif + #ifndef __WIN95__ + #define __WIN95__ + #endif + #ifndef STRICT + #define STRICT + #endif +#endif /* WINE */ + +#if defined(TWIN32) && !defined(__TWIN32__) + #define __TWIN32__ +#endif /* Twin32 */ + +/* + Include wx/setup.h for the Unix platform defines generated by configure and + the library compilation options + */ +#include "wx/setup.h" + +/* check the consistency of the settings in setup.h */ +#include "wx/chkconf.h" + +/* + old C++ headers (like ) declare classes in the global namespace + while the new, standard ones (like ) do it in std:: namespace + + using this macro allows constuctions like "wxSTD iostream" to work in + either case + */ +#if !wxUSE_IOSTREAMH + #define wxSTD std:: +#else + #define wxSTD +#endif + +/* + OS: first test for generic Unix defines, then for particular flavours and + finally for Unix-like systems + */ +#if defined(__UNIX__) || defined(__unix) || defined(__unix__) || \ + defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \ + defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \ + defined(__EMX__) || defined(__VMS) || defined(__BEOS__) + + #define __UNIX_LIKE__ + + /* Helps SGI compilation, apparently */ + #ifdef __SGI__ + #ifdef __GNUG__ + #define __need_wchar_t + #else /* !gcc */ + /* + Note I use the term __SGI_CC__ for both cc and CC, its not a good + idea to mix gcc and cc/CC, the name mangling is different + */ + #define __SGI_CC__ + #endif /* gcc/!gcc */ + #endif /* SGI */ + + #if defined(sun) || defined(__SUN__) + #ifndef __GNUG__ + #ifndef __SUNCC__ + #define __SUNCC__ + #endif /* Sun CC */ + #endif + #endif /* Sun */ + + #ifdef __EMX__ + #define OS2EMX_PLAIN_CHAR + #endif + + /* define __HPUX__ for HP-UX where standard macro is __hpux */ + #if defined(__hpux) && !defined(__HPUX__) + #define __HPUX__ + #endif /* HP-UX */ + + #if defined(__WXMAC__) && defined(__DARWIN__) + /* Mac OS X */ + + /* + Some code has been added to workaround defects(?) in the + bundled gcc compiler. These corrections are identified by: + __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif) + */ + + #include + #endif /* __WXMAC__ && __DARWIN__ */ + + #if defined(__CYGWIN__) + #if !defined(wxSIZE_T_IS_UINT) + #define wxSIZE_T_IS_UINT + #endif + #endif +#elif defined(applec) || \ + defined(THINK_C) || \ + (defined(__MWERKS__) && !defined(__INTEL__)) + /* MacOS */ +#elif defined(__WXMAC__) && defined(__DARWIN__) + /* Mac OS X */ + #define __UNIX_LIKE__ + + /* + Some code has been added to workaround defects(?) in the + bundled gcc compiler. These corrections are identified by: + __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif) + */ + + #include +#elif defined(__OS2__) + #if defined(__IBMCPP__) + #define __VISAGEAVER__ __IBMCPP__ + #endif + #ifndef __WXOS2__ + #define __WXOS2__ + #endif + #ifndef __WXPM__ + #define __WXPM__ + #endif + + /* Place other OS/2 compiler environment defines here */ + #if defined(__VISAGECPP__) + /* VisualAge is the only thing that understands _Optlink */ + #define LINKAGEMODE _Optlink + #endif + #define wxSIZE_T_IS_UINT +#else /* Windows */ + #ifndef __WINDOWS__ + #define __WINDOWS__ + #endif /* Windows */ + + /* to be changed for Win64! */ + #ifndef __WIN32__ + #define __WIN16__ + #endif + + /* + define another standard symbol for Microsoft Visual C++: the standard + one (_MSC_VER) is also defined by Metrowerks compiler + */ + #if defined(_MSC_VER) && !defined(__MWERKS__) + #define __VISUALC__ _MSC_VER + #elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__) + #define __BORLANDC__ + #elif defined(__WATCOMC__) + #elif defined(__SC__) + #define __SYMANTECC__ + #endif /* compiler */ + + /* size_t is the same as unsigned int for all Windows compilers we know, */ + /* so define it if it hadn't been done by configure yet */ + #if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) + #define wxSIZE_T_IS_UINT + #endif +#endif /* OS */ + +/* + if we're on a Unix system but didn't use configure (so that setup.h didn't + define __UNIX__), do define __UNIX__ now + */ +#if !defined(__UNIX__) && defined(__UNIX_LIKE__) + #define __UNIX__ +#endif /* Unix */ + +#if defined(__HPUX__) && !defined(__WXGTK__) + #ifndef __WXMOTIF__ + #define __WXMOTIF__ + #endif /* __WXMOTIF__ */ +#endif + +#if defined(__WXMOTIF__) + #define __X__ +#endif + +/* + This macro can be used to check that the version of mingw32 compiler is + at least maj.min + */ +#if defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || defined( __CYGWIN__ ) + #include "wx/msw/gccpriv.h" +#else + #undef wxCHECK_W32API_VERSION + #define wxCHECK_W32API_VERSION(maj, min) (0) +#endif + +#endif /* _WX_PLATFORM_H_ */ + diff --git a/src/common/unzip.c b/src/common/unzip.c index 284c8e4745..a94a700ca6 100644 --- a/src/common/unzip.c +++ b/src/common/unzip.c @@ -12,11 +12,7 @@ $Id$ */ -#ifndef __VISAGECPP__ -#include "wx/defs.h" -#endif - -#include "wx/setup.h" +#include "wx/platform.h" #if wxUSE_ZLIB && wxUSE_ZIPSTREAM -- 2.47.2