fortran 1.1.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|