X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fcompiler.h;h=795747d533e252c4837bae01bfc132147129afeb;hb=d179fccfcbce8a03a2569b390414f180ef6efc85;hp=05a4a36b171d3f944e49d1f5ae1970943f667b84;hpb=7b24e94c66fd04c3f4b130c29aedf65145628fb3;p=simgear.git diff --git a/simgear/compiler.h b/simgear/compiler.h index 05a4a36b..795747d5 100644 --- a/simgear/compiler.h +++ b/simgear/compiler.h @@ -11,10 +11,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * $Id$ * @@ -24,48 +23,9 @@ * 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. + * This file is useful to set compiler-specific options in every file - for + * example, disabling warnings. * - * (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. - * - * (16) Define SG_MATH_EXCEPTION_CLASH if math.h defines an exception class - * that clashes with the one defined in . */ #ifndef _SG_COMPILER_H @@ -80,157 +40,40 @@ #define SG_DO_STRINGIZE(X) #X #ifdef __GNUC__ -# if __GNUC__ == 2 -# if __GNUC_MINOR__ < 8 - - // g++-2.7.x -# 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_NEED_AUTO_PTR -# define SG_NO_DEFAULT_TEMPLATE_ARGS -# define SG_INCOMPLETE_FUNCTIONAL -# define SG_NO_ARROW_OPERATOR - -# elif __GNUC_MINOR__ >= 8 - - // g++-2.8.x and egcs-1.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 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 - -# endif -# elif __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 -# error Time to upgrade. GNU compilers < 2.7 not supported +# 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 -// -// Metrowerks -// -#if defined(__MWERKS__) -/* - CodeWarrior compiler from Metrowerks, Inc. -*/ -# define SG_HAVE_TRAITS -# define SG_HAVE_STD_INCLUDES -# define SG_HAVE_STD -# define SG_NAMESPACES - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STDEXCEPT -# define STL_STRING - -// Temp: -# define bcopy(from, to, n) memcpy(to, from, n) - -// -rp- please use FG_MEM_COPY everywhere ! -// #define FG_MEM_COPY(to,from,n) memcpy(to, from, n) - -// -dw- currently used glut has no game mode stuff -# define GLUT_WRONG_VERSION - -# define SG_COMPILER_STR "Metrowerks CodeWarrior C++ version " SG_STRINGIZE(__MWERKS__) - -#endif // __MWERKS__ - // // Microsoft compilers. // #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 < 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 @@ -244,79 +87,23 @@ #endif // _MSC_VER -#ifdef __BORLANDC__ -# if defined(HAVE_SGI_STL_PORT) - -// Use quotes around long file names to get around Borland's include hackery - -# define STL_ALGORITHM "algorithm" -# define STL_FUNCTIONAL "functional" - -# define SG_MATH_EXCEPTION_CLASH - -# else - -# define STL_ALGORITHM -# define STL_FUNCTIONAL -# define STL_IOMANIP -# define STL_STDEXCEPT -# define STL_STRSTREAM - -# define SG_INCOMPLETE_FUNCTIONAL - -# endif // HAVE_SGI_STL_PORT - -# define STL_IOSTREAM -# define STL_ITERATOR -# define STL_FSTREAM -# define STL_STRING -# define SG_NO_DEFAULT_TEMPLATE_ARGS -# define SG_NAMESPACES -// # define SG_HAVE_STD - -# define SG_COMPILER_STR "Borland C++ version " SG_STRINGIZE(__BORLANDC__) - -#endif // __BORLANDC__ - // // Native SGI compilers // #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) @@ -324,7 +111,8 @@ #endif // Native SGI compilers -#if defined ( sun ) +#if defined (__sun) +# define SG_UNIX # include # include # if defined ( __cplusplus ) @@ -336,7 +124,9 @@ extern void *memmove(void *, const void *, size_t); # endif // __cplusplus -# define SG_COMPILER_STR "Sun compiler version " SG_STRINGIZE(__SUNPRO_CC) +# if !defined( __GNUC__ ) +# define SG_COMPILER_STR "Sun compiler version " SG_STRINGIZE(__SUNPRO_CC) +# endif #endif // sun @@ -344,24 +134,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 // @@ -369,96 +142,63 @@ // #ifdef __APPLE__ -# define SG_GL_H -# define SG_GLU_H -# define SG_GLEXT_H -# define SG_GLUT_H -#else -# define SG_GL_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 + // 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 +# define SG_NO_RETURN #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) -#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 - -// Additional implementation from SGI STL 3.11 -// Adapter function objects: pointers to member functions -#ifdef SG_INCOMPLETE_FUNCTIONAL - -template -class const_mem_fun_ref_t -#ifndef __BORLANDC__ - : public unary_function<_Tp,_Ret> -#endif // __BORLANDC__ -{ -public: - explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {} - _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); } -private: - _Ret (_Tp::*_M_f)() const; -}; - -template -inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const) - { return const_mem_fun_ref_t<_Ret,_Tp>(__f); } - -#endif // SG_INCOMPLETE_FUNCTIONAL +// +// No user modifiable definitions beyond here. +// #endif // _SG_COMPILER_H +