[[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&#160;

パッと見は特に問題なさそうなんだけど、行末に文字化けのせいかエスケープシークエンス風のコードが紛れ込んで、
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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS