いけむランド

はてダからやってきました

新しい aclocal でコケる場合の対処

新しい cygwin の autotools だと、古い autotools を使っているソースツリーで autoreconf を実行した場合に以下のエラーが出て、こけることがよくあるように思える。

autoreconf-2.67: Entering directory `.'
autoreconf-2.67: configure.in: not using Gettext
autoreconf-2.67: running: aclocal  --output=aclocal.m4t
aclocal: macro `_LT_DECL_SED' required but not defined
aclocal: macro `_LT_FUNC_STRIPNAME_CNF' required but not defined
autoreconf-2.67: aclocal failed with exit status: 1


きちんと追ったわけではないため、間違えているかもしれないが、autotools は生成されるファイル (aclocal.m4 など) のコメントにある generated by 〜 に記載されているバージョンを見て、内部で呼び出すスクリプトのバージョンをそれに合わせているようである。
おそらく可能な限り想定されているソースツリー側でバージョンで再生成することで、autotools のバージョンの差異による問題をなくそうという配慮であろうが、どうも逆にこれが上記のエラーを引き起こしているようである。

回避するには autotools で生成されるファイルをあらかじめ消しておけばいい。cygport の場合はコンパイル前にその処理を挿入しておくと良い。

修正:src_patch_hook で prep の時点で消しておく方が diff にも出現しなくてより良いと思われる。(2011/02/13)

CYGPORT_USE_UNSTABLE_API=1 # src_patch_hook を使うためのおまじない
src_patch_hook()
{
	cd ${origsrcdir}/${SRC_DIR}
	chmod -R u+w * # permission denied を防ぐ
	rm -f aclocal.m4 configure
	find . -name Makefile.in | xargs rm -f
}