summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-02-12 21:54:42 (GMT)
committerGitHub <noreply@github.com>2020-02-12 21:54:42 (GMT)
commite9e7d284c434768333fdfb53a3663eae74cb995a (patch)
treee9606ee5a7cf9801138448fe50aad004b05b188b
parent45876a90e2663f12b90c2090ec3e48bd97841aae (diff)
downloadcpython-e9e7d284c434768333fdfb53a3663eae74cb995a.zip
cpython-e9e7d284c434768333fdfb53a3663eae74cb995a.tar.gz
cpython-e9e7d284c434768333fdfb53a3663eae74cb995a.tar.bz2
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.
-rw-r--r--Include/Python.h1
-rw-r--r--Include/internal/pycore_dtoa.h (renamed from Include/dtoa.h)12
-rw-r--r--Makefile.pre.in2
-rw-r--r--Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst5
-rw-r--r--Modules/Setup4
-rw-r--r--Modules/cmathmodule.c1
-rw-r--r--Modules/mathmodule.c1
-rw-r--r--Objects/floatobject.c1
-rw-r--r--PCbuild/pythoncore.vcxproj2
-rw-r--r--PCbuild/pythoncore.vcxproj.filters6
-rw-r--r--Python/dtoa.c1
-rw-r--r--Python/pystrtod.c1
-rw-r--r--setup.py2
13 files changed, 27 insertions, 12 deletions
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/internal/pycore_dtoa.h
index 9bfb625..3faf8cf 100644
--- a/Include/dtoa.h
+++ b/Include/internal/pycore_dtoa.h
@@ -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 */
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 <ctype.h>
#include <float.h>
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 @@
<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" />
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 @@
<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>
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 <Python.h>
+#include "pycore_dtoa.h"
#include <locale.h>
/* 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']))