-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
gh-109617: fix ncurses incompatibility on macOS with Xcode 15 #111258
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@@ -39,7 +39,8 @@ | |||
#ifdef HAVE_NCURSES_H | |||
/* configure was checking <curses.h>, but we will | |||
use <ncurses.h>, which has some or all these features. */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you explain the version check in the comment?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current code do not use pechochar()
, pnoutrefresh()
, prefresh()
and subpad()
if neither HAVE_CURSES_IS_PAD nor WINDOW_HAS_FLAGS are defined. It allows to build with the curses implementation that does not support pads and does not have these function.
This PR makes the above functions required.
Thanks, I missed that. I will revert to the macro version. Do you have a suggestion on how to test for those implementations? |
Updated from |
We got lucky with GitHub Actions runner image allocation. The free-threaded build ran on the older 20240114.1 with Xcode 14 (which has recently started failing): And the regular build ran on the newer 20240204.1 with Xcode 15: And both passed 👍 |
I updated the patch according to feedback:
I left in the code that parses ncurses version. It addresses a problem that only arises once this fix is available (that is, static version could report 6 but the interpreter could be loading 5 if running on older macOS). I can remove if this feels too controversial, or split to a new issue. |
…ython#111258) Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Co-authored-by: Łukasz Langa <lukasz@langa.pl>
macOS 14 ships with a new version of ncurses1. But their new SDK tries to support both the old and the new version at build time in a way that CPython's configure script could not correctly detect.
NCURSES_OPAQUE = 0
which, when using ncurses, avoids the use of some exported functions, such asis_pad
2. The macro versions are used instead.Question: do we want to limit the change to macOS, or possibly make it conditional to MACOSX_DEPLOYMENT_TARGET < 14.0?
curses.wrapper
Causes Seg Fault (macOS, xcode 15 Apple supplied ncurses 6.0 breakage) #109617Footnotes
for a long time, macOS has shipped a libncurses version based on ncurses 5.7.20081102. Since macOS 14.0, the version seems to be 6.0.20150808 plus some patches. ↩
see https://invisible-island.net/ncurses/man/curs_opaque.3x.html. Opaque mode would be necessary to use the alternative libncursest (ncurses thread-safer ABI) but Python does not use it. ↩