From: Bruno Haible <bruno@clisp.org>
Date: Sun, 2 Jun 2024 16:34:36 +0000 (+0200)
Subject: isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc.
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=5196a8f03f079f59502b1fe8715d4eda8437aa29;p=gnulib.git

isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc.

* lib/isnanf-nolibm.h (HAVE_ISNANF_NOLIBM): New macro.
* lib/isnand-nolibm.h (HAVE_ISNAND_NOLIBM): New macro.
* lib/isnanl-nolibm.h (HAVE_ISNANL_NOLIBM): New macro.
* lib/math.h (isnanf): Don't define via isnan if HAVE_ISNANF_NOLIBM is
defined.
(isnand): Don't define via isnan if HAVE_ISNAND_NOLIBM is defined.
(isnanl): Don't define via isnan if HAVE_ISNANL_NOLIBM is defined.
---

diff --git a/ChangeLog b/ChangeLog
index f076c168b0..d0e33548ce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2024-06-02  Bruno Haible  <bruno@clisp.org>
+
+	isnanf, isnand, isnanl: Fix link errors on AIX 7.1 with xlc.
+	* lib/isnanf-nolibm.h (HAVE_ISNANF_NOLIBM): New macro.
+	* lib/isnand-nolibm.h (HAVE_ISNAND_NOLIBM): New macro.
+	* lib/isnanl-nolibm.h (HAVE_ISNANL_NOLIBM): New macro.
+	* lib/math.h (isnanf): Don't define via isnan if HAVE_ISNANF_NOLIBM is
+	defined.
+	(isnand): Don't define via isnan if HAVE_ISNAND_NOLIBM is defined.
+	(isnanl): Don't define via isnan if HAVE_ISNANL_NOLIBM is defined.
+
 2024-06-02  Collin Funk  <collin.funk1@gmail.com>
 
 	gnulib-tool.py: Fix regular expression (regr. today).
diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h
index 925e71d17a..1a0f27b412 100644
--- a/lib/isnand-nolibm.h
+++ b/lib/isnand-nolibm.h
@@ -40,3 +40,6 @@ extern
 # endif
 int isnand (double x);
 #endif
+
+/* Tell <math.h> that our isnand does not need libm.  */
+#define HAVE_ISNAND_NOLIBM 1
diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h
index 06f0cbb70d..d004bbe8fe 100644
--- a/lib/isnanf-nolibm.h
+++ b/lib/isnanf-nolibm.h
@@ -52,3 +52,6 @@ extern
 # endif
 int isnanf (float x);
 #endif
+
+/* Tell <math.h> that our isnanf does not need libm.  */
+#define HAVE_ISNANF_NOLIBM 1
diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h
index 0b6755cd82..f0219dea88 100644
--- a/lib/isnanl-nolibm.h
+++ b/lib/isnanl-nolibm.h
@@ -41,3 +41,6 @@ extern
 # endif
 int isnanl (long double x);
 #endif
+
+/* Tell <math.h> that our isnanl does not need libm.  */
+#define HAVE_ISNANL_NOLIBM 1
diff --git a/lib/math.in.h b/lib/math.in.h
index 96d0da44fd..a1ae4e7328 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -2557,7 +2557,7 @@ _GL_EXTERN_C int isnanf (float x);
        GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't.  */
 #    undef isnanf
 #    define isnanf(x) __builtin_isnan ((float)(x))
-#   elif defined isnan
+#   elif defined isnan && !defined HAVE_ISNANF_NOLIBM
 #    undef isnanf
 #    define isnanf(x) isnan ((float)(x))
 #   endif
@@ -2586,7 +2586,7 @@ _GL_EXTERN_C int isnand (double x);
     /* GCC >= 4.0 and clang provide a type-generic built-in for isnan.  */
 #    undef isnand
 #    define isnand(x) __builtin_isnan ((double)(x))
-#   else
+#   elif !defined HAVE_ISNAND_NOLIBM
 #    undef isnand
 #    define isnand(x) isnan ((double)(x))
 #   endif
@@ -2609,7 +2609,7 @@ _GL_EXTERN_C int isnand (double x);
        GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't.  */
 #   undef isnanl
 #   define isnanl(x) __builtin_isnan ((long double)(x))
-#  elif defined isnan
+#  elif defined isnan && !defined HAVE_ISNANL_NOLIBM
 #   undef isnanl
 #   define isnanl(x) isnan ((long double)(x))
 #  endif