From 6dc83db69b5e29d25ba6d73646ea2e9a1097848a Mon Sep 17 00:00:00 2001 From: Roumen Petrov Date: Sun, 19 Feb 2012 16:13:24 +0200 Subject: [PATCH] CROSS-properly detect WINDOW _flags for different ncurses versions --- Include/py_curses.h | 5 +++++ configure.ac | 40 ++++++++++++++++++++++++++++++++++++++-- pyconfig.h.in | 6 ++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/Include/py_curses.h b/Include/py_curses.h index f2c08f6..a9b5260 100644 --- a/Include/py_curses.h +++ b/Include/py_curses.h @@ -14,7 +14,9 @@ /* the following define is necessary for OS X 10.6; without it, the Apple-supplied ncurses.h sets 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 /* __APPLE__ */ #ifdef __FreeBSD__ @@ -57,9 +59,12 @@ #ifdef HAVE_NCURSES_H /* configure was checking , but we will use , which has all these features. */ +/* NOTE configure check for existence of flags + * Also flags are visible only if WINDOW structure is not opaque #ifndef WINDOW_HAS_FLAGS #define WINDOW_HAS_FLAGS 1 #endif +*/ #ifndef MVWDELCH_IS_EXPRESSION #define MVWDELCH_IS_EXPRESSION 1 #endif diff --git a/configure.ac b/configure.ac index 0a3a186..75f5142 100644 --- a/configure.ac +++ b/configure.ac @@ -4150,15 +4150,51 @@ then fi AC_MSG_CHECKING(whether WINDOW has _flags) -AC_CACHE_VAL(ac_cv_window_has_flags, AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#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 --git a/pyconfig.h.in b/pyconfig.h.in index 3ca3a4f..484c817 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -1130,6 +1130,12 @@ /* Define if mvwdelch in curses.h is an expression. */ #undef MVWDELCH_IS_EXPRESSION +/* 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 -- 1.6.4