Files
shredos.x86_64/package/python3/0009-configure.ac-detect-unusable-termio-operations.patch
2026-01-06 22:53:29 +00: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