Go to the first, previous, next, last section, table of contents.


Autoconfの歴史

以下のことを不思議に思うかもしれません.なぜAutoconfは元々書かれたので すか?どのようにして現在の形式になったのですか?(なぜそれはゴリラの唾 によく似ているのですか?)不思議に思っていない場合,この章は有用な情報 を含んでいないので,飛ばした方が良いでしょう.不思議に思っている 場合,軽くながしてください@enddots{}

Genesis

1991年6月,私はFree Software Foundationの@acronym{GNU}ユーティリティの 多くを保守していました.それらは,より多くのプラットホームに移植され, より多くのプログラムが追加されたので,ユーザは,`Makefile'で多く の `-D'オプション(およそ20)を選択する必要があり厄介になりました. 特に私がそうでした---私は異なるシステムでそれぞれの新しいリリースをテ ストする必要がありました.そして,私はfileutilsパッケージに対する正し い設定を見つけるため小さなシェルスクリプトを書き,fileutils 2.0の一部 としてリリースしました.その@command{configure}は,翌月,いくつかの他 の@acronym{GNU} ユーティリティパッケージに対する@command{configure} ス クリプトを作成するため,(手作業で)改造するとうまく動作しました.Brian Berlinerも,私のスクリプトを,@acronym{CVS}リビジョンコントロールシス テム用に改造しました.

その夏の後,私はRichard StallmanとRichard Pixleyが,@acronym{GNU}コン パイラツールで使用する,類似のスクリプトを開発していたことを知りました. それで私は,@command{configure}スクリプトが発展するインタフェースをサ ポートするように改造しました.テンプレートとして,`Makefile.in'と いう名前のファイルを使用し,(たくさんの中から)最初のオプション `+srcdir'を追加し, `config.status'ファイルを作成しました.

Exodus

ユーザからのフィードバックを得るにつれ,私は,検索と置換,カットアンド ペースト,それぞれのスクリプトの良く似た変更でEmacsを使用し,多くの改 良点を組み入れました.私が,@acronym{GNU}ユーティリティパッケージに, @command{configure}スクリプトを使用するため改造するにつれ,手作業での 更新は,現実的なものではなくなりました.@acronym{GNU}グラフィックユー ティリティの管理者Rich Murpheyは,@command{configure}スクリプトは素晴 らしいというメールを送ってくれ,それらを生成するツールを持っているなら 送って欲しいという依頼がありました.持ってはいませんでしたが,そうする べきだと思いました!それで,私はそれらを生成する仕事を始めました.手書 きの@command{configure}スクリプトの奴隷から,Autoconfで簡単に始める裕 福で簡単な旅が始まりました.

Cygnus @command{configure}は,そのころには開発されていて,表を基に動作 していました.それは,主に推測しにくい(オブジェクトファイルのフォーマッ トの詳細のような)特徴を,小さな数字を使用して,システムタイプを不連続 な数字で,扱う手法を主に用いていました.Brian Foxが,Bashのために開発 していた自動的なコンフィグレーションシステムは,類似のアプローチをとっ ています.一般的に使用するため,それぞれのオペレーティングシステムが持 つそれぞれ異なる特徴の最新のデータベースを管理しようとすることは,望み がないように思われました.その場その場でほとんどの機能を調査するため, より容易でより信頼性が高いものが必要です -- 特に,人々がローカルでハッ クしたり,ベンダーがインストールしたパッチがある,ハイブリッドなシステ ムではそうなります.

私は Cygnus @command{configure}に類似のアーキテクチャを使おうと考え, それは実行時に`configure.in'の一部を読み込む一つの @command{configure}スクリプトです.しかし,全てのパッケージで全ての特 徴を配布する必要は望まなかったので,プロセッサーによってそれぞれの `configure.in'から異なる@command{configure}を作成する処理にしまし た.そのアプローチは,多くの制御と柔軟性をもたらしました.

