======================================================================
                    Yash ビルド・インストールガイド
======================================================================

分かる人向けワンライナー:
  ./configure && make && sudo make install

----------------------------------------------------------------------

目次:
  1. Yash をビルドするのに必要なもの
  2. コンフィギュレーション
  3. ビルドとテスト
  4. インストールとアンインストール
  5. 更なるコンフィギュレーションオプション

----------------------------------------------------------------------

1. Yash をビルドするのに必要なもの

Yash は C99 (ISO/IEC 9899:1999, 拡張版 C 言語) で書かれたプログラムな
ので、ビルドするには C99 のコンパイラが必要です。お使いのシステムに
C99 のコンパイラがない場合は、まずそれをインストールしてください。C99
のコンパイラが `c99' コマンドとしてインストールしてある場合は、それで
十分です。また比較的新しい GNU Compiler Collection の `gcc' コマンドが
インストールしてある場合は、それが使えます。これら以外の C99 のコンパ
イラを使用したい場合は、コンフィギュレーションでそれを指定してください。

Yash のビルドは `make' コマンドによって自動化されていますので、コンパ
イラに加えて `make' コマンドが必要です。POSIX 規格に準拠した `make' コ
マンドを使用することを推奨します。GNU Make で正しくビルドできることを
確認済みです。他の `make' コマンドでも多くの場合は問題ありません。

Yash は POSIX 規格 (IEEE Std 1003.1, 2008 Edition) で定義された API を
使用しています。お使いのシステムが POSIX に対応していない場合、ビルド
に失敗したり正しく動作しなかったりする可能性があります。

Yash は各言語に翻訳されたメッセージを表示するために `gettext' 関数を使
用します。GNU/Linux および Solaris の最近のバージョンでは、`gettext' 
関数は標準 C ライブラリに組み込まれているので、そのままで問題ありませ
ん。他のシステムでは、`gettext' 関数は `libintl' という外部ライブラリ
で提供されます。お使いのシステムに `libintl' ライブラリがインストール
されていない場合は、まずそれをインストールするか、またはコンフィギュレ
ーションで国際化対応を無効化してください。

Yash はコマンドライン編集機能を実現するために `curses' ライブラリを使
用します。お使いのシステムに `curses' ライブラリがインストールされてい
ない場合は、まずそれをインストールするか、またはコンフィギュレーション
でコマンドライン編集機能を無効化してください。

----------------------------------------------------------------------

2. コンフィギュレーション

コンフィギュレーションではビルドで使用されるいくつかのファイルが生成さ
れます。これらのファイルには、システムで利用可能な機能の種類や yash を
どこにインストールするかなどといった情報が入っています。

コンフィギュレーションは `configure' という名前のシェルスクリプトによ
って行われます。コンフィギュレーションを実行するには、`cd' コマンドで
お使いのシェルの作業ディレクトリを `configure' スクリプトがあるディレ
クトリに変更した後、`sh configure' と入力してください。

コンフィギュレーションにおいて、`configure' スクリプトを起動する際にオ
プションや変数を与えることができます。これにより、
  * ビルドで使用するコンパイラやアーカイバ
  * ビルドした yash で使用可能な機能
  * yash 本体や関連ファイルをインストールするディレクトリ
