次: , 前: Macros, 上: configure


5.7 独自のaclocalマクロを書く

aclocalプログラムには,マクロ組み込みの知識が全く無いので, 独自のマクロでそれを拡張することは容易です.

これは,他のプログラムで使用する独自のAutoconfマクロを,供給したいライ ブラリに対して使用することが可能です.例えばgettextライブラリは, gettextを使用しているあらゆるパッケージで使用されるように, AM_GNU_GETTEXTマクロを提供しています.ライブラリがインストール されるとき,aclocalで見つかるように,このマクロをインストールし ます.

マクロファイルの名前は.m4で終わらせすべきです.そのようなファイ ルは$(datadir)/aclocalにインストールされます.簡単に書くと以下 のようになります.

     aclocaldir = $(datadir)/aclocal
     aclocal_DATA = mymacro.m4 myothermacro.m4

マクロのファイルは,AC_DEFUN (see Macro Definitions)で適切に引用符で囲むべきです. aclocalプログラムはAC_REQUIRE (see Prerequisite Macros)も理解するので,個別のファ イルのそれぞれのマクロに書き込んでも大丈夫です.それぞれのファイルには マクロ定義以外の副作用が無いようにすべきです.特に,AC_PREREQの 呼び出しは,マクロ定義内部にすべきでファイルの最初に書くべきではありま せん.

Automake 1.8から,aclocalは,引用符で囲まれていない AC_DEFUNの呼び出しすべてに警告を発するようになっています.我々 はこれで,人々がうんざりすることを自覚していて,それは aclocalはこれまであまり厳密ではなく,多くのサードパーティー のマクロは引用符で囲まれていないためです.そして我々は,この一時的な不 便さを謝罪しなければなりません.我々が厳密にする必要がある理由は,将来 のaclocal (see Future of aclocal)の実装で,一時的にこれ らすべてのサードパーティーの.m4ファイルを,可能性としては複数回, 不要なものであっても,インクルードする必要があるためです.そうすること で,多少なりとも現在の実装では多くの問題があるのですが,より厳密な形式 をマクロの著者に要求することになります.希望としては,既存のマクロを ちょっと修正して欲しいと思っています.例えば以下のようにします.

     # bad style
     AC_PREREQ(2.57)
     AC_DEFUN(AX_FOOBAR,
     [AC_REQUIRE([AX_SOMETHING])dnl
     AX_FOO
     AX_BAR
     ])

以下のように書き換えるべきです.

     AC_DEFUN([AX_FOOBAR],
     [AC_PREREQ(2.57)dnl
     AC_REQUIRE([AX_SOMETHING])dnl
     AX_FOO
     AX_BAR
     ])

AC_PREREQの呼出をマクロ内にラップすることで,Autoconf 2.57は, AX_FOOBARを実際に使用しない場合は要求しなくなります.最も重要な ことは,AC_DEFUNの最初の引数を引用符で囲むことで,マクロを再定 義したり,二回インクルードすることが可能になります(そうしなければ,こ の最初の引数は二番目の定義の間展開されたままです).

このようなaclocalの診断が示された場合,マクロ実装の管理者で はない場合,マクロの管理者に連絡したいかもしれません.マクロの最新バー ジョンと,そのような報告が以前になされていないことを確認ししてください. 人は,メールの洪水がないときには,すぐにでも仕事をするものです.

aclocalを一般的に使用するもう一つの状況は,パッケージローカ ルのマクロを管理するときです.Local Macrosを参照して下さい.