Yash のビルドとインストールの方法

基本的なビルド・インストールの方法は以下の通りです:

  1. シェルを起動し、このファイルが入っているディレクトリに `cd' する。

  2. `sh configure' と入力して configure シェルスクリプトを実行する。
     このスクリプトは実行中のシステムで利用可能な機能を調査してビルドのための
     設定を行い、Makefile や config.h ファイルなどを生成します。

  3. `make' を起動して yash をビルドする。

  4. `make check' を起動して、ビルドした yash が正しく動作するかチェックする。
     (このチェックは飛ばしてもかまいません。)

  5. `make install' を実行して yash をインストールする。
     デフォルトのインストール先は /usr/local/bin/yash です。
     `configure' でオプションを指定しておけばインストール先を変えられます。

configure は、デフォルトで c99 をコンパイラコマンドとして使用するように設定
します。c99 は POSIX で定められた標準の C コンパイラです.

configure スクリプトを実行する際に以下のオプションを与えることで、
ビルドの方法を調整することができます:

  --debug
          デバッグ用にコンパイラの最適化レベルを落とす。
          GCC コンパイラを使っている場合のみ有効です。
  --no-undefined
          規格上動作が未定義の処理を一切行わないようにします。

  --bindir=DIR
          デフォルトの /usr/local/bin ではなく、指定した DIR にインストールする

  --enable-X, --disable-X
          機能 X を有効/無効にします。X として指定できる機能の一覧を見るには
          `./configure --help' を実行してください。

configure スクリプトは環境変数によって設定内容を変更します。
以下の環境変数は configure スクリプトが行った通常の設定を上書きします:

  CC
          使用するコンパイラ／リンカのコマンド名
  CFLAGS
          コンパイラに与えるコマンドラインオプション
  LDFLAGS
          リンカに与えるコマンドラインオプション
  INSTALL_PROGRAM
          成果物をインストールするためのユーティリティのコマンド名

また以下の環境変数は configure の動作に影響します:

  CADDS
          コンパイラに追加で与えるコマンドラインオプション
  LDADDS, LIBS
          リンカに追加で与えるコマンドラインオプション

`./configure --help' でも configure の簡単な使い方が見られます。


Makefile ファイルは configure スクリプトが Makefile.in ファイルを元に生成する
make コマンド用ファイルです。ビルド・インストールのためのルールの他に
いくつかのルールが定義してありますが、詳細は省略します。

`make uninstall' を実行するとインストールしたファイルをアンインストールします。
`make clean' を実行すると、ビルドでできたオブジェクトコードファイルや実行可能
ファイルを削除します。
`make distclean' を実行すると、さらに configure スクリプトが生成したファイルも
削除し、アーカイブを展開した直後の状態に戻します。


================================================================================

以下は yash のコンパイル時にソース内で認識されるプリプロセッサマクロの一覧です。
これらの値を config.h に手動で追加定義して、yash の動作を変更することが
できます。各設定を有効にするには、マクロの値を 0 以外の整数に定義します。
無効にするには、値を 0 に定義するか、削除 (#undef) します。
ここでは、configure スクリプトで自動的に設定されるマクロは説明しません。

#define DOUBLE_DIVISION_BY_ZERO_ERROR 1
このマクロを設定すると、小数のゼロによる除算をエラーとします。デフォルトでは、
ゼロによる除算は有効な結果 (例えば無限大) を返すと仮定されます。

#define FORMAT_INDENT_WIDTH 3
このマクロは、シェルがコマンドを整形して出力する際のインデントの幅を指定します。
このマクロの値は非負整数でなければなりません。

#define YASH_DISABLE_SUPERUSER 1
このマクロを設定すると、UID が 0 のユーザをルートユーザとして特別扱いしない
ようにします。デフォルトでは、UID が 0 のユーザはアクセス権限のチェックなどに
おいて他のユーザとは異なる扱いを受けます。

#define SHELLFDMINMAX 100
このマクロの値は 10 以上の整数で、デフォルトは 100 です。この値は、シェルが
それ自身の作業のためにファイルを開く際に使用するファイルディスクリプタの目安を
指定します。

#define ALIAS_LIST_MAX 30
このマクロの値は、一度に再帰的に展開できるエイリアスの数を指定します。
このマクロの値は正の整数でなければなりません。

#define FIXED_SIGNAL_AS_ERROR 1
非対話的シェルにおいて、シェルが起動された時に最初からトラップが「無視」に
設定されていたシグナルのトラップを後から変更しようとしたときの動作を指定します。
このマクロが設定されていると、そのような trap コマンドはエラーになります。
設定されていないと (デフォルト)、trap コマンドはトラップの変更が成功したかの
ように振る舞います。(注: このマクロの設定に関わらず、このようなトラップの変更は
できません)

#define FG_DONT_SAVE_TERMINAL 1
端末の設定を操作するプログラムがバックグラウンドで起動され、後で "fg" コマンドで
続行された場合、端末の設定がおかしなまま残ることがあります。そのため "fg"
コマンドはプログラムを続行させる前に端末の設定を保存し、後で設定を元に戻します。
しかしこのマクロが設定してあると、"fg" コマンドは端末の設定を元に戻しません。

#define HISTORY_REFRESH_INTERVAL 100
シェルが履歴ファイルをリフレッシュする間隔を指定します。ここで指定した数の
コマンドが実行されるたびに、シェルはファイルをリフレッシュします。
