Skip to content

gh-152502: Detect optional curses functions with configure probes#152504

Merged
serhiy-storchaka merged 3 commits into
python:mainfrom
serhiy-storchaka:curses-function-probes
Jun 29, 2026
Merged

gh-152502: Detect optional curses functions with configure probes#152504
serhiy-storchaka merged 3 commits into
python:mainfrom
serhiy-storchaka:curses-function-probes

Conversation

@serhiy-storchaka

Copy link
Copy Markdown
Member

Some functions in Modules/_cursesmodule.c were called unconditionally or gated only by the ncurses-specific NCURSES_EXT_FUNCS macro, which broke building the module against curses implementations other than ncursesw (narrow ncurses, NetBSD curses) even when the library provided the function. Detect each with a configure capability probe and gate on HAVE_CURSES_*:

  • new PY_CHECK_CURSES_FUNC probes for scr_dump (one probe gates the inseparable scr_dump/scr_restore/scr_init/scr_set family), key_defined, term_attrs, define_key, keyok, set_escdelay, set_tabsize;
  • a new PY_CHECK_CURSES_VAR macro for get_escdelay/get_tabsize, which read the ESCDELAY/TABSIZE variables rather than functions;
  • test_env_queries now guards term_attrs() with hasattr().

None of these are in X/Open Curses; they are ncurses extensions (NetBSD provides compatible ones), so a capability probe is more portable than conditioning on NCURSES_VERSION.

No behaviour change on standard ncursesw. test_curses passes and is refleak-clean on wide ncursesw, narrow ncurses, and NetBSD curses, under UTF-8 and 8-bit locales.

Note: configure was edited by hand; please run make regen-configure to confirm it matches the pinned autoconf toolchain.

🤖 Generated with Claude Code

Some curses functions were called unconditionally or gated only by the
ncurses-specific NCURSES_EXT_FUNCS macro, which broke building the module
against other curses implementations (narrow ncurses, NetBSD curses) even
when they provided the function.  Detect each with a configure capability
probe and gate on HAVE_CURSES_*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@serhiy-storchaka serhiy-storchaka added needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes needs backport to 3.15 pre-release feature fixes, bugs and security fixes labels Jun 29, 2026
@serhiy-storchaka serhiy-storchaka enabled auto-merge (squash) June 29, 2026 11:43
@serhiy-storchaka serhiy-storchaka merged commit 0635e55 into python:main Jun 29, 2026
105 of 108 checks passed
@miss-islington-app

Copy link
Copy Markdown

Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15.
🐍🍒⛏🤖

@miss-islington-app

Copy link
Copy Markdown

Sorry, @serhiy-storchaka, I could not cleanly backport this to 3.15 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker 0635e55b47e306aa6cc0610105775849b0699e2c 3.15

@miss-islington-app

Copy link
Copy Markdown

Sorry, @serhiy-storchaka, I could not cleanly backport this to 3.14 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker 0635e55b47e306aa6cc0610105775849b0699e2c 3.14

@miss-islington-app

Copy link
Copy Markdown

Sorry, @serhiy-storchaka, I could not cleanly backport this to 3.13 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker 0635e55b47e306aa6cc0610105775849b0699e2c 3.13

@bedevere-app

bedevere-app Bot commented Jun 29, 2026

Copy link
Copy Markdown

GH-152589 is a backport of this pull request to the 3.15 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 pre-release feature fixes, bugs and security fixes label Jun 29, 2026
serhiy-storchaka added a commit to serhiy-storchaka/cpython that referenced this pull request Jun 29, 2026
…re probes (pythonGH-152504)

set_escdelay(), set_tabsize() and the ESCDELAY and TABSIZE variables were
gated only by the ncurses-specific NCURSES_EXT_FUNCS macro, which excluded
them when building against other curses implementations such as NetBSD curses
even when they provided them.  Detect each with a configure capability probe
and gate on HAVE_CURSES_*.
(cherry picked from commit 0635e55)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@serhiy-storchaka serhiy-storchaka removed needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes labels Jun 29, 2026
@serhiy-storchaka serhiy-storchaka removed their assignment Jun 29, 2026
serhiy-storchaka added a commit that referenced this pull request Jun 29, 2026
…bes (GH-152504) (GH-152589)

set_escdelay(), set_tabsize() and the ESCDELAY and TABSIZE variables were
gated only by the ncurses-specific NCURSES_EXT_FUNCS macro, which excluded
them when building against other curses implementations such as NetBSD curses
even when they provided them.  Detect each with a configure capability probe
and gate on HAVE_CURSES_*.
(cherry picked from commit 0635e55)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka added a commit that referenced this pull request Jun 29, 2026
…bes (GH-152504) (GH-152589) (GH-152603)

set_escdelay(), set_tabsize() and the ESCDELAY and TABSIZE variables were
gated only by the ncurses-specific NCURSES_EXT_FUNCS macro, which excluded
them when building against other curses implementations such as NetBSD curses
even when they provided them.  Detect each with a configure capability probe
and gate on HAVE_CURSES_*.
(cherry picked from commit 0635e55)
(cherry picked from commit 2a4ffa6)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka added a commit that referenced this pull request Jun 29, 2026
…bes (GH-152504) (GH-152589) (GH-152602)

set_escdelay(), set_tabsize() and the ESCDELAY and TABSIZE variables were
gated only by the ncurses-specific NCURSES_EXT_FUNCS macro, which excluded
them when building against other curses implementations such as NetBSD curses
even when they provided them.  Detect each with a configure capability probe
and gate on HAVE_CURSES_*.
(cherry picked from commit 0635e55)
(cherry picked from commit 2a4ffa6)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant