This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Failed to build _curses on CentOS 7
Type: compile error Stage: resolved
Components: Versions: Python 3.11, Python 3.10
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: orsenthil Nosy List: cstratak, miss-islington, orsenthil, pablogsal, ronaldoussoren
Priority: normal Keywords: patch

Created on 2021-08-31 23:39 by orsenthil, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 28260 merged orsenthil, 2021-09-09 16:37
PR 28263 merged miss-islington, 2021-09-09 18:32
Messages (10)
msg400795 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2021-08-31 23:39
I verified that ncurses-devel is installed.

./configure is able to verify ncurses

checking curses.h usability... yes
checking curses.h presence... yes
checking for curses.h... yes
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
checking for term.h... yes

But _curses fails to build, this is the output message from `make`


gcc -pthread -fPIC -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/local/home/senthilx/cpython/Include -I/local/home/senthilx/cpython -c /local/home/senthilx/cpython/Modules/_curses_panel.c -o build/temp.linux-x86_64-3.11/local/home/senthilx/cpython/Modules/_curses_panel.o
gcc -pthread -shared build/temp.linux-x86_64-3.11/local/home/senthilx/cpython/Modules/_curses_panel.o -L/usr/local/lib -lpanelw -lncursesw -o build/lib.linux-x86_64-3.11/_curses_panel.cpython-311-x86_64-linux-gnu.so
*** WARNING: renaming "_curses_panel" since importing it failed: No module named '_curses'

The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc                  pwd                   time


Failed to build these modules:
_curses


Following modules built successfully but were removed because they could not be imported:
_curses_panel
msg400819 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2021-09-01 07:23
You stripped too much output from the build, in particular you removed the part where _curses failed to build. The output you show only says that _cursus_panel failed verification because _cursus could not be imported.

Could you add the build failure for the _cursus module as well?  Rerunning make should give a more manageable output.
msg400894 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2021-09-02 01:47
Here is the output of make with relevant lines.

 CC='gcc -pthread' LDSHARED='gcc -pthread -shared    ' OPT='-DNDEBUG -g -fwrapv -O3 -Wall' 	_TCLTK_INCLUDES='' _TCLTK_LIBS='' 	./python -E ./setup.py  build
running build
running build_ext
building '_curses' extension
gcc -pthread -fPIC -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/local/home/senthilx/cpython/Include -I/local/home/senthilx/cpython -c /local/home/senthilx/cpython/Modules/_cursesmodule.c -o build/temp.linux-x86_64-3.11/local/home/senthilx/cpython/Modules/_cursesmodule.o -DPy_BUILD_CORE_MODULE
/local/home/senthilx/cpython/Modules/_cursesmodule.c: In function ‘_curses_color_content_impl’:
/local/home/senthilx/cpython/Modules/_cursesmodule.c:149:41: error: implicit declaration of function ‘extended_color_content’; did you mean ‘_curses_color_content’? [-Werror=implicit-function-declaration]
 #define _COLOR_CONTENT_FUNC             extended_color_content
                                         ^
