fortran 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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