From 1feb202b2d028db371116442bae561580d245f52 Mon Sep 17 00:00:00 2001 From: Sylvain Beucler Date: Tue, 1 May 2012 14:14:54 +0000 Subject: [PATCH] Detect sinf/cosf/sqrtf presence with CMake (instead of relying on __cpluscplus) git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1276 7f0cb862-5218-0410-a997-914c9d46530a --- CMakeLists.txt | 21 +++++++++++++++++++++ config.h.in | 3 +++ src/fg_geometry.c | 20 ++++++++++---------- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1c406f..83e5d31 100644 --- a/CMakeLists.txt +++ b/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/config.h.in b/config.h.in index a7528b7..462d327 100644 --- a/config.h.in +++ b/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/src/fg_geometry.c b/src/fg_geometry.c index f9c5f62..3c1ecb9 100644 --- a/src/fg_geometry.c +++ b/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 */ -- 1.7.10.4