Class | Fortran90Dependency |
In: |
../script/f90/f90depend.rb
|
Parent: | Object |
# File ../script/f90/f90depend.rb, line 20 20: def initialize(quiet=nil, verbose=nil, strictly=nil) 21: @entries = [] 22: @quiet = quiet 23: @verbose = verbose 24: @strictly = strictly 25: @progress = $stderr unless quiet 26: end
探査するファイルを追加する. 引数 files には Fortran90/95 ファイル名を与える. ファイルが存在しない場合, エラーを返す.
# File ../script/f90/f90depend.rb, line 33 33: def add_files(*files) 34: files.flatten! 35: if @strictly 36: progress "\n ** ATTENTION ** Strictly parsing might take a long time. \n" 37: end 38: progress " Adding " 39: files.each{|file| 40: progress "\n #{file}", '.' 41: entry = Fortran90DependencyEntry.new(file, @strictly) 42: progress "\n Main Program: ", '' 43: if entry.mainprogram 44: progress " exist", '' 45: else 46: progress " none", '' 47: end 48: progress "\n Modules: ", '' 49: entry.modules.each{ |m| 50: progress "\n #{m}", '' 51: } 52: progress "\n Uses: ", '' 53: entry.uses.each{ |u| 54: progress "\n #{u}", '' 55: } 56: @entries << entry if entry.modules 57: } 58: progress "\n" 59: @entries 60: end
探査するファイルリストから, ファイルを削除する. 引数 files には Fortran90/95 ファイル名を与える.
# File ../script/f90/f90depend.rb, line 66 66: def del_files(*files) 67: files.flatten! 68: progress " Deleting " 69: files.each{|file| 70: @entries.collect!{|entry| 71: if File.expand_path(file) == File.expand_path(entry.file) 72: progress "\n #{file}", '.' 73: next nil 74: else 75: next entry 76: end 77: } 78: @entries.delete_if{|entry| !entry } 79: } 80: progress "\n" 81: @entries 82: end
依存関係リストを作成する
# File ../script/f90/f90depend.rb, line 87 87: def gen_list 88: dep_list = [] 89: exec_dep_hash = {} 90: progress " Generating " 91: @entries.each{|entry| 92: progress "." 93: dep_line = entry.file.sub(/\.f9(0|5)$/i, '.o') + ': ' 94: entry.uses.each{|use_item| 95: @entries.each{|checked_entry| 96: if checked_entry.modules.include?(use_item) 97: dep_line << checked_entry.file.sub(/\.f9(0|5)$/i, '.o') + ' ' 98: break 99: end 100: } 101: } 102: dep_list << dep_line 103: if entry.mainprogram 104: mainfile = dep_line.sub(/(.*?)\.o:.*/, '\\1') 105: exec_dep_hash[mainfile] = dep_line.sub(/.*?: /, '').split(' ') 106: end 107: } 108: exec_dep_list = [] 109: exec_dep_hash.each{|main, dep_array| 110: exec_dep_obs = dep_array 111: dep_array.each{ |edo| 112: dep_list.each{ |dl| 113: if edo == dl.sub(/:.*/, '') 114: exec_dep_obs << dl.sub(/.*?: /, '').split(' ') 115: exec_dep_obs.flatten! 116: exec_dep_obs.uniq! 117: end 118: } 119: } 120: exec_dep_list << main + ": " + exec_dep_obs.join(' ') 121: } 122: progress "\n" 123: (dep_list + exec_dep_list).join("\n") 124: end
引数 char に与えられたメッセージを表示する. @quiet が true の場合は何も表示しない. 第 2 引数 clipto に String クラスが与えられ, 且つ @varbose が true ではない場合, char に与えられた文字列は clipto に置き換えられます.
# File ../script/f90/f90depend.rb, line 135 135: def progress(char, clipto=nil) 136: unless @quiet 137: char = clipto if clipto && !(@verbose) && clipto.class.to_s == 'String' 138: @progress.print(char) 139: @progress.flush 140: end 141: end