Search code examples
linuxncursesclfs

Building TIC fails (ncurses5.9) for CLFS 3.0.0 SYSTEMD


Recently I decided to retry building a CLFS machine http://www.clfs.org and am at step 5.5 of 3.0.0 SYSTEMD. We are told to run make -C include and then make -C progs tic. I am failing at the last command. Am I missing any packages, or am I doing something wrong?

I am using ArchLinux as my CLFS host in VMWare which is running on Windows 10.

Here is the page I am looking at for the commands: http://clfs.org/files/BOOK/3.0.0/SYSTEMD/view/x86_64/cross-tools/ncurses.html

Here is the output from the console when I run that last command:

    In file included from ../ncurses/curses.priv.h:283:0,
    from ../ncurses/lib_gen.c:19:_33528.c:835:15: error: expected ')' before 'int'
    ../include/curses.h:1594:56: note: in definition of macro 'mouse_trafo'
    #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
                                                           ^

Solution

  • The error message is pointing to the y symbol,

    • which could be (mis)defined in some header file on your system.
    • aside from stray #define's, the only interesting thing about the line is that the prototype for wmouse_trafo uses bool, which the configure script should have (given the compiler version used for CLFS) equated to a c99 _Bool (which should not be a problem).

    You can see what the compiler sees by doing

    make -C ncurses lib_gen.i
    

    and looking for wmouse_trafo in ncurses/lib_gen.i.

    For example, I see it mentioned twice:

    extern _Bool wmouse_trafo (const WINDOW*, int*, int*, _Bool);
    extern _Bool mouse_trafo (int*, int*, _Bool);
    

    and

     _Bool (mouse_trafo) (int * a1, int * a2, _Bool z)
    {
     ; return wmouse_trafo(stdscr,a1,a2,z);
    }
    

    The stray semicolon is not a problem, but if there were some problem with the cross-compiler it might make the _Bool missing.

    The instructions for CLFS 3.0 use gcc 4.8.3 (versions of all of the parts do matter). However, the error message cited here looks like a recent report due to gcc 5 — which is addressed in ncurses 6.0