私は,Larry Wall,Harlan Stennと,Raphael Manfrediによる,Metaconfigを 使用してみようとしましたが,いくつかの理由でやめました.それが生成する @command{configure}スクリプトは対話的で,それが非常に不都合だと分かり ました.私は,それが行う(ライブラリ関数のような)特徴の調査方法が,好き でありませんでした.さらに,いまだ管理されているかどうか分かりませんで した.@command{configure}スクリプトは,(System V R4とNeXTのような)近代 的なシステムでは動作しないように思えました.特徴の有無の反応で,できる ことがあまり柔軟ではありませんでした.学ぶことが難しいと思いました.そ して,必要以上にあまりに大きく複雑でした(私は,そのとき,Autoconfが結 局どれくらい成長するのか,理解していませんでした).

私は,@command{configure}スクリプトの私のスタイルを生成するため,Perl を使用することを考えましたが,簡単なテキスト代入の仕事により適している M4に決めました.出力が暗黙で決まっているので,より小さい手法になると思 いました.さらに,みんなは既にそれを所有しています.(最初は,私は @acronym{GNU}が拡張したM4に依存しませんでした.)また,Maryland大学の私 の友達は最近,M4をtvtwmを含むいくつかのプログラムのフロントエン ドとして位置付けていて,私は新しい言語への挑戦に興味が湧きました.

Leviticus

私の@command{configure}スクリプトは,ユーザの対話的な干渉無しでシステ ムの能力を自動的に決定するので,それを生成するプログラムをAutoconfigと 呼ぶことに決定しました.しかし,バージョンナンバーを付けると, UNIXファイルシステムとしてはあまりに長い名前なので,短くして Autoconfとしました.

1991年秋,私は,M4マクロの手書きのスクリプトの部品をカプセル化し,調査 時に使用する特徴と技術の改善を加えることを続けるにつれて,フィードバッ クしてもらうため,移植性の聖杯にちなんだ探求者たちのグループ(つまり, アルファテスター)を呼びました.テスターの間で著明な人は,以下の通りで す.M4を実行し,未解決のマクロの呼び出しの調査するAautoconfシェルスク リプトを作成するアイディアをもたらしたFran@,{c}ois Pinard,インクルー ドファイルやシンボルを探すためファイルシステムを探す代わりに,より正確 な結果を求るためコンパイラの実行を提案したRichard Pixley.Autoconfに, TeXコンフィグレーションを与え,ドキュメントにマクロインデクッスを加 えたKarl Berry.そして,`-D'オプションを`Makefile'に書き込む 代わりに,Cヘッダファイルを作成するサポートを加え,@acronym{UUCP}パッ ケージでAutoconfが使えるようにしたIan Taylor.アルファテスターは,リリー スごとに変化するAutoconfマクロの名前と呼び出し方法に対して,何度も何度 もファイルを機嫌良く調整してくれました.彼らは皆,多くの特定の調査,偉 大なアイディア,そしてバグフィクスを提供してくれました.

Numbers

1992年7月,何カ月ものアルファテストの後で,私は Autoconf 1.0をリリース し,それを使用して多くの@acronym{GNU}パッケージを改造しました.私は, それらに対するあまりに肯定的な反応に驚きました.私が追跡記録可能な人以 上の多くの人々がそれを使用し始め,それには,@acronym{GNU}プロジェクト の一部ではない(TCL,FSP とKerberos V5のような)ソフトウェアで仕事をして いる人も含まれています.Autoconfは,@command{configure}を使用している 多くの人が遭遇した問題を報告してくれるので,急速に改善され続けました.

Autoconfは,M4実行の良い耐久テストだということが分かりました. UNIX M4は,Autoconfが定義するマクロの長さでコアダンプを吐き始め, いくつかのバグが@acronym{GNU} M4でも同様に明らかになりました.結局,私 達は@acronym{GNU} M4のみが持つ機能が必要だと認識しました. 4.3@acronym{BSD} M4は,特に組み込みマクロの設定が足りず,System Vバー ジョンはましですが,私達が必要とするもの全てをいまだに供給してくれませ ん.

