7.2.4 インストール命令の変数
インストール命令は常に変数によって名前が付けられているべきだ。だから、標
準的でない場所にインストールするのは簡単である。これらの変数の標準的な名
前は以下で述べる。それらは標準的なファイルシステムの構造に基いている。そ
れに似たものがSVR4、4.4BSD、Linux、Ultrix v4や他の現代的なオペレーティン
グ・システムで使われている。
これらの二つの変数はインストールのためのルートを設定する。他のインストー
ル命令はすべてこれら二つのうちの一つのサブディレクトリであるべきで、これ
ら二つのディレクトリへ直接インストールされるものがあるべきではない。
- `prefix'
- 以下で列挙する変数のデフォルトの値を作るのに使われる接頭辞。
prefix
のデフォルトの値は/usr/localであるべきだ。完全なGNU
システムを構築するとき、接頭辞は空で、/usrは/へのシンボリッ
ク・リンクになるだろう。(もしAutoconfを使っているなら、それを
`@prefix@'と書きなさい。)
- `exec_prefix'
- 以下で列挙する変数の一部のデフォルトの値を作るのに使われる接頭辞。
exec_prefix
のデフォルトの値は$(prefix)
であるべきだ。(もし
Autoconfを使っているなら、それを`@exec_prefix@'と書きなさい。)
一般的に、$(exec_prefix)
は(実行ファイルやサブルーチン・ライブラリ
のような)マシンに特定のファイルを含むディレクトリに対して使われるが、
$(prefix)
は他のディレクトリに対して直接使われる。
実行プログラムは以下のディレクトリの一つにインストールされる。
- `bindir'
- ユーザが走らせることができる実行プログラムをインストールするためのディレ
クトリ。これは普通/usr/local/binであるべきだが、それを
$(exec_prefix)/binと書きなさい。(もしAutoconfを使っているなら、そ
れを`@bindir@'と書きなさい。)
- `sbindir'
- シェルから走らせることができるが、普通はシステム管理者にだけ有用な実行プ
ログラムをインストールするためのディレクトリ。これは通常
/usr/local/sbinであるべきだが、それを$(exec_prefix)/sbinと
書きなさい。(もしAutoconfを使っているなら、それを`@sbindir@'と書
きなさい。)
- `libexecdir'
-
ユーザよりも他のプログラムに実行されるための実行プログラムをインストール
するためのディレクトリ。このディレクトリは通常/usr/local/libexec
であるべきだが、それを`$(exec_prefix)/libexec'と書きなさい。(もし
Autoconfを使っているなら、それを`@libexecdir@'と書きなさい。)
実行中にプログラムによって使われるデータ・ファイルは二つの方法の部類に分
けられる。
- 一部のファイルは普通プログラムによって変更される。他のものは普通絶対に変
更されない(ユーザはこれらのうち一部を編集するかもしれないけど)。
- 一部のファイルはアーキテクチャに依存しておらず、あるサイトの全てのマシン
に共有されうる。一部はアーキテクチャ依存で、同じ種類のマシンやオペレーティ
ング・システムによってのみ共有されうる。他のものは二つのマシン間で決して
共有できないかもしれない。
これは6つの異なる可能性をもたらす。しかしながら、我々は、オブジェクト・
ファイルやライブラリは別にして、アーキテクチャ依存のファイルの使用をやめ
させたい。他のデータ・ファイルをアーキテクチャ非依存にすることはずっとき
れいで、普通は困難ではない。
それゆえ、ここにMakefileがディレクトリを指定するのに使うべき変数を挙げる。
- `datadir'
- 読み込みだけのアーキテクチャに依存しないデータ・ファイルをインストールす
るためのディレクトリ。これは通常/usr/local/shareであるべきだが、
それを$(prefix)/shareと書きなさい。(もしAutoconfを使っているなら、
それを`@datadir@'と書きなさい。) 特別な例外として、以下の
$(infodir)と$(includedir)を見なさい。
- `sysconfdir'
- 一つのマシンに属する読み込みだけのデータ・ファイル–つまり、ホストを設定
するためのファイル、をインストールするためのディレクトリ。メイラーやネッ
トワークの設定ファイル、/etc/passwdなどはここに属する。このディレ
クトリの全てのファイルは普通のASCIIテキスト・ファイルであるべきだ。この
ディレクトリは普通/usr/local/etcだが、それを$(prefix)/etc
と書きなさい。(もしAutoconfを使っているなら、それを`@sysconfdir@'
と書きなさい。)
このディレクトリに実行ファイルをインストールしてはいけない(それらおそら
く$(libexecdir)か$(sbindir)に属する)。また、普通の方針で使っ
ているときに変更するファイルはインストールしてはいけない(システムの設定
を変更するための目的のプログラムは除く)。それらはおそらく
$(localstatedir)に属する。
- `sharedstatedir'
- アーキテクチャに依存しない、プログラムが走る間に変更するデータ・ファイル
をインストールするためのディレクトリ。これは普通/usr/local/comで
あるべきだが、それを$(prefix)/comと書きなさい。(もしAutoconfを使っ
ているなら、それを`@sharedstatedir@'と書きなさい。)
- `localstatedir'
- プログラムが走る間に変更し、特定のマシンに属しているデータ・ファイルをイ
ンストールするためのディレクトリ。ユーザは、パッケージの操作を設定するた
めに、このディレクトリにあるファイルを変更する必要が決してあるべきではな
い。そのような設定情報は$(datadir)や$(sysconfdir)に入る別
のファイルに置きなさい。$(localstatedir)は通常
/usr/local/varであるべきだが、それを$(prefix)/varと書きな
さい。(もしAutoconfを使っているなら、それを`@localstatedir@'と書
きなさい。)
- `libdir'
- オブジェクト・ファイルやオブジェクト・コードのライブラリのためのディレク
トリ。ここに実行ファイルをインストールしてはいけない。それらはおそらく代わ
りに$(libexecdir)に入るべきだ。
libdir
の値は普通
/usr/local/libだが、それを$(exec_prefix)/libと書きなさい。
(もしAutoconfを使っているなら、それを`@libdir@'と書きなさい。)
- `infodir'
- このパッケージのInfoファイルをインストールするためのディレクトリ。デフォ
ルトでは、それは/usr/local/infoであるべきだが、それは
$(prefix)/infoと書かれるべきだ。(もしAutoconfを使っているなら、そ
れを`@infodir@'と書きなさい。)
- `lispdir'
- このパッケージのどんなEmacs Lispファイルでもインストールためのディレクト
リ。デフォルトでは、それは/usr/local/share/emacs/site-lispである
べきだが、それは$(prefix)/share/emacs/site-lispと書かれるべきだ。
もしAutoconfを使っているなら、デフォルトを`@lispdir@'と書きなさい。
`@lispdir@'が働くようにするために、configure.inファイルに
以下の行が必要である。
lispdir='${datadir}/emacs/site-lisp'
AC_SUBST(lispdir)
- `includedir'
-
Cの`#include'プリプロセッサ命令でユーザ・プログラムによってインクルー
ドされるヘッダ・ファイルをインストールするためのディレクトリ。これは通常
/usr/local/includeであるべきだが、それを$(prefix)/include
と書きなさい。(もしAutoconfを使っているなら、それを`@includedir@'
と書きなさい。)
GCC以外のほとんどのコンパイラは/usr/local/includeディレクトリのヘッ
ダ・ファイルを探さない。だからこの方法でヘッダ・ファイルをインストールす
ることはGCCにだけ役に立つ。一部のライブラリはGCCで働くことだけを本当に意
図しているので、これは時には問題ではない。しかし一部のライブラリは他のコ
ンパイラと働くことを意図している。それらはヘッダ・ファイルを二つの場所、
includedir
に指定されるところとoldincludedir
に指定されると
ころにインストールするべきだ。
- `oldincludedir'
- GCC以外のコンパイラで使われるための`#include'ヘッダ・ファイルをイン
ストールするためのディレクトリ。これは通常/usr/includeであるべき
だ。(もしAutoconfを使っているなら、それを`@oldincludedir@'と書く
ことができる。)
Makefileのコマンドはoldincludedir
の値が空かどうか確認すべきだ。も
しそうなら、それを使おうとするべきではない。ヘッダ・ファイルの二番目のイ
ンストールを取りやめるべきだ。
パッケージはこのディレクトリにすでにあるヘッダを、そのヘッダが同じパッケー
ジに由来しているのでないなら、置き換えるべきではない。だから、もしあなた
のFooパッケージがヘッダ・ファイルのfoo.hを提供するなら、もし、
(1)foo.hがないか、(2)すでにあるfoo.hがFooパッケージ由来か、
のどちらかなら、oldincludedir
ディレクトリにそのヘッダ・ファイルを
インストールするべきだ。
foo.hがFooパッケージ由来かどうかを見分けるために、そのファイルに
魔法の文字列—コメントの一部—を置き、その文字列をgrep
しなさい。
Unix形式のmanページは次のうちの一つにインストールされる。
- `mandir'
- このパッケージの(あれば)manページをインストールするための一番上のディレ
クトリ。それは普通/usr/local/manだろう。しかしそれを
$(prefix)/manと書くべきだ。(もしAutoconfを使っているなら、それを
`@mandir@'と書きなさい。)
- `man1dir'
- セクション1のmanページをインストールするためのディレクトリ。それを
$(mandir)/man1と書きなさい。
- `man2dir'
- セクション2のmanページをインストールするためのディレクトリ。それを
$(mandir)/man2と書きなさい。
- `...'
-
どんなGNUソフトウェアの主要な解説書もmanページにしてはならない。
代わりにTexinfoでマニュアルを書きなさい。manページは単にUnix上でGNUソフ
トウェアを走らせる人々のためだけで、それは副次的なアプリケーションだけだ。
- `manext'
- インストールされるmanページのファイル名拡張子。これは適切な数字が続くピ
リオドを含むべきだ。それは普通`.1'であるべきだ。
- `man1ext'
- セクション1にインストールされるmanページのためのファイル名拡張子。
- `man2ext'
- セクション2にインストールされるmanページのためのファイル名拡張子。
- `...'
- もしパッケージがマニュアルの2以上にmanページをインストールする必要がある
なら、これらの名前を`manext'の代わりに使いなさい。
そして最後に、以下の変数を設定するべきだ。
- `srcdir'
- コンパイルされるソースのディレクトリ。この変数の値は通常
configure
シェル・スクリプトによって挿入される。(もしAutoconfを使っているなら、
`srcdir = @srcdir@'を使いなさい。)
例。
# Common prefix for installation directories.
# NOTE: This directory must exist when you start the install.
prefix = /usr/local
exec_prefix = $(prefix)
# Where to put the executable for the command `gcc'.
bindir = $(exec_prefix)/bin
# Where to put the directories used by the compiler.
libexecdir = $(exec_prefix)/libexec
# Where to put the Info files.
infodir = $(prefix)/info
もしあなたのプログラムが標準的なユーザ指定のディレクトリに、非常にたくさ
んのファイルをインストールするなら、このプログラムに特定のサブディレクト
リにそれらをまとめると有用かもしれない。もしこうするなら、これらのサブディ
レクトリを作るためのinstall
規則を書くべきだ。
上に挙げたどの変数の値にも、ユーザがサブディレクトリの名前を含めると期待し
てはいけない。インストール・ディレクトリのための変数名の一組を持つという
考えは、ユーザがいくつかの異なるGNUパッケージに正確に同じ値を指定できる
ようにすることである。これを有用なものとするために、あらゆるパッケージは
ユーザがそうするときに賢く働くように設計されなければならない。