Next: , Previous: Extending aclocal, Up: configure


5.8 ローカルなマクロの処理

Autoconfで提案される機能テストは,すべてのニーズをカバーしていません. 独自のマクロやサードパーティーのマクロで既存のテストを補足する必要があ ることもよくあります.

パッケージのカスタムマクロを体系付ける方法は二つあります.

利用可能な最初の方法は(歴史的な手法で)すべてのマクロを acinclude.m4にリストアップすることです.このファイルは aclocalの実行時にaclocal.m4に含められ,そのマクロはそ れ以降autoconfから見えるようになります.しかし,たくさんのマ クロを含んでいる場合,ちょっとした管理が難しくなり,パッケージ間でマク ロを共有することが不可能になります.

利用可能な二番めの方法は,こちらが推奨されていますが,それぞれのマクロ を単独ファイルに書き,一つのディレクトリにこれらすべてのファイルをまと めておくことです.このディレクトリは通常m4/と呼ばれています.こ のため,aclocal.m4をビルドする際,aclocalm4/ をスキャンするように指示するべきです.コマンドラインからは, aclocal -I m4とします.または,最上位ののMakefile.amの定 義を以下のように更新すべきです.

      ACLOCAL_AMFLAGS = -I m4

ACLOCAL_AMFLAGSは,aclocal.m4makeでリビルドされ るとき,aclocalに渡すオプションを含んでいます.この行は,適 切なオプションでaclocalを実行するため,autoreconf (see Using autoreconf to Update configure Scripts)や,Gettextの マクロがインストールされている場所を示すためautopoint (see Invoking the autopoint Program)とgettextize (see Invoking the gettextize Program)でも使用されます.そのため,リビ ルドのルールであまり注意していなくても,ACLOCAL_AMFLAGSを定義す べきです.

aclocal -I m4が実行されるとき,要求されているマクロが定義されて いるm4/のあらゆるファイルをm4_includeし, aclocal.m4をビルドします.ローカルに見つからないマクロは, Macro search pathで説明されているシステム全体のディレクトリで検 索されます.

カスタムマクロはconfigure.acと同じ理由で配布すべきです.パッケー ジを動作させたい人は,そのすべてのファイルを持っているようにすべきです. 実際これは,すべてのm4_includeされるファイルが配布されるので, 自動的に配布されます.

しかし,パッケージで使用しているサードパーティーのマクロの配布には一致 している見解はありません.多くのライブラリは,独自のマクロをシステム全 体のaclocalディレクトリ(see Extending aclocal)にインストー ルします.例えば,Guileはコンパイラの設定とGuileを使用する際に適切なリ ンカフラグ定義するために使用することが可能な,マクロGUILE_FLAGS を含んでいるguile.m4と呼ばれるファイルを配布しています. configure.acGUILE_FLAGSを使用することで, aclocalguile.m4aclocal.m4にコピーしますが, guile.m4はプロジェクトの一部ではないので,それは配布していませ ん.技術的には,aclocal.m4をリビルドする必要があるユーザはGuile を最初にインストールする必要があることを意味します.Guileがパッケージ のビルドで必要な場合,これはおそらく問題無いでしょう.しかし,Guileは 単なる追加機能だったり,パッケージをGuileがインストール不可能なマシン で実行する可能性がある場合,この必要条件は開発の邪魔になります.簡単な 解決方法は,そのようなサードパーティーのマクロを,それらも配布されるよ うに,ローカルなm4/ディレクトリにコピーすることです.