ritsu 0.7.0 → 0.7.1
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.
- data/README.md +95 -95
- data/bin/define_cpp_string +54 -54
- data/bin/ritsu +31 -31
- data/lib/ritsu.rb +16 -16
- data/lib/ritsu/block.rb +258 -258
- data/lib/ritsu/ext/cuda.rb +5 -5
- data/lib/ritsu/ext/cuda/external_library.rb +15 -15
- data/lib/ritsu/ext/cuda/project.rb +31 -31
- data/lib/ritsu/ext/cuda/src_files/cu_file.rb +46 -46
- data/lib/ritsu/ext/cuda/src_files/target_cmake_lists.rb +110 -110
- data/lib/ritsu/ext/cuda/target.rb +16 -16
- data/lib/ritsu/ext/cuda/targets/library.rb +16 -16
- data/lib/ritsu/ext/fake_install.rb +2 -2
- data/lib/ritsu/ext/fake_install/project.rb +16 -16
- data/lib/ritsu/ext/fake_install/src_files/project_cmake_lists.rb +45 -45
- data/lib/ritsu/ext/glsl.rb +1 -1
- data/lib/ritsu/ext/glsl/src_files/frag_file.rb +70 -70
- data/lib/ritsu/ext/glsl/src_files/vert_file.rb +70 -70
- data/lib/ritsu/ext/qt.rb +4 -4
- data/lib/ritsu/ext/qt/project.rb +47 -47
- data/lib/ritsu/ext/qt/src_files/header_file.rb +60 -60
- data/lib/ritsu/ext/qt/src_files/target_cmake_lists.rb +106 -106
- data/lib/ritsu/ext/qt/src_files/ui_file.rb +46 -46
- data/lib/ritsu/ext/test_case.rb +19 -19
- data/lib/ritsu/external_library.rb +46 -46
- data/lib/ritsu/project.rb +93 -93
- data/lib/ritsu/project_generator.rb +33 -33
- data/lib/ritsu/project_generators/default_generator.rb +72 -72
- data/lib/ritsu/project_generators/default_generator_files/Thorfile.erb +8 -8
- data/lib/ritsu/project_generators/default_generator_files/meta/project.rb.erb +10 -10
- data/lib/ritsu/src_file.rb +79 -79
- data/lib/ritsu/src_files.rb +12 -12
- data/lib/ritsu/src_files/cpp_file.rb +43 -43
- data/lib/ritsu/src_files/executable_cmake_lists.rb +39 -39
- data/lib/ritsu/src_files/header_file.rb +60 -60
- data/lib/ritsu/src_files/project_cmake_lists.rb +133 -133
- data/lib/ritsu/src_files/project_config_header_file.rb +14 -14
- data/lib/ritsu/src_files/project_config_header_template_file.rb +44 -44
- data/lib/ritsu/src_files/shared_library_cmake_lists.rb +39 -39
- data/lib/ritsu/src_files/static_library_cmake_lists.rb +39 -39
- data/lib/ritsu/src_files/target_cmake_lists.rb +189 -189
- data/lib/ritsu/src_files/templated_src_file.rb +47 -47
- data/lib/ritsu/src_files/unit.rb +32 -32
- data/lib/ritsu/target.rb +154 -154
- data/lib/ritsu/targets.rb +3 -3
- data/lib/ritsu/targets/executable.rb +44 -44
- data/lib/ritsu/targets/library.rb +29 -29
- data/lib/ritsu/targets/shared_library.rb +38 -38
- data/lib/ritsu/targets/static_library.rb +32 -32
- data/lib/ritsu/template.rb +68 -68
- data/lib/ritsu/template_policies.rb +132 -132
- data/lib/ritsu/test_helpers.rb +123 -123
- data/lib/ritsu/thors/default_thor.rb +1 -1
- data/lib/ritsu/utility.rb +7 -7
- data/lib/ritsu/utility/accessors.rb +29 -29
- data/lib/ritsu/utility/check_upon_add_set.rb +34 -34
- data/lib/ritsu/utility/file_robot.rb +128 -128
- data/lib/ritsu/utility/files.rb +12 -12
- data/lib/ritsu/utility/instance_dependencies.rb +112 -112
- data/lib/ritsu/utility/instance_set.rb +28 -28
- data/lib/ritsu/utility/platform.rb +20 -20
- data/lib/ritsu/utility/simple_io.rb +64 -64
- data/lib/ritsu/utility/single_instance.rb +33 -33
- data/lib/ritsu/utility/strings.rb +40 -40
- data/test/ritsu/block_test.rb +196 -196
- data/test/ritsu/ext/cuda/src_files/cuda_static_library_cmake_lists_test.rb +63 -63
- data/test/ritsu/external_library_test.rb +41 -41
- data/test/ritsu/project_generators/default_generator_test.rb +34 -34
- data/test/ritsu/project_test.rb +127 -127
- data/test/ritsu/src_file_test.rb +69 -69
- data/test/ritsu/src_files/cpp_file_test.rb +42 -42
- data/test/ritsu/src_files/executable_cmake_lists_test.rb +92 -92
- data/test/ritsu/src_files/header_file_test.rb +57 -57
- data/test/ritsu/src_files/project_cmake_lists_test.rb +159 -159
- data/test/ritsu/src_files/shared_library_cmake_lists_test.rb +54 -54
- data/test/ritsu/src_files/static_library_cmake_lists_test.rb +54 -54
- data/test/ritsu/src_files/target_cmake_lists_test.rb +15 -15
- data/test/ritsu/target_test.rb +105 -105
- data/test/ritsu/targets/executable_test.rb +10 -10
- data/test/ritsu/targets/shared_library_test.rb +10 -10
- data/test/ritsu/targets/static_library_test.rb +10 -10
- data/test/ritsu/utility/accessors_test.rb +14 -14
- data/test/ritsu/utility/check_upon_add_set_test.rb +31 -31
- data/test/ritsu/utility/file_robot_test.rb +175 -175
- data/test/ritsu/utility/strings_test.rb +28 -28
- data/test/test_helpers.rb +3 -3
- metadata +72 -124
- data/Thorfile +0 -104
- data/VERSION +0 -1
data/lib/ritsu/utility/files.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
module Ritsu
|
2
|
-
module Utility
|
3
|
-
module Files
|
4
|
-
def read(filename)
|
5
|
-
f = File.new(filename)
|
6
|
-
result = f.read
|
7
|
-
f.close
|
8
|
-
result
|
9
|
-
end
|
10
|
-
module_function :read
|
11
|
-
end
|
12
|
-
end
|
1
|
+
module Ritsu
|
2
|
+
module Utility
|
3
|
+
module Files
|
4
|
+
def read(filename)
|
5
|
+
f = File.new(filename)
|
6
|
+
result = f.read
|
7
|
+
f.close
|
8
|
+
result
|
9
|
+
end
|
10
|
+
module_function :read
|
11
|
+
end
|
12
|
+
end
|
13
13
|
end
|
@@ -1,113 +1,113 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'active_support/core_ext/string/inflections'
|
3
|
-
require 'active_support/inflector'
|
4
|
-
require File.expand_path(File.dirname(__FILE__) + "/instance_set")
|
5
|
-
|
6
|
-
module Ritsu
|
7
|
-
module Utility
|
8
|
-
module InstanceDependencies
|
9
|
-
def self.included(base)
|
10
|
-
base.extend(ClassMethods)
|
11
|
-
end
|
12
|
-
|
13
|
-
module ClassMethods
|
14
|
-
def dependencies_between(name)
|
15
|
-
name = name.to_s.singularize
|
16
|
-
dependency_set_name = "dependency_#{name.pluralize}"
|
17
|
-
|
18
|
-
module_eval <<-RUBY
|
19
|
-
attr_reader :#{dependency_set_name}
|
20
|
-
attr_accessor :topological_order
|
21
|
-
|
22
|
-
def #{dependency_set_name}
|
23
|
-
@#{dependency_set_name} ||= Ritsu::Utility::CheckUponAddSet.new do |s,dependency|
|
24
|
-
validate_dependency_#{name}(dependency)
|
25
|
-
self.class.invalidate_topological_orders
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def depends_directly_on_#{name}?(instance)
|
30
|
-
#{dependency_set_name}.include?(instance)
|
31
|
-
end
|
32
|
-
|
33
|
-
def depends_on_#{name}?(instance)
|
34
|
-
visited = Set.new [self]
|
35
|
-
queue = [self]
|
36
|
-
|
37
|
-
# Perform a breadth first search
|
38
|
-
while !visited.include?(instance) && !queue.empty?
|
39
|
-
u = queue.shift
|
40
|
-
u.#{dependency_set_name}.each do |v|
|
41
|
-
if !visited.include?(v)
|
42
|
-
queue << v
|
43
|
-
visited << v
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
visited.delete(self)
|
49
|
-
visited.include?(instance)
|
50
|
-
end
|
51
|
-
|
52
|
-
def validate_dependency_#{name}(instance)
|
53
|
-
instance_name = instance.name
|
54
|
-
if instance == self
|
55
|
-
raise ArgumentError.new("'\#{instance.name}' is the same as the dependent #{name}")
|
56
|
-
end
|
57
|
-
if instance.depends_on_#{name}?(self)
|
58
|
-
raise ArgumentError.new("including '\#{instance.name}' will create a circular dependency")
|
59
|
-
end
|
60
|
-
if !instance.can_be_depended_on?
|
61
|
-
raise ArgumentError.new("'\#{instance.name}' cannot be dependend on")
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.recompute_topological_orders
|
66
|
-
indegrees = {}
|
67
|
-
instances.each { |instance| indegrees[instance] = 0 }
|
68
|
-
instances.each do |instance|
|
69
|
-
instance.#{dependency_set_name}.each do |dependency|
|
70
|
-
indegrees[dependency] += 1
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
last_order = instances.length-1
|
75
|
-
indegree_zero = instances.select { |instance| indegrees[instance] == 0 }
|
76
|
-
while !indegree_zero.empty?
|
77
|
-
u = indegree_zero.shift
|
78
|
-
u.topological_order = last_order
|
79
|
-
last_order -= 1
|
80
|
-
u.#{dependency_set_name}.each do |v|
|
81
|
-
indegrees[v] -= 1
|
82
|
-
if indegrees[v] == 0
|
83
|
-
indegree_zero << v
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
@topological_orders_computed = true
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.topological_orders_computed?
|
92
|
-
@topological_order_computed ||= false
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.compute_topological_orders
|
96
|
-
if !topological_orders_computed?
|
97
|
-
recompute_topological_orders
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def self.invalidate_topological_orders
|
102
|
-
@topological_order_computed = false
|
103
|
-
end
|
104
|
-
|
105
|
-
def can_be_depended_on?
|
106
|
-
raise NotImplementedError.new
|
107
|
-
end
|
108
|
-
RUBY
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'active_support/core_ext/string/inflections'
|
3
|
+
require 'active_support/inflector'
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + "/instance_set")
|
5
|
+
|
6
|
+
module Ritsu
|
7
|
+
module Utility
|
8
|
+
module InstanceDependencies
|
9
|
+
def self.included(base)
|
10
|
+
base.extend(ClassMethods)
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def dependencies_between(name)
|
15
|
+
name = name.to_s.singularize
|
16
|
+
dependency_set_name = "dependency_#{name.pluralize}"
|
17
|
+
|
18
|
+
module_eval <<-RUBY
|
19
|
+
attr_reader :#{dependency_set_name}
|
20
|
+
attr_accessor :topological_order
|
21
|
+
|
22
|
+
def #{dependency_set_name}
|
23
|
+
@#{dependency_set_name} ||= Ritsu::Utility::CheckUponAddSet.new do |s,dependency|
|
24
|
+
validate_dependency_#{name}(dependency)
|
25
|
+
self.class.invalidate_topological_orders
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def depends_directly_on_#{name}?(instance)
|
30
|
+
#{dependency_set_name}.include?(instance)
|
31
|
+
end
|
32
|
+
|
33
|
+
def depends_on_#{name}?(instance)
|
34
|
+
visited = Set.new [self]
|
35
|
+
queue = [self]
|
36
|
+
|
37
|
+
# Perform a breadth first search
|
38
|
+
while !visited.include?(instance) && !queue.empty?
|
39
|
+
u = queue.shift
|
40
|
+
u.#{dependency_set_name}.each do |v|
|
41
|
+
if !visited.include?(v)
|
42
|
+
queue << v
|
43
|
+
visited << v
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
visited.delete(self)
|
49
|
+
visited.include?(instance)
|
50
|
+
end
|
51
|
+
|
52
|
+
def validate_dependency_#{name}(instance)
|
53
|
+
instance_name = instance.name
|
54
|
+
if instance == self
|
55
|
+
raise ArgumentError.new("'\#{instance.name}' is the same as the dependent #{name}")
|
56
|
+
end
|
57
|
+
if instance.depends_on_#{name}?(self)
|
58
|
+
raise ArgumentError.new("including '\#{instance.name}' will create a circular dependency")
|
59
|
+
end
|
60
|
+
if !instance.can_be_depended_on?
|
61
|
+
raise ArgumentError.new("'\#{instance.name}' cannot be dependend on")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.recompute_topological_orders
|
66
|
+
indegrees = {}
|
67
|
+
instances.each { |instance| indegrees[instance] = 0 }
|
68
|
+
instances.each do |instance|
|
69
|
+
instance.#{dependency_set_name}.each do |dependency|
|
70
|
+
indegrees[dependency] += 1
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
last_order = instances.length-1
|
75
|
+
indegree_zero = instances.select { |instance| indegrees[instance] == 0 }
|
76
|
+
while !indegree_zero.empty?
|
77
|
+
u = indegree_zero.shift
|
78
|
+
u.topological_order = last_order
|
79
|
+
last_order -= 1
|
80
|
+
u.#{dependency_set_name}.each do |v|
|
81
|
+
indegrees[v] -= 1
|
82
|
+
if indegrees[v] == 0
|
83
|
+
indegree_zero << v
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
@topological_orders_computed = true
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.topological_orders_computed?
|
92
|
+
@topological_order_computed ||= false
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.compute_topological_orders
|
96
|
+
if !topological_orders_computed?
|
97
|
+
recompute_topological_orders
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.invalidate_topological_orders
|
102
|
+
@topological_order_computed = false
|
103
|
+
end
|
104
|
+
|
105
|
+
def can_be_depended_on?
|
106
|
+
raise NotImplementedError.new
|
107
|
+
end
|
108
|
+
RUBY
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
113
|
end
|
@@ -1,29 +1,29 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../utility/check_upon_add_set')
|
2
|
-
|
3
|
-
module Ritsu
|
4
|
-
module Utility
|
5
|
-
module InstanceSet
|
6
|
-
module ClassMethods
|
7
|
-
def instances
|
8
|
-
@instances ||= Ritsu::Utility::CheckUponAddSet.new do |s, instance|
|
9
|
-
validate_instance(instance)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def validate_instance(instance)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.included(base)
|
18
|
-
base.extend(ClassMethods)
|
19
|
-
end
|
20
|
-
|
21
|
-
def initialize(*args, &block)
|
22
|
-
self.class.instances << self
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize_instance(*args, &block)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../utility/check_upon_add_set')
|
2
|
+
|
3
|
+
module Ritsu
|
4
|
+
module Utility
|
5
|
+
module InstanceSet
|
6
|
+
module ClassMethods
|
7
|
+
def instances
|
8
|
+
@instances ||= Ritsu::Utility::CheckUponAddSet.new do |s, instance|
|
9
|
+
validate_instance(instance)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate_instance(instance)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.included(base)
|
18
|
+
base.extend(ClassMethods)
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(*args, &block)
|
22
|
+
self.class.instances << self
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize_instance(*args, &block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
29
|
end
|
@@ -1,21 +1,21 @@
|
|
1
|
-
module Ritsu
|
2
|
-
module Utility
|
3
|
-
def platform
|
4
|
-
case RUBY_PLATFORM.downcase
|
5
|
-
when /linux|bsd|solaris|hpux/
|
6
|
-
:unix
|
7
|
-
when /darwin/
|
8
|
-
:mac
|
9
|
-
when /mswin32|mingw32|bccwin32/
|
10
|
-
:windows
|
11
|
-
when /cygwin/
|
12
|
-
:cygwin
|
13
|
-
when /java/
|
14
|
-
:java
|
15
|
-
else
|
16
|
-
:other
|
17
|
-
end
|
18
|
-
end
|
19
|
-
module_function :platform
|
20
|
-
end
|
1
|
+
module Ritsu
|
2
|
+
module Utility
|
3
|
+
def platform
|
4
|
+
case RUBY_PLATFORM.downcase
|
5
|
+
when /linux|bsd|solaris|hpux/
|
6
|
+
:unix
|
7
|
+
when /darwin/
|
8
|
+
:mac
|
9
|
+
when /mswin32|mingw32|bccwin32/
|
10
|
+
:windows
|
11
|
+
when /cygwin/
|
12
|
+
:cygwin
|
13
|
+
when /java/
|
14
|
+
:java
|
15
|
+
else
|
16
|
+
:other
|
17
|
+
end
|
18
|
+
end
|
19
|
+
module_function :platform
|
20
|
+
end
|
21
21
|
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
module Ritsu
|
2
|
-
module Utility
|
3
|
-
##
|
4
|
-
# This class is lifted from rubigen's SimpleLogger
|
5
|
-
class SimpleIO
|
6
|
-
attr_accessor :input
|
7
|
-
attr_accessor :output
|
8
|
-
attr_accessor :quiet
|
9
|
-
|
10
|
-
def initialize(input = $stdin, output = $stdout)
|
11
|
-
@input = input
|
12
|
-
@output = output
|
13
|
-
@quiet = false
|
14
|
-
@level = 0
|
15
|
-
end
|
16
|
-
|
17
|
-
def log(status, message, &block)
|
18
|
-
@output.print("%12s %s%s\n" % [status, ' ' * @level, message]) unless quiet
|
19
|
-
indent(&block) if block_given?
|
20
|
-
end
|
21
|
-
|
22
|
-
def indent(&block)
|
23
|
-
@level += 1
|
24
|
-
if block_given?
|
25
|
-
begin
|
26
|
-
block.call
|
27
|
-
ensure
|
28
|
-
outdent
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def outdent
|
34
|
-
@level -= 1
|
35
|
-
if block_given?
|
36
|
-
begin
|
37
|
-
block.call
|
38
|
-
ensure
|
39
|
-
indent
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def ask_yes_no_all(message)
|
45
|
-
@output.print("#{message} (yes/no/all): ")
|
46
|
-
answer = @input.gets.strip
|
47
|
-
case answer
|
48
|
-
when /^y(es)?$/i
|
49
|
-
return :yes
|
50
|
-
when /^no?$/i
|
51
|
-
return :no
|
52
|
-
when /^a(ll)?$/i
|
53
|
-
return :all
|
54
|
-
else
|
55
|
-
ask_yes_no_all(message)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
def method_missing(method, *args, &block)
|
61
|
-
log(method.to_s, args.first, &block)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
1
|
+
module Ritsu
|
2
|
+
module Utility
|
3
|
+
##
|
4
|
+
# This class is lifted from rubigen's SimpleLogger
|
5
|
+
class SimpleIO
|
6
|
+
attr_accessor :input
|
7
|
+
attr_accessor :output
|
8
|
+
attr_accessor :quiet
|
9
|
+
|
10
|
+
def initialize(input = $stdin, output = $stdout)
|
11
|
+
@input = input
|
12
|
+
@output = output
|
13
|
+
@quiet = false
|
14
|
+
@level = 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def log(status, message, &block)
|
18
|
+
@output.print("%12s %s%s\n" % [status, ' ' * @level, message]) unless quiet
|
19
|
+
indent(&block) if block_given?
|
20
|
+
end
|
21
|
+
|
22
|
+
def indent(&block)
|
23
|
+
@level += 1
|
24
|
+
if block_given?
|
25
|
+
begin
|
26
|
+
block.call
|
27
|
+
ensure
|
28
|
+
outdent
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def outdent
|
34
|
+
@level -= 1
|
35
|
+
if block_given?
|
36
|
+
begin
|
37
|
+
block.call
|
38
|
+
ensure
|
39
|
+
indent
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def ask_yes_no_all(message)
|
45
|
+
@output.print("#{message} (yes/no/all): ")
|
46
|
+
answer = @input.gets.strip
|
47
|
+
case answer
|
48
|
+
when /^y(es)?$/i
|
49
|
+
return :yes
|
50
|
+
when /^no?$/i
|
51
|
+
return :no
|
52
|
+
when /^a(ll)?$/i
|
53
|
+
return :all
|
54
|
+
else
|
55
|
+
ask_yes_no_all(message)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
def method_missing(method, *args, &block)
|
61
|
+
log(method.to_s, args.first, &block)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
65
|
end
|