Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
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
Uh oh!
There was an error while loading. Please reload this page.
Conversation
sorcio commented Oct 24, 2023 • edited by bedevere-app bot
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by bedevere-app bot
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.
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.
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?
Uh oh!
There was an error while loading. Please reload this page.
serhiy-storchaka left a 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.
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 <[email protected]> Co-authored-by: Łukasz Langa <[email protected]>
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. ↩