Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to build _curses on CentOS 7 #89230

Closed
orsenthil opened this issue Aug 31, 2021 · 10 comments
Closed

Failed to build _curses on CentOS 7 #89230

orsenthil opened this issue Aug 31, 2021 · 10 comments
Assignees
Labels
3.10 only security fixes 3.11 only security fixes build The build process and cross-build

Comments

@orsenthil
Copy link
Member

BPO 45067
Nosy @ronaldoussoren, @orsenthil, @stratakis, @pablogsal, @miss-islington
PRs
  • bpo-45067 - Verify the version of ncurses for extended color support feature usage. #28260
  • [3.10] bpo-45067 - Verify the version of ncurses for extended color support feature usage. (GH-28260) #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:

    assignee = 'https://github.com/orsenthil'
    closed_at = <Date 2021-09-09.19:39:15.937>
    created_at = <Date 2021-08-31.23:39:03.223>
    labels = ['build', '3.10', '3.11']
    title = 'Failed to build _curses on CentOS 7'
    updated_at = <Date 2021-10-04.19:18:43.492>
    user = 'https://github.com/orsenthil'

    bugs.python.org fields:

    activity = <Date 2021-10-04.19:18:43.492>
    actor = 'pablogsal'
    assignee = 'orsenthil'
    closed = True
    closed_date = <Date 2021-09-09.19:39:15.937>
    closer = 'orsenthil'
    components = []
    creation = <Date 2021-08-31.23:39:03.223>
    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
    Copy link
    Member Author

    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

    @orsenthil orsenthil added 3.11 only security fixes build The build process and cross-build labels Aug 31, 2021
    @ronaldoussoren
    Copy link
    Contributor

    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
    Copy link
    Member Author

    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 functionextended_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_FUNCif (_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 functioninit_extended_color’; did you meaninitialize_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_FUNCreturn 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 functioninit_extended_pair’; did you meanuse_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_FUNCif (_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 functionextended_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_FUNCif (_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

    @stratakis
    Copy link
    Mannequin

    stratakis mannequin commented Sep 2, 2021

    You should use -lpaneltw instead of -lpanelw.

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

    @ronaldoussoren
    Copy link
    Contributor

    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
    Copy link
    Member Author

    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
    Copy link
    Member Author

    I have created a pull request - #28260

    Please review this.

    @orsenthil orsenthil added 3.9 only security fixes 3.10 only security fixes labels Sep 9, 2021
    @orsenthil orsenthil self-assigned this Sep 9, 2021
    @orsenthil orsenthil added 3.9 only security fixes 3.10 only security fixes labels Sep 9, 2021
    @orsenthil orsenthil self-assigned this Sep 9, 2021
    @orsenthil
    Copy link
    Member Author

    New changeset 7944307 by Senthil Kumaran in branch 'main':
    bpo-45067 - Verify the version of ncurses for extended color support feature usage. (GH-28260)
    7944307

    @miss-islington
    Copy link
    Contributor

    New changeset b86437b by Miss Islington (bot) in branch '3.10':
    bpo-45067 - Verify the version of ncurses for extended color support feature usage. (GH-28260)
    b86437b

    @orsenthil orsenthil removed the 3.9 only security fixes label Sep 9, 2021
    @orsenthil orsenthil removed the 3.9 only security fixes label Sep 9, 2021
    @pablogsal
    Copy link
    Member

    New changeset dfccba4 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)
    dfccba4

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.10 only security fixes 3.11 only security fixes build The build process and cross-build
    Projects
    None yet
    Development

    No branches or pull requests

    4 participants