| Class | Fortran90Dependency |
| In: |
../script/f90depend.rb
|
| Parent: | Object |
# File ../script/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/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/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/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/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