[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

14. History of Autoconf

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

14.1 Genesis  Prehistory and naming of configure.
14.2 Exodus  The plagues of m4 and Perl.
14.3 Leviticus  The priestly code of portability arrives.
14.4 Numbers  Growth and contributors.
14.5 Deuteronomy  Approaching the promises of easy configuration.


14.1 Genesis

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

その夏の後、私はRichard StallmanとRichard Pixleyが、GNUコンパイラツール で使う、類似のスクリプトを開発していたことを知りました。それで、私は configureスクリプトを、発展するインタフェースをサポートするため、 改造しました。テンプレートとして、`Makefile.in'という名前のファイル を使い、(多くあるなかの)最初のオプション`+srcdir'を追加し、 `config.status'ファイルを作りました。


14.2 Exodus

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

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

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

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

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


14.3 Leviticus

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

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


14.4 Numbers

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

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

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


14.5 Deuteronomy

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

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

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

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

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


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on January, 21 2003 using texi2html