#!/usr/bin/env ruby # # $Id: review-checkdep 3748 2007-12-24 07:06:06Z aamine $ # # Copyright (c) 1999-2007 Minero Aoki # # This program is free software. # You can distribute or modify this program under the terms of # the GNU LGPL, Lesser General Public License version 2.1. # For details of the GNU LGPL, see the file "COPYING". # require 'pathname' bindir = Pathname.new(__FILE__).realpath.dirname $LOAD_PATH.unshift((bindir + '../lib').realpath) PREDEF_FILE = 'PREDEF' def main @provided = parse_predefined() @unprovided = {} ARGF.each do |line| case line when /\A\#@require\((.*)\)/ kw = $1 unless @provided.key?(kw) puts "#{location()}: not provided: #{kw}" @unprovided[kw] = location() end when /\A\#@provide\((.*)\)/ provide $1 else line.scan(/@\{(.*?)[,\}]/) do provide $1 end end end end def provide(kw) @provided[kw] ||= location() if @unprovided[kw] reqpos = @unprovided.delete(kw) puts "#{location()}: provided now: #{kw} (#{reqpos})" end end def parse_predefined result = {} File.foreach(PREDEF_FILE) do |line| result[line.strip] = '(predefined)' end result rescue Errno::ENOENT return {} end def location "#{ARGF.filename}:#{ARGF.file.lineno}" end main