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.
This commit is contained in:
Victor Stinner 2020-02-12 22:54:42 +01:00 committed by GitHub
parent 45876a90e2
commit e9e7d284c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 27 additions and 12 deletions

View file

@ -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"

View file

@ -1,9 +1,15 @@
#ifndef Py_LIMITED_API
#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);
@ -11,9 +17,7 @@ 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
#endif /* !PY_NO_SHORT_FLOAT_REPR */

View file

@ -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 \

View file

@ -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.

View file

@ -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

View file

@ -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. */

View file

@ -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"

View file

@ -4,6 +4,7 @@
for any kind of float exception without losing portability. */
#include "Python.h"
#include "pycore_dtoa.h"
#include <ctype.h>
#include <float.h>

View file

@ -166,6 +166,7 @@
<ClInclude Include="..\Include\internal\pycore_code.h" />
<ClInclude Include="..\Include\internal\pycore_condvar.h" />
<ClInclude Include="..\Include\internal\pycore_context.h" />
<ClInclude Include="..\Include\internal\pycore_dtoa.h" />
<ClInclude Include="..\Include\internal\pycore_fileutils.h" />
<ClInclude Include="..\Include\internal\pycore_getopt.h" />
<ClInclude Include="..\Include\internal\pycore_gil.h" />
@ -223,7 +224,6 @@
<ClInclude Include="..\Include\pystrcmp.h" />
<ClInclude Include="..\Include\pystrtod.h" />
<ClInclude Include="..\Include\pystrhex.h" />
<ClInclude Include="..\Include\dtoa.h" />
<ClInclude Include="..\Include\Python-ast.h" />
<ClInclude Include="..\Include\Python.h" />
<ClInclude Include="..\Include\pythonrun.h" />

View file

@ -201,6 +201,9 @@
<ClInclude Include="..\Include\internal\pycore_context.h">
<Filter>Include</Filter>
</ClInclude>
<ClInclude Include="..\Include\internal\pycore_dtoa.h">
<Filter>Include</Filter>
</ClInclude>
<ClInclude Include="..\Include\internal\pycore_fileutils.h">
<Filter>Include</Filter>
</ClInclude>
@ -360,9 +363,6 @@
<ClInclude Include="..\Include\pystrhex.h">
<Filter>Include</Filter>
</ClInclude>
<ClInclude Include="..\Include\dtoa.h">
<Filter>Include</Filter>
</ClInclude>
<ClInclude Include="..\Include\Python-ast.h">
<Filter>Include</Filter>
</ClInclude>

View file

@ -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 */

View file

@ -1,6 +1,7 @@
/* -*- Mode: C; c-file-style: "python" -*- */
#include <Python.h>
#include "pycore_dtoa.h"
#include <locale.h>
/* Case-insensitive string match used for nan and inf detection; t should be

View file

@ -734,12 +734,14 @@ def detect_simple_extensions(self):
# 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']))