Subject: Re: bug#55294: Configure failure on Solaris 11.4

From: Paul Eggert <[email-masked]>
Date: Tue, 10 May 2022 14:49:30 -0700

On 5/10/22 05:07, Eli Zaretskii wrote:
> I think it's easy enough, and I'm sure Paul will be able to do that.

Sure, I installed the attached. Closing the bug report.

From 203ffc68468abaccfed7e8ee630d9aa143ce5dbf Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Tue, 10 May 2022 14:44:35 -0700
Subject: [PATCH 1/2] Port libm configure-time test to Solaris 11.4

* configure.ac (LIB_MATH): Check all the math.h functions
that Emacs uses, not just sqrt (Bug#55294).
---
 configure.ac | 67 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 57 insertions(+), 10 deletions(-)

diff --git a/configure.ac b/configure.ac
index 484ce980a5..1ba4448d1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1617,16 +1617,63 @@ AC_DEFUN
 # Likewise for obsolescent test for uid_t, gid_t; Emacs assumes them.
 AC_DEFUN([AC_TYPE_UID_T])
 
-# sqrt and other floating-point functions such as fmod and frexp
-# are found in -lm on many systems.
-OLD_LIBS=$LIBS
-AC_SEARCH_LIBS([sqrt], [m])
-if test "X$LIBS" = "X$OLD_LIBS"; then
-  LIB_MATH=
-else
-  LIB_MATH=$ac_cv_search_sqrt
-fi
-LIBS=$OLD_LIBS
+# Check for all math.h functions that Emacs uses; on some platforms,
+# -lm is needed for some of these functions.
+AC_CACHE_CHECK([for math library],
+  [emacs_cv_lib_math],
+  [OLD_LIBS=$LIBS
+   AC_LINK_IFELSE(
+     [AC_LANG_SOURCE([[
+	#include <math.h>
+	int
+	main (int argc, char **argv)
+	{
+	  double d = argc;
+	  float f = argc;
+	  int i = argc;
+	  long l = argc;
+	  d = acos (d);
+	  d = asin (d);
+	  d = atan (d);
+	  d = atan2 (d, d);
+	  d = ceil (d);
+	  d = copysign (d, d);
+	  d = cos (d);
+	  d = exp (d);
+	  d = fabs (d);
+	  d = floor (d);
+	  d = fmod (d, d);
+	  d = frexp (d, &i);
+	  d = ldexp (d, i);
+	  d = log (d);
+	  d = log2 (d);
+	  d = log10 (d);
+	  d = pow (d, d);
+	  d = rint (d);
+	  d = scalbn (d, l);
+	  d = sin (d);
+	  d = sqrt (d);
+	  d = tan (d);
+	  d = trunc (d);
+	  f = fabsf (f);
+	  f = powf (f, f);
+	  i = ilogb (d);
+	  i = signbit (d);
+	  l = lrint (d);
+	  l = lround (d);
+	  return d == f && i == l;
+	}
+     ]])],
+     [emacs_cv_lib_math='none required'],
+     [LIBS="-lm $LIBS"
+      AC_LINK_IFELSE([],
+        [emacs_cv_lib_math=-lm],
+	[AC_MSG_ERROR([Math library (-lm) not found])])])
+   LIBS=$OLD_LIBS])
+case $emacs_cv_lib_math in
+  -*) LIB_MATH=$emacs_cv_lib_math;;
+  *)  LIB_MATH=;;
+esac
 
 dnl Current possibilities handled by sed (aix4-2 -> aix,
 dnl gnu-linux -> gnu/linux, etc.):
-- 
2.35.3

From 4433df3b2015b3b1acd9d24bf7169c010fb51a05 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Tue, 10 May 2022 14:47:09 -0700
Subject: [PATCH 2/2] * src/floatfns.c: Update comment.

---
 src/floatfns.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/floatfns.c b/src/floatfns.c
index f2b3b13acd..293184c70f 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -29,14 +29,20 @@ Copyright (C) 1988, 1993-1994, 1999, 2001-2022 Free Software Foundation,
 
    C99 and C11 require the following math.h functions in addition to
    the C89 functions.  Of these, Emacs currently exports only the
-   starred ones to Lisp, since we haven't found a use for the others:
-   acosh, atanh, cbrt, *copysign, erf, erfc, exp2, expm1, fdim, fma,
-   fmax, fmin, fpclassify, hypot, ilogb, isfinite, isgreater,
-   isgreaterequal, isinf, isless, islessequal, islessgreater, *isnan,
-   isnormal, isunordered, lgamma, log1p, *log2 [via (log X 2)], *logb
-   (approximately), lrint/llrint, lround/llround, nan, nearbyint,
-   nextafter, nexttoward, remainder, remquo, *rint, round, scalbln,
-   scalbn, signbit, tgamma, *trunc.
+   starred ones to Lisp, since we haven't found a use for the others.
+   Also, it uses the ones marked "+" internally:
+   acosh, atanh, cbrt, copysign (implemented by signbit), erf, erfc,
+   exp2, expm1, fdim, fma, fmax, fmin, fpclassify, hypot, +ilogb,
+   isfinite, isgreater, isgreaterequal, isinf, isless, islessequal,
+   islessgreater, *isnan, isnormal, isunordered, lgamma, log1p, *log2
+   [via (log X 2)], logb (approximately; implemented by frexp),
+   +lrint/llrint, +lround/llround, nan, nearbyint, nextafter,
+   nexttoward, remainder, remquo, *rint, round, scalbln, +scalbn,
+   +signbit, tgamma, *trunc.
+
+   The C standard also requires functions for float and long double
+   that are not listed above.  Of these functions, Emacs uses only the
+   following internally: fabsf, powf, sprintf.
  */
 
 #include <config.h>
-- 
2.35.3