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 でのバグなんて直す人いるかなぁ。。

sed-4.1.2,sed-4.2,sed-4.2.1のそれぞれで試してみたけど,無限ループにならなかったです。試し方が悪かったかな。

試した内容:bad-dataをTHANKSにリネームして,無限ループになる最後の行を実行。 -- tamu 2009-06-30 (火) 12:14:45



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:41