fortran 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 54f7278f378508a10c2f262ffd521a26fdfb2b48
4
+ data.tar.gz: 6807383ca0ee2b4009dc9207d68d4a989f45624b
5
+ SHA512:
6
+ metadata.gz: 7d9e6c71695aaf2f562b3645a4234684685580866f2df3fdc012598c68d5e8412852b3f52dd2dc60959aa98ec10242c5fef7cf188e4229b63220b606a642bfdb
7
+ data.tar.gz: bbbf71a09306c1ec89e66434d4335c3dd23713c2a7304870d5bde9ea5043eb7a3e1556583b97201a56c5631ffc96624984a9bf4302af2dffb8ffc6194dfdaeae
@@ -1,3 +1,13 @@
1
+ == 1.1.0 / 2016-02-05
2
+
3
+ * 1 minor enhancement
4
+ * make included files available for possible dependencies
5
+
6
+ == 1.1.0 / 2016-01-15
7
+
8
+ * 1 minor enhancement
9
+ * parse included (inlined) files for module use statments
10
+
1
11
  == 1.1.0 / 2009-10-28
2
12
 
3
13
  * 1 minor enhancement
@@ -1,7 +1,7 @@
1
- History.txt
1
+ History.rdoc
2
2
  License.txt
3
3
  Manifest.txt
4
- README.txt
4
+ README.rdoc
5
5
  Rakefile
6
6
  lib/fortran.rb
7
7
  test/test_fortran.rb
@@ -1,25 +1,25 @@
1
- fortran
1
+ = fortran
2
2
 
3
- * http://nasarb.rubyforge.org/fortran
4
- * http://rubyforge.org/projects/nasarb
5
- * mailto:Bil.Kleb@nasa.gov
3
+ home :: https://rubygems.org/gems/fortran
4
+ code :: https://github.com/kleb/nasarb/tree/master/fortran
5
+ bugs :: https://github.com/kleb/nasarb/issues
6
+ rdoc :: http://www.rubydoc.info/gems/fortran
6
7
 
7
8
  == DESCRIPTION:
8
9
 
9
- Fortran 90/95/2003 utilities.
10
+ Fortran utilities.
10
11
 
11
12
  Currently, only provides Fortran 90/95/2003 dependencies.
12
13
 
13
14
  == SYNOPSIS:
14
15
 
15
- require 'rubygems'
16
16
  require 'fortran'
17
17
 
18
18
  Fortran::Dependencies.new( 'main.f90' ).dependencies
19
19
 
20
20
  == REQUIREMENTS:
21
21
 
22
- * Ruby with Rubygems
22
+ * Ruby
23
23
 
24
24
  == INSTALL:
25
25
 
data/Rakefile CHANGED
@@ -1,20 +1,13 @@
1
1
  # -*- ruby -*-
2
2
 
3
- require 'rubygems'
4
3
  require 'hoe'
5
4
 
6
- require './lib/fortran'
7
-
8
- Hoe.new( 'fortran', Fortran::VERSION ) do |p|
9
- p.rubyforge_name = 'nasarb'
5
+ Hoe.spec 'fortran' do |p|
6
+ p.group_name = 'nasarb'
10
7
  p.remote_rdoc_dir = 'fortran'
11
8
  p.author = ['Bil Kleb', 'Mike Park', 'Bill Wood']
12
9
  p.email = 'Bil.Kleb@NASA.gov'
13
- p.url = p.paragraphs_of( 'README.txt', 1 ).to_s.gsub(/^\* /, '').split(/\n/)
14
- p.summary = p.paragraphs_of( 'README.txt', 3 ).to_s
15
- p.description = p.paragraphs_of( 'README.txt', 3..4 ).join("\n\n")
16
- p.changes = p.paragraphs_of( 'History.txt', 0..1 ).join("\n\n")
17
- p.rsync_args = '-rpv --delete' # to preserve group permissions
10
+ p.licenses = ['NASA-1.3']
18
11
  end
19
12
 
20
13
  # vim: syntax=Ruby
@@ -3,7 +3,7 @@ module Fortran
3
3
  ##
4
4
  # This version of Fortran library
5
5
 
6
- VERSION = '1.1.0'
6
+ VERSION = '1.3.0'
7
7
 
8
8
  ##
9
9
  # Find Fortran dependencies
@@ -17,34 +17,43 @@ module Fortran
17
17
 
18
18
  USE_MODULE_REGEX = /^\s*use\s+(\w+)/i
19
19
  MODULE_DEF_REGEX = /^\s*module\s+(\w+)/i
