]> git.mxchange.org Git - simgear.git/blobdiff - simgear/compiler.h
fix #314: Nasal not working on i386/32bit systems with gcc>=4.5.x
[simgear.git] / simgear / compiler.h
index beb409fdacfcec62cba97001a27708393fdc2925..372f571d9d7dd1fa5e0fb4a15d87bf2d2fef8cee 100644 (file)
 #  if _MSC_VER >= 1200  // msvc++ 6.0 or greater
 #    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
 
 
 #if defined (__sun)
+#  define SG_UNIX
 #  include <strings.h>
 #  include <memory.h>
 #  if defined ( __cplusplus )
 //
 
 #ifdef __APPLE__
-#  define SG_GL_H <OpenGL/gl.h>
-#  define SG_GLX_H <AGL/agl.h>
-#  define SG_GLU_H <OpenGL/glu.h>
-#  define SG_GLEXT_H <OpenGL/glext.h>
-#  define SG_GLUT_H <GLUT/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 <iostream>
+    // 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
+
+#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); }
+     }
+#  endif
+#endif
 
+#if defined (__CYGWIN__)
+#  define SG_WINDOWS
+#  define SG_UNIX
+#  include <ieeefp.h>          // isnan
+#endif
 
-inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
-#else
-#  define SG_GL_H <GL/gl.h>
-#  define SG_GLX_H <GL/glx.h>
-#  define SG_GLU_H <GL/glu.h>
-#  define SG_GLEXT_H <GL/glext.h>
-#  define SG_GLUT_H <GL/glut.h>
+// 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
 
 //
 // No user modifiable definitions beyond here.
 //
 
-/** \def SG_USING_STD(x)
- *  Expands to using std::X
- */
-#  define SG_USING_STD(X) using std::X
-
 #endif // _SG_COMPILER_H