]> git.mxchange.org Git - simgear.git/blobdiff - simgear/compiler.h
More VS2015 fixes
[simgear.git] / simgear / compiler.h
index cfa91f86441df92aa7cdcc9bd3f61e81e1ddc3ac..f6bdc37c38fae51e1fc71e8a38436123122b8156 100644 (file)
 #  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  
+#    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__
 
 #ifdef _MSC_VER
 #  define bcopy(from, to, n) memcpy(to, from, n)
 
-#  if _MSC_VER >= 1200  // msvc++ 6.0 or greater
-#    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?
 
 
 #if defined (__sun)
+#  define SG_UNIX
 #  include <strings.h>
 #  include <memory.h>
 #  if defined ( __cplusplus )
 //
 
 #ifdef __APPLE__
+#  define SG_MAC
+#  define SG_UNIX
 #  ifdef __GNUC__
-#    if ( __GNUC__ >= 3 ) && ( __GNUC_MINOR__ >= 3 )
+#    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 <iostream>
     // the functions are STILL in libm (libSystem on mac os x)
-extern "C" int isnan (double);
-extern "C" int isinf (double);
+extern "C" int (isnan)(double);
+extern "C" int (isinf)(double);
 #    endif
 #  else
 inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
@@ -147,6 +165,8 @@ inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
 #endif
 
 #if defined (__FreeBSD__)
+#  define SG_UNIX
+#include <sys/param.h>
 #  if __FreeBSD_version < 500000
      extern "C" {
        inline int isnan(double r) { return !(r <= 0 || r >= 0); }
@@ -155,17 +175,34 @@ inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
 #endif
 
 #if defined (__CYGWIN__)
+#  define SG_WINDOWS
+#  define SG_UNIX
 #  include <ieeefp.h>          // isnan
 #endif
 
-#if defined(__MINGW32__)
-#  define isnan(x) _isnan(x)
+// includes both MSVC and mingw compilers
+#if defined(_WIN32) || defined(__WIN32__)
+#  define SG_WINDOWS
+#endif
+
+#if defined(__linux__) || defined(_AIX) || defined ( sgi )
+#  define SG_UNIX
 #endif
 
+#if defined( __GNUC__ )
+#  define DEPRECATED __attribute__ ((deprecated))
+#else
+#  define DEPRECATED
+#endif
+
+#if defined(__clang__)
+#  define SG_NO_RETURN [[noreturn]]
+#else
+#  define SG_NO_RETURN
+#endif
 
 //
 // No user modifiable definitions beyond here.
 //
 
 #endif // _SG_COMPILER_H
-