久しぶりにtmuxを試してみようとして、 最新版を使うためにGitのレポジトリからcloneしてきてビルドしようとしたら なかなかうまくいかなかったんですが、問題はローカルでインストールしていた automakeを上手くつかめてないことでした。
起こった問題
tmuxは現在1.9aが配布されていますが、 開発版として、2.0がGitのレポジトリから直接取ってこれます。
$ git clone git://git.code.sf.net/p/tmux/tmux-code tmux
これをビルドするためにautogen.shしてみると
$ cd tmux
$ ./autogen.sh
configure.ac:19: installing 'etc/compile'
configure.ac:11: installing 'etc/config.guess'
configure.ac:11: installing 'etc/config.sub'
configure.ac:9: installing 'etc/install-sh'
configure.ac:9: installing 'etc/missing'
Makefile.am: installing 'etc/depcomp'
configure.ac:125: error: possibly undefined macro: AC_SEARCH_LIBS
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /home/USER/usr/local/stow/autoconf-2.69/bin/autoconf failed with exit status: 1
autoreconf failed
$
と出ます。 メッセージに出てる通り、autoconfは自分でビルドしてローカルに入れてあります。
autoconf含めて以下の様なものがローカルインストール(他にもありますが取り敢えず関連してそうなもの)。
- autoconf-2.69
- automake-1.14
- pkg-config-0.28
- libevent-2.0.21
autoconfやautomake等は現時点でも最新版。
メッセージでundefined
とかなってますが、インストールされてるautoconfの中を
見てみると定義が在るようにも見えます。
取り敢えず、このままもう一回autogen.shしてみると
$ ./autogen.sh
$
と、何も無く成功してしまいます(configureファイルとかできてるので取り敢えず無視されてしまう感じ)。
そのままconfigureまでしてみると
$ CPPFLAGS="-I/home/USER/usr/local/include" LDFLAGS="-L/home/USER/usr/local/lib" ./configure --prefix=/home/USER/usr/local/stow/tmux-2.0
...
checking for cfmakeraw... yes
checking for library containing clock_gettime... -lrt
./configure: line 4639: syntax error near unexpected token `newline'
./configure: line 4639: `PKG_CHECK_MODULES('
となってやっぱりダメ。
このPKG_CHECK_MODULES
とかは
/home/USER/usr/local/share/aclocal/pkg.m4
の中で定義されてます。 確認してみるとやはり定義されてる様に見えます。
上でやってるみたいにCPPFLAGSとか指定してみてもどうも上手く行きません。
解決法
違うパッケージのビルド時の問題ですが、下にある方法を行ったら上手く行きました。
PKG_CHECK_MODULES USB unexpected token · Issue #83 · texane/stlink
やったことは、./autogen.sh
する前にMakefile.amと言うファイルの先頭の方に、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
こんな感じで
ACLOCAL_AMFLAGS = -I /home/USER/usr/local/share/aclocal
を追加します。
これでaclocal
の位置を教えて上げると、
autogen.sh
でもconfigure
でも(さらにmake
も)エラー無く行くことが
出来ました。
ちなみに、autogen.sh
をやり直す際に、
$ rm configure
$ rm -rf autom4te.cache
をしてからやり直しています。 (よくわからなくなったら一度消してもう一度cloneしてきてからやった方が良いかと。)
上の例もtmuxとは違うものでのトラブルなので、
./autogen.sh
する様なパッケージでは同じような問題が起こったら
同じように試してみる価値はあると思います。