rcmdnk's blog

Autotools: A Practioners Guide to GNU Autoconf, Automake, and Libtool

久しぶりにtmuxを試してみようとして、 最新版を使うためにGitのレポジトリからcloneしてきてビルドしようとしたら なかなかうまくいかなかったんですが、問題はローカルでインストールしていた automakeを上手くつかめてないことでした。

Sponsored Links

起こった問題

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
$ git diff  Makefile.am
diff --git a/Makefile.am b/Makefile.am
index 82469e4..04a2120 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,6 +4,8 @@
 bin_PROGRAMS = tmux
 CLEANFILES = tmux.1.mdoc tmux.1.man

+ACLOCAL_AMFLAGS = -I /home/USER/usr/local/share/aclocal
+
 # Distribution tarball options.
 EXTRA_DIST = \
        CHANGES FAQ README TODO COPYING examples compat \

こんな感じで

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する様なパッケージでは同じような問題が起こったら 同じように試してみる価値はあると思います。

Sponsored Links
Sponsored Links

« PythonのArgumentParserでsubparserを使うとparse_known_argsでもunknownな引数が無視できないエラーについて tmuxに慣れてみる: tmuxとGNU screenの違いなど »