[Momonga-devel.ja:00114] OmoiKondara
- From: "Kikutani, Makoto" <poo@xxxxxxxxxxxxxxxxx>
- Date: Mon, 15 Jul 2002 21:37:12 -0400
pooです。
OmoiKondara に修正を加えたのでメモっておきます。
まず問題の症状。
dictd(英英辞書など用)の最新のspecをPLD Linux(*)からぱちってきました。
PLD Linuxのspecではよく
BuildRoot: /var/tmp/%{name}-%{version}-root-%(id -u -n)
のような記述があります。%(id -u -n) というのが、shellで「id -u -n」
を実行した結果を値として持つもの(しらんかったけどね)。
OmoiKondara の def strip_spec spec では次のようなwhileループがあります
while value =~ /%/
if value =~ /%(\w+)/
m = $1
if macro.assoc(m) != nil
value.gsub! /%#{m}/, macro.assoc(m)[1]
else
macro += [["#{m}", ""]]
end
elsif value =~ /%\{(\w+)\}/
m = $1
if macro.assoc(m) != nil
value.gsub! /%\{#{m}\}/, macro.assoc(m)[1]
else
macro += [["#{m}", ""]]
end
end
end
end
上のBuildRootの定義は % を含んでいるのでこのループに入りますが、
gsub で置換されないので永久ループになります。
そこで以下のように修正。
if value =~ /%\(([^)]+)\)/
shcmd = $1
res = `#{shcmd}`.chomp
value.gsub! /%\(#{shcmd}\)/, res
elsif value =~ /%(\w+)/
(shellでエラったときとか考えてないが)
あと、OmoiKondaraって--helpでオプションが出たりしないので、
それも出るようにしときました。
(*) PLD Linux http://www.pld.org.pl/
ポーランドのdistroなんだけど、rpmfind.net なんかで見てると
すげー数のRPMがありますな。なんかRPM界のDebianかいってかんじ。
ぱちり元としては有益なれど、/etc/init.d/functions でかなり独自な
関数を定義しているので注意が必要。
--
Kikutani, Makoto