2007年7月28日土曜日

(FreeBSD) portsでwireshark-0.99.6がmakeできない ~ `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません. 中止.

しばらく前から、portupgradeでwiresharkをアップデートしようとしても、途中でエラーが出てアップデートできてなかったんですが、いづれportsが直るだろうと放置してました。だけど、wiresharkの0.99.5にはセキュリティアドバイザリが出てるぞと、portauditが毎日報告してくるので、やっぱりアップデートしなくちゃいけないかな、っと。



で、ふと気がつけば、いくつかあるFreeBSDマシンの中で、portupgradeで、0.99.6へアップデートできたマシンと、できなかったマシンがある。



・・・どうも、FreeBSD 5-STABLEのマシンだけ、makeの途中でエラーになっているっぽい感じがします。こんなエラーがでてます。



    then mv -f ".deps/libwireshark_la-xmlstub.Tpo" ".deps/libwireshark_la-xmlstub.Plo"; else rm -f ".deps/libwireshark_la-xmlstub.Tpo"; exit 1; fi
cc -DHAVE_CONFIG_H -I. -I. -I.. -I./.. -I./../tools/lemon -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/lib/include -DINET6 -O -pipe -Dfreebsd5 -DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.8/BSDPAN -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/local/lib/perl5/5.8.8/mach/CORE -I. -I/usr/local/include -I/usr/include -DINET6 "-D_U_=__attribute__((unused))" -O -pipe -funit-at-a-time -Wall -W -Wdeclaration-after-statement -Wendif-labels -Wpointer-arith -I/usr/local/include -D_THREAD_SAFE -D_REENTRANT -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include/freetype2 -I/usr/local/lib/include -DINET6 -O -pipe -Dfreebsd5 -DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.8/BSDPAN -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/local/lib/perl5/5.8.8/mach/CORE -I. -I/usr/local/include -I/usr/include -MT libwireshark_la-xmlstub.lo -MD -MP -MF .deps/libwireshark_la-xmlstub.Tpo -c xmlstub.c  -fPIC -DPIC -o .libs/libwireshark_la-xmlstub.o
gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.








portupgrade wiresharkが始まった最初のころ、configure実行時のメッセージにヒントが?!





--->  Upgrading 'wireshark-0.99.5_3' to 'wireshark-0.99.6' (net/wireshark)
--->  Building '/usr/ports/net/wireshark'
===>  Cleaning for wireshark-0.99.6
===>  Found saved configuration for wireshark-0.99.4
===>  Extracting for wireshark-0.99.6
=> MD5 Checksum OK for wireshark-0.99.6.tar.bz2.
=> SHA256 Checksum OK for wireshark-0.99.6.tar.bz2.



  途中省略



checking for inet_aton... yes
checking for library containing inet_pton... none required
checking for broken inet_pton... broken



  以下省略


inet_ptonがbrokenだそうです。configureでやってるテスト内容をのぞいてみると、IPv6関係かな?と思ったのですが、よくわかんないから、まあいいことにします。
brokenなら、wiresharkが自前で用意しているinet_ptonがコンパイル、リンクされるっぽいです。



なお、FreeBSD 6-STABLEや、7-CURRENTの場合は、



checking for broken inet_pton... ok



となるみたいで、そのせいかビルドも成功しているみたい。





というわけで、OSが用意してくれているinet_ptonがbrokenらしいので、自前のinet_ptonを使うみたいなんですが、



gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.



となるように、なんかうまくいってないみたいです。



Makefileを見ても、すぐにはよくわかんなかったのですが、なんとなく思いつきで、portsで実際にコンパイル作業を行うディレクトリへ移動し、手でgmakeコマンドをたたいてみると、うまくできちゃいました。



# cd ...SOMEWHERE.../ports/net/wireshark/work/wireshark-0.99.6/
# gmake inet_pton.o
# gmake inet_pton.lo



これでうまくいくかと思えば、やっぱりだめ。
よーくログメッセージを見てみると



gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.
gmake[3]: ディレクトリ `...SOMEWHERE.../ports/net/wireshark/work/wireshark-0.99.6/epan' から出ます



ああ、ディレクトリが違う。epanという1レベル違うところでエラーがでてました。



というわけで、こんな具合にシンボリックリンクをはってやったところ、正常にビルドできました。



# cd epan
# ln -s ../inet_pton.lo
# ln -s ../inet_pton.o
# cd .libs/
# ln -s ../../.libs/inet_pton.o .



なぜこういう状況になってしまうのか、時間がなくて調べられなかったんですが、まあ、うまくいってしまった、ってことで。



0 件のコメント:

コメントを投稿