diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 07762657798..2e57f0cea53 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -564,18 +564,10 @@ Porting to Python 3.11 (Contributed by Victor Stinner in :issue:`39573`.) -* The ```` header file no longer includes ````. C - extensions using ```` must now include it explicitly. - The system ```` header provides functions like: - ``malloc()``/``free()``, ``getenv()``, ``strtol()``, ``abs()``, ``strtol()``, - ``exit()`` and ``abort()``. - (Contributed by Victor Stinner in :issue:`45434`.) - -* The ```` header file no longer includes ```` if the - ``Py_LIMITED_API`` macro is defined. Functions expecting ``FILE*`` are - excluded from the limited C API (:pep:`384`). C extensions using - ```` must now include it explicitly. The system ```` - header provides functions like ``printf()`` and ``fopen()``. +* ```` no longer includes the header files ````, + ````, ```` and ```` when the ``Py_LIMITED_API`` + macro is set to ``0x030b0000`` (Python 3.11) or higher. C extensions should + explicitly include the header files after ``#include ``. (Contributed by Victor Stinner in :issue:`45434`.) * The non-limited API files ``cellobject.h``, ``classobject.h``, ``context.h``, diff --git a/Include/Python.h b/Include/Python.h index c0a621ad44a..6e3303ac9a3 100644 --- a/Include/Python.h +++ b/Include/Python.h @@ -16,12 +16,14 @@ # define _SGI_MP_SOURCE #endif -#include // memcpy() -#ifndef Py_LIMITED_API +// stdlib.h, stdio.h, errno.h and string.h headers are not used by Python +// headers, but kept for backward compatibility. They are excluded from the +// limited C API of Python 3.11. +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 +# include # include // FILE* -#endif -#ifdef HAVE_ERRNO_H # include // errno +# include // memcpy() #endif #ifndef MS_WINDOWS # include diff --git a/Include/pyport.h b/Include/pyport.h index 0bec2a9b38f..61ca3a97c18 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -201,9 +201,10 @@ typedef Py_ssize_t Py_ssize_clean_t; # define Py_LOCAL_INLINE(type) static inline type #endif -/* Py_MEMCPY is kept for backwards compatibility, - * see https://bugs.python.org/issue28126 */ -#define Py_MEMCPY memcpy +// bpo-28126: Py_MEMCPY is kept for backwards compatibility, +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 +# define Py_MEMCPY memcpy +#endif #ifdef HAVE_IEEEFP_H #include /* needed for 'finite' declaration on some platforms */ diff --git a/Misc/NEWS.d/next/C API/2021-10-11-23-03-49.bpo-45434.tsS8I_.rst b/Misc/NEWS.d/next/C API/2021-10-11-23-03-49.bpo-45434.tsS8I_.rst index 95c5f0d1150..627f687272f 100644 --- a/Misc/NEWS.d/next/C API/2021-10-11-23-03-49.bpo-45434.tsS8I_.rst +++ b/Misc/NEWS.d/next/C API/2021-10-11-23-03-49.bpo-45434.tsS8I_.rst @@ -1,6 +1,5 @@ -The ```` header file no longer includes ````. C -extensions using ```` must now include it explicitly. -The system ```` header provides functions like: -``malloc()``/``free()``, ``getenv()``, ``strtol()``, ``abs()``, ``strtol()``, -``exit()`` and ``abort()``. +```` no longer includes the header files ````, +````, ```` and ```` when the ``Py_LIMITED_API`` +macro is set to ``0x030b0000`` (Python 3.11) or higher. C extensions should +explicitly include the header files after ``#include ``. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2021-10-15-00-30-45.bpo-45434.XLtsbK.rst b/Misc/NEWS.d/next/C API/2021-10-15-00-30-45.bpo-45434.XLtsbK.rst deleted file mode 100644 index 4a06635d179..00000000000 --- a/Misc/NEWS.d/next/C API/2021-10-15-00-30-45.bpo-45434.XLtsbK.rst +++ /dev/null @@ -1,5 +0,0 @@ -The ```` header file no longer includes ```` if the -``Py_LIMITED_API`` macro is defined. Functions expecting ``FILE*`` are excluded -from the limited C API (:pep:`384`). C extensions using ```` must now -include it explicitly. -Patch by Victor Stinner. diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 9bd9a5407d4..93895c4f121 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -1,4 +1,3 @@ - /* Use this file as a template to start implementing a module that also declares object types. All occurrences of 'Xxo' should be changed to something reasonable for your objects. After that, all other @@ -55,7 +54,7 @@ pass */ -#define Py_LIMITED_API 0x030a0000 +#define Py_LIMITED_API 0x030b0000 #include "Python.h"