]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-108765: Move standard includes to Python.h (#108769)
authorVictor Stinner <vstinner@python.org>
Fri, 1 Sep 2023 19:03:20 +0000 (21:03 +0200)
committerGitHub <noreply@github.com>
Fri, 1 Sep 2023 19:03:20 +0000 (21:03 +0200)
* Move <ctype.h>, <limits.h> and <stdarg.h> standard includes to
  Python.h.
* Move "pystats.h" include from object.h to Python.h.
* Remove redundant "pymem.h" include in objimpl.h and "pyport.h"
  include in pymem.h; Python.h already includes them earlier.
* Remove redundant <wchar.h> include in unicodeobject.h; Python.h
  already includes it.
* Move _SGI_MP_SOURCE define from Python.h to pyport.h.
* pycore_condvar.h includes explicitly <unistd.h> for the
  _POSIX_THREADS macro.

Include/Python.h
Include/bytesobject.h
Include/internal/pycore_condvar.h
Include/modsupport.h
Include/object.h
Include/objimpl.h
Include/pyerrors.h
Include/pymem.h
Include/pyport.h
Include/unicodeobject.h

index 07f6c202a7f126103b8efe90bdebd671d971e437..44f0fd3ee4b56b5361e9f2faabef2b3e9625a48a 100644 (file)
@@ -5,42 +5,50 @@
 #ifndef Py_PYTHON_H
 #define Py_PYTHON_H
 
-// Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" {
+// Since this is a "meta-include" file, "#ifdef __cplusplus / extern "C" {"
+// is not needed.
+
 
 // Include Python header files
 #include "patchlevel.h"
 #include "pyconfig.h"
 #include "pymacconfig.h"
 
-#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
-#  define _SGI_MP_SOURCE
+
+// Include standard header files
+#include <assert.h>               // assert()
+#include <ctype.h>                // tolower()
+#include <inttypes.h>             // uintptr_t
+#include <limits.h>               // INT_MAX
+#include <stdarg.h>               // va_list
+#include <wchar.h>                // wchar_t
+#ifdef HAVE_STDDEF_H
+#  include <stddef.h>             // size_t
+#endif
+#ifndef MS_WINDOWS
+#  include <unistd.h>             // sysconf()
 #endif
 
-// 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.
+// errno.h, stdio.h, stdlib.h and string.h headers are no longer used by Python
+// headers, but kept for backward compatibility (no introduce new compiler
+// warnings). They are not included by the limited C API version 3.11 and
+// above.
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
-#  include <stdlib.h>
-#  include <stdio.h>              // FILE*
 #  include <errno.h>              // errno
+#  include <stdio.h>              // FILE*
+#  include <stdlib.h>             // getenv()
 #  include <string.h>             // memcpy()
 #endif
-#ifndef MS_WINDOWS
-#  include <unistd.h>
-#endif
-#ifdef HAVE_STDDEF_H
-#  include <stddef.h>             // size_t
-#endif
 
-#include <assert.h>               // assert()
-#include <wchar.h>                // wchar_t
 
+// Include Python header files
 #include "pyport.h"
 #include "pymacro.h"
 #include "pymath.h"
 #include "pymem.h"
 #include "pytypedefs.h"
 #include "pybuffer.h"
+#include "pystats.h"
 #include "object.h"
 #include "objimpl.h"
 #include "typeslots.h"
index ee448cd02bdab385b26227377d8b6d5b72ca45ee..c5a24195be6bc3771c3b5b65e85106d516b029e1 100644 (file)
@@ -1,5 +1,4 @@
-
-/* Bytes object interface */
+// Bytes object interface
 
 #ifndef Py_BYTESOBJECT_H
 #define Py_BYTESOBJECT_H
@@ -7,8 +6,6 @@
 extern "C" {
 #endif
 
-#include <stdarg.h>               // va_list
-
 /*
 Type PyBytesObject represents a byte string.  An extra zero byte is
 reserved at the end to ensure it is zero-terminated, but a size is
index db8682a4c077aab5b83eca7fc87c12359fcae904..489e67d4ec4f9f56ce270cbc41002863ef6e92e3 100644 (file)
@@ -5,6 +5,10 @@
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
+#ifndef MS_WINDOWS
+#  include <unistd.h>             // _POSIX_THREADS
+#endif
+
 #ifndef _POSIX_THREADS
 /* This means pthreads are not implemented in libc headers, hence the macro
    not present in unistd.h. But they still can be implemented as an external
index 7c15ab50c320e28c604a01791eb4e48c1d0f3079..6efe9dfaa9089e18e0460348e8d770226f82a342 100644 (file)
@@ -1,3 +1,4 @@
+// Module support interface
 
 #ifndef Py_MODSUPPORT_H
 #define Py_MODSUPPORT_H
@@ -5,10 +6,6 @@
 extern "C" {
 #endif
 
-/* Module support interface */
-
-#include <stdarg.h>               // va_list
-
 PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
 PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
 PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
index de2a1ce0f3c4ddd57888551d1ee09e3353a594de..b94b2907e4f1633573777622b7bfca5b7312da8f 100644 (file)
@@ -51,8 +51,6 @@ A standard interface exists for objects that contain an array of items
 whose size is determined when the object is allocated.
 */
 
-#include "pystats.h"
-
 /* Py_DEBUG implies Py_REF_DEBUG. */
 #if defined(Py_DEBUG) && !defined(Py_REF_DEBUG)
 #  define Py_REF_DEBUG
index ef871c5ea93ebee7e83d0637fab187ddd0ac894e..967e2776767756e276b1c79f0732071fbbfa6cbd 100644 (file)
@@ -1,12 +1,8 @@
-/* The PyObject_ memory family:  high-level object memory interfaces.
-   See pymem.h for the low-level PyMem_ family.
-*/
+// The PyObject_ memory family:  high-level object memory interfaces.
+// See pymem.h for the low-level PyMem_ family.
 
 #ifndef Py_OBJIMPL_H
 #define Py_OBJIMPL_H
-
-#include "pymem.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -231,4 +227,4 @@ PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *);
 #ifdef __cplusplus
 }
 #endif
-#endif /* !Py_OBJIMPL_H */
+#endif   // !Py_OBJIMPL_H
index d089fa71779330afd29ce0411b882b305c37b1fe..5d0028c116e2d862948042746734e252e4aed0f6 100644 (file)
@@ -1,13 +1,11 @@
+// Error handling definitions
+
 #ifndef Py_ERRORS_H
 #define Py_ERRORS_H
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#include <stdarg.h>               // va_list
-
-/* Error handling definitions */
-
 PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
 PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *);
 PyAPI_FUNC(void) PyErr_SetString(
index e882645757bfd3933252f79987204bfeabd837c9..68e33f90b7b9134d21818ca6c0249d8b539dad73 100644 (file)
@@ -1,12 +1,8 @@
-/* The PyMem_ family:  low-level memory allocation interfaces.
-   See objimpl.h for the PyObject_ memory family.
-*/
+// The PyMem_ family:  low-level memory allocation interfaces.
+// See objimpl.h for the PyObject_ memory family.
 
 #ifndef Py_PYMEM_H
 #define Py_PYMEM_H
-
-#include "pyport.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -100,5 +96,4 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
 #ifdef __cplusplus
 }
 #endif
-
-#endif /* !Py_PYMEM_H */
+#endif   // !Py_PYMEM_H
index 115b54fd969287cfaa4bb064c5e318b71b021ae3..511c3fda1a40a5c7ad4610a692d893018446f312 100644 (file)
@@ -1,13 +1,8 @@
 #ifndef Py_PYPORT_H
 #define Py_PYPORT_H
 
-#include "pyconfig.h" /* include for defines */
-
-#include <inttypes.h>
-
-#include <limits.h>
 #ifndef UCHAR_MAX
-#  error "limits.h must define UCHAR_MAX"
+#  error "<limits.h> header must define UCHAR_MAX"
 #endif
 #if UCHAR_MAX != 255
 #  error "Python's source code assumes C's unsigned char is an 8-bit type"
@@ -771,4 +766,8 @@ extern char * _getpty(int *, int, mode_t, int);
 #   define ALIGNOF_MAX_ALIGN_T _Alignof(long double)
 #endif
 
+#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
+#  define _SGI_MP_SOURCE
+#endif
+
 #endif /* Py_PYPORT_H */
index 5839c747a292753ba3e3251a02908ec9d581383d..f00277787122aa1921e654d9f4376613cafd2722 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef Py_UNICODEOBJECT_H
 #define Py_UNICODEOBJECT_H
 
-#include <stdarg.h>               // va_list
-
 /*
 
 Unicode implementation based on original code by Fredrik Lundh,
@@ -55,8 +53,6 @@ Copyright (c) Corporation for National Research Initiatives.
  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  * -------------------------------------------------------------------- */
 
-#include <ctype.h>
-
 /* === Internal API ======================================================= */
 
 /* --- Internal Unicode Format -------------------------------------------- */
@@ -93,10 +89,6 @@ Copyright (c) Corporation for National Research Initiatives.
 # endif
 #endif
 
-#ifdef HAVE_WCHAR_H
-#  include <wchar.h>
-#endif
-
 /* Py_UCS4 and Py_UCS2 are typedefs for the respective
    unicode representations. */
 typedef uint32_t Py_UCS4;