aboutsummaryrefslogtreecommitdiff
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-10-11 22:51:32 +0200
committerGitHub <noreply@github.com>2021-10-11 22:51:32 +0200
commit47717d1186563695e798b40350d15b00d04a5237 (patch)
tree60d1ca925871a411d379fb1ce141b517fb80b562 /Include
parent2f92e2a590f0e5d2d3093549f5af9a4a1889eb5a (diff)
downloadcpython3-47717d1186563695e798b40350d15b00d04a5237.tar.gz
bpo-45434: Cleanup Python.h header file (GH-28883)
* Move limits.h include and UCHAR_MAX checks to pyport.h. * Move sanitizers macros to pyport.h. * Remove comment about <assert.h>: C extensions are built with NDEBUG automatically by Python.
Diffstat (limited to 'Include')
-rw-r--r--Include/Python.h65
-rw-r--r--Include/pyport.h26
2 files changed, 39 insertions, 52 deletions
diff --git a/Include/Python.h b/Include/Python.h
index a83befa311..fa77521d46 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -1,83 +1,50 @@
+// Entry point of the Python C API.
+// C extensions should only #include <Python.h>, and not include directly
+// the other Python header files included by <Python.h>.
+
#ifndef Py_PYTHON_H
#define Py_PYTHON_H
-/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */
-/* Include nearly all Python header files */
+// Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" {
+// Include Python header files
#include "patchlevel.h"
#include "pyconfig.h"
#include "pymacconfig.h"
-#include <limits.h>
-
-#ifndef UCHAR_MAX
-#error "Something's broken. UCHAR_MAX should be defined in limits.h."
-#endif
-
-#if UCHAR_MAX != 255
-#error "Python's source code assumes C's unsigned char is an 8-bit type."
-#endif
-
#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
-#define _SGI_MP_SOURCE
+# define _SGI_MP_SOURCE
#endif
-#include <stdio.h>
+#include <stdio.h> // NULL, FILE*
#ifndef NULL
# error "Python.h requires that stdio.h define NULL."
#endif
-#include <string.h>
+#include <string.h> // memcpy()
#ifdef HAVE_ERRNO_H
-#include <errno.h>
+# include <errno.h> // errno
#endif
#include <stdlib.h>
#ifndef MS_WINDOWS
-#include <unistd.h>
+# include <unistd.h>
#endif
-
-/* For size_t? */
#ifdef HAVE_STDDEF_H
-#include <stddef.h>
+ // For size_t
+# include <stddef.h>
#endif
-/* CAUTION: Build setups should ensure that NDEBUG is defined on the
- * compiler command line when building Python in release mode; else
- * assert() calls won't be removed.
- */
#include <assert.h>
#include "pyport.h"
#include "pymacro.h"
-
-/* A convenient way for code to know if sanitizers are enabled. */
-#if defined(__has_feature)
-# if __has_feature(memory_sanitizer)
-# if !defined(_Py_MEMORY_SANITIZER)
-# define _Py_MEMORY_SANITIZER
-# endif
-# endif
-# if __has_feature(address_sanitizer)
-# if !defined(_Py_ADDRESS_SANITIZER)
-# define _Py_ADDRESS_SANITIZER
-# endif
-# endif
-#elif defined(__GNUC__)
-# if defined(__SANITIZE_ADDRESS__)
-# define _Py_ADDRESS_SANITIZER
-# endif
-#endif
-
#include "pymath.h"
#include "pymem.h"
-
#include "object.h"
#include "objimpl.h"
#include "typeslots.h"
#include "pyhash.h"
-
#include "cpython/pydebug.h"
-
#include "bytearrayobject.h"
#include "bytesobject.h"
#include "unicodeobject.h"
@@ -115,15 +82,12 @@
#include "namespaceobject.h"
#include "cpython/picklebufobject.h"
#include "cpython/pytime.h"
-
#include "codecs.h"
#include "pyerrors.h"
-
#include "cpython/initconfig.h"
#include "pythread.h"
#include "pystate.h"
#include "context.h"
-
#include "modsupport.h"
#include "compile.h"
#include "pythonrun.h"
@@ -133,12 +97,9 @@
#include "osmodule.h"
#include "intrcheck.h"
#include "import.h"
-
#include "abstract.h"
#include "bltinmodule.h"
-
#include "eval.h"
-
#include "cpython/pyctype.h"
#include "pystrtod.h"
#include "pystrcmp.h"
diff --git a/Include/pyport.h b/Include/pyport.h
index ffc9ba5561..a38074cc50 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -5,6 +5,14 @@
#include <inttypes.h>
+#include <limits.h>
+#ifndef UCHAR_MAX
+# error "limits.h must define UCHAR_MAX"
+#endif
+#if UCHAR_MAX != 255
+# error "Python's source code assumes C's unsigned char is an 8-bit type"
+#endif
+
/* Defines to build Python and its standard library:
*
@@ -851,4 +859,22 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler;
#endif
+/* A convenient way for code to know if sanitizers are enabled. */
+#if defined(__has_feature)
+# if __has_feature(memory_sanitizer)
+# if !defined(_Py_MEMORY_SANITIZER)
+# define _Py_MEMORY_SANITIZER
+# endif
+# endif
+# if __has_feature(address_sanitizer)
+# if !defined(_Py_ADDRESS_SANITIZER)
+# define _Py_ADDRESS_SANITIZER
+# endif
+# endif
+#elif defined(__GNUC__)
+# if defined(__SANITIZE_ADDRESS__)
+# define _Py_ADDRESS_SANITIZER
+# endif
+#endif
+
#endif /* Py_PYPORT_H */