diff --git a/freeglut/freeglut/CMakeLists.txt b/freeglut/freeglut/CMakeLists.txt index f1c406f..83e5d31 100644 --- a/freeglut/freeglut/CMakeLists.txt +++ b/freeglut/freeglut/CMakeLists.txt @@ -261,6 +261,27 @@ IF (NOT (HAVE_STDINT_H OR HAVE_INTTYPES_H)) ENDIF() ENDIF() +# Check for sinf/cosf/sqrtf +# CHECK_FUNCTION_EXISTS doesn't work because check requires +#CHECK_FUNCTION_EXISTS(sinf HAVE_SINF) +#CHECK_FUNCTION_EXISTS(cosf HAVE_COSF) +#CHECK_FUNCTION_EXISTS(sqrtf HAVE_SQRTF) +INCLUDE(CheckCSourceCompiles) +CHECK_C_SOURCE_COMPILES(" + #include + int main(){sinf(0); return 0;} + " HAVE_SINF +) +CHECK_C_SOURCE_COMPILES(" + #include + int main(){cosf(0); return 0;} + " HAVE_COSF +) +CHECK_C_SOURCE_COMPILES(" + #include + int main(){sqrtf(0); return 0;} + " HAVE_SQRTF +) # The generated config.h is placed in the project's build directory, just to # ensure that all CMake-generated files are kept away from the main source tree. diff --git a/freeglut/freeglut/config.h.in b/freeglut/freeglut/config.h.in index a7528b7..462d327 100644 --- a/freeglut/freeglut/config.h.in +++ b/freeglut/freeglut/config.h.in @@ -12,6 +12,9 @@ #cmakedefine HAVE_GETTIMEOFDAY #cmakedefine HAVE_VFPRINTF #cmakedefine HAVE_DOPRNT +#cmakedefine HAVE_SINF +#cmakedefine HAVE_COSF +#cmakedefine HAVE_SQRTF #cmakedefine NEED_XPARSEGEOMETRY_IMPL #cmakedefine HAVE_STDINT_H #cmakedefine HAVE_INTTYPES_H diff --git a/freeglut/freeglut/src/fg_geometry.c b/freeglut/freeglut/src/fg_geometry.c index f9c5f62..3c1ecb9 100644 --- a/freeglut/freeglut/src/fg_geometry.c +++ b/freeglut/freeglut/src/fg_geometry.c @@ -34,6 +34,16 @@ * Need more types of polyhedra? See CPolyhedron in MRPT */ +/* VC++6 in C mode doesn't have C99's sinf/cos/sqrtf */ +#ifndef HAVE_SINF +#define sinf(x) (float)sin((double)(x)) +#endif +#ifndef HAVE_COSF +#define cosf(x) (float)cos((double)(x)) +#endif +#ifndef HAVE_SQRTF +#define sqrtf(x) (float)sqrt((double)(x)) +#endif /* General functions for drawing geometry * Solids are drawn by glDrawArrays if composed of triangles, or by @@ -829,13 +839,8 @@ static void fghCircleTable(GLfloat **sint, GLfloat **cost, const int n, const GL for (i=1; i 0 ) ? stacks : 1 ); /* Scaling factors for vertex normals */ -#ifdef __cplusplus const GLfloat cosn = ( (GLfloat)height / sqrtf( height * height + base * base )); const GLfloat sinn = ( (GLfloat)base / sqrtf( height * height + base * base )); -#else - const GLfloat cosn = ( (GLfloat)height / (GLfloat)sqrt( (double)(height * height + base * base) )); - const GLfloat sinn = ( (GLfloat)base / (GLfloat)sqrt( (double)(height * height + base * base) )); -#endif /* __cplusplus */