https://github.com/python/cpython/commit/4abf0d4b3a615944a1f7ece56ccf8576ffc38249 commit: 4abf0d4b3a615944a1f7ece56ccf8576ffc38249 branch: main author: Serhiy Storchaka <[email protected]> committer: serhiy-storchaka <[email protected]> date: 2026-09-27T19:03:15+03:00 summary:
gh-158078: Fix building curses with narrow ncurses (GH-158088) Detect curses functions with a link check instead of a compile check, since the header can declare a function that the library lacks, for example term_attrs() in the narrow ncurses library. Fix test_curses on the narrow build. Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]> files: M Lib/test/test_curses.py M configure M configure.ac diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 9cc6eee266bdd8..5db44ebedd2ee0 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -48,6 +48,26 @@ def wrapped(self, *args, **kwargs): WIDE_BUILD = import_module('_curses')._wide_character_support +def encodable(s, encoding): + # Wide characters are only supported in a locale that can encode them. + try: + s.encode(encoding) + except UnicodeEncodeError: + return False + return True + +def storable(s, encoding): + # Text the current build can place in character cells. A wide build + # stores any locale-encodable text (combining sequences and multibyte + # characters included). A narrow build has no wide-character cells, so + # each character must occupy a single cell -- that is, encode to exactly + # one byte. + if not encodable(s, encoding): + return False + if WIDE_BUILD: + return True + return len(s.encode(encoding)) == len(s) + def requires_wide_build(test): @functools.wraps(test) def wrapped(self, *args, **kwargs): @@ -387,24 +407,10 @@ def test_refresh_control(self): # combining sequence or a multibyte character are guarded with _storable(). def _encodable(self, s): - # Wide characters are only supported in a locale that can encode them. - try: - s.encode(self.stdscr.encoding) - except UnicodeEncodeError: - return False - return True + return encodable(s, self.stdscr.encoding) def _storable(self, s): - # Text the current build can place in character cells. A wide build - # stores any locale-encodable text (combining sequences and multibyte - # characters included). A narrow build has no wide-character cells, so - # each character must occupy a single cell -- that is, encode to exactly - # one byte. - if not self._encodable(s): - return False - if WIDE_BUILD: - return True - return len(s.encode(self.stdscr.encoding)) == len(s) + return storable(s, self.stdscr.encoding) def _char_code(self, ch): # The integer the int-input API (addch(int), do_command()) uses for a @@ -1124,7 +1130,11 @@ def test_cell_null_char(self): # A cell holding a NUL reads back as the cell that writes it. win = curses.newwin(3, 8, 0, 0) win.insch(0, 0, '\0') - self.assertEqual(win.in_wch(0, 0), cell) + if WIDE_BUILD: + self.assertEqual(win.in_wch(0, 0), cell) + else: + # A narrow build inserts a NUL as "^@". + self.assertEqual(str(win.in_wch(0, 0)), '^') # A string of cells cannot hold a NUL: it would end a batch write. self.assertRaises(ValueError, curses.complexstr, 'a\0b') self.assertRaises(ValueError, curses.complexstr, '\0') @@ -3593,10 +3603,8 @@ def test_set_and_label(self): def test_set_wide(self): screen = self.make_slk_screen() label = 'Ångström' - try: - label.encode(screen.stdscr.encoding) - except UnicodeEncodeError: - self.skipTest('the locale cannot encode %r' % label) + if not storable(label, screen.stdscr.encoding): + self.skipTest('cannot store %r in this locale' % label) curses.slk_set(1, label, 0) # The label can be truncated to fit the soft label width, e.g. in the # EUC-JP locale, where "Å" and "ö" are double-width JIS X 0212 diff --git a/configure b/configure index e5d3f0091058ac..8b8bab4ca425db 100755 --- a/configure +++ b/configure @@ -31718,21 +31718,22 @@ main (void) { #ifndef is_pad - void *x=is_pad + void * volatile x = (void *)is_pad; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_is_pad=yes else case e in #( e) ac_cv_lib_curses_is_pad=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -31778,21 +31779,22 @@ main (void) { #ifndef is_term_resized - void *x=is_term_resized + void * volatile x = (void *)is_term_resized; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_is_term_resized=yes else case e in #( e) ac_cv_lib_curses_is_term_resized=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -31838,21 +31840,22 @@ main (void) { #ifndef resize_term - void *x=resize_term + void * volatile x = (void *)resize_term; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_resize_term=yes else case e in #( e) ac_cv_lib_curses_resize_term=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -31898,21 +31901,22 @@ main (void) { #ifndef resizeterm - void *x=resizeterm + void * volatile x = (void *)resizeterm; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_resizeterm=yes else case e in #( e) ac_cv_lib_curses_resizeterm=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -31958,21 +31962,22 @@ main (void) { #ifndef immedok - void *x=immedok + void * volatile x = (void *)immedok; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_immedok=yes else case e in #( e) ac_cv_lib_curses_immedok=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32018,21 +32023,22 @@ main (void) { #ifndef syncok - void *x=syncok + void * volatile x = (void *)syncok; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_syncok=yes else case e in #( e) ac_cv_lib_curses_syncok=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32078,21 +32084,22 @@ main (void) { #ifndef wchgat - void *x=wchgat + void * volatile x = (void *)wchgat; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_wchgat=yes else case e in #( e) ac_cv_lib_curses_wchgat=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32138,21 +32145,22 @@ main (void) { #ifndef filter - void *x=filter + void * volatile x = (void *)filter; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_filter=yes else case e in #( e) ac_cv_lib_curses_filter=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32198,21 +32206,22 @@ main (void) { #ifndef nofilter - void *x=nofilter + void * volatile x = (void *)nofilter; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_nofilter=yes else case e in #( e) ac_cv_lib_curses_nofilter=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32258,21 +32267,22 @@ main (void) { #ifndef has_key - void *x=has_key + void * volatile x = (void *)has_key; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_has_key=yes else case e in #( e) ac_cv_lib_curses_has_key=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32318,21 +32328,22 @@ main (void) { #ifndef has_mouse - void *x=has_mouse + void * volatile x = (void *)has_mouse; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_has_mouse=yes else case e in #( e) ac_cv_lib_curses_has_mouse=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32378,21 +32389,22 @@ main (void) { #ifndef is_keypad - void *x=is_keypad + void * volatile x = (void *)is_keypad; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_is_keypad=yes else case e in #( e) ac_cv_lib_curses_is_keypad=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32438,21 +32450,22 @@ main (void) { #ifndef is_leaveok - void *x=is_leaveok + void * volatile x = (void *)is_leaveok; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_is_leaveok=yes else case e in #( e) ac_cv_lib_curses_is_leaveok=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32498,21 +32511,22 @@ main (void) { #ifndef typeahead - void *x=typeahead + void * volatile x = (void *)typeahead; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_typeahead=yes else case e in #( e) ac_cv_lib_curses_typeahead=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32558,21 +32572,22 @@ main (void) { #ifndef use_env - void *x=use_env + void * volatile x = (void *)use_env; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_use_env=yes else case e in #( e) ac_cv_lib_curses_use_env=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32618,21 +32633,22 @@ main (void) { #ifndef new_prescr - void *x=new_prescr + void * volatile x = (void *)new_prescr; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_new_prescr=yes else case e in #( e) ac_cv_lib_curses_new_prescr=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32678,21 +32694,22 @@ main (void) { #ifndef use_screen - void *x=use_screen + void * volatile x = (void *)use_screen; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_use_screen=yes else case e in #( e) ac_cv_lib_curses_use_screen=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32738,21 +32755,22 @@ main (void) { #ifndef use_window - void *x=use_window + void * volatile x = (void *)use_window; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_use_window=yes else case e in #( e) ac_cv_lib_curses_use_window=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32798,21 +32816,22 @@ main (void) { #ifndef key_defined - void *x=key_defined + void * volatile x = (void *)key_defined; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_key_defined=yes else case e in #( e) ac_cv_lib_curses_key_defined=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32858,21 +32877,22 @@ main (void) { #ifndef term_attrs - void *x=term_attrs + void * volatile x = (void *)term_attrs; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_term_attrs=yes else case e in #( e) ac_cv_lib_curses_term_attrs=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32918,21 +32938,22 @@ main (void) { #ifndef define_key - void *x=define_key + void * volatile x = (void *)define_key; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_define_key=yes else case e in #( e) ac_cv_lib_curses_define_key=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -32978,21 +32999,22 @@ main (void) { #ifndef keyok - void *x=keyok + void * volatile x = (void *)keyok; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_keyok=yes else case e in #( e) ac_cv_lib_curses_keyok=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33038,21 +33060,22 @@ main (void) { #ifndef set_escdelay - void *x=set_escdelay + void * volatile x = (void *)set_escdelay; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_set_escdelay=yes else case e in #( e) ac_cv_lib_curses_set_escdelay=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33098,21 +33121,22 @@ main (void) { #ifndef set_tabsize - void *x=set_tabsize + void * volatile x = (void *)set_tabsize; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_set_tabsize=yes else case e in #( e) ac_cv_lib_curses_set_tabsize=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33158,21 +33182,22 @@ main (void) { #ifndef wattr_get - void *x=wattr_get + void * volatile x = (void *)wattr_get; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_wattr_get=yes else case e in #( e) ac_cv_lib_curses_wattr_get=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33218,21 +33243,22 @@ main (void) { #ifndef wattr_set - void *x=wattr_set + void * volatile x = (void *)wattr_set; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_wattr_set=yes else case e in #( e) ac_cv_lib_curses_wattr_set=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33278,21 +33304,22 @@ main (void) { #ifndef wattr_on - void *x=wattr_on + void * volatile x = (void *)wattr_on; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_wattr_on=yes else case e in #( e) ac_cv_lib_curses_wattr_on=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33338,21 +33365,22 @@ main (void) { #ifndef wattr_off - void *x=wattr_off + void * volatile x = (void *)wattr_off; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_wattr_off=yes else case e in #( e) ac_cv_lib_curses_wattr_off=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33398,21 +33426,22 @@ main (void) { #ifndef wcolor_set - void *x=wcolor_set + void * volatile x = (void *)wcolor_set; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_wcolor_set=yes else case e in #( e) ac_cv_lib_curses_wcolor_set=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33458,21 +33487,22 @@ main (void) { #ifndef slk_attr_on - void *x=slk_attr_on + void * volatile x = (void *)slk_attr_on; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_slk_attr_on=yes else case e in #( e) ac_cv_lib_curses_slk_attr_on=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33518,21 +33548,22 @@ main (void) { #ifndef slk_attr_off - void *x=slk_attr_off + void * volatile x = (void *)slk_attr_off; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_slk_attr_off=yes else case e in #( e) ac_cv_lib_curses_slk_attr_off=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33578,21 +33609,22 @@ main (void) { #ifndef slk_attr_set - void *x=slk_attr_set + void * volatile x = (void *)slk_attr_set; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_slk_attr_set=yes else case e in #( e) ac_cv_lib_curses_slk_attr_set=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33638,21 +33670,22 @@ main (void) { #ifndef slk_color - void *x=slk_color + void * volatile x = (void *)slk_color; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_slk_color=yes else case e in #( e) ac_cv_lib_curses_slk_color=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33866,21 +33899,22 @@ main (void) { #ifndef scr_dump - void *x=scr_dump + void * volatile x = (void *)scr_dump; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_scr_dump=yes else case e in #( e) ac_cv_lib_curses_scr_dump=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi @@ -33926,21 +33960,22 @@ main (void) { #ifndef scr_set - void *x=scr_set + void * volatile x = (void *)scr_set; (void)x; #endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curses_scr_set=yes else case e in #( e) ac_cv_lib_curses_scr_set=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi diff --git a/configure.ac b/configure.ac index 82a623fedb8192..40191c05952290 100644 --- a/configure.ac +++ b/configure.ac @@ -7426,16 +7426,18 @@ then fi dnl PY_CHECK_CURSES_FUNC(FUNCTION) +dnl Link, not just compile: a header can declare a function that the library +dnl lacks, for example term_attrs() in the narrow ncurses library. AC_DEFUN([PY_CHECK_CURSES_FUNC], [ AS_VAR_PUSHDEF([py_var], [ac_cv_lib_curses_$1]) AS_VAR_PUSHDEF([py_define], [HAVE_CURSES_]m4_toupper($1)) AC_CACHE_CHECK( [for curses function $1], [py_var], - [AC_COMPILE_IFELSE( + [AC_LINK_IFELSE( [AC_LANG_PROGRAM(_CURSES_INCLUDES, [ #ifndef $1 - void *x=$1 + void * volatile x = (void *)$1; (void)x; #endif ])], [AS_VAR_SET([py_var], [yes])], _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
