]> git.mxchange.org Git - simgear.git/blobdiff - simgear/compiler.h
Patch from Melchior Franz:
[simgear.git] / simgear / compiler.h
index 3a877b0afb02886503681de375bcab32ffa34081..1fa75a3fb9e3d124e1274d0f2ced42459cf0ef36 100644 (file)
@@ -22,7 +22,9 @@
 
 /** \file compiler.h
  * A set of defines to encapsulate compiler and platform differences.
- * What this file does.
+ * 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.
@@ -78,6 +80,7 @@
 #      define STL_FUNCTIONAL <functional>
 #      define STL_IOMANIP    <iomanip.h>
 #      define STL_IOSTREAM   <iostream.h>
+#      define STL_ITERATOR   <iterator.h>
 #      define STL_FSTREAM    <fstream.h>
 #      define STL_STDEXCEPT  <stdexcept>
 #      define STL_STRING     <string>
@@ -93,7 +96,7 @@
        // g++-2.8.x and egcs-1.x
 #      define SG_EXPLICIT_FUNCTION_TMPL_ARGS
 #      define SG_NEED_AUTO_PTR
-#      define FG_MEMBER_TEMPLATES
+#      define SG_MEMBER_TEMPLATES
 #      define SG_NAMESPACES
 #      define SG_HAVE_STD
 #      define SG_HAVE_STREAMBUF
 #      define STL_FUNCTIONAL <functional>
 #      define STL_IOMANIP    <iomanip>
 #      define STL_IOSTREAM   <iostream>
+#      define STL_ITERATOR   <iterator>
 #      define STL_FSTREAM    <fstream>
 #      define STL_STDEXCEPT  <stdexcept>
 #      define STL_STRING     <string>
 #      define STL_STRSTREAM  <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  <algorithm>
+#      define STL_FUNCTIONAL <functional>
+#      define STL_IOMANIP    <iomanip>
+#      define STL_IOSTREAM   <iostream>
+#      define STL_ITERATOR   <iterator>
+#      define STL_FSTREAM    <fstream>
+#      define STL_STDEXCEPT  <stdexcept>
+#      define STL_STRING     <string>
+#      define STL_STRSTREAM  <strstream>
+
 #  else
 #    error Time to upgrade. GNU compilers < 2.7 not supported
 #  endif
 #endif
 
+#if defined( __MINGW32__ )
+#  define bcopy(from, to, n) memcpy(to, from, n)
+#  define FG_MEM_COPY(to,from,n) memcpy(to, from, n)
+#endif
+
 /* KAI C++ */
 #if defined(__KCC)
 
 #  define SG_NAMESPACES
 #  define SG_HAVE_STD
 #  define SG_HAVE_STREAMBUF
-#  define FG_HAVE_TRAITS
+#  define SG_HAVE_TRAITS
 #  define SG_HAVE_STD_INCLUDES
 
 #  define STL_ALGORITHM  <algorithm>
 #  define STL_FUNCTIONAL <functional>
 #  define STL_IOMANIP    <iomanip>
 #  define STL_IOSTREAM   <iostream>
+#  define STL_ITERATOR   <iterator>
 #  define STL_FSTREAM    <fstream>
 #  define STL_STDEXCEPT  <stdexcept>
 #  define STL_STRING     <string>
 /*
   CodeWarrior compiler from Metrowerks, Inc.
 */
-#  define FG_HAVE_TRAITS
+#  define SG_HAVE_TRAITS
 #  define SG_HAVE_STD_INCLUDES
 #  define SG_HAVE_STD
 #  define SG_NAMESPACES
 #  define STL_FUNCTIONAL <functional>
 #  define STL_IOMANIP    <iomanip>
 #  define STL_IOSTREAM   <iostream>
+#  define STL_ITERATOR   <iterator>
 #  define STL_FSTREAM    <fstream>
 #  define STL_STDEXCEPT  <stdexcept>
 #  define STL_STRING     <string>
 #    define STL_FUNCTIONAL <functional>
 #    define STL_IOMANIP    <iomanip>
 #    define STL_IOSTREAM   <iostream>
+#    define STL_ITERATOR   <iterator>
 #    define STL_FSTREAM    <fstream>
 #    define STL_STDEXCEPT  <stdexcept>
 #    define STL_STRING     <string>
 #    pragma warning(disable: 4786) // identifier was truncated to '255' characters
 #    pragma warning(disable: 4244) // conversion from double to float
 #    pragma warning(disable: 4305) //
-
-#  elif _MSC_VER == 1100 // msvc++ 5.0
-#    define NEEDNAMESPACESTD
-#    define SG_NAMESPACES
-#    define SG_HAVE_STD
-#    define SG_HAVE_STD_INCLUDES
-#    define SG_HAVE_STREAMBUF
-
-#    define STL_ALGORITHM  <algorithm>
-#    define STL_FUNCTIONAL <functional>
-#    define STL_IOMANIP    <iomanip>
-#    define STL_IOSTREAM   <iostream>
-#    define STL_FSTREAM    <fstream>
-#    define STL_STDEXCEPT  <stdexcept>
-#    define STL_STRING     <string>
-#    define STL_STRSTREAM  <strstream>
-
-#    pragma warning(disable: 4786) // identifier was truncated to '255' characters
-#    pragma warning(disable: 4244) // conversion from double to float
-#    pragma warning(disable: 4305) //
-
 #  else
 #    error What version of MSVC++ is this?
 #  endif
 # endif // HAVE_SGI_STL_PORT
 
 #  define STL_IOSTREAM   <iostream>
