[[diary/Kojima]]
・ビルドメモ
sed-4.2 の環境で VLC-0.9.9a をビルドしようとすると、
kojima@xeon[/mnt/Srcs/VLC/build]% make
make all-recursive
make[1]: ディレクトリ `/mnt/Srcs/VLC/build' に入ります
Making all in po
make[2]: ディレクトリ `/mnt/Srcs/VLC/build/po' に入ります
make[2]: ディレクトリ `/mnt/Srcs/VLC/build/po' から出ます
Making all in src
make[2]: ディレクトリ `/mnt/Srcs/VLC/build/src' に入ります
rm -f -- "../include/vlc_about.h.tmp"
mkdir -p -- ../include
echo "/* Automatically generated file - DO NOT EDIT */" > "../include/vlc_about.h.tmp"
echo "static const char psz_license[] =" >> "../include/vlc_about.h.tmp"
cat ../COPYING | sed s/'"'/'\\"'/g | gawk '{ print "\""$0"\\n\"" }' >> "../include/vlc_about.h.tmp"
echo ";" >> "../include/vlc_about.h.tmp"
echo "static const char psz_thanks[] =" >> "../include/vlc_about.h.tmp"
grep -v '$Id:' ../THANKS | sed s/'"'/'\\"'/g | gawk '{ print "\""$0"\\n\"" }'|sed s/"<.*.> "// >> "../include/vlc_about.h.tmp"
この最後の行の処理が無限ループになるのか、1時間以上放置していても終了しなかった。
古い 4.1.2 に戻すと
kojima@xeon[/mnt/Srcs/VLC/build]% make
make all-recursive
...
echo "static const char psz_license[] =" >> "../include/vlc_about.h.tmp"
cat ../COPYING | sed s/'"'/'\\"'/g | gawk '{ print "\""$0"\\n\"" }' >> "../include/vlc_about.h.tmp"
echo ";" >> "../include/vlc_about.h.tmp"
echo "static const char psz_thanks[] =" >> "../include/vlc_about.h.tmp"
grep -v '$Id:' ../THANKS | sed s/'"'/'\\"'/g | gawk '{ print "\""$0"\\n\"" }'|sed s/"<.*.> "// >> "../include/vlc_about.h.tmp"
echo ";" >> "../include/vlc_about.h.tmp"
echo "static const char psz_authors[] =" >> "../include/vlc_about.h.tmp"
grep N: ../AUTHORS | cut -d" " -f 2- | sed s/'"'/'\\"'/g | gawk '{ print "\""$0"\\n\"" }' >> "../include/vlc_about.h.tmp"
echo ";" >> "../include/vlc_about.h.tmp"
mv -f -- "../include/vlc_about.h.tmp" "../include/vlc_about.h"
make all-recursive
make[3]: ディレクトリ `/mnt/Srcs/VLC/build/src' に入ります
Making all in .
make[4]: ディレクトリ `/mnt/Srcs/VLC/build/src' に入ります
/bin/sh ../libtool --tag=CC --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -I../include -I../include -DSYS_LINUX
...
と一瞬で処理が進むので、どうやら sed-4.2 の問題らしい。
気になるので、処理しているデータファイルを調べたら、151行めで無限ループになっているらしい。
Julien Plissonneau Duqu醇Qne - JACK audio input module 
パッと見は特に問題なさそうなんだけど、行末に文字化けのせいかエスケープシークエンス風のコードが紛れ込んで、
LANG を ja_JP.eucJP にしているとエスケープシークエンスの終了を待つような状態になってしまう模様。
% od -cd bad-data
0000000 J u l i e n P l i s s o n n e
30026 26988 28261 20512 26988 29555 28271 25966
0000020 a u D u q u 033 , A h 033 ( B n e
30049 17440 29045 7029 16684 7016 16936 25966
0000040 - J A C K a u d i o i n
11552 18976 17217 8267 30049 26980 8303 28265
0000060 p u t m o d u l e 033 , A 033 (
30064 8308 28525 30052 25964 11291 8257 10267
0000100 B \n \n
2626 10
0000103
LANG を C にしてやれば sed-4.2 でも問題なく通ったので、locale まわりの問題っぽいけど、
最近では ja_JP.eucJP な locale でのバグなんて直す人いるかなぁ。。
-6/28日付でsed-4.2.1がリリースされているようですが? -- [[名倉]] &new{2009-06-29 (月) 21:35:43};
-あれ?
sed-4.1.2,sed-4.2,sed-4.2.1のそれぞれで試してみたけど,無限ループにならなかったです。試し方が悪かったかな。
試した内容:bad-dataをTHANKSにリネームして,無限ループになる最後の行を実行。 -- [[tamu]] &new{2009-06-30 (火) 12:14:45};
-そういえばvlc-0.9.9ってhttp://secunia.com/advisories/35558/2/がありましたね。 -- [[名倉]] &new{2009-06-30 (火) 15:12:57};
-これは cut & paste すると化け方が変わる類のデータだと思うので、試すなら元の vlc-0.9.9a 付属の THANKS ファイルを使う方がいいでせう -- [[kojima]] &new{2009-06-30 (火) 15:34:54};
-vlc-0.9.9aを解凍しvlc-0.9.9a/srcに入ってechoから始まるスクリプトをcut & pasteして流してみたら一瞬にして終わりました。まあgcc-4.4.0,glibc-2.10.1,bash-4.0.24な怪しい環境ですが。 -- [[名倉]] &new{2009-07-01 (水) 11:11:42};
#comment