From e9e7d284c434768333fdfb53a3663eae74cb995a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 12 Feb 2020 22:54:42 +0100 Subject: bpo-35081: Move dtoa.h header to the internal C API (GH-18489) Move the dtoa.h header file to the internal C API as pycore_dtoa.h: it only contains private functions (prefixed by "_Py"). The math and cmath modules must now be compiled with the Py_BUILD_CORE macro defined. --- Include/Python.h | 1 - Include/dtoa.h | 19 ------------------ Include/internal/pycore_dtoa.h | 23 ++++++++++++++++++++++ Makefile.pre.in | 2 +- .../C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst | 5 +++++ Modules/Setup | 4 ++-- Modules/cmathmodule.c | 1 + Modules/mathmodule.c | 1 + Objects/floatobject.c | 1 + PCbuild/pythoncore.vcxproj | 2 +- PCbuild/pythoncore.vcxproj.filters | 6 +++--- Python/dtoa.c | 1 + Python/pystrtod.c | 1 + setup.py | 2 ++ 14 files changed, 42 insertions(+), 27 deletions(-) delete mode 100644 Include/dtoa.h create mode 100644 Include/internal/pycore_dtoa.h create mode 100644 Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst diff --git a/Include/Python.h b/Include/Python.h index d6e5b13..969d8e6 100644 --- a/Include/Python.h +++ b/Include/Python.h @@ -152,7 +152,6 @@ #include "pyctype.h" #include "pystrtod.h" #include "pystrcmp.h" -#include "dtoa.h" #include "fileutils.h" #include "pyfpe.h" #include "tracemalloc.h" diff --git a/Include/dtoa.h b/Include/dtoa.h deleted file mode 100644 index 9bfb625..0000000 --- a/Include/dtoa.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef Py_LIMITED_API -#ifndef PY_NO_SHORT_FLOAT_REPR -#ifdef __cplusplus -extern "C" { -#endif - -PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr); -PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, - int *decpt, int *sign, char **rve); -PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); -PyAPI_FUNC(double) _Py_dg_stdnan(int sign); -PyAPI_FUNC(double) _Py_dg_infinity(int sign); - - -#ifdef __cplusplus -} -#endif -#endif -#endif diff --git a/Include/internal/pycore_dtoa.h b/Include/internal/pycore_dtoa.h new file mode 100644 index 0000000..3faf8cf --- /dev/null +++ b/Include/internal/pycore_dtoa.h @@ -0,0 +1,23 @@ +#ifndef PY_NO_SHORT_FLOAT_REPR +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* These functions are used by modules compiled as C extension like math: + they must be exported. */ + +PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr); +PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, + int *decpt, int *sign, char **rve); +PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); +PyAPI_FUNC(double) _Py_dg_stdnan(int sign); +PyAPI_FUNC(double) _Py_dg_infinity(int sign); + +#ifdef __cplusplus +} +#endif +#endif /* !PY_NO_SHORT_FLOAT_REPR */ diff --git a/Makefile.pre.in b/Makefile.pre.in index aae93ff..f5540a2 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -981,7 +981,6 @@ PYTHON_HEADERS= \ $(srcdir)/Include/context.h \ $(srcdir)/Include/descrobject.h \ $(srcdir)/Include/dictobject.h \ - $(srcdir)/Include/dtoa.h \ $(srcdir)/Include/dynamic_annotations.h \ $(srcdir)/Include/enumobject.h \ $(srcdir)/Include/errcode.h \ @@ -1082,6 +1081,7 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_code.h \ $(srcdir)/Include/internal/pycore_condvar.h \ $(srcdir)/Include/internal/pycore_context.h \ + $(srcdir)/Include/internal/pycore_dtoa.h \ $(srcdir)/Include/internal/pycore_fileutils.h \ $(srcdir)/Include/internal/pycore_getopt.h \ $(srcdir)/Include/internal/pycore_gil.h \ diff --git a/Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst b/Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst new file mode 100644 index 0000000..94e6ae7 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst @@ -0,0 +1,5 @@ +Move the ``dtoa.h`` header file to the internal C API as ``pycore_dtoa.h``: +it only contains private functions (prefixed by ``_Py``). The :mod:`math` and +:mod:`cmath` modules must now be compiled with the ``Py_BUILD_CORE`` macro +defined. + diff --git a/Modules/Setup b/Modules/Setup index 983fa01..40266a1 100644 --- a/Modules/Setup +++ b/Modules/Setup @@ -167,8 +167,8 @@ _symtable symtablemodule.c # Modules that should always be present (non UNIX dependent): #array arraymodule.c # array objects -#cmath cmathmodule.c _math.c # -lm # complex math library functions -#math mathmodule.c _math.c # -lm # math library functions, e.g. sin() +#cmath cmathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # complex math library functions +#math mathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # math library functions, e.g. sin() #_contextvars _contextvarsmodule.c # Context Variables #_struct _struct.c # binary structure packing/unpacking #_weakref _weakref.c # basic weak reference support diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 8b21dec..5eac4b4 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -3,6 +3,7 @@ /* much code borrowed from mathmodule.c */ #include "Python.h" +#include "pycore_dtoa.h" #include "_math.h" /* we need DBL_MAX, DBL_MIN, DBL_EPSILON, DBL_MANT_DIG and FLT_RADIX from float.h. We assume that FLT_RADIX is either 2 or 16. */ diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index f012b51..309f229 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -53,6 +53,7 @@ raised for division by zero and mod by zero. */ #include "Python.h" +#include "pycore_dtoa.h" #include "_math.h" #include "clinic/mathmodule.c.h" diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 648030b..04f968e 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -4,6 +4,7 @@ for any kind of float exception without losing portability. */ #include "Python.h" +#include "pycore_dtoa.h" #include #include diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index a3719d8..7d597bc 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -166,6 +166,7 @@ + @@ -223,7 +224,6 @@ - diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters index 67e223d..9563bdc 100644 --- a/PCbuild/pythoncore.vcxproj.filters +++ b/PCbuild/pythoncore.vcxproj.filters @@ -201,6 +201,9 @@ Include + + Include + Include @@ -360,9 +363,6 @@ Include - - Include - Include diff --git a/Python/dtoa.c b/Python/dtoa.c index b7bb7ac..822adc6 100644 --- a/Python/dtoa.c +++ b/Python/dtoa.c @@ -115,6 +115,7 @@ /* Linking of Python's #defines to Gay's #defines starts here. */ #include "Python.h" +#include "pycore_dtoa.h" /* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile the following code */ diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 94dc481..1c8202c 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -1,6 +1,7 @@ /* -*- Mode: C; c-file-style: "python" -*- */ #include +#include "pycore_dtoa.h" #include /* Case-insensitive string match used for nan and inf detection; t should be diff --git a/setup.py b/setup.py index 02f523c..51e67fe 100644 --- a/setup.py +++ b/setup.py @@ -734,12 +734,14 @@ class PyBuildExt(build_ext): # math library functions, e.g. sin() self.add(Extension('math', ['mathmodule.c'], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'], extra_objects=[shared_math], depends=['_math.h', shared_math], libraries=['m'])) # complex math library functions self.add(Extension('cmath', ['cmathmodule.c'], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'], extra_objects=[shared_math], depends=['_math.h', shared_math], libraries=['m'])) -- cgit v0.12