Files
rpi-buildroot/package/python3/0009-configure.ac-detect-unusable-termio-operations.patch
Thomas Petazzoni 899703cb37 package/python3: fix build on Sparc64 due to glibc 2.42 bump
Since we bumped to glibc 2.42, the build of Python 3 is failing on
Sparc64 due to the removal of the "struct termio" definition from
glibc. Since this only affects a small number of termio operations, we
simply drop support for them, since they basically can't be used
anymore (and we don't really care that much about those specific
operations that only exist on Sparc64).

Fixes:

  https://autobuild.buildroot.net/results/28fee0f8368ae3dc1d607ebad4881b736e360f07/

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2025-12-07 21:45:18 +01:00

100 lines
2.8 KiB
Diff

From 2d336d1fedb692350a1e4f131246f60a1195cd93 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Date: Sun, 7 Dec 2025 13:57:06 +0100
Subject: [PATCH] configure.ac: detect unusable termio operations
Some termio operations are not actually usable on some
architectures. For example, the TCGETA, TCSETA, TCSETAF and TCSETAW
are defined with a reference to "struct termio" on alpha, hppa and
sparc64, but "struct termio" is no longer defined since glibc 2.42,
causing a build failure.
Instead of using those operations as soon as they are defined, this
commit checks more carefully that they are actually usable. This is
done using a new m4 macro PY_CHECK_IOCTL.
Upstream: https://github.com/python/cpython/pull/142380
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
Modules/termios.c | 8 ++++----
configure.ac | 26 ++++++++++++++++++++++++++
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/Modules/termios.c b/Modules/termios.c
index f2c5a4bafa7..dbfe922d1e8 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -1115,7 +1115,7 @@ static struct constant {
#ifdef TCFLSH
{"TCFLSH", TCFLSH},
#endif
-#ifdef TCGETA
+#if defined(HAVE_TCGETA)
{"TCGETA", TCGETA},
#endif
#ifdef TCGETS
@@ -1127,13 +1127,13 @@ static struct constant {
#ifdef TCSBRKP
{"TCSBRKP", TCSBRKP},
#endif
-#ifdef TCSETA
+#if defined(HAVE_TCSETA)
{"TCSETA", TCSETA},
#endif
-#ifdef TCSETAF
+#if defined(HAVE_TCSETAF)
{"TCSETAF", TCSETAF},
#endif
-#ifdef TCSETAW
+#if defined(HAVE_TCSETAW)
{"TCSETAW", TCSETAW},
#endif
#ifdef TCSETS
diff --git a/configure.ac b/configure.ac
index 34e4d5dd244..646aa24ecf3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -101,6 +101,26 @@ AC_DEFUN([PY_STDLIB_MOD_SET_NA], [
AS_VAR_SET([py_cv_module_]mod, [n/a])])
])
+dnl PY_CHECK_IOCTL(IOCTL_SYMBOL)
+AC_DEFUN([PY_CHECK_IOCTL],
+[
+ AC_MSG_CHECKING([for $1])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/ioctl.h>]],
+ [[
+ /* Test whether $1 is declared */
+ long val = $1;
+ return 0;
+ ]]
+ )],
+ [AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_$1], [1],
+ [Define this if $1 termio operation is usable])],
+ [AC_MSG_RESULT([no])]
+ )
+])
+
AC_SUBST([BASECPPFLAGS])
if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then
# If we're building out-of-tree, we need to make sure the following
@@ -7955,6 +7975,12 @@ AC_ARG_ENABLE(idle3,
AS_HELP_STRING([--disable-idle3], [disable idle3 IDE]),
[ IDLE="${enableval}" ], [ IDLE=yes ])
+# ioctls used by Modules/termios.c but not usable on all platforms
+PY_CHECK_IOCTL([TCGETA])
+PY_CHECK_IOCTL([TCSETA])
+PY_CHECK_IOCTL([TCSETAF])
+PY_CHECK_IOCTL([TCSETAW])
+
# generate output files
AC_CONFIG_FILES(m4_normalize([
Makefile.pre
--
2.51.1