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.
- checksums.yaml +7 -0
- data/{History.txt → History.rdoc} +10 -0
- data/Manifest.txt +2 -2
- data/{README.txt → README.rdoc} +7 -7
- data/Rakefile +3 -10
- data/lib/fortran.rb +50 -7
- data/test/test_fortran.rb +1 -14
- metadata +64 -50
- data/test/lakos/test_analyze_dependencies.rb +0 -35
checksums.yaml
ADDED
@@ -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
|
data/Manifest.txt
CHANGED
data/{README.txt → README.rdoc}
RENAMED
@@ -1,25 +1,25 @@
|
|
1
|
-
fortran
|
1
|
+
= fortran
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
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
|
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
|
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
|
-
|
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.
|
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
|
data/lib/fortran.rb
CHANGED
@@ -3,7 +3,7 @@ module Fortran
|
|
3
3
|
##
|
4
4
|
# This version of Fortran library
|
5
5
|
|
6
|
-
VERSION = '1.
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
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.
|
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 )
|
data/test/test_fortran.rb
CHANGED
@@ -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.
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
-
requirements:
|
23
|
-
- -
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version:
|
26
|
-
|
27
|
-
|
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
|
-
|
34
|
-
- History.txt
|
50
|
+
extra_rdoc_files:
|
51
|
+
- History.rdoc
|
35
52
|
- License.txt
|
36
53
|
- Manifest.txt
|
37
|
-
- README.
|
38
|
-
files:
|
39
|
-
- History.
|
54
|
+
- README.rdoc
|
55
|
+
files:
|
56
|
+
- History.rdoc
|
40
57
|
- License.txt
|
41
58
|
- Manifest.txt
|
42
|
-
- README.
|
59
|
+
- README.rdoc
|
43
60
|
- Rakefile
|
44
61
|
- lib/fortran.rb
|
45
62
|
- test/test_fortran.rb
|
46
|
-
|
47
|
-
|
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.
|
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:
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
69
|
-
rubygems_version: 1.3.1
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 2.4.8
|
70
86
|
signing_key:
|
71
|
-
specification_version:
|
72
|
-
summary: Fortran
|
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
|