/local/home/senthilx/cpython/Modules/_cursesmodule.c:2746:9: note: in expansion of macro ‘_COLOR_CONTENT_FUNC’
     if (_COLOR_CONTENT_FUNC(color_number, &r, &g, &b) == ERR) {
         ^~~~~~~~~~~~~~~~~~~
/local/home/senthilx/cpython/Modules/_cursesmodule.c: In function ‘_curses_init_color_impl’:
/local/home/senthilx/cpython/Modules/_cursesmodule.c:147:41: error: implicit declaration of function ‘init_extended_color’; did you mean ‘initialize_color’? [-Werror=implicit-function-declaration]
 #define _CURSES_INIT_COLOR_FUNC         init_extended_color
                                         ^
/local/home/senthilx/cpython/Modules/_cursesmodule.c:3194:29: note: in expansion of macro ‘_CURSES_INIT_COLOR_FUNC’
     return PyCursesCheckERR(_CURSES_INIT_COLOR_FUNC(color_number, r, g, b),
                             ^~~~~~~~~~~~~~~~~~~~~~~
/local/home/senthilx/cpython/Modules/_cursesmodule.c: In function ‘_curses_init_pair_impl’:
/local/home/senthilx/cpython/Modules/_cursesmodule.c:148:41: error: implicit declaration of function ‘init_extended_pair’; did you mean ‘use_extended_names’? [-Werror=implicit-function-declaration]
 #define _CURSES_INIT_PAIR_FUNC          init_extended_pair
                                         ^
/local/home/senthilx/cpython/Modules/_cursesmodule.c:3222:9: note: in expansion of macro ‘_CURSES_INIT_PAIR_FUNC’
     if (_CURSES_INIT_PAIR_FUNC(pair_number, fg, bg) == ERR) {
         ^~~~~~~~~~~~~~~~~~~~~~
/local/home/senthilx/cpython/Modules/_cursesmodule.c: In function ‘_curses_pair_content_impl’:
/local/home/senthilx/cpython/Modules/_cursesmodule.c:150:41: error: implicit declaration of function ‘extended_pair_content’; did you mean ‘_curses_pair_content’? [-Werror=implicit-function-declaration]
 #define _CURSES_PAIR_CONTENT_FUNC       extended_pair_content
                                         ^
/local/home/senthilx/cpython/Modules/_cursesmodule.c:3868:9: note: in expansion of macro ‘_CURSES_PAIR_CONTENT_FUNC’
     if (_CURSES_PAIR_CONTENT_FUNC(pair_number, &f, &b) == ERR) {
         ^~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
building '_curses_panel' extension
gcc -pthread -fPIC -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/local/home/senthilx/cpython/Include -I/local/home/senthilx/cpython -c /local/home/senthilx/cpython/Modules/_curses_panel.c -o build/temp.linux-x86_64-3.11/local/home/senthilx/cpython/Modules/_curses_panel.o
gcc -pthread -shared build/temp.linux-x86_64-3.11/local/home/senthilx/cpython/Modules/_curses_panel.o -L/usr/local/lib -lpanelw -lncursesw -o build/lib.linux-x86_64-3.11/_curses_panel.cpython-311-x86_64-linux-gnu.so
*** WARNING: renaming "_curses_panel" since importing it failed: No module named '_curses'

The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc                  pwd                   time


Failed to build these modules:
_curses


Following modules built successfully but were removed because they could not be imported:
_curses_panel

running build_scripts
copying and adjusting /local/home/senthilx/cpython/Tools/scripts/pydoc3 -> build/scripts-3.11
copying and adjusting /local/home/senthilx/cpython/Tools/scripts/idle3 -> build/scripts-3.11
copying and adjusting /local/home/senthilx/cpython/Tools/scripts/2to3 -> build/scripts-3.11
changing mode of build/scripts-3.11/pydoc3 from 644 to 755
changing mode of build/scripts-3.11/idle3 from 644 to 755
changing mode of build/scripts-3.11/2to3 from 644 to 755
renaming build/scripts-3.11/pydoc3 to build/scripts-3.11/pydoc3.11
renaming build/scripts-3.11/idle3 to build/scripts-3.11/idle3.11
renaming build/scripts-3.11/2to3 to build/scripts-3.11/2to3-3.11
msg400919 - (view) Author: Charalampos Stratakis (cstratak) * Date: 2021-09-02 14:03
You should use -lpaneltw instead of -lpanelw.

See also: https://bugs.python.org/issue41981
msg401125 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2021-09-06 08:13
According to https://invisible-island.net/ncurses/NEWS.html#index-t20170401 the function extended_color_content was introduced in 2017, maybe the detection of support for this function doesn't work properly for some reason (although the preprocessor logic in Modules/_cursesmodule.c looks sane).

That said, I don't have a CentOS VM at the moment so cannot debug this myself.
msg401479 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2021-09-09 13:40
A change like this will be required since these funcs were introduced only recently and nurses shipped with centos was older.

% git diff
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 61aaf85522..6fb6c490e6 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -135,7 +135,7 @@ typedef chtype attr_t;           /* No attr_t type is available */
 #define STRICT_SYSV_CURSES
 #endif

-#if NCURSES_EXT_COLORS+0 && NCURSES_EXT_FUNCS+0
+#if (defined(NCURSES_EXT_FUNCS) && NCURSES_EXT_FUNCS >= 20170401) && (defined(NCURSES_EXT_COLORS) && NCURSES_EXT_COLORS >= 20170401)
 #define _NCURSES_EXTENDED_COLOR_FUNCS   1
 #else
 #define _NCURSES_EXTENDED_COLOR_FUNCS   0
msg401496 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2021-09-09 16:38
I have created a pull request - https://github.com/python/cpython/pull/28260

Please review this.
msg401509 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2021-09-09 18:32
New changeset 794430700defb913512f871b701a888aa730de81 by Senthil Kumaran in branch 'main':
bpo-45067 - Verify the version of ncurses for extended color support feature usage. (GH-28260)
https://github.com/python/cpython/commit/794430700defb913512f871b701a888aa730de81
msg401515 - (view) Author: miss-islington (miss-islington) Date: 2021-09-09 19:39
New changeset b86437bb15fbaba55f9e56661598b4d5a3db86bb by Miss Islington (bot) in branch '3.10':
bpo-45067 - Verify the version of ncurses for extended color support feature usage. (GH-28260)
https://github.com/python/cpython/commit/b86437bb15fbaba55f9e56661598b4d5a3db86bb
msg403169 - (view) Author: Pablo Galindo Salgado (pablogsal) * (Python committer) Date: 2021-10-04 19:18
New changeset dfccba47339722ff082a05a190593be9e443cb0e by Pablo Galindo (Miss Islington (bot)) in branch '3.10':
bpo-45067 - Verify the version of ncurses for extended color support feature usage. (GH-28260)
https://github.com/python/cpython/commit/dfccba47339722ff082a05a190593be9e443cb0e
History
Date User Action Args
2022-04-11 14:59:49adminsetgithub: 89230
2021-10-04 19:18:43pablogsalsetnosy: + pablogsal
messages: + msg403169
2021-09-09 19:39:15orsenthilsetstatus: open -> closed
stage: patch review -> resolved
resolution: fixed
versions: - Python 3.9
2021-09-09 19:39:02miss-islingtonsetmessages: + msg401515
2021-09-09 18:32:47miss-islingtonsetnosy: + miss-islington
pull_requests: + pull_request26683
2021-09-09 18:32:19orsenthilsetmessages: + msg401509
2021-09-09 16:38:36orsenthilsetassignee: orsenthil
messages: + msg401496
versions: + Python 3.9, Python 3.10
2021-09-09 16:37:37orsenthilsetkeywords: + patch
stage: patch review
pull_requests: + pull_request26680
2021-09-09 13:40:56orsenthilsetmessages: + msg401479
2021-09-06 08:13:51ronaldoussorensetmessages: + msg401125
2021-09-02 14:03:38cstrataksetnosy: + cstratak
messages: + msg400919
2021-09-02 01:47:51orsenthilsetmessages: + msg400894
2021-09-01 07:23:49ronaldoussorensetnosy: + ronaldoussoren
messages: + msg400819
2021-08-31 23:39:03orsenthilcreate