2009年4月24日金曜日

portupgradeがダメなときは基本に戻ろうという話。

忘れそうになるのでとりあえずメモ。

FreeBSD portsにある rtorrent を portupgrade で更新しようと思ったのですが、net/xmlrpc-c-devel のコンパイルに失敗しているようで……

cc -o xmlrpc xmlrpc.o srcdir/tools/lib/dumpvalue.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/casprintf.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/cmdline_parser.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/getoptx.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/stripcaseeq.o /usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/util/string_parser.o -Lblddir/src -Lblddir/lib/libutil -lxmlrpc_client -lxmlrpc -lxmlrpc_util -L/usr/local/lib -lwwwxml -lxmltok -lxmlparse -lwwwzip -lwwwssl -lwwwinit -lwwwapp -lwwwhtml -lwwwtelnet -lwwwnews -lwwwhttp -lwwwmime -lwwwgopher -lwwwftp -lwwwfile -lwwwdir -lwwwcache -lwwwstream -lwwwmux -lwwwtrans -lwwwcore -lwwwutils -lmd5 -lz -L/usr/lib -lssl -lcrypto -L/usr/local/lib -lcurl -rpath=/usr/lib:/usr/local/lib -L/usr/local/lib -L/usr/local/lib -lidn -lssh2 -lssl -lcrypto -lz -L/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/expat/xmlparse -lxmlrpc_xmlparse -L/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/lib/expat/xmltok -lxmlrpc_xmltok
/usr/bin/ld: warning: libxmlrpc.so.14, needed by blddir/src/libxmlrpc_client.so, may conflict with libxmlrpc.so.3
blddir/src/libxmlrpc.so: undefined reference to `xmlrpc_XML_GetErrorString'
gmake[2]: *** [xmlrpc] エラー 1
gmake[2]: ディレクトリ `/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/tools/xmlrpc' から出ます
gmake[1]: *** [xmlrpc/all] エラー 2
gmake[1]: ディレクトリ `/usr/ports/net/xmlrpc-c-devel/work/xmlrpc-c-1.18.00/tools' から出ます
gmake: *** [tools/all] エラー 2

こんな感じで止まります。ちなみに構築環境とMakefileのリビジョンは以下の通り。

# uname -mirs
FreeBSD 7.1-RELEASE-p5 i386 GENERIC
# grep '$FreeBSD:' Makefile
# $FreeBSD: ports/net/xmlrpc-c-devel/Makefile,v 1.38 2009/04/10 18:12:05 chinsan Exp $

ログを見てみると、既に入っている過去バージョンの libxmlrpc.so.3 が衝突している様子。(ldの優先順位が悪いんじゃあ…?) portupgrade は upgrade するときに対象をアンインストールせずに build するようです(?)。

で、ちょっと基本に立ち返ってみたら、あっさり解決しました。

# cd net/xmlrpc-c-devel
# make deinstall
(ここで依存しているパッケージの一覧が警告として出ます。)
# make
(今度はエラーなくbuild出来たようです)
# make install

その後、改めて portupgrade -rf rtorrent を実行すると、今度はうまくいきました。

buildするときに過去のパッケージがあると不都合が起きる、というのは意外だったのですが、こういうものなのでしょうか。ちょっと原因がはっきりしないので、エラーとして報告するのもどうかと思い、とりあえず書いておく次第です。