20
+ MODULE_INCLUDE_REGEX = /\s*include\s+('|")(\w+\.(f|F)90)('|")/i
20
21
 
21
22
  FILE_EXTENSION = /\.f90$/i
22
23
 
23
- attr_reader :file_dependencies, :source_files
24
+ attr_reader :file_dependencies, :source_files, :inlined_dependencies
24
25
 
25
26
  def initialize( config=OPTIONS )
26
27
  @config = config
27
28
  OPTIONS.each{ |opt,default| @config[opt] = default unless @config.has_key? opt }
28
29
  @parsed, @file_dependencies, @source_files = [], {}, []
30
+ @inlined_dependencies = {}
29
31
  @hash = build_hash_of_modules_in_files
32
+ @included_files = build_hash_of_non_module_files
30
33
  self
31
34
  end
32
35
 
33
36
  def modules_used_in( file )
34
- modules = IO.readlines( file ).map do |line|
37
+ IO.readlines( file ).map do |line|
35
38
  $1.downcase if line.match USE_MODULE_REGEX
36
39
  end.uniq.compact
37
40
  end
38
41
 
39
42
  def modules_defined_in( file )
40
- modules = IO.readlines( file ).map do |line|
43
+ IO.readlines( file ).map do |line|
41
44
  $1.downcase if line.match MODULE_DEF_REGEX
42
45
  end.uniq.compact
43
46
  end
44
47
 
45
- def build_dictionary_of_modules( files )
48
+ def files_included_in( file )
49
+ IO.readlines( file ).map do |line|
50
+ $2 if line.match MODULE_INCLUDE_REGEX
51
+ end.uniq.compact
52
+ end
53
+
54
+ def build_dictionary_of_modules( array_of_file_names )
46
55
  file_containing_module = {}
47
- files.each do |file|
56
+ array_of_file_names.each do |file|
48
57
  modules_defined_in( file ).each{ |mod| file_containing_module[mod]=file }
49
58
  end
50
59
  file_containing_module
@@ -58,10 +67,40 @@ module Fortran
58
67
  source.map!{ |file| file.sub(/^\.\//,'') }# strip leading ./
59
68
  end
60
69
 
70
+ def build_hash_of_non_module_files
71
+ files = find_fortran_files
72
+ included_files = {}
73
+ files.each do |file|
74
+ unless file_is_module?(file)
75
+ included_files[File.basename(file)] = file
76
+ end
77
+ end
78
+ included_files
79
+ end
80
+
81
+ def file_is_module?(file)
82
+ IO.readlines( file ).map do |line|
83
+ return true if line.match MODULE_DEF_REGEX
84
+ end
85
+ return false
86
+ end
87
+
61
88
  def build_hash_of_modules_in_files
62
89
  build_dictionary_of_modules find_fortran_files
63
90
  end
64
91
 
92
+ def modules_in_included_files( file )
93
+ files_included_in( file ).map do |included_file|
94
+ modules_used_in(@included_files[included_file])
95
+ end.flatten.uniq.compact
96
+ end
97
+
98
+ def included_files_in_module( file )
99
+ files_included_in( file ).map do |included_file|
100
+ @included_files[included_file]
101
+ end.flatten.uniq.compact
102
+ end
103
+
65
104
  def makefile_dependency_line( source )
66
105
  real_source = source.sub(/PHYSICS_DUMMY/,'PHYSICS_MODULES')# FIXME: What's this?!
67
106
  source_no_path = File.basename source
@@ -96,14 +135,18 @@ module Fortran
96
135
  next if @parsed.include?(file)
97
136
  @parsed.push file
98
137
  dependencies file
99
- end.to_s
138
+ end.join
100
139
  end
101
140
 
102
141
  def source_file_dependencies( head_f90 )
103
142
  modules_head_uses = modules_used_in( head_f90 )
143
+ modules_head_uses += modules_in_included_files( head_f90 )
104
144
  required_f90s = modules_head_uses.map{ |mod| @hash[mod] }.compact
105
145
  required_f90s.delete_if{ |f| f == head_f90 }
146
+ required_inlined = included_files_in_module( head_f90 )
147
+ required_inlined.delete_if{ |f| f == head_f90 }
106
148
  @file_dependencies[head_f90] = required_f90s
149
+ @inlined_dependencies[head_f90] = required_inlined
107
150
  required_f90s.each do |required_f90|
108
151
  next if @parsed.include?(required_f90)
109
152
  source_file_dependencies( required_f90 )
@@ -50,7 +50,7 @@ class TestFortran < Test::Unit::TestCase
50
50
 
51
51
  def test_create_module_definition_hash
52
52
  assert_equal %w[circle rectangle_fun3d],
53
- @dep.build_dictionary_of_modules( 'shapes.f90' ).keys.sort
53
+ @dep.build_dictionary_of_modules( ['shapes.f90'] ).keys.sort
54
54
  end
55
55
 
56
56
  def test_locating_all_fortran_files_in_search_path
@@ -170,17 +170,4 @@ shapes.o: shapes.f90 \\
170
170
  assert_equal [file], @dep.required_source_files(file).sort
171
171
  end
172
172
 
173
- def test_two_modules_in_a_single_source_file_uses
174
- begin
175
- File.open('two_modules.f90','w') do |f|
176
- f.puts "module one\nend module one\nmodule two\n use one\nend module two"
177
- end
178
- dep = Fortran::Dependencies.new
179
- assert_equal %w[one], dep.modules_used_in( 'two_modules.f90' )
180
- dep.source_file_dependencies 'two_modules.f90'
181
- ensure
182
- FileUtils.rm 'two_modules.f90'
183
- end
184
- end
185
-
186
173
  end
metadata CHANGED
@@ -1,75 +1,89 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fortran
3
- version: !ruby/object:Gem::Version
4
- version: 1.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Bil Kleb
8
8
  - Mike Park
9
9
  - Bill Wood
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
-
14
- date: 2009-11-01 01:00:00 -04:00
15
- default_executable:
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
13
+ date: 2016-02-05 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rdoc
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '4.0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: '4.0'
29
+ - !ruby/object:Gem::Dependency
18
30
  name: hoe
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: '3.14'
19
36
  type: :development
20
- version_requirement:
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: 2.3.3
26
- version:
27
- description: Fortran 90/95/2003 utilities. Currently, only provides Fortran 90/95/2003 dependencies.
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ version: '3.14'
43
+ description: |-
44
+ Fortran utilities.
45
+
46
+ Currently, only provides Fortran 90/95/2003 dependencies.
28
47
  email: Bil.Kleb@NASA.gov
29
48
  executables: []
30
-
31
49
  extensions: []
32
-
33
- extra_rdoc_files:
34
- - History.txt
50
+ extra_rdoc_files:
51
+ - History.rdoc
35
52
  - License.txt
36
53
  - Manifest.txt
37
- - README.txt
38
- files:
39
- - History.txt
54
+ - README.rdoc
55
+ files:
56
+ - History.rdoc
40
57
  - License.txt
41
58
  - Manifest.txt
42
- - README.txt
59
+ - README.rdoc
43
60
  - Rakefile
44
61
  - lib/fortran.rb
45
62
  - test/test_fortran.rb
46
- has_rdoc: true
47
- homepage: http://nasarb.rubyforge.org/fortran
63
+ homepage: https://rubygems.org/gems/fortran
64
+ licenses:
65
+ - NASA-1.3
66
+ metadata: {}
48
67
  post_install_message:
49
- rdoc_options:
68
+ rdoc_options:
50
69
  - --main
51
- - README.txt
52
- require_paths:
70
+ - README.rdoc
71
+ require_paths:
53
72
  - lib
54
- required_ruby_version: !ruby/object:Gem::Requirement
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- version: "0"
59
- version:
60
- required_rubygems_version: !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: "0"
65
- version:
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
66
83
  requirements: []
67
-
68
- rubyforge_project: nasarb
69
- rubygems_version: 1.3.1
84
+ rubyforge_project:
85
+ rubygems_version: 2.4.8
70
86
  signing_key:
71
- specification_version: 2
72
- summary: Fortran 90/95/2003 utilities.
73
- test_files:
74
- - test/lakos/test_analyze_dependencies.rb
75
- - test/test_fortran.rb
87
+ specification_version: 4
88
+ summary: Fortran utilities
89
+ test_files: []
@@ -1,35 +0,0 @@
1
- require 'test/unit'
2
- require 'lakos/analyze_dependencies'
3
- require 'fileutils'
4
-
5
- class TestAnalyzeDependencies < Test::Unit::TestCase
6
-
7
- def setup
8
- FileUtils.rm_rf 'AD_fixtures'
9
- Dir.mkdir 'AD_fixtures'
10
- Dir.chdir 'AD_fixtures'
11
- File.open('m.f90','w'){|f| f.puts "program m\nuse a\nuse b\nuse d\nuse f" }
12
- File.open('a.f90','w'){|f| f.puts "module a" }
13
- File.open('b.f90','w'){|f| f.puts "module b\nuse c\nuse d\nuse e" }
14
- File.open('c.f90','w'){|f| f.puts "module c" }
15
- File.open('d.f90','w'){|f| f.puts "module d" }
16
- File.open('e.f90','w'){|f| f.puts "module e" }
17
- File.open('f.f90','w'){|f| f.puts "module f\nuse c\nuse e" }
18
- @da = DependencyAnalyzer.new( 'm.f90', ['.'] )
19
- Dir.chdir '..'
20
- File.open('main.dot','w'){ |f| f.puts @da.graph(@da.dd_deps) }
21
- end
22
-
23
- def test_statistics
24
- assert_equal( 3, @da.levels.size )
25
- assert_equal( 7, @da.components )
26
- assert_equal( 18, @da.ccd )
27
- assert_in_delta( 18/7.to_f, @da.acd, Float::EPSILON )
28
- assert_in_delta( 18/17.to_f, @da.nccd, Float::EPSILON )
29
- end
30
-
31
- def teardown
32
- FileUtils.rm_rf 'AD_fixtures'
33
- end
34
-
35
- end