+#  define STL_ITERATOR   <iterator>
 #  define STL_FSTREAM    <fstream>
 #  define STL_STRING     <string>
 #  define SG_NO_DEFAULT_TEMPLATE_ARGS
 //
 
 #if defined ( sgi ) && !defined( __GNUC__ )
-#  define FG_HAVE_NATIVE_SGI_COMPILERS
+#  define SG_HAVE_NATIVE_SGI_COMPILERS
 
 #  define SG_EXPLICIT_FUNCTION_TMPL_ARGS
 #  define SG_NEED_AUTO_PTR
-#  define FG_MEMBER_TEMPLATES
+#  define SG_MEMBER_TEMPLATES
 #  define SG_NAMESPACES
 #  define SG_HAVE_STD
 #  define SG_CLASS_PARTIAL_SPECIALIZATION
-#  define FG_HAVE_TRAITS
+#  define SG_HAVE_TRAITS
 
 #  define STL_ALGORITHM  <algorithm>
 #  define STL_FUNCTIONAL <functional>
 #  define STL_IOMANIP    <iomanip.h>
 #  define STL_IOSTREAM   <iostream.h>
+#  define STL_ITERATOR   <iterator.h>
 #  define STL_FSTREAM    <fstream.h>
 #  define STL_STDEXCEPT  <stdexcept>
 #  define STL_STRING     <string>
-#  define STL_STRSTREAM  <strstream>
+#  define STL_STRSTREAM  <strstream.h>
+
+// #  define __STL_FUNCTION_TMPL_PARTIAL_ORDER
+// typedef void PFNGLPOINTPARAMETERFEXTPROC
+
+#define glPointParameterfEXT   glPointParameterfSGIS
+#define glPointParameterfvEXT  glPointParameterfvSGIS
+
+#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
+#endif
 
 #endif // Native SGI compilers
 
 #  endif // __cplusplus
 #endif // sun
 
+//
+// Intel C++ Compiler
+//
+#if defined(__ICC)
+#  define SG_NAMESPACES
+#  define SG_HAVE_STD
+#  define SG_HAVE_STREAMBUF
+#  define SG_HAVE_TRAITS
+#  define SG_HAVE_STD_INCLUDES
+
+#  define STL_ALGORITHM  <algorithm>
+#  define STL_FUNCTIONAL <functional>
+#  define STL_IOMANIP    <iomanip>
+#  define STL_IOSTREAM   <iostream>
+#  define STL_ITERATOR   <iterator>
+#  define STL_FSTREAM    <fstream>
+#  define STL_STDEXCEPT  <stdexcept>
+#  define STL_STRING     <string>
+#  define STL_STRSTREAM  <strstream>
+#endif // __ICC
+
 //
 // No user modifiable definitions beyond here.
 //
 
-#ifdef FG_NEED_EXPLICIT
+#ifdef SG_NEED_EXPLICIT
 #  define explicit
 #endif
 
-#ifdef FG_NEED_TYPENAME
+#ifdef SG_NEED_TYPENAME
 #  define typename
 #endif
 
-#ifdef FG_NEED_MUTABLE
+#ifdef SG_NEED_MUTABLE
 #  define mutable
 #endif
 
-#ifdef FG_NEED_BOOL
+#ifdef SG_NEED_BOOL
    typedef int bool;
 #  define true 1
 #  define false 0
 #endif
 
 #ifdef SG_EXPLICIT_FUNCTION_TMPL_ARGS
-#  define FG_NULL_TMPL_ARGS <>
+#  define SG_NULL_TMPL_ARGS <>
 #else
-#  define FG_NULL_TMPL_ARGS
+#  define SG_NULL_TMPL_ARGS
 #endif
 
 #ifdef SG_CLASS_PARTIAL_SPECIALIZATION
-# define FG_TEMPLATE_NULL template<>
+# define SG_TEMPLATE_NULL template<>
 #else
-# define FG_TEMPLATE_NULL
+# define SG_TEMPLATE_NULL
 #endif
 
-// FG_NO_NAMESPACES is a hook so that users can disable namespaces
+// SG_NO_NAMESPACES is a hook so that users can disable namespaces
 // without having to edit library headers.
-#if defined(SG_NAMESPACES) && !defined(FG_NO_NAMESPACES)
-#   define FG_NAMESPACE(X) namespace X {
-#   define FG_NAMESPACE_END }
-#   define FG_USING_NAMESPACE(X) using namespace X
+#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 FG_NAMESPACE(X)
-#   define FG_NAMESPACE_END
-#   define FG_USING_NAMESPACE(X)
+#   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 FG_USING_STD(X) using std::X
+#  define SG_USING_STD(X) using std::X
 #  define STD std
 # else
-#  define FG_USING_STD(X) 
+#  define SG_USING_STD(X) 
 #  define STD
 # endif