All of lore.kernel.org
 help / color / mirror / Atom feed
* [libgpiod][PATCH v2 11/14] bindings: python: include Python.h before other headers
@ 2026-10-20 21:12 Vincent Fazio
  0 siblings, 0 replies; only message in thread
From: Vincent Fazio @ 2026-10-20 21:12 UTC (permalink / raw)
  To: linux-gpio; +Cc: brgl, Vincent Fazio

Per the Python C API reference manual [0], Python.h should be included
before other headers since it specifies some pre-processor definitions
that may differ from system defaults.

This was noticed when testing on CPython 3.15 [1] which emitted warnings
due to redefinitions of _XOPEN_SOURCE and _POSIX_C_SOURCE during builds
of the Python bindings.

Note: despite the manual stating that `PY_SSIZE_T_CLEAN` should also be
defined, it is intentionally not included. The Python bindings do not
use the `#` format specifier when parsing any arguments so defining it
provides no value [2] and it is deprecated in future versions.

[0]: https://docs.python.org/3/c-api/intro.html#include-files
[1]: https://github.com/python/cpython/commit/927eb448aad6436d794ec9f55780013e25609600
[2]: https://docs.python.org/3/c-api/arg.html#strings-and-buffers

Signed-off-by: Vincent Fazio <vfazio@gmail.com>
---
Changes in v2
 - Added white space to separate the Python.h include from others
   (Bartosz)
 - Added a comment beside the include to provide rationale (vfazio)
 - Expanded to include tests/system/ext.c for consistency (vfazio)
---
 bindings/python/gpiod/ext/internal.h | 4 +++-
 bindings/python/gpiod/ext/module.c   | 4 +++-
 bindings/python/tests/gpiosim/ext.c  | 4 +++-
 bindings/python/tests/system/ext.c   | 2 ++
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/bindings/python/gpiod/ext/internal.h b/bindings/python/gpiod/ext/internal.h
index 2996884..2c7ecd2 100644
--- a/bindings/python/gpiod/ext/internal.h
+++ b/bindings/python/gpiod/ext/internal.h
@@ -4,9 +4,11 @@
 #ifndef __LIBGPIOD_PYTHON_MODULE_H__
 #define __LIBGPIOD_PYTHON_MODULE_H__
 
-#include <gpiod.h>
+/* Import Python.h before other headers per API documentation */
 #include <Python.h>
 
+#include <gpiod.h>
+
 PyObject *Py_gpiod_SetErrFromErrno(void);
 unsigned int Py_gpiod_PyLongAsUnsignedInt(PyObject *pylong);
 void Py_gpiod_dealloc(PyObject *self);
diff --git a/bindings/python/gpiod/ext/module.c b/bindings/python/gpiod/ext/module.c
index 21ea519..8a9a07f 100644
--- a/bindings/python/gpiod/ext/module.c
+++ b/bindings/python/gpiod/ext/module.c
@@ -1,9 +1,11 @@
 // SPDX-License-Identifier: LGPL-2.1-or-later
 // SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
 
-#include <gpiod.h>
+/* Import Python.h before other headers per API documentation */
 #include <Python.h>
 
+#include <gpiod.h>
+
 struct module_const {
 	const char *name;
 	long val;
diff --git a/bindings/python/tests/gpiosim/ext.c b/bindings/python/tests/gpiosim/ext.c
index cc7bd37..1a6a238 100644
--- a/bindings/python/tests/gpiosim/ext.c
+++ b/bindings/python/tests/gpiosim/ext.c
@@ -1,9 +1,11 @@
 // SPDX-License-Identifier: LGPL-2.1-or-later
 // SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
 
-#include <gpiosim.h>
+/* Import Python.h before other headers per API documentation */
 #include <Python.h>
 
+#include <gpiosim.h>
+
 struct module_const {
 	const char *name;
 	long val;
diff --git a/bindings/python/tests/system/ext.c b/bindings/python/tests/system/ext.c
index 8b307f6..88d594d 100644
--- a/bindings/python/tests/system/ext.c
+++ b/bindings/python/tests/system/ext.c
@@ -2,7 +2,9 @@
 // SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
 // SPDX-FileCopyrightText: 2024 Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
 
+/* Import Python.h before other headers per API documentation */
 #include <Python.h>
+
 #include <linux/version.h>
 #include <sys/prctl.h>
 #include <sys/utsname.h>
-- 
2.43.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-20 21:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-20 21:12 [libgpiod][PATCH v2 11/14] bindings: python: include Python.h before other headers Vincent Fazio

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.