8.29. Ncurses-6.4-20230520

Ncurses パッケージは、端末に依存しない、文字ベースのスクリーン制御を行うライブラリを提供します。

概算ビルド時間: 0.2 SBU
必要ディスク容量: 45 MB

8.29.1. Ncurses のインストール

Ncurses をコンパイルするための準備をします。

./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            --with-shared           \
            --without-debug         \
            --without-normal        \
            --with-cxx-shared       \
            --enable-pc-files       \
            --enable-widec          \
            --with-pkg-config-libdir=/usr/lib/pkgconfig

configure オプションの意味

--with-shared

これは Ncurses において共有 C ライブラリをビルドしインストールします。

--without-normal

これは Ncurses においてスタティックな C ライブラリのビルドおよびインストールを行わないようにします。

--without-debug

これは Ncurses においてデバッグライブラリのビルドおよびインストールを行わないようにします。

--with-cxx-shared

これは Ncurses において共有 C++ バインディングをビルドしインストールします。 同時にスタティックな C++ バインディングのビルドおよびインストールは行わないようにします。

--enable-pc-files

本スイッチは pkg-config 用の .pc ファイルを生成しインストールすることを指示します。

--enable-widec

本スイッチは通常のライブラリ (libncurses.so.6.4) ではなくワイド文字対応のライブラリ (libncursesw.so.6.4) をビルドすることを指示します。 ワイド文字対応のライブラリは、マルチバイトロケールと従来の 8ビットロケールの双方に対して利用可能です。 通常のライブラリでは 8ビットロケールに対してしか動作しません。 ワイド文字対応と通常のものとでは、ソース互換があるもののバイナリ互換がありません。

パッケージをコンパイルします。

make

このパッケージにテストスイートはありますが、パッケージをインストールした後でないと実行できません。 テストスイートのためのファイル群はサブディレクトリ test/ 以下に残っています。 詳しいことはそのディレクトリ内にある README ファイルを参照してください。

本パッケージをインストールすると、所定位置にある libncursesw.so.6.4 が上書きされます。 このときに、そのライブラリファイルのコードやデータを利用しているシェルプロセスが、クラッシュする場合があります。 そこで本パッケージは DESTDIR を使ってインストールして、install コマンドによってライブラリファイルを正しく置き換えるようにします。 (ヘッダーファイル curses.h「Ncurses-6.4-20230520」 で行ったものと同様に、ワイドキャラクター ABI が確実に利用されるように修正されます。)

make DESTDIR=$PWD/dest install
install -vm755 dest/usr/lib/libncursesw.so.6.4 /usr/lib
rm -v  dest/usr/lib/libncursesw.so.6.4
sed -e 's/^#if.*XOPEN.*$/#if 1/' \
    -i dest/usr/include/curses.h
cp -av dest/* /

アプリケーションによっては、ワイド文字対応ではないライブラリをリンカーが探し出すよう求めるものが多くあります。 そのようなアプリケーションに対しては、以下のようなシンボリックリンクを作り出して、ワイド文字対応のライブラリにリンクさせるよう仕向けます。 (.so のリンクは、編集された curses.h がワイドキャラクターに対して常に用いられるようにするためだけのものです。)

for lib in ncurses form panel menu ; do
    ln -sfv lib${lib}w.so /usr/lib/lib${lib}.so
    ln -sfv ${lib}w.pc    /usr/lib/pkgconfig/${lib}.pc
done

最後に古いアプリケーションにおいて、ビルド時に -lcurses を指定するものがあるため、これもビルド可能なものにします。

ln -sfv libncursesw.so /usr/lib/libcurses.so

必要なら Ncurses のドキュメントをインストールします。

cp -v -R doc -T /usr/share/doc/ncurses-6.4-20230520
[注記]

注記

ここまでの作業手順では、ワイド文字対応ではない Ncurses ライブラリは生成しませんでした。 ソースからコンパイルして構築するパッケージなら、実行時にそのようなライブラリにリンクするものはないからであり、バイナリコードのアプリケーションで非ワイド文字対応のものは Ncurses 5 にリンクされています。 バイナリコードしかないアプリケーションを取り扱う場合、あるいは LSB 対応を要する場合で、それがワイド文字対応ではないライブラリを必要とするなら、以下のコマンドによりそのようなライブラリを生成してください。

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

8.29.2. Ncurses の構成

インストールプログラム: captoinfo (tic へのリンク), clear, infocmp, infotocap (tic へのリンク), ncursesw6-config, reset (tset へのリンク), tabs, tic, toe, tput, tset
インストールライブラリ: libcurses.so (シンボリックリンク), libform.so (シンボリックリンク), libformw.so, libmenu.so (シンボリックリンク), libmenuw.so, libncurses.so (シンボリックリンク), libncursesw.so, libncurses++w.so, libpanel.so (シンボリックリンク), and libpanelw.so,
インストールディレクトリ: /usr/share/tabset, /usr/share/terminfo, /usr/share/doc/ncurses-6.4-20230520

概略説明

captoinfo

termcap の記述を terminfo の記述に変換します。

clear

画面消去が可能ならこれを行います。

infocmp

terminfo の記述どうしを比較したり出力したりします。

infotocap

terminfo の記述を termcap の記述に変換します。

ncursesw6-config

ncurses の設定情報を提供します。

reset

端末をデフォルト設定に初期化します。

tabs

端末上のタブストップの設定をクリアしたり設定したりします。

tic

terminfo の定義項目に対するコンパイラーです。 これはソース形式の terminfo ファイルをバイナリ形式に変換し、ncurses ライブラリ内の処理ルーチンが利用できるようにします。 terminfo ファイルは特定端末の特性に関する情報が記述されるものです。

toe

利用可能なすべての端末タイプを一覧表示します。 そこでは端末名と簡単な説明を示します。

tput

端末に依存する機能設定をシェルが利用できるようにします。 また端末のリセットや初期化、あるいは長い端末名称の表示も行います。

tset

端末の初期化に利用します。

libncursesw

さまざまな方法により端末画面上に文字列を表示するための関数を提供します。 これらの関数を用いた具体例として、カーネルの make menuconfig の実行によって表示されるメニューがあります。

libncurses++w

本パッケージ内でのその他のライブラリに対応する C++ バインディングを提供します。

libformw

フォームを実装するための関数を提供します。

libmenuw

メニューを実装するための関数を提供します。

libpanelw

パネルを実装するための関数を提供します。