Uh oh!
There was an error while loading. Please reload this page.
gh-109617: fix ncurses incompatibility on macOS with Xcode 15 - #111258
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| @@ -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.
Can you explain the version check in the comment?
Uh oh!
There was an error while loading. Please reload this page.
serhiy-storchaka
left a comment
There was a problem hiding this comment.
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.
Uh oh!
There was an error while loading. Please reload this page.
sorcio
commented
Oct 31, 2023
Thanks, I missed that. I will revert to the macro version. Do you have a suggestion on how to test for those implementations? |
hugovk
commented
Feb 13, 2024
Updated from |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
hugovk
commented
Feb 13, 2024
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 👍 |
sorcio
commented
Feb 13, 2024
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 = 0which, when using ncurses, avoids the use of some exported functions, such asis_pad2. 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.wrapperCauses 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. ↩