GTK: Fix build for pre-C99 compilers

Some compilers we support, such as pre-2013 Visual Studio, does not support
for INIFINITY, log2() and exp2(), so check for exp2() and log2() during
configure, and use fallbacks for them and INIFINTY if they are not found.

https://bugzilla.gnome.org/show_bug.cgi?id=766207
This commit is contained in:
Chun-wei Fan 2016-05-09 16:37:39 +08:00
parent 7a0941c090
commit 092cb9e202
5 changed files with 41 additions and 3 deletions

View File

@ -50,6 +50,11 @@
/* Define to 1 if you have the <dlfcn.h> header file. */ /* Define to 1 if you have the <dlfcn.h> header file. */
/* #undef HAVE_DLFCN_H */ /* #undef HAVE_DLFCN_H */
/* Define to 1 if you have the `exp2' function. */
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
#define HAVE_EXP2 1
#endif
/* Define to 1 if you have the `flockfile' function. */ /* Define to 1 if you have the `flockfile' function. */
#undef HAVE_FLOCKFILE #undef HAVE_FLOCKFILE
@ -105,6 +110,11 @@
/* Define to 1 if you have the `localtime_r' function. */ /* Define to 1 if you have the `localtime_r' function. */
/* #undef HAVE_LOCALTIME_R */ /* #undef HAVE_LOCALTIME_R */
/* Define to 1 if you have the `log2' function. */
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
#define HAVE_LOG2 1
#endif
/* Define to 1 if you have the `lstat' function. */ /* Define to 1 if you have the `lstat' function. */
/* #undef HAVE_LSTAT */ /* #undef HAVE_LSTAT */

View File

@ -897,7 +897,7 @@ AC_TYPE_UID_T
# Check for round(), rint(), isnan(), isinf() and nearbyint() # Check for round(), rint(), isnan(), isinf() and nearbyint()
AC_CHECK_LIB(m,round,,) AC_CHECK_LIB(m,round,,)
AC_CHECK_FUNCS(round rint nearbyint sincos) AC_CHECK_FUNCS(round rint nearbyint sincos exp2 log2)
AC_CHECK_DECLS([isnan, isinf], [], [], [[#include <math.h>]]) AC_CHECK_DECLS([isnan, isinf], [], [], [[#include <math.h>]])
# Checks for gdkspawn # Checks for gdkspawn

View File

@ -77,3 +77,30 @@ isinf (double x)
return (!_finite (x) && !_isnan (x)); return (!_finite (x) && !_isnan (x));
} }
#endif #endif
#ifndef INFINITY
/* define INFINITY for compilers that lack support for it */
# ifdef HUGE_VALF
# define INFINITY HUGE_VALF
# else
# define INFINITY (float)HUGE_VAL
# endif
#endif
#ifndef HAVE_LOG2
/* Use a simple implementation for log2() for compilers that lack it */
static inline double
log2 (double x)
{
return log (x) / log (2.0);
}
#endif
#ifndef HAVE_EXP2
/* Use a simple implementation for exp2() for compilers that lack it */
static inline double
exp2 (double x)
{
return pow (2.0, x);
}
#endif

View File

@ -25,7 +25,6 @@
#include "config.h" #include "config.h"
#include <string.h> #include <string.h>
#include <math.h>
#include "gtkprogressbar.h" #include "gtkprogressbar.h"
#include "gtkorientableprivate.h" #include "gtkorientableprivate.h"
@ -42,6 +41,8 @@
#include "a11y/gtkprogressbaraccessible.h" #include "a11y/gtkprogressbaraccessible.h"
#include "fallback-c89.c"
/** /**
* SECTION:gtkprogressbar * SECTION:gtkprogressbar
* @Short_description: A widget which indicates progress visually * @Short_description: A widget which indicates progress visually

View File

@ -31,7 +31,7 @@
#include "gtkwindow.h" #include "gtkwindow.h"
#include "gtkcssproviderprivate.h" #include "gtkcssproviderprivate.h"
#include <math.h> #include "fallback-c89.c"
#ifdef GDK_WINDOWING_X11 #ifdef GDK_WINDOWING_X11
#include "x11/gdkx.h" #include "x11/gdkx.h"