次: Local Macros, 前: Macros, 上: configure
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を参照して下さい.