#### Linux From Scratch - Version 7.10

### Chapter 6. Installing Basic System Software

- Prev

  Pkg-config-0.29.1

- Next

  Attr-2.4.47

- Up
- Home

# 6.20. Ncurses-6.0

The Ncurses package contains libraries for terminal-independent handling of character screens.

Approximate build time: 0.4 SBU
Required disk space: 39 MB

## 6.20.1. Installation of Ncurses

Don't install a static library that is not handled by configure:

    sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in

Prepare Ncurses for compilation:

    ./configure --prefix=/usr           \
                --mandir=/usr/share/man \
                --with-shared           \
                --without-debug         \
                --without-normal        \
                --enable-pc-files       \
                --enable-widec

The meaning of the new configure options:

`--enable-widec`

  This switch causes wide-character libraries (e.g., `libncursesw.so.6.0`) to be built instead of normal ones (e.g., `libncurses.so.6.0`). These wide-character libraries are usable in both multibyte and traditional 8-bit locales, while normal libraries work properly only in 8-bit locales. Wide-character and normal libraries are source-compatible, but not binary-compatible.

`--enable-pc-files`

  This switch generates and installs .pc files for pkg-config.

`--without-normal`

  This switch disables building and installing most static libraries.

Compile the package:

    make

This package has a test suite, but it can only be run after the package has been installed. The tests reside in the `test/` directory. See the `README` file in that directory for further details.

Install the package:

    make install

Move the shared libraries to the `/lib` directory, where they are expected to reside:

    mv -v /usr/lib/libncursesw.so.6* /lib

Because the libraries have been moved, one symlink points to a non-existent file. Recreate it:

    ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so

Many applications still expect the linker to be able to find non-wide-character Ncurses libraries. Trick such applications into linking with wide-character libraries by means of symlinks and linker scripts:

    for lib in ncurses form panel menu ; do
        rm -vf                    /usr/lib/lib${lib}.so
        echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
        ln -sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc
    done

Finally, make sure that old applications that look for `-lcurses` at build time are still buildable:

    rm -vf                     /usr/lib/libcursesw.so
    echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
    ln -sfv libncurses.so      /usr/lib/libcurses.so

If desired, install the Ncurses documentation:

    mkdir -v       /usr/share/doc/ncurses-6.0
    cp -v -R doc/* /usr/share/doc/ncurses-6.0

### Note

The instructions above don't create non-wide-character Ncurses libraries since no package installed by compiling from sources would link against them at runtime. However, the only known binary-only applications that link against non-wide-character Ncurses libraries require version 5. If you must have such libraries because of some binary-only application or to be compliant with LSB, build the package again with the following commands:

    make distclean
    ./configure --prefix=/usr    \
                --with-shared    \
                --without-normal \
                --without-debug  \
                --without-cxx-binding \
                --with-abi-version=5
    make sources libs
    cp -av lib/lib*.so.5* /usr/lib

## 6.20.2. Contents of Ncurses

Installed programs: captoinfo (link to tic), clear, infocmp, infotocap (link to tic), ncursesw6-config, reset (link to tset), tabs, tic, toe, tput, and tset
Installed libraries: libcursesw.so (symlink and linker script to libncursesw.so), libformw.so, libmenuw.so, libncursesw.so, libncurses++w.a, libpanelw.so, and their non-wide-character counterparts without "w" in the library names.
Installed directories: /usr/share/tabset, /usr/share/terminfo, and /usr/share/doc/ncurses-6.0

### Short Descriptions

captoinfo | Converts a termcap description into a terminfo description
clear | Clears the screen, if possible
infocmp | Compares or prints out terminfo descriptions
infotocap | Converts a terminfo description into a termcap description
ncursesw6-config | Provides configuration information for ncurses
reset | Reinitializes a terminal to its default values
tabs | Clears and sets tab stops on a terminal
tic | The terminfo entry-description compiler that translates a terminfo file from source format into the binary format needed for the ncurses library routines [A terminfo file contains information on the capabilities of a certain terminal.]
toe | Lists all available terminal types, giving the primary name and description for each
tput | Makes the values of terminal-dependent capabilities available to the shell; it can also be used to reset or initialize a terminal or report its long name
tset | Can be used to initialize terminals
`libcursesw` | A link to `libncursesw`
`libncursesw` | Contains functions to display text in many complex ways on a terminal screen; a good example of the use of these functions is the menu displayed during the kernel's make menuconfig
`libformw` | Contains functions to implement forms
`libmenuw` | Contains functions to implement menus
`libpanelw` | Contains functions to implement panels

- Prev

  Pkg-config-0.29.1

- Next

  Attr-2.4.47

- Up
- Home