bpo-45440: Remove pymath.c fallbacks (GH-28977)

Remove fallbacks for missing round(), copysign() and hypot() in
Python/pymath.c. Python now requires these functions to build.

These fallbacks were needed on Visual Studio 2012 and older. They are
no longer needed since Visual Stuido 2013. Python is now built with
Visual Studio 2017 or newer since Python 3.6.
This commit is contained in:
Victor Stinner 2021-10-15 19:45:34 +02:00 committed by GitHub
parent 51f8196d05
commit 00ffc4513d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 9 additions and 90 deletions

View File

@ -461,7 +461,8 @@ Build Changes
(Contributed by Mike Gilbert in :issue:`45433`.) (Contributed by Mike Gilbert in :issue:`45433`.)
* Building Python now requires a C99 ``<math.h>`` header file providing * Building Python now requires a C99 ``<math.h>`` header file providing
``isinf()``, ``isnan()`` and ``isfinite()`` functions. the following functions: ``copysign()``, ``hypot()``, ``isfinite()``,
``isinf()``, ``isnan()``, ``round()``.
(Contributed by Victor Stinner in :issue:`45440`.) (Contributed by Victor Stinner in :issue:`45440`.)
C API Changes C API Changes

View File

@ -8,24 +8,6 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define" # error "this header requires Py_BUILD_CORE define"
#endif #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 // Extra declarations
#if !defined(_MSC_VER) && !defined(__STDC__) #if !defined(_MSC_VER) && !defined(__STDC__)
extern double fmod (double, double); extern double fmod (double, double);

View File

@ -1,2 +1,4 @@
Building Python now requires a C99 ``<math.h>`` header file providing Building Python now requires a C99 ``<math.h>`` 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.

View File

@ -58,7 +58,6 @@ WIN32 is still required for the locale module.
#include <io.h> #include <io.h>
#define HAVE_HYPOT
#define HAVE_STRFTIME #define HAVE_STRFTIME
#define DONT_HAVE_SIG_ALARM #define DONT_HAVE_SIG_ALARM
#define DONT_HAVE_SIG_PAUSE #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! */ /* 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. /* Define if on AIX 3.
System headers sometimes define this. System headers sometimes define this.
We just want to avoid a redefinition error message. */ We just want to avoid a redefinition error message. */

View File

@ -17,51 +17,3 @@ void _Py_set_387controlword(unsigned short cw) {
__asm__ __volatile__ ("fldcw %0" : : "m" (cw)); __asm__ __volatile__ ("fldcw %0" : : "m" (cw));
} }
#endif // HAVE_GCC_ASM_FOR_X87 #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 */

4
configure vendored
View File

@ -15066,7 +15066,7 @@ fi
LIBS_SAVE=$LIBS LIBS_SAVE=$LIBS
LIBS="$LIBS $LIBM" 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 : do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@ -15078,7 +15078,7 @@ _ACEOF
fi fi
done done
for ac_func in hypot lgamma log1p log2 round tgamma for ac_func in lgamma log1p log2 tgamma
do : do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"

View File

@ -4675,8 +4675,8 @@ fi
LIBS_SAVE=$LIBS LIBS_SAVE=$LIBS
LIBS="$LIBS $LIBM" LIBS="$LIBS $LIBM"
AC_CHECK_FUNCS([acosh asinh atanh copysign erf erfc expm1 finite gamma]) AC_CHECK_FUNCS([acosh asinh atanh erf erfc expm1 finite gamma])
AC_CHECK_FUNCS([hypot lgamma log1p log2 round tgamma]) AC_CHECK_FUNCS([lgamma log1p log2 tgamma])
# For multiprocessing module, check that sem_open # For multiprocessing module, check that sem_open
# actually works. For FreeBSD versions <= 7.2, # actually works. For FreeBSD versions <= 7.2,

View File

@ -160,9 +160,6 @@
/* Define to 1 if you have the <conio.h> header file. */ /* Define to 1 if you have the <conio.h> header file. */
#undef HAVE_CONIO_H #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. */ /* Define to 1 if you have the `copy_file_range' function. */
#undef HAVE_COPY_FILE_RANGE #undef HAVE_COPY_FILE_RANGE
@ -538,9 +535,6 @@
/* Define this if you have le64toh() */ /* Define this if you have le64toh() */
#undef HAVE_HTOLE64 #undef HAVE_HTOLE64
/* Define to 1 if you have the `hypot' function. */
#undef HAVE_HYPOT
/* Define to 1 if you have the <ieeefp.h> header file. */ /* Define to 1 if you have the <ieeefp.h> header file. */
#undef HAVE_IEEEFP_H #undef HAVE_IEEEFP_H
@ -872,9 +866,6 @@
/* Define if you have readline 4.0 */ /* Define if you have readline 4.0 */
#undef HAVE_RL_RESIZE_TERMINAL #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. */ /* Define to 1 if you have the `rtpSpawn' function. */
#undef HAVE_RTPSPAWN #undef HAVE_RTPSPAWN