# 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__
# 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_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
+# 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
+
+// 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
//
// No user modifiable definitions beyond here.