diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 994fb843fd3777..ec2405c375520d 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -461,7 +461,8 @@ Build Changes (Contributed by Mike Gilbert in :issue:`45433`.) * Building Python now requires a C99 ```` header file providing - ``isinf()``, ``isnan()`` and ``isfinite()`` functions. + the following functions: ``copysign()``, ``hypot()``, ``isfinite()``, + ``isinf()``, ``isnan()``, ``round()``. (Contributed by Victor Stinner in :issue:`45440`.) C API Changes diff --git a/Include/internal/pycore_pymath.h b/Include/internal/pycore_pymath.h index 32743fc83f5c03..395b71452e40ad 100644 --- a/Include/internal/pycore_pymath.h +++ b/Include/internal/pycore_pymath.h @@ -8,24 +8,6 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif - -// Python provides implementations for copysign(), round() and hypot() in -// Python/pymath.c just in case your math library doesn't provide the -// functions. -// -// Note: PC/pyconfig.h defines copysign as _copysign -#ifndef HAVE_COPYSIGN -extern double copysign(double, double); -#endif - -#ifndef HAVE_ROUND -extern double round(double); -#endif - -#ifndef HAVE_HYPOT -extern double hypot(double, double); -#endif - // Extra declarations #if !defined(_MSC_VER) && !defined(__STDC__) extern double fmod (double, double); diff --git a/Misc/NEWS.d/next/Build/2021-10-12-02-13-08.bpo-45440.-zYgDb.rst b/Misc/NEWS.d/next/Build/2021-10-12-02-13-08.bpo-45440.-zYgDb.rst index 1c7c413155f45d..93f7f3139065fb 100644 --- a/Misc/NEWS.d/next/Build/2021-10-12-02-13-08.bpo-45440.-zYgDb.rst +++ b/Misc/NEWS.d/next/Build/2021-10-12-02-13-08.bpo-45440.-zYgDb.rst @@ -1,2 +1,4 @@ Building Python now requires a C99 ```` header file providing -``isinf()``, ``isnan()`` and ``isfinite()`` functions. Patch by Victor Stinner. +the following functions: ``copysign()``, ``hypot()``, ``isfinite()``, +``isinf()``, ``isnan()``, ``round()``. +Patch by Victor Stinner. diff --git a/PC/pyconfig.h b/PC/pyconfig.h index 75397772280dcd..bb55ff4fe14c47 100644 --- a/PC/pyconfig.h +++ b/PC/pyconfig.h @@ -58,7 +58,6 @@ WIN32 is still required for the locale module. #include -#define HAVE_HYPOT #define HAVE_STRFTIME #define DONT_HAVE_SIG_ALARM #define DONT_HAVE_SIG_PAUSE @@ -348,14 +347,6 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ /* Fairly standard from here! */ -/* Define to 1 if you have the `copysign' function. */ -#define HAVE_COPYSIGN 1 - -/* Define to 1 if you have the `round' function. */ -#if _MSC_VER >= 1800 -# define HAVE_ROUND 1 -#endif - /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ diff --git a/Python/pymath.c b/Python/pymath.c index b2681f2acc1f02..e7d0161ff94c2e 100644 --- a/Python/pymath.c +++ b/Python/pymath.c @@ -17,51 +17,3 @@ void _Py_set_387controlword(unsigned short cw) { __asm__ __volatile__ ("fldcw %0" : : "m" (cw)); } #endif // HAVE_GCC_ASM_FOR_X87 - - -#ifndef HAVE_HYPOT -double hypot(double x, double y) -{ - double yx; - - x = fabs(x); - y = fabs(y); - if (x < y) { - double temp = x; - x = y; - y = temp; - } - if (x == 0.) - return 0.; - else { - yx = y/x; - return x*sqrt(1.+yx*yx); - } -} -#endif /* HAVE_HYPOT */ - -#ifndef HAVE_COPYSIGN -double -copysign(double x, double y) -{ - /* use atan2 to distinguish -0. from 0. */ - if (y > 0. || (y == 0. && atan2(y, -1.) > 0.)) { - return fabs(x); - } else { - return -fabs(x); - } -} -#endif /* HAVE_COPYSIGN */ - -#ifndef HAVE_ROUND -double -round(double x) -{ - double absx, y; - absx = fabs(x); - y = floor(absx); - if (absx - y >= 0.5) - y += 1.0; - return copysign(y, x); -} -#endif /* HAVE_ROUND */ diff --git a/configure b/configure index c56ff1dc5cd6ae..81ee4282d9412b 100755 --- a/configure +++ b/configure @@ -15066,7 +15066,7 @@ fi LIBS_SAVE=$LIBS LIBS="$LIBS $LIBM" -for ac_func in acosh asinh atanh copysign erf erfc expm1 finite gamma +for ac_func in acosh asinh atanh erf erfc expm1 finite gamma do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -15078,7 +15078,7 @@ _ACEOF fi done -for ac_func in hypot lgamma log1p log2 round tgamma +for ac_func in lgamma log1p log2 tgamma do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.ac b/configure.ac index 1d0c753efac1a9..ab3fc2839d4f8b 100644 --- a/configure.ac +++ b/configure.ac @@ -4675,8 +4675,8 @@ fi LIBS_SAVE=$LIBS LIBS="$LIBS $LIBM" -AC_CHECK_FUNCS([acosh asinh atanh copysign erf erfc expm1 finite gamma]) -AC_CHECK_FUNCS([hypot lgamma log1p log2 round tgamma]) +AC_CHECK_FUNCS([acosh asinh atanh erf erfc expm1 finite gamma]) +AC_CHECK_FUNCS([lgamma log1p log2 tgamma]) # For multiprocessing module, check that sem_open # actually works. For FreeBSD versions <= 7.2, diff --git a/pyconfig.h.in b/pyconfig.h.in index 43a04e371a5941..a426e8effddb9f 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -160,9 +160,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_CONIO_H -/* Define to 1 if you have the `copysign' function. */ -#undef HAVE_COPYSIGN - /* Define to 1 if you have the `copy_file_range' function. */ #undef HAVE_COPY_FILE_RANGE @@ -538,9 +535,6 @@ /* Define this if you have le64toh() */ #undef HAVE_HTOLE64 -/* Define to 1 if you have the `hypot' function. */ -#undef HAVE_HYPOT - /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H @@ -872,9 +866,6 @@ /* Define if you have readline 4.0 */ #undef HAVE_RL_RESIZE_TERMINAL -/* Define to 1 if you have the `round' function. */ -#undef HAVE_ROUND - /* Define to 1 if you have the `rtpSpawn' function. */ #undef HAVE_RTPSPAWN