[Momonga-devel.ja:00114] OmoiKondara


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