等を指定することができます。
例えば、コマンドライン編集機能を無効化してビルドするには、スクリプトを
`sh configure --disable-lineedit' と入力して実行します。また `cc' コマ
ンドをコンパイラとしてビルドで使用するには、`sh configure CC=cc' とし
ます。

以下に、コンフィギュレーションで指定可能なオプション・変数を挙げます。

以下は、yash の特定の機能を有効化・無効化するオプションです。デフォル
トでは、yash はすべての機能が有効な状態でビルドされます。

  --enable-array  --disable-array
    配列を処理するための `array' 組込みコマンドを有効・無効にしま
    す。この機能を無効にしても、配列変数そのものは常にサポートされ
    ます。
  --enable-dirstack  --disable-dirstack
    ディレクトリスタックおよびそれを扱うための `dirs', `pushd',
    `popd' 組込みコマンドを有効・無効にします。
  --enable-help  --disable-help
    `help' 組込みコマンドを有効・無効にします。
  --enable-history  --disable-history
    コマンド履歴を扱うための `fc', `history' 組込みコマンドを有効
    ・無効にします。
  --enable-lineedit  --disable-lineedit
    対話シェルのための行編集機能を有効・無効にします。この機能を有
    効にするにはコマンド履歴機能も有効にしなければなりません。
  --enable-printf  --disable-printf
    `printf', `echo' 組込みコマンドを有効・無効にします。
  --enable-socket  --disable-socket
    ソケットリダイレクトを有効・無効にします。この機能を有効にするには、
    お使いのシステムがソケットをサポートしている必要があります。
  --enable-test  --disable-test
    `test', `[' 組込みコマンドを有効・無効にします。
  --enable-ulimit  --disable-ulimit
    `ulimit' 組込みコマンドを有効・無効にします。この機能を有効にする
    には、お使いのシステムの標準 C ライブラリが `getrlimit' および
    `setrlimit' 関数をサポートしている必要があります。

以下のオプションは yash の動作を指定します:

  --default-loadpath=...
    Yash を起動したとき、$YASH_LOADPATH 変数をこの値に初期化します。
    (デフォルト: <datadir>/yash)

以下のオプションはファイルのインストール先を指定します:

  --prefix=...
    インストール先の基本先頭パス
    (デフォルト: /usr/local)
  --exec-prefix=...
    実行可能バイナリのインストール先の基本先頭パス
    (デフォルト: <prefix>)
  --bindir=...
    実行可能バイナリのインストール先ディレクトリ
    (デフォルト: <exec-prefix>/bin)
  --datarootdir=...
    実行可能バイナリ以外のファイルのインストール先の基本先頭パス
    (デフォルト: <prefix>/share)
  --datadir=...
    補助スクリプトのインストール先
    (デフォルト: <datarootdir>)
  --localedir=...
    地域化対応用メッセージデータファイルのインストール先
    (デフォルト: <datarootdir>/locale)
  --mandir=...
    Roff 形式のマニュアルのインストール先
    (デフォルト: <datarootdir>/man)
  --docdir=...
    Roff 形式以外のマニュアルのインストール先
    (デフォルト: <datarootdir>/doc/yash)
  --htmldir=...
    HTML 形式のマニュアルのインストール先
    (デフォルト: <docdir>)

以下の変数はビルドで使用するコマンドとそのオプションを指定するのに使え
ます:

  CC=...
    ビルドで使用するコンパイラ兼リンカコマンドを指定します。
  CFLAGS=...
    コンパイル時にコンパイラに渡すオプションを指定します。この変数はコ
    ンフィギュレーションで自動的に設定されるオプションを上書きします。
  CADDS=...
    コンパイル時にコンパイラに渡す追加のオプションを指定します。CFLAGS
    で指定されるデフォルトのオプションのほかにオプションを追加する際に
    この変数を指定してください。
  LDFLAGS=...
    リンク時にリンカに渡すオプションを指定します。この変数はコンフィ
    ギュレーションで自動的に設定されるオプションを上書きします。この変
    数にはリンクするライブラリを指定するオプションは含まれません。(下
    記 LDLIBS 参照)
  LDADDS=...
    リンク時にリンカに渡す追加のオプションを指定します。LDFLAGS で指定
    されるデフォルトのオプションのほかにオプションを追加する際にこの変
    数を指定してください。
  LDLIBS=...
    実行可能バイナリとリンクさせるライブラリを指定するためのリンカオプ
    ションを指定します。この変数はコンフィギュレーションで自動的に設定
    されるオプションを上書きします。
  AR=...
    ビルドで使用するアーカイバコマンドを指定します。
  ARFLAGS=...
    バイナリアーカイブを作成する際にアーカイバに渡すオプションを指定し
    ます。この変数はコンフィギュレーションで自動的に設定されるオプショ
    ンを上書きします。
  LINGUAS=...
    地域化対応用のメッセージデータをインストールするロケールを指定しま
    す。複数のロケールを指定するには、ロケール名を空白で区切ってくださ
    い。(全てのロケール名を一つの LINGUAS 変数で一度に指定する必要があ
    ります。シェルから `configure' スクリプトを起動する際に変数の値全
    体を適切にクォートしてください。)
  INSTALL=...
    インストール時に使用するインストーラコマンドを指定します。

----------------------------------------------------------------------

3. ビルドとテスト

コンフィギュレーションができたら、シェルから `make' コマンドを実行して
yash をビルドしてください。`make' コマンドがコンパイラやリンカを適切な
順序で起動して、yash の実行可能バイナリを生成します。

Yash のビルドが済んだら、yash が正しく機能するかどうか `make test' を
実行することでテストできます。(実際には、`make' をせずにいきなり
`make test' をしても構いません。テスト前に自動的にビルドが行われます。)

----------------------------------------------------------------------

4. インストールとアンインストール

ビルドができたら、`make install' を実行することで yash をインストール
できます。このコマンドを実行することで、yash の実行可能バイナリと yash
が使用する補助ファイルがすべてインストールされます。コンフィギュレー
ションでインストール先を指定しなかった場合は、以下のデフォルトディレク
トリにインストールされます。

  実行可能バイナリ:      /usr/local/bin          
  補助シェルスクリプト:  /usr/local/share/yash   
  地域化対応用データ:    /usr/local/share/locale 
  Roff 形式マニュアル:   /usr/local/share/man
  HTML 形式マニュアル:   /usr/local/share/doc/yash

