diff -Naur Python-2.7.9-orig/configure.ac Python-2.7.9/configure.ac --- Python-2.7.9-orig/configure.ac 2014-12-11 13:50:50.996600000 +0300 +++ Python-2.7.9/configure.ac 2014-12-11 13:51:02.103800000 +0300 @@ -4928,18 +4928,54 @@ # [n]curses.h, ncurses will expose fields of the structs regardless of the # configuration. AC_MSG_CHECKING(whether WINDOW has _flags) -AC_CACHE_VAL(ac_cv_window_has_flags, AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define NCURSES_OPAQUE 0 #include ]], [[ WINDOW *w; w->_flags = 0; ]])], [ac_cv_window_has_flags=yes], -[ac_cv_window_has_flags=no])) +[ac_cv_window_has_flags=no]) AC_MSG_RESULT($ac_cv_window_has_flags) +py_curses_window_is_opaque=no +if test no = $ac_cv_window_has_flags; then + AC_MSG_CHECKING([whether WINDOW has _flags in non-opaque structure]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #define NCURSES_OPAQUE 0 + #include + ]],[[ + WINDOW *w; + w->_flags = 0; + ]])], + [py_curses_window_is_opaque=yes]) + AC_MSG_RESULT([$py_curses_window_is_opaque]) +fi +if test yes = $py_curses_window_is_opaque; then + ac_cv_window_has_flags=yes + AC_DEFINE([NCURSES_OPAQUE], [0], [Define to 0 if you have WINDOW _flags in non-opaque structure.]) +fi + +py_curses_window_is_internal=no +if test no = $ac_cv_window_has_flags; then + AC_MSG_CHECKING([whether WINDOW has _flags as internal structure]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #define NCURSES_INTERNALS 1 + #include + ]],[[ + WINDOW *w; + w->_flags = 0; + ]])], + [py_curses_window_is_internal=yes]) + AC_MSG_RESULT([$py_curses_window_is_internal]) +fi +if test yes = $py_curses_window_is_internal; then + ac_cv_window_has_flags=yes + AC_DEFINE([NCURSES_INTERNALS], [1], [Define to 1 if you have WINDOW _flags as internal structure.]) +fi if test "$ac_cv_window_has_flags" = yes then diff -Naur Python-2.7.15-orig/Include/py_curses.h Python-2.7.15/Include/py_curses.h --- Python-2.7.15-orig/Include/py_curses.h 2014-12-10 18:59:32.000000000 +0300 +++ Python-2.7.15/Include/py_curses.h 2014-12-11 13:51:02.103800000 +0300 @@ -14,7 +14,9 @@ /* 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. */ +/* NOTE configure check if ncurses require such definition #define NCURSES_OPAQUE 0 +*/ #endif #ifdef HAVE_NCURSES_H @@ -57,9 +59,12 @@ #ifdef HAVE_NCURSES_H /* configure was checking , but we will use , which has some or all these features. */ +/* NOTE configure check for existence of flags + * Also flags are visible only if WINDOW structure is not opaque #if !defined(WINDOW_HAS_FLAGS) && !(NCURSES_OPAQUE+0) #define WINDOW_HAS_FLAGS 1 #endif +*/ #if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906 #define HAVE_CURSES_IS_PAD 1 #endif diff -Naur Python-2.7.9-orig/pyconfig.h.in Python-2.7.9/pyconfig.h.in --- Python-2.7.9-orig/pyconfig.h.in 2014-12-11 13:50:34.460600000 +0300 +++ Python-2.7.9/pyconfig.h.in 2014-12-11 13:51:02.103800000 +0300 @@ -945,6 +945,12 @@ /* Define to 1 if you want to use native NT threads */ #undef NT_THREADS +/* Define to 1 if you have WINDOW _flags as internal structure. */ +#undef NCURSES_INTERNALS + +/* Define to 0 if you have WINDOW _flags in non-opaque structure. */ +#undef NCURSES_OPAQUE + /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT