MinGWでw3mビルド (2.1)

寝るって言ったけど。

$ make 2>&1 | ruby parse_make_out.rb
               warning    error
     func.c        432       83
 funcname.c        340      277
functable.c       1545        5

parse_make_outはこんなん。

marks = ['warning', 'error']
counts = Hash.new{|h, k| h[k] = Hash.new(0) }

ARGF.each do |line|
  if /\A([^:]+?):(\d+):\s*(#{Regexp.union(*marks)}):\s*/o =~ line
    counts[$1][$3] += 1
  end
end

keys   = counts.keys.sort
widths = [keys.max_by{|k| k.size }, *marks].map{|x| x.size }
def widths.render(*row)
  row.zip(self).map{|e, w| e.to_s.rjust(w) }.join("    ")
end
puts widths.render('', *marks)
keys.each do |k|
  row = k, *marks.map{|m| counts[k][m] }
  puts widths.render(*row)
end

さてどうしたもんか。