Class Fortran90Dependency
In: ../script/f90/f90depend.rb
Parent: Object

Methods

add_files   del_files   gen_list   new   progress  

Public Class methods

[Source]

    # 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

Public Instance methods

探査するファイルを追加する. 引数 files には Fortran90/95 ファイル名を与える. ファイルが存在しない場合, エラーを返す.

[Source]

    # 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 ファイル名を与える.

[Source]

    # 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

依存関係リストを作成する

[Source]

     # 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 に置き換えられます.

[Source]

     # 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