X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=simgear%2Fcompiler.h;h=f6bdc37c38fae51e1fc71e8a38436123122b8156;hb=a48655ed2941a35189d700abd3700e677b656ec9;hp=5e64764bbac4f9c61ce4b8397c42895d370bfbe0;hpb=cd72eb20c6b31e253e93e55c13ca4966eb1556fc;p=simgear.git diff --git a/simgear/compiler.h b/simgear/compiler.h index 5e64764b..f6bdc37c 100644 --- a/simgear/compiler.h +++ b/simgear/compiler.h @@ -23,45 +23,8 @@ * A set of defines to encapsulate compiler and platform differences. * Please refer to the source code for full documentation on this file. * - * Here is a summary of what this file does. - * - * (1) Defines macros for some STL includes which may be affected - * by file name length limitations. - * - * (2) Defines macros for some features not supported by all C++ compilers. - * - * (3) Defines 'explicit' as a null macro if the compiler doesn't support - * the explicit keyword. - * - * (4) Defines 'typename' as a null macro if the compiler doesn't support - * the typename keyword. - * - * (5) Defines bool, true and false if the compiler doesn't do so. - * - * (6) Defines SG_EXPLICIT_FUNCTION_TMPL_ARGS if the compiler - * supports calling a function template by providing its template - * arguments explicitly. - * - * (7) Defines SG_NEED_AUTO_PTR if STL doesn't provide auto_ptr<>. - * - * (8) Defines SG_NO_ARROW_OPERATOR if the compiler is unable - * to support operator->() for iterators. - * - * (9) Defines SG_USE_EXCEPTIONS if the compiler supports exceptions. - * Note: no FlightGear code uses exceptions. - * - * (10) Define SG_NAMESPACES if the compiler supports namespaces. - * - * (11) SG_MATH_FN_IN_NAMESPACE_STD -- not used?? - * - * (12) Define SG_HAVE_STD if std namespace is supported. - * - * (13) Defines SG_CLASS_PARTIAL_SPECIALIZATION if the compiler - * supports partial specialization of class templates. - * - * (14) Defines SG_HAVE_STD_INCLUDES to use ISO C++ Standard headers. - * - * (15) Defines SG_HAVE_STREAMBUF if of are present. + * This file is useful to set compiler-specific options in every file - for + * example, disabling warnings. * */ @@ -77,55 +40,21 @@ #define SG_DO_STRINGIZE(X) #X #ifdef __GNUC__ -# if __GNUC__ >= 3 - // g++-3.0.x -# define SG_EXPLICIT_FUNCTION_TMPL_ARGS -# define SG_NEED_AUTO_PTR -# define SG_MEMBER_TEMPLATES -# define SG_NAMESPACES -# define SG_HAVE_STD -# define SG_HAVE_STREAMBUF -# define SG_CLASS_PARTIAL_SPECIALIZATION -# define SG_HAVE_STD_INCLUDES - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM -# else +# if __GNUC__ < 3 # error Time to upgrade. GNU compilers < 3.0 not supported +# elif (__GNUC__ == 3) && (__GNUC_MINOR__ < 4) +# warning GCC compilers prior to 3.4 are suspect # endif +# define SG_GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) # define SG_COMPILER_STR "GNU C++ version " SG_STRINGIZE(__GNUC__) "." SG_STRINGIZE(__GNUC_MINOR__) - #endif // __GNUC__ /* KAI C++ */ #if defined(__KCC) - -# define SG_NAMESPACES -# define SG_HAVE_STD -# define SG_HAVE_STREAMBUF -# define SG_HAVE_TRAITS -# define SG_HAVE_STD_INCLUDES - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM - # define SG_COMPILER_STR "Kai C++ version " SG_STRINGIZE(__KCC_VERSION) - #endif // __KCC // @@ -133,31 +62,27 @@ // #ifdef _MSC_VER # define bcopy(from, to, n) memcpy(to, from, n) -# define FG_MEM_COPY(to,from,n) memcpy(to, from, n) - -# if _MSC_VER >= 1200 // msvc++ 6.0 or greater -# define SG_NAMESPACES -# define SG_HAVE_STD -# define SG_HAVE_STD_INCLUDES -# define SG_HAVE_STREAMBUF - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM - -# define isnan _isnan -# define snprintf _snprintf + +# if _MSC_VER >= 1200 // msvc++ 6.0 up to MSVC2013 +# if _MSC_VER < 1900 +# define snprintf _snprintf +# define strdup _strdup +# endif +# if _MSC_VER < 1800 +# define isnan _isnan +# endif +# if _MSC_VER < 1500 +# define vsnprintf _vsnprintf +# endif # define copysign _copysign +# define strcasecmp stricmp + +# undef min +# undef max # pragma warning(disable: 4786) // identifier was truncated to '255' characters # pragma warning(disable: 4244) // conversion from double to float -# pragma warning(disable: 4305) // +# pragma warning(disable: 4305) // truncation from larer type to smaller # else # error What version of MSVC++ is this? @@ -172,40 +97,18 @@ // #if defined ( sgi ) && !defined( __GNUC__ ) -# define SG_HAVE_NATIVE_SGI_COMPILERS - -# define SG_EXPLICIT_FUNCTION_TMPL_ARGS -# define SG_CLASS_PARTIAL_SPECIALIZATION -# define SG_NEED_AUTO_PTR -# define SG_MEMBER_TEMPLATES -# define SG_NAMESPACES -# define SG_HAVE_STD -# define SG_HAVE_STREAMBUF -# define SG_HAVE_TRAITS -# define SG_HAVE_STD_INCLUDES - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STDEXCEPT -#if (_COMPILER_VERSION < 740) -# define STL_STRING -#else -# define STL_STRING -#endif -# define STL_STRSTREAM +# if (_COMPILER_VERSION < 740) +# error Need MipsPro 7.4.0 or higher now +# endif + +#define SG_HAVE_NATIVE_SGI_COMPILERS #pragma set woff 1001,1012,1014,1116,1155,1172,1174 #pragma set woff 1401,1460,1551,1552,1681 #ifdef __cplusplus -#pragma set woff 1682,3303 -#if (_COMPILER_VERSION >= 740) -# pragma set woff 3624 -#endif +# pragma set woff 1682,3303 +# pragma set woff 3624 #endif # define SG_COMPILER_STR "SGI MipsPro compiler version " SG_STRINGIZE(_COMPILER_VERSION) @@ -214,6 +117,7 @@ #if defined (__sun) +# define SG_UNIX # include # include # if defined ( __cplusplus ) @@ -235,24 +139,7 @@ // Intel C++ Compiler // #if defined(__ICC) || defined (__ECC) -# define SG_NAMESPACES -# define SG_HAVE_STD -# define SG_HAVE_STREAMBUF -# define SG_HAVE_TRAITS -# define SG_HAVE_STD_INCLUDES - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STDEXCEPT -# define STL_STRING -# define STL_STRSTREAM - # define SG_COMPILER_STR "Intel C++ version " SG_STRINGIZE(__ICC) - #endif // __ICC // @@ -260,79 +147,62 @@ // #ifdef __APPLE__ -# define SG_GL_H -# define SG_GLX_H -# define SG_GLU_H -# define SG_GLEXT_H -# define SG_GLUT_H - - +# define SG_MAC +# define SG_UNIX +# ifdef __GNUC__ +# if ( __GNUC__ > 3 ) || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 3 ) inline int (isnan)(double r) { return !(r <= 0 || r >= 0); } -#else -# define SG_GL_H -# define SG_GLX_H -# define SG_GLU_H -# define SG_GLEXT_H -# define SG_GLUT_H +# else + // any C++ header file undefines isinf and isnan + // so this should be included before + // the functions are STILL in libm (libSystem on mac os x) +extern "C" int (isnan)(double); +extern "C" int (isinf)(double); +# endif +# else +inline int (isnan)(double r) { return !(r <= 0 || r >= 0); } +# endif #endif - -// -// No user modifiable definitions beyond here. -// - -#ifdef SG_NEED_EXPLICIT -# define explicit +#if defined (__FreeBSD__) +# define SG_UNIX +#include +# if __FreeBSD_version < 500000 + extern "C" { + inline int isnan(double r) { return !(r <= 0 || r >= 0); } + } +# endif #endif -#ifdef SG_NEED_TYPENAME -# define typename +#if defined (__CYGWIN__) +# define SG_WINDOWS +# define SG_UNIX +# include // isnan #endif -#ifdef SG_NEED_MUTABLE -# define mutable +// includes both MSVC and mingw compilers +#if defined(_WIN32) || defined(__WIN32__) +# define SG_WINDOWS #endif -#ifdef SG_NEED_BOOL - typedef int bool; -# define true 1 -# define false 0 +#if defined(__linux__) || defined(_AIX) || defined ( sgi ) +# define SG_UNIX #endif -#ifdef SG_EXPLICIT_FUNCTION_TMPL_ARGS -# define SG_NULL_TMPL_ARGS <> +#if defined( __GNUC__ ) +# define DEPRECATED __attribute__ ((deprecated)) #else -# define SG_NULL_TMPL_ARGS +# define DEPRECATED #endif -#ifdef SG_CLASS_PARTIAL_SPECIALIZATION -# define SG_TEMPLATE_NULL template<> +#if defined(__clang__) +# define SG_NO_RETURN [[noreturn]] #else -# define SG_TEMPLATE_NULL -#endif - -// SG_NO_NAMESPACES is a hook so that users can disable namespaces -// without having to edit library headers. -#if defined(SG_NAMESPACES) && !defined(SG_NO_NAMESPACES) -# define SG_NAMESPACE(X) namespace X { -# define SG_NAMESPACE_END } -# define SG_USING_NAMESPACE(X) using namespace X -# else -# define SG_NAMESPACE(X) -# define SG_NAMESPACE_END -# define SG_USING_NAMESPACE(X) +# define SG_NO_RETURN #endif -/** \def SG_USING_STD(x) - * Expands to using std::x if SG_HAVE_STD is defined - */ -# ifdef SG_HAVE_STD -# define SG_USING_STD(X) using std::X -# define STD std -# else -# define SG_USING_STD(X) -# define STD -# endif +// +// No user modifiable definitions beyond here. +// #endif // _SG_COMPILER_H -