Next: , Previous: Command Variables, Up: Makefile Conventions


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パッケージに正確に同じ値を指定できる ようにすることである。これを有用なものとするために、あらゆるパッケージは ユーザがそうするときに賢く働くように設計されなければならない。