他のコンピュータ言語に対して,Autoconfでconfigure.acを正しくプロ グラムするために,言語が解決しようとする問題が何で,そうするため にどうするのかを理解する必要があります.
Autoconfが解決する問題は,世界が混乱しているということです.結局,全ての 異なる種類のシステムでパッケージのコンパイルを簡単にするためにAutoconfを 使用しますが,それを極端に嫌う人も中にはいます.Autoconf自身は,これらの 差を価値あるものとして扱います.configureをこれらの全てのシス テムで実行する必要があり,そのため,configure には,機能的にそ れらの最小公倍数に制限する必要があります.
通常,シェルスクリプトを考えるでしょう.autoconfが必要でしょう か?正しく書かれたシェル関数の組み合わせで,手でconfigureスク リプトを書くことを十分に簡単にします.ああ!残念ながら,シェル関数は最小 公倍数ではありません.そのため,関数を定義しそれを十回使用したいところで, その本体を十回コピーする必要があるでしょう.
そのため,本当に必要なものは,コンパイラのようなもの,すなわち autoconf,Autoconfプログラムが受け入れるもの,すなわち configure.ac,そして,それを移植性の高いシェルスクリプト configureに変換するものです.
どのようにして,autoconfがこの作業を実行するのでしょう?
可能性としては明らかに二つあります.新しい言語を作成すること,または既存
のものを拡張することです.前者は非常に魅力的です.あらゆる最適化が簡単に
実装可能で,Autoconfプログラムで厳密なチェックを実行することが可能です
(例えば,移植性のないあらゆる構成物は除外します).あるいは,
sh
(Bourne shell) 言語のように,既存の言語を拡張することが可能です.
Autoconfは後者の方法で行なっています.それはsh
の最上位層です.そ
のため,マクロを展開するものとしてautoconfを実装することが最も
便利になっています.マクロ呼び出しをマクロの本体で置換し,最終的にピュア
なsh
スクリプトを生成しながら,テキスト入力でマクロ展開(macro
expansion)を繰り返し実行するプログラムです.Autoconfマクロの展開に専念
して実装する代わりに,M4のような既存の一般的な目的を持つマクロ言語を使用
し,M4マクロの組み合わせとして拡張部分を実装する方が自然です.