From 8e1a4c0405e555943ea78df4b57b423d705b078c Mon Sep 17 00:00:00 2001 From: Dan Villiom Podlaski Christiansen Date: Wed, 21 Oct 2020 16:48:38 +0200 Subject: [PATCH] Fix Autoconf checks on Darwin The Autoconf checks merely verify that the symbol is available and linkable, but not that it's actually defined and usable. This breaks compilation on recent versions of macOS, where `lgamma_r()` is unavailable unless `_REENTRANT` is defined. Since this is rather difficult to detect, I strengthened the check so that it simple omits lgamma_r on macOS. While at it, I added support for `exp10()` on macOS, which is available, but named `__exp10` due to its nonstandard nature. --- config/m4/check-math-func.m4 | 12 +++++++++++- configure.ac | 3 ++- src/libm.h | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/config/m4/check-math-func.m4 b/config/m4/check-math-func.m4 index 5677cede..739da671 100644 --- a/config/m4/check-math-func.m4 +++ b/config/m4/check-math-func.m4 @@ -1,9 +1,19 @@ dnl AC_CHECK_MATH_FUNC(func) AC_DEFUN([AC_CHECK_MATH_FUNC], [ AC_LANG(C) - AC_CHECK_LIB([m],[$1],[ + AC_MSG_CHECKING(for $1) + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #include + + int main() { + void *x = $1; + return !x; + } + ])], [ + AC_MSG_RESULT(yes) eval "ac_tr_func=HAVE_[]upcase($1)" AC_DEFINE_UNQUOTED($ac_tr_func) ],[ + AC_MSG_RESULT(no) ]) ]) diff --git a/configure.ac b/configure.ac index 0441d4a2..ad784a54 100644 --- a/configure.ac +++ b/configure.ac @@ -166,7 +166,8 @@ AC_CHECK_MATH_FUNC(cosh) AC_CHECK_MATH_FUNC(drem) AC_CHECK_MATH_FUNC(erf) AC_CHECK_MATH_FUNC(erfc) -AC_CHECK_MATH_FUNC(exp10) +AC_CHECK_MATH_FUNC(exp10) # nonstandard +AC_CHECK_MATH_FUNC(__exp10) # available on darwin AC_CHECK_MATH_FUNC(exp2) AC_CHECK_MATH_FUNC(exp) AC_CHECK_MATH_FUNC(expm1) diff --git a/src/libm.h b/src/libm.h index b1db7882..4812947e 100644 --- a/src/libm.h +++ b/src/libm.h @@ -176,6 +176,10 @@ LIBM_DD_NO(erfc) #endif #if defined(HAVE_EXP10) && !defined(WIN32) LIBM_DD(exp10) +#elif defined(HAVE___EXP10) +#define exp10 __exp10 +LIBM_DD(exp10) +#undef exp10 #else LIBM_DD_NO(exp10) #endif