diff options
author | Davide Rizzo <sorcio@gmail.com> | 2024-05-04 21:41:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-04 21:41:47 (GMT) |
commit | 08d169f14a715ceaae3d563ced2ff1633d009359 (patch) | |
tree | 2d7f24665ab85a8ae014d52573ce4b3d09a95fc3 /Include | |
parent | 291cfa454b9c5b677c955aaf53fab91f0186b6fa (diff) | |
download | cpython-08d169f14a715ceaae3d563ced2ff1633d009359.zip cpython-08d169f14a715ceaae3d563ced2ff1633d009359.tar.gz cpython-08d169f14a715ceaae3d563ced2ff1633d009359.tar.bz2 |
gh-109617: fix ncurses incompatibility on macOS with Xcode 15 (#111258)
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Co-authored-by: Ćukasz Langa <lukasz@langa.pl>
Diffstat (limited to 'Include')
-rw-r--r-- | Include/py_curses.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Include/py_curses.h b/Include/py_curses.h index e46b08e..a51d998 100644 --- a/Include/py_curses.h +++ b/Include/py_curses.h @@ -23,10 +23,16 @@ # endif #endif -#if !defined(HAVE_CURSES_IS_PAD) && defined(WINDOW_HAS_FLAGS) -/* The following definition is necessary for ncurses 5.7; without it, - some of [n]curses.h set NCURSES_OPAQUE to 1, and then Python - can't get at the WINDOW flags field. */ +#if defined(WINDOW_HAS_FLAGS) && defined(__APPLE__) +/* gh-109617, gh-115383: we can rely on the default value for NCURSES_OPAQUE on + most platforms, but not on macOS. This is because, starting with Xcode 15, + Apple-provided ncurses.h comes from ncurses 6 (which defaults to opaque + structs) but can still be linked to older versions of ncurses dynamic + libraries which don't provide functions such as is_pad() to deal with opaque + structs. Setting NCURSES_OPAQUE to 0 is harmless in all ncurses releases to + this date (provided that a thread-safe implementation is not required), but + this might change in the future. This fix might become irrelevant once + support for macOS 13 or earlier is dropped. */ #define NCURSES_OPAQUE 0 #endif @@ -39,7 +45,10 @@ #ifdef HAVE_NCURSES_H /* configure was checking <curses.h>, but we will use <ncurses.h>, which has some or all these features. */ -#if !defined(WINDOW_HAS_FLAGS) && !(NCURSES_OPAQUE+0) +#if !defined(WINDOW_HAS_FLAGS) && \ + (NCURSES_VERSION_PATCH+0 < 20070303 || !(NCURSES_OPAQUE+0)) +/* the WINDOW flags field was always accessible in ncurses prior to 20070303; + after that, it depends on the value of NCURSES_OPAQUE. */ #define WINDOW_HAS_FLAGS 1 #endif #if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906 |