python / cpython

The Python programming language
https://www.python.org
Other
63.51k stars 30.42k forks source link

Failed to build _curses on CentOS 7 #89230

Closed orsenthil closed 3 years ago

orsenthil commented 3 years ago
BPO 45067
Nosy @ronaldoussoren, @orsenthil, @stratakis, @pablogsal, @miss-islington
PRs
  • python/cpython#28260
  • python/cpython#28263
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields: ```python assignee = 'https://github.com/orsenthil' closed_at = created_at = labels = ['build', '3.10', '3.11'] title = 'Failed to build _curses on CentOS 7' updated_at = user = 'https://github.com/orsenthil' ``` bugs.python.org fields: ```python activity = actor = 'pablogsal' assignee = 'orsenthil' closed = True closed_date = closer = 'orsenthil' components = [] creation = creator = 'orsenthil' dependencies = [] files = [] hgrepos = [] issue_num = 45067 keywords = ['patch'] message_count = 10.0 messages = ['400795', '400819', '400894', '400919', '401125', '401479', '401496', '401509', '401515', '403169'] nosy_count = 5.0 nosy_names = ['ronaldoussoren', 'orsenthil', 'cstratak', 'pablogsal', 'miss-islington'] pr_nums = ['28260', '28263'] priority = 'normal' resolution = 'fixed' stage = 'resolved' status = 'closed' superseder = None type = 'compile error' url = 'https://bugs.python.org/issue45067' versions = ['Python 3.10', 'Python 3.11'] ```

    orsenthil commented 3 years ago

    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

    ronaldoussoren commented 3 years ago

    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.

    orsenthil commented 3 years ago

    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

    12c7b821-ad6f-4235-91d8-57b2aacb2dfc commented 3 years ago

    You should use -lpaneltw instead of -lpanelw.

    See also: https://bugs.python.org/issue41981

    ronaldoussoren commented 3 years ago

    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.

    orsenthil commented 3 years ago

    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
    orsenthil commented 3 years ago

    I have created a pull request - https://github.com/python/cpython/pull/28260

    Please review this.

    orsenthil commented 3 years ago

    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

    miss-islington commented 3 years ago

    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

    pablogsal commented 3 years ago

    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