mattintosh note

Hello Raspberry Pi!

Autotools を prefix 以外の場所にインストールして ACLOCAL_PATH を使う

configure を生成するときに行う autoreconf や autogen.sh を実行した時に「そんなマクロねーよ」と言われる。

ディストリビューションのファイルサイズを減らしたくて autoconf や automake を prefix 以外の場所にインストールしてたら Git ソースの glib と fontconfig がビルドできなくなってしまった。(glib は autogen.sh が AC_DEFINE エラーになり、fontconfig は PKG_PROG_PKG_CONFIG が正しく処理されず pkg-config が見つからない)

例えば、

  • メインのインストール先を /tmp/dest
  • ツールのインストール先を /tmp/tools

とした場合、/tmp/tools/bin/autoreconf は /tmp/tools/share/aclocal を探すので既にインストールされたパッケージのマクロがある /tmp/dest/share/aclocal を探しにいかない。(パッケージによっては ${datadir}/aclocal を探しにいくのかもしれない)

対応策としては ACLOCAL_FLAGS="-I /tmp/dest/share/aclocal" を設定する方法がある。ただ、configure.ac によっては ACLOCAL_FLAGS を使っていないので ACLOCAL_PATH=/tmp/dest/share/aclocal で追加する。

この辺はコンパイラCPATH-I${prefix}/include と同じような感じだと思う。ACLOCAL_PATH はコロン区切りで複数指定できる。

使用する aclocal がデフォルトで検索する ACLOCAL_PATH は以下のように調べることができる。これについては man aclocal ではなく aclocal --helpinfo aclocal に記載されている。

$ /tmp/tools/bin/aclocal --print-ac-dir
/tmp/tools/share/aclocal

ディレクトリの検索順は -I dir で指定したものが最も上位で、次に ACDIR-APIVERSIONACDIR と続く。--print-ac-dir で表示されるのは ACDIR の部分。

ACDIR-APIVERSIONACDIR--system-acdir=prefix で接頭辞を変更できる(-isysroot 相当?)。