#!/usr/local/bin/ruby
#
# mkrefe_rubysrc
#
# Copyright (c) 2003 Minero Aoki <aamine@loveruby.net>
#
# This program is free software.
# You can distribute/modify this program under the terms of
# the GNU Lesser General Public License version 2 or later.
#

require 'refe/database'
require 'refe/rubysrcparser'
require 'refe/mygetopt'
require 'refe/info'


getopt = MyGetoptLong.new(<<EndUsage, <<EndOptions)
Usage: mkrefe_rubysrc [-d <dir>] <filename>

%%options%%

EndUsage

  o -d --databasedir  <dir>  Use <dir> as the database root directory.
  o -  --version      -      Print program version and quit.
  o -h --help         -      Print this message and quit.

EndOptions


opts = {}
begin
  getopt.each do |name, arg|
    opts[name] = arg
  end
rescue => err
  getopt.usage 1, err.message
end
getopt.usage(0) if opts['--help']
if opts['--version']
  puts "mkrefe_extrefm version #{ReFe::Version}"
  exit 0
end
getopt.usage(1, 'too many argument') unless ARGV.size == 1


table = ReFe::Database.new(opts['--databasedir'], true).function_source
parser = ReFe::RubySourceCodeParser.new
srcdir = ARGV[0]
unless File.directory?(srcdir)
  $stderr.puts "not directory: #{srcdir}"
  exit 1
end
Dir.glob(srcdir + '/*.[cyh]').each do |fname|
  begin
    File.open(fname) {|f|
        parser.parse(f).each do |name, (header, body, lineno)|
          table[name] = "#{File.basename(fname)}:#{lineno}\n" + header + body
        end
    }
  rescue => err
    raise if $DEBUG
    $stderr.puts "#{fname}: #{err.message} (#{err.class})"
    exit 1
  end
end
table.flush
