# 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
# pragma warning(disable: 4786) // identifier was truncated to '255' characters
# pragma warning(disable: 4244) // conversion from double to float
//
#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>
+# 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__)
+# if __FreeBSD_version < 500000
+ extern "C" {
+ inline int isnan(double r) { return !(r <= 0 || r >= 0); }
+ }
+# endif
+#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>
+#if defined (__CYGWIN__)
+# include <ieeefp.h> // isnan
#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