人々が,Autoconfをより強い圧力の下(そして,私が予想していなかった使用 方法の下)で利用するにつれ,更なる開発事項が生じました.Karl BerryはX11 に対する調査を加えました.david zuhnはC++サポートを寄付してくれました. Fran@,cois Pinardは,無効な引数を診断させるようにしました.Jim Blandy は勇敢にも,後の改良のためのワークグランドとなるよう,@acronym{GNU} Emacsのコンフィグレーションに強要しました.Roland McGrathは, @acronym{GNU} Cライブラリのコンフィグレーションに使用し,Cヘッダテンプ レートファイルを自動的に作成する,@command{autoheader}スクリプトを書き, @command{configure}に,`--verbose'オプションを加えました.Noah Friedmanは,`--macrodir'オプションと AC_MACRODIR環境変数を 加えました.(彼は,"ソフトウェアパッケージを,Autoconfを使用するもの に改造してください"と言うことを意味する autoconfiscateという言 葉も作り出しました.)RolandとNoahは,AC_DEFINEでの引用の保護を 改善し,特に私が1993年の2月から6月まで移植性の問題にうんざりしていると きに多くのバグを直しました.

Deuteronomy

長い間望まれていた主な特徴のリストが蓄積され,様々な人々のパッチの数年 間の効果は,残りのcruftを残したままでした.1994年4月のCygnus Supportに 対する仕事中に,私はautoconfの主な修正を始めました.Cygnus @command{configure}が関連した部分がほとんどですが,david zuhnとKen Raeburnの助けで,Autoconfに欠けているCygnus @command{configure}のほと んどの機能を追加しました.これらの機能は,`config.sub'`config.guess'`--host'`--target'を使用するサポート, ファイルをリンクさせること,サブディレクトリで@command{configure}を実 行することを含みます.これらの機能に加え,Autoconfを使用するように, Kenは@acronym{GNU} asを対応し,Rob Savoye はDeja@acronym{GNU}を 対応しました.

私は,他の人々の要求に答えより多くの機能を加えました.多くの人々は, @command{configure}スクリプトが実行時の調査結果を共有できるよう求め, それは(特に,Cygnusのような,大きなソースツリーのコンフィグレーション 時に)イライラする程遅かったためです.Mike Haertelは,サイト特定の初期 化スクリプトを加えることを提案しました.MS-DOSでアンパックが必要なもの を配布している人々は,生成されるファイル名が`config.h.in'のように 二つのドットを含むので,ファイル名の`.in'拡張子に優先するよう求め ました.Jim Avera は,AC_DEFINEAC_SUBSTの引用を使用す る問題の拡張試験を行い,彼の洞察は重要な改良につながりました.Richard Stallmanは,Emacsの@command{configure}スクリプトをデバッグする人々を助 けるため, `/dev/null'の代わりに`config.log'にコンパイラ出力 を送るよう頼みました.

プログラム品質に不満があり,その他の変更をしました.メッセージに曖昧で ない調査結果が表示されるようにし,常に結果を出力するようにしました.マ クロの名前を組織化し,コーディングスタイルの矛盾をきれいにしました. Autoconfを使用するソースコードパッケージの改造を助けるため開発した,追 加のユーティリティを加えました.Fran@,cois Pinardの助けで,マクロがお 互いのメッセージに干渉しないようにしました.(その機能は,@acronym{GNU} M4のパフォーマンスのボトルネックを明らかにし,彼はすぐに修正しました!) 人々が解決を望むドキュメント周りの問題を再編成しました.そして,経験か ら,Autoconfを変更したとき,明らかに退化する傾向が分かっているので,テ ストスイートを始めました.

再び,貴重なフィードバックをくれたアルファテスターです.特に, Fran@,cois Pinard,Jim Meyering,Karl Berry,Rob Savoye,Ken Raeburnと, Mark Eichin です.

最終的に,バージョン2.0が用意できました.そしてたくさんの喜びがありま した.(そして私は再び自由な時間を持ちます.私は考えます.これは正当な 権利だ.)


Go to the first, previous, next, last section, table of contents.