From d464704f111d211c1f1ff9ef23ef1d755054be00 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 15 Aug 2007 19:08:43 +0000 Subject: add tag v1_8_5_54 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_54@12952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_5/ext/tk/lib/tkextlib/pkg_checker.rb | 184 ++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100755 ruby_1_8_5/ext/tk/lib/tkextlib/pkg_checker.rb (limited to 'ruby_1_8_5/ext/tk/lib/tkextlib/pkg_checker.rb') diff --git a/ruby_1_8_5/ext/tk/lib/tkextlib/pkg_checker.rb b/ruby_1_8_5/ext/tk/lib/tkextlib/pkg_checker.rb new file mode 100755 index 0000000000..5002ed7ff8 --- /dev/null +++ b/ruby_1_8_5/ext/tk/lib/tkextlib/pkg_checker.rb @@ -0,0 +1,184 @@ +#!/usr/bin/env ruby +# +# Ruby/Tk extension library checker +# +# by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) +# +require 'tk' + +TkRoot.new.withdraw # hide root window + +name = File.basename(__FILE__) + +add_path = false +verbose = false + +def help_msg + print "Usage: #{$0} [-l] [-v] [-h] [--] [dir]\n" + print "\tIf dir is omitted, check the directry that this command exists.\n" + print "\tAvailable options are \n" + print "\t -l : Add dir to $LOAD_PATH\n" + print "\t (If dir == '/tkextlib', add also.)\n" + print "\t -v : Verbose mode (show reason of fail)\n" + print "\t -h : Show this message\n" + print "\t -- : End of options\n" +end + +while(ARGV[0] && ARGV[0][0] == ?-) + case ARGV[0] + when '--' + ARGV.shift + break; + when '-l' + ARGV.shift + add_path = true + when '-v' + ARGV.shift + verbose = true + when '-h' + help_msg + exit(0) + else + print "Argument Error!! : unknown option '#{ARGV[0]}'\n" + help_msg + exit(1) + end +end + +if ARGV[0] + dir = File.expand_path(ARGV[0]) +else + dir = File.dirname(File.expand_path(__FILE__)) +end + +if add_path + $LOAD_PATH.unshift(dir) + if File.basename(dir) == 'tkextlib' + $LOAD_PATH.unshift(File.dirname(dir)) + end +end + +print "\nRuby/Tk extension library checker\n" +print "( Note:: This check is very simple one. Shown status may be wrong. )\n" +print "\n check directory :: #{dir}" +print "\n $LOAD_PATH :: #{$LOAD_PATH.inspect}\n" + +def get_pkg_list(file) + pkg_list = [] + + File.foreach(file){|l| + if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)TkPackage\s*\.\s*require\s*\(?\s*(["'])((\w|:)+)\1/ + pkg = [$2, :package] + pkg_list << pkg unless pkg_list.member?(pkg) + end + if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)Tk\s*\.\s*load_tcllibrary\s*\(?\s*(["'])((\w|:)+)\1/ + pkg = [$2, :library] + pkg_list << pkg unless pkg_list.member?(pkg) + end + if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)Tk\s*\.\s*load_tclscript\s*\(?\s*(["'])((\w|:)+)\1/ + pkg = [$2, :script] + pkg_list << pkg unless pkg_list.member?(pkg) + end + if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)require\s*\(?\s*(["'])((\w|\/|:)+)\1/ + pkg = [$2, :require_ruby_lib] + pkg_list << pkg unless pkg_list.member?(pkg) + end + } + + pkg_list +end + +def check_pkg(file, verbose=false) + pkg_list = get_pkg_list(file) + + error_list = [] + success_list = {} + + pkg_list.each{|name, type| + next if success_list[name] + + begin + case type + when :package + ver = TkPackage.require(name) + success_list[name] = ver + error_list.delete_if{|n, t| n == name} + + when :library + Tk.load_tcllibrary(name) + success_list[name] = :library + error_list.delete_if{|n, t| n == name} + + when :script + Tk.load_tclscript(name) + success_list[name] = :script + error_list.delete_if{|n, t| n == name} + + when :require_ruby_lib + require name + + end + rescue => e + if verbose + error_list << [name, type, e.message] + else + error_list << [name, type] + end + end + } + + success_list.dup.each{|name, ver| + unless ver.kind_of?(String) + begin + ver = TkPackage.require(name) + sccess_list[name] = ver + rescue + end + end + } + + [success_list, error_list] +end + +def subdir_check(dir, verbose=false) + Dir.foreach(dir){|f| + next if f == '.' || f == '..' + if File.directory?(f) + subdir_check(File.join(dir, f)) + elsif File.extname(f) == '.rb' + path = File.join(dir, f) + suc, err = check_pkg(path, verbose) + if err.empty? + print 'Ready : ', path, ' : require->', suc.inspect, "\n" + else + print '*LACK : ', path, ' : require->', suc.inspect, + ' FAIL->', err.inspect, "\n" + end + end + } +end + +Dir.chdir(dir) + +(Dir['*.rb'] - ['setup.rb', name]).each{|f| + subdir = File.basename(f, '.*') +=begin + begin + # read 'setup.rb' as if the library has standard structure + require File.join(subdir, 'setup.rb') + rescue LoadError + # ignore error + end +=end + print "\n" + + suc, err = check_pkg(f, verbose) + if err.empty? + print 'Ready : ', f, ' : require->', suc.inspect, "\n" + else + print '*LACK : ', f, ' : require->', suc.inspect, + ' FAIL->', err.inspect, "\n" + end + + subdir_check(subdir, verbose) if File.directory?(subdir) +} -- cgit v1.2.3