AM_MAINTAINER_MODE
missingスクリプトは,いくつかの管理用ツールのラッパーで,要 求される管理用ツールを持っていないユーザのために設計されています.通常, 管理用ツールとは,autoconf,automake, bison等です.これらのツールで生成されるファイルは,パッケー ジのその他のファイルとともに配布されるので,ユーザがビルドしたり,それ らがconfigureで調査されている間は,これらのツールは要求されません.
しかし,理由があってリビルドのルールが開始され,足りないツールが呼び出
される場合,missingはユーザに警告します.ツールが無いとき,
警告はされますが,ビルドの継続を可能にする方向で,missingは
タイムスタンプを修正を試みます.例えば,autoconfがインストー
ルされていない場合,missingはconfigureを
touchします.配布されるすべてのファイルがCVSに保持されている
場合,missingのこの機能で,ユーザは管理用ツールが無く
ても,cvs update
で暗黙に指定されたタイムスタンプを回避して,
CVSからのパッケージをビルドすることが可能になります.
要求されるツールがインストールされている場合,missingはそれ
を実行し,異常終了した後は継続しようとしません.これは開発時には正しい
もので,開発者は異常終了を修正したいものです.しかし,管理用ツールの違
うバージョンを持っているユーザは,リビルドルールが間違って開始されると
き,ビルドが終了しエラーになるかもしれません.ビルドの継続による異常終
了は,AM_MAINTAINER_MODE
で主張している論点の一つです.
AM_MAINTAINER_MODE
AM_MAINTAINER_MODE
は,"リビルドのルール"の呼び出しをデフォルト
で利用不可能にします.configure.acにAM_MAINTAINER_MODE
が
あって,./configure && make
を実行する場合,makeは
configure,Makefile.in,LexやYaccの出力などのリビルドを*
決して*試みません.すなわち,一般的に配布されるが,通常ユーザが更新す
る必要が無いファイルに対するビルドルールを利用不可能にします.
./configure --enable-maintainer-mode
を実行する場合,これらのリ
ビルドルールが利用されるようになります.
ユーザ(や自分自身が)が失われたタイムスタンプ(see CVS)でうんざりし
たくないからとか,単純に,リビルドルールを使わないようにして管理用ツー
ルを明示的に実行したいから,といった理由でAM_MAINTAINER_MODE
を
使用します.
AM_MAINTAINER_MODE
では,条件的なカスタムビルドのルールも利用不
可能にすることが可能になります.ユーザが利用不可能なおそれのある外部ツー
ルのルールを利用不可能にするため,この機能を使用する管理者もいます.
数年前,François PinardはAM_MAINTAINER_MODE
にいくつかの引数
を付けるよう指示しました.それらのほとんどは不安定になり得ます.依存性
を削除することで,非依存のビルドにすることができます.ソースファイルを
変更することで,生成されるファイルに影響がなくなり,このことで,注意さ
れないときでも非常に混乱するはずです.彼は,安定は管理者に限定すべきで
はなく(--enable-maintainer-mode
で提案されたもの),反対だと付け
加えました.ユーザがMakefile.amを編集すると,Makefile.in
を更新する,または警告を出力すべきですが(これがAutomakeで
missing
を使用する理由です),最終的に望むことは,何も起こらず,
ユーザは注意もされないことです(これは,AM_MAINTAINER_MODE
でリビ
ルドのルールを利用不可能にすることです).
AM_MAINTAINER_MODE
マクロを開発したJim Meyeringは,François
との議論に動揺し,パッケージからAM_MAINTAINER_MODE
を取り除きま
した.
すべてのファイルをCVSに保持しているプロジェクトで作業する手助けとなり,
違うバージョンのツールを所有している場合はmissingが十分では
ないので,今でも,AM_MAINTAINER_MODE
を使用し続けている人はたく
さんいます.