From e0651e7375028d7f2edff087fae5ad4298f98c12 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Walld=C3=A9n?= <jonasw@roxen.com>
Date: Thu, 23 Jul 2015 21:58:49 +0200
Subject: [PATCH] Switch from finite() to isfinite() since the former is
 flagged as deprecated on OS X.

---
 src/acconfig.h   |  3 +++
 src/configure.in | 10 ++++++++++
 src/encode.c     |  5 ++++-
 src/sprintf.c    |  5 ++++-
 4 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/acconfig.h b/src/acconfig.h
index dba3f89b12..e69b20ec4e 100644
--- a/src/acconfig.h
+++ b/src/acconfig.h
@@ -247,6 +247,9 @@
 /* Define if you have _isnan */
 #undef HAVE__ISNAN
 
+/* Define if you have isfinite */
+#undef HAVE_ISFINITE
+
 /* Define if you have fork */
 #undef HAVE_FORK
 
diff --git a/src/configure.in b/src/configure.in
index 125fddf557..023342a080 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -4719,6 +4719,16 @@ MY_CHECK_FUNCTION(_isnan,
   exit(_isnan(0.0));
 ])
 #############################################################################
+# isfinite() is a macro on at least OS X and Linux which doesn't play well
+# with AC_CHECK_FUNCS().
+MY_CHECK_FUNCTION(isfinite,
+[
+#include <math.h>
+], [
+  int t = isfinite(0.0);
+  exit(0);
+])
+#############################################################################
 
 # FreeBSD 3.0 has broken F_SETFD when running with threads.
 
diff --git a/src/encode.c b/src/encode.c
index 8215406e89..6d99fa9dc9 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -675,7 +675,10 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc
 	      pike_ftype=Pike_FP_PZERO;
 	    else
 #endif
-#ifdef HAVE_FINITE
+#ifdef HAVE_ISFINITE
+	      if(!isfinite(d))
+		pike_ftype=Pike_FP_PINF;
+#elif HAVE_FINITE
 	      if(!finite(d))
 		pike_ftype=Pike_FP_PINF;
 #endif
diff --git a/src/sprintf.c b/src/sprintf.c
index 2b06c31621..5a75db7259 100644
--- a/src/sprintf.c
+++ b/src/sprintf.c
@@ -476,7 +476,10 @@ static void low_write_IEEE_float(char *b, double d, int sz)
     e = 0;
   else
 #endif
-#ifdef HAVE_FINITE
+#ifdef HAVE_ISFINITE
+  if(!isfinite(d))
+    e = maxexp;
+#elif HAVE_FINITE
   if(!finite(d))
     e = maxexp;
 #endif
-- 
GitLab