ほとんどのシステムでは、これらのディレクトリにファイルをインストールす
るには特別な権限が必要となります。権限を取得するために `sudo' 等のコマ
ンドを使用してください。また代わりに別のインストール先ディレクトリをコ
ンフィギュレーションで指定することもできます。

`make install' の代わりに、`make install-binary' を実行して実行可能バ
イナリのみをインストールすることもできます。また `make install-data' 
で他の補助ファイルのみをインストールすることもできます。

`make install' または `make install-binary' の代わりに、
`make install-strip' または `make install-binary-strip' をそれぞれ使用
することもできます。これらはインストール中にバイナリからデバッグ用情報
を削除することでファイルサイズを小さくします。

Yash をアンインストールするには、`make uninstall' を実行してください。
`make uninstall-binary' および `make uninstall-data' を使うと実行可能
バイナリおよびその他の補助ファイルのみをそれぞれアンインストールするこ
ともできます。

----------------------------------------------------------------------

5. 更なるコンフィギュレーションオプション

`configure' スクリプトを実行することでコンフィギュレーションを行った後、
`config.h' ファイルを直接編集することでさらに yash をカスタマイズする
ことができます。ここで述べるオプションは多くの人にとっては関心のないこ
となので、`configure' スクリプトで設定できるようにはなっていません。

オプションは、`config.h' ファイル内に所定のマクロを定義することで設定
できます。オプションは、ブーリアンオプションとそれ以外のオプションとに
分かれます。ブーリアンオプションは、マクロの値を 0 以外の整数値として
定義すると有効になり、0 として定義するか未定義のままにすると無効になり
ます。非ブーリアンオプションについては、デフォルトの値をマクロ名の横に
示してあります。

#define ALIAS_LIST_MAX 30
このマクロは正の整数値として定義する必要があります。
このマクロは、一度に再帰的に展開できるエイリアスの数を指定します。

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

#define FG_DONT_SAVE_TERMINAL 1  /* ブーリアンオプション */
端末の設定を操作するプログラムがバックグラウンドで起動され、後で `fg'
組込みコマンドで再開された場合、端末の設定がおかしなまま残ることがあり
ます。そのためデフォルトでは `fg' 組込みコマンドはプログラムを再開させ
る前に端末の設定を保存し、後で設定を元に戻します。しかしこのマクロが非
0 値に設定してあると、`fg' 組込みコマンドはこのような回避策を取りませ
ん。

#define FIXED_SIGNAL_AS_ERROR 1  /* ブーリアンオプション */
非対話モードのシェルが起動する際に元からシグナルハンドラが「無視」に設
定されていた場合、`trap' 組込みコマンドで後からそれを解除することはで
きないと POSIX 規格で定められています。このオプションは、このような場
合における `trap' コマンドの動作を指定します。このマクロが非 0 値に設
定されている場合は、コマンドはエラーメッセージを出力し、そうでない場合
は、コマンドは何もエラーが無かったかのように振る舞います。なお、いづれ
の場合も、当該シグナルハンドラは解除されません。

#define FORMAT_INDENT_WIDTH 3
このマクロは 0 以上の整数値として定義する必要があります。
このマクロは、シェルがコマンドを整形して出力する際のインデントの幅を指
定します。

#define MAX_HISTSIZE 1000000
このマクロは (INT_MAX / 10) を超えない正の整数値として定義する必要があ
ります。
このマクロは履歴項目の最大個数を指定します。

#define HISTORY_MIN_MAX_NUMBER 100000
このマクロは 32768 以上の 10 の冪として定義する必要があります。
このマクロは、履歴の番号が 1 に戻る直前の履歴の番号を指定します。(履歴
が非常にたくさんある場合はこのマクロの値以上の番号で 1 に戻る場合もあ
ります。)

#define DEFAULT_HISTSIZE 500
このマクロは 128 以上の整数として定義する必要があります。
このマクロはデフォルトの履歴サイズを指定します。

#define LIST_AMBIGUOUS_OPTIONS 1  /* ブーリアンオプション */
このマクロが非 0 値に設定してある場合、シェルの起動または組込みコマン
ドの呼び出しにおいて指定されたオプションが曖昧な時、そのオプション名に
マッチするオプション名のリストを出力します。

#define SHELLFDMINMAX 100
このマクロの値は 10 以上の整数でなければなりません。この値は、シェルが内部で使用するファイルディスクリプタの下限を指定します。

#define YASH_DISABLE_SUPERUSER 1  /* ブーリアンオプション */
このマクロを非 0 値に設定すると、ユーザ ID が 0 のユーザを管理者権限を
持つユーザとして特別扱いしないようにします。デフォルトでは、UID が 0 
のユーザはアクセス権限のチェックなどにおいて他のユーザとは異なる扱いを
受けます。
