about summary refs log tree commit diff
path: root/pkgs/development/interpreters/python/2.7/properly-detect-curses.patch
blob: e2640bab0e9ae31545541333c6662ce444bcf1d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
From 6dc83db69b5e29d25ba6d73646ea2e9a1097848a Mon Sep 17 00:00:00 2001
From: Roumen Petrov <local@example.net>
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 <curses.h>, but we will
    use <ncurses.h>, 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 <curses.h>]], [[
   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 <curses.h>
+  ]],[[
+    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 <curses.h>
+  ]],[[
+    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