#!/usr/bin/env ruby
# -*- ruby -*-

while line = gets
  fields = []

#  line.sub!(/^"/, '')
#  line.sub!(/"$/, '')

  pkgname, curdir, prefix,
    comment, descr_file, maintainer, categories,
    extract_depends, fetch_depends, build_depends, lib_depends,
    run_depends, depends = line.chomp.split('|', -1)

  if depends.nil?
    STDERR.printf "%s: malformed entry: %s", pkgname || '?', line
    next
  end

  fields.push(pkgname, curdir, prefix)

  fields.push(comment)

  if File.file?(descr_file)
    fields.push(descr_file)
  else
    fields.push('/dev/null')
  end

  fields.push(maintainer, categories)

  bdirs = [extract_depends, fetch_depends, build_depends].join(' ').split.map { |i|
    i.split(':')[1]
  }
  rdirs = run_depends.split.map { |i|
    i.split(':')[1]
  }
  mdirs = depends.split.map { |i|
    i.split(':')[0]
  } + lib_depends.split.map { |i|
    i.split(':')[1]
  }
  [bdirs, rdirs, mdirs].each do |dirs|
    dirs.reject! { |d|
      if d && File.directory?(d)
	false
      else
	STDERR.printf "%s:\"%s\" non-existent -- dependency list incomplete\n", pkgname, d
	true
      end
    }
  end

  fields.push((bdirs | mdirs).sort.join(' '))
  fields.push((rdirs | mdirs).sort.join(' '))

  www = ''

  File.open(descr_file) do |f|
    f.each do |line|
      if /^WWW:\s+(\S+)/ =~ line
	www = $1
	break
      end
    end
  end rescue nil

  fields.push(www)

  puts fields.join('|')
end

exit 0
