Skip to content

gh-108765: Move standard includes to Python.h #108769

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 24 additions & 16 deletions Include/Python.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
5 changes: 1 addition & 4 deletions Include/bytesobject.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@

/* Bytes object interface */
// Bytes object interface

#ifndef Py_BYTESOBJECT_H
#define Py_BYTESOBJECT_H
#ifdef __cplusplus
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
Expand Down
4 changes: 4 additions & 0 deletions Include/internal/pycore_condvar.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 1 addition & 4 deletions Include/modsupport.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
// Module support interface

#ifndef Py_MODSUPPORT_H
#define Py_MODSUPPORT_H
#ifdef __cplusplus
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 *,
Expand Down
2 changes: 0 additions & 2 deletions Include/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 3 additions & 7 deletions Include/objimpl.h
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -231,4 +227,4 @@ PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *);
#ifdef __cplusplus
}
#endif
#endif /* !Py_OBJIMPL_H */
#endif // !Py_OBJIMPL_H
6 changes: 2 additions & 4 deletions Include/pyerrors.h
Original file line number Diff line number Diff line change
@@ -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(
Expand Down
11 changes: 3 additions & 8 deletions Include/pymem.h
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -100,5 +96,4 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
#ifdef __cplusplus
}
#endif

#endif /* !Py_PYMEM_H */
#endif // !Py_PYMEM_H
11 changes: 5 additions & 6 deletions Include/pyport.h
Original file line number Diff line number Diff line change
@@ -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"
Expand Down Expand Up @@ -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 */
8 changes: 0 additions & 8 deletions Include/unicodeobject.h
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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 -------------------------------------------- */
Expand Down Expand Up @@ -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;
Expand Down