From 894ebd065e02debf20c0657d26020ecc42b7534f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 1 Nov 2017 14:34:20 +0200 Subject: [PATCH] bpo-31919: Fix building the curses module on OpenIndiana. (#4211) --- Lib/test/test_curses.py | 22 +++++++++++++--------- Modules/_cursesmodule.c | 6 ++++-- configure | 30 ++++++++++++++++++++++++++++++ configure.ac | 11 +++++++++++ pyconfig.h.in | 3 +++ 5 files changed, 61 insertions(+), 11 deletions(-) diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 785a31c622..514ed83167 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -143,6 +143,7 @@ class TestCurses(unittest.TestCase): stdscr.idlok(1) if hasattr(stdscr, 'immedok'): stdscr.immedok(1) + stdscr.immedok(0) stdscr.insch('c') stdscr.insdelln(1) stdscr.insnstr('abc', 3) @@ -176,26 +177,27 @@ class TestCurses(unittest.TestCase): stdscr.setscrreg(10,15) win3 = stdscr.subwin(10,10) win3 = stdscr.subwin(10,10, 5,5) - if hasattr(stdscr, 'syncok'): + if hasattr(stdscr, 'syncok') and not sys.platform.startswith("sunos"): stdscr.syncok(1) stdscr.timeout(5) stdscr.touchline(5,5) stdscr.touchline(5,5,0) stdscr.vline('a', 3) stdscr.vline('a', 3, curses.A_STANDOUT) - stdscr.chgat(5, 2, 3, curses.A_BLINK) - stdscr.chgat(3, curses.A_BOLD) - stdscr.chgat(5, 8, curses.A_UNDERLINE) - stdscr.chgat(curses.A_BLINK) + if hasattr(stdscr, 'chgat'): + stdscr.chgat(5, 2, 3, curses.A_BLINK) + stdscr.chgat(3, curses.A_BOLD) + stdscr.chgat(5, 8, curses.A_UNDERLINE) + stdscr.chgat(curses.A_BLINK) stdscr.refresh() stdscr.vline(1,1, 'a', 3) stdscr.vline(1,1, 'a', 3, curses.A_STANDOUT) - if hasattr(curses, 'resize'): - stdscr.resize() - if hasattr(curses, 'enclose'): - stdscr.enclose() + if hasattr(stdscr, 'resize'): + stdscr.resize(25, 80) + if hasattr(stdscr, 'enclose'): + stdscr.enclose(10, 10) self.assertRaises(ValueError, stdscr.getstr, -400) self.assertRaises(ValueError, stdscr.getstr, 2, 3, -400) @@ -423,6 +425,8 @@ class TestCurses(unittest.TestCase): def test_issue13051(self): stdscr = self.stdscr + if not hasattr(stdscr, 'resize'): + raise unittest.SkipTest('requires curses.window.resize') box = curses.textpad.Textbox(stdscr, insert_mode=True) lines, cols = stdscr.getmaxyx() stdscr.resize(lines-2, cols-2) diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 2a2eed2c48..7962936966 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -941,7 +941,7 @@ int py_mvwdelch(WINDOW *w, int y, int x) #endif /* chgat, added by Fabian Kreutz */ - +#ifdef HAVE_CURSES_WCHGAT static PyObject * PyCursesWindow_ChgAt(PyCursesWindowObject *self, PyObject *args) { @@ -994,7 +994,7 @@ PyCursesWindow_ChgAt(PyCursesWindowObject *self, PyObject *args) } return PyCursesCheckERR(rtn, "chgat"); } - +#endif static PyObject * PyCursesWindow_DelCh(PyCursesWindowObject *self, PyObject *args) @@ -1985,7 +1985,9 @@ static PyMethodDef PyCursesWindow_Methods[] = { {"attron", (PyCFunction)PyCursesWindow_AttrOn, METH_VARARGS}, {"attrset", (PyCFunction)PyCursesWindow_AttrSet, METH_VARARGS}, {"bkgd", (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS}, +#ifdef HAVE_CURSES_WCHGAT {"chgat", (PyCFunction)PyCursesWindow_ChgAt, METH_VARARGS}, +#endif {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS}, {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS}, {"box", (PyCFunction)PyCursesWindow_Box, METH_VARARGS}, diff --git a/configure b/configure index 00cfd64a2b..30df2cee70 100755 --- a/configure +++ b/configure @@ -15912,6 +15912,36 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchgat" >&5 +$as_echo_n "checking for wchgat... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + +#ifndef wchgat +void *x=wchgat +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define HAVE_CURSES_WCHGAT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for filter" >&5 $as_echo_n "checking for filter... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext diff --git a/configure.ac b/configure.ac index 724f7ce64c..fd15868166 100644 --- a/configure.ac +++ b/configure.ac @@ -5033,6 +5033,17 @@ void *x=syncok [AC_MSG_RESULT(no)] ) +AC_MSG_CHECKING(for wchgat) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ +#ifndef wchgat +void *x=wchgat +#endif +]])], + [AC_DEFINE(HAVE_CURSES_WCHGAT, 1, Define if you have the 'wchgat' function.) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)] +) + AC_MSG_CHECKING(for filter) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ #ifndef filter diff --git a/pyconfig.h.in b/pyconfig.h.in index f63022449f..5f8b09a618 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -179,6 +179,9 @@ /* Define if you have the 'use_env' function. */ #undef HAVE_CURSES_USE_ENV +/* Define if you have the 'wchgat' function. */ +#undef HAVE_CURSES_WCHGAT + /* Define to 1 if you have the declaration of `isfinite', and to 0 if you don't. */ #undef HAVE_DECL_ISFINITE -- 2.40.0