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

18. Autoconfの歴史

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


18.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'ファイルを作成しました.


18.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大学の私の友達は最近, M4をtvtwmを含むいくつかのプログラムのフロントエンドとして位置付け ていて,私は新しい言語への挑戦に興味が湧きました.


18.3 Leviticus

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

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


18.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++サポートを寄付してくれました. Fran@m_cedillacois 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月まで移植性の問題にうんざりしているときに多くの バグを直しました.


18.5 Deuteronomy

長い間望まれていた主な特徴のリストが蓄積され,様々な人々のパッチの数年間 の効果は,残りのcruftを残したままでした.1994年4月のCygnus Supportに対す る仕事中に,私はautoconfの主な修正を始めました.Cygnus configureが関連した部分がほとんどですが,david zuhnとKen Raeburnの助けで,Autoconfに欠けている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 を使用するソースコードパッケージの改造を助けるため開発した,追加のユーティ リティを加えました.Fran@m_cedillacois Pinardの助けで,マクロがお互いのメッセー ジに干渉しないようにしました.(その機能は,GNU M4のパフォーマ ンスのボトルネックを明らかにし,彼はすぐに修正しました!) 人々が解決を望 むドキュメント周りの問題を再編成しました.そして,経験から,Autoconfを変 更したとき,明らかに退化する傾向が分かっているので,テストスイートを始め ました.

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

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


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

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.