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
@@ -1,48 +1,48 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../src_file')
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/../utility/file_robot')
|
3
|
-
require File.expand_path(File.dirname(__FILE__) + '/../block')
|
4
|
-
require File.expand_path(File.dirname(__FILE__) + '/../utility/files')
|
5
|
-
|
6
|
-
module Ritsu::SrcFiles
|
7
|
-
class TemplatedSrcFile < Ritsu::SrcFile
|
8
|
-
attr_accessor :template
|
9
|
-
attr_accessor :block_start_prefix
|
10
|
-
attr_accessor :block_end_prefix
|
11
|
-
|
12
|
-
def initialize(src_path, owner, options={})
|
13
|
-
super(src_path, owner)
|
14
|
-
|
15
|
-
options = {
|
16
|
-
:block_start_prefix => "//<<",
|
17
|
-
:block_end_prefix => "//>>"
|
18
|
-
}.merge(options)
|
19
|
-
@block_start_prefix = options[:block_start_prefix]
|
20
|
-
@block_end_prefix = options[:block_end_prefix]
|
21
|
-
end
|
22
|
-
|
23
|
-
def create
|
24
|
-
block = template.create_block(
|
25
|
-
:block_start_prefix => block_start_prefix,
|
26
|
-
:block_end_prefix => block_end_prefix)
|
27
|
-
template.update_block(block,
|
28
|
-
:block_start_prefix => block_start_prefix,
|
29
|
-
:block_end_prefix => block_end_prefix)
|
30
|
-
Ritsu::Utility::FileRobot.create_file(abs_path, block.to_s(:no_delimiter=>true) + "\n")
|
31
|
-
end
|
32
|
-
|
33
|
-
def update_content
|
34
|
-
file_content = Ritsu::Utility::Files.read(abs_path)
|
35
|
-
block = Ritsu::Block.parse(file_content,
|
36
|
-
:block_start_prefix => block_start_prefix,
|
37
|
-
:block_end_prefix => block_end_prefix)
|
38
|
-
template.update_block(block,
|
39
|
-
:block_start_prefix => block_start_prefix,
|
40
|
-
:block_end_prefix => block_end_prefix)
|
41
|
-
|
42
|
-
new_content = block.to_s(:no_delimiter=>true) + "\n"
|
43
|
-
if new_content != file_content
|
44
|
-
Ritsu::Utility::FileRobot.create_file(abs_path, new_content)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../src_file')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/../utility/file_robot')
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../block')
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../utility/files')
|
5
|
+
|
6
|
+
module Ritsu::SrcFiles
|
7
|
+
class TemplatedSrcFile < Ritsu::SrcFile
|
8
|
+
attr_accessor :template
|
9
|
+
attr_accessor :block_start_prefix
|
10
|
+
attr_accessor :block_end_prefix
|
11
|
+
|
12
|
+
def initialize(src_path, owner, options={})
|
13
|
+
super(src_path, owner)
|
14
|
+
|
15
|
+
options = {
|
16
|
+
:block_start_prefix => "//<<",
|
17
|
+
:block_end_prefix => "//>>"
|
18
|
+
}.merge(options)
|
19
|
+
@block_start_prefix = options[:block_start_prefix]
|
20
|
+
@block_end_prefix = options[:block_end_prefix]
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
block = template.create_block(
|
25
|
+
:block_start_prefix => block_start_prefix,
|
26
|
+
:block_end_prefix => block_end_prefix)
|
27
|
+
template.update_block(block,
|
28
|
+
:block_start_prefix => block_start_prefix,
|
29
|
+
:block_end_prefix => block_end_prefix)
|
30
|
+
Ritsu::Utility::FileRobot.create_file(abs_path, block.to_s(:no_delimiter=>true) + "\n")
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_content
|
34
|
+
file_content = Ritsu::Utility::Files.read(abs_path)
|
35
|
+
block = Ritsu::Block.parse(file_content,
|
36
|
+
:block_start_prefix => block_start_prefix,
|
37
|
+
:block_end_prefix => block_end_prefix)
|
38
|
+
template.update_block(block,
|
39
|
+
:block_start_prefix => block_start_prefix,
|
40
|
+
:block_end_prefix => block_end_prefix)
|
41
|
+
|
42
|
+
new_content = block.to_s(:no_delimiter=>true) + "\n"
|
43
|
+
if new_content != file_content
|
44
|
+
Ritsu::Utility::FileRobot.create_file(abs_path, new_content)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
48
|
end
|
data/lib/ritsu/src_files/unit.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../src_file')
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/cpp_file')
|
3
|
-
require File.expand_path(File.dirname(__FILE__) + '/header_file')
|
4
|
-
|
5
|
-
module Ritsu
|
6
|
-
module SrcFiles
|
7
|
-
module AddUnit
|
8
|
-
include AddCppFile
|
9
|
-
include AddHeaderFile
|
10
|
-
|
11
|
-
def add_unit(name, options={})
|
12
|
-
add_cpp_file(name + ".cpp")
|
13
|
-
add_header_file(name + ".h")
|
14
|
-
end
|
15
|
-
|
16
|
-
def add_units(*names)
|
17
|
-
names.each do |name|
|
18
|
-
add_unit(name)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
module Ritsu
|
26
|
-
class Target
|
27
|
-
include Ritsu::SrcFiles::AddUnit
|
28
|
-
end
|
29
|
-
|
30
|
-
class Project
|
31
|
-
include Ritsu::SrcFiles::AddUnit
|
32
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../src_file')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/cpp_file')
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/header_file')
|
4
|
+
|
5
|
+
module Ritsu
|
6
|
+
module SrcFiles
|
7
|
+
module AddUnit
|
8
|
+
include AddCppFile
|
9
|
+
include AddHeaderFile
|
10
|
+
|
11
|
+
def add_unit(name, options={})
|
12
|
+
add_cpp_file(name + ".cpp")
|
13
|
+
add_header_file(name + ".h")
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_units(*names)
|
17
|
+
names.each do |name|
|
18
|
+
add_unit(name)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module Ritsu
|
26
|
+
class Target
|
27
|
+
include Ritsu::SrcFiles::AddUnit
|
28
|
+
end
|
29
|
+
|
30
|
+
class Project
|
31
|
+
include Ritsu::SrcFiles::AddUnit
|
32
|
+
end
|
33
33
|
end
|
data/lib/ritsu/target.rb
CHANGED
@@ -1,155 +1,155 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'active_support'
|
3
|
-
require 'set'
|
4
|
-
require 'pathname'
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/utility/instance_set')
|
6
|
-
require File.expand_path(File.dirname(__FILE__) + '/utility/strings')
|
7
|
-
require File.expand_path(File.dirname(__FILE__) + '/project')
|
8
|
-
require File.expand_path(File.dirname(__FILE__) + '/utility/check_upon_add_set')
|
9
|
-
require File.expand_path(File.dirname(__FILE__) + '/external_library')
|
10
|
-
require File.expand_path(File.dirname(__FILE__) + '/utility/instance_dependencies')
|
11
|
-
|
12
|
-
module Ritsu
|
13
|
-
class Target
|
14
|
-
include Ritsu::Utility::InstanceSet
|
15
|
-
include Ritsu::Utility::InstanceDependencies
|
16
|
-
include Ritsu::Utility::Strings
|
17
|
-
|
18
|
-
dependencies_between :targets
|
19
|
-
|
20
|
-
attr_reader :name
|
21
|
-
attr_reader :dependency_libraries
|
22
|
-
attr_reader :project
|
23
|
-
attr_reader :src_files
|
24
|
-
attr_reader :custom_commands
|
25
|
-
attr_accessor :topological_order
|
26
|
-
|
27
|
-
def initialize(name, options={})
|
28
|
-
options = {:project => Ritsu::Project.instance}.merge(options)
|
29
|
-
|
30
|
-
if !is_c_name?(name)
|
31
|
-
raise ArgumentError.new(
|
32
|
-
"target name must be a valid C name")
|
33
|
-
end
|
34
|
-
|
35
|
-
@name = name
|
36
|
-
@dependency_libraries = Set.new
|
37
|
-
@project = options[:project]
|
38
|
-
@src_files = Set.new
|
39
|
-
@custom_commands = []
|
40
|
-
@topological_order = 0
|
41
|
-
@install = false
|
42
|
-
|
43
|
-
Target.instances << self
|
44
|
-
@project.targets << self
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.validate_instance(instance)
|
48
|
-
if instances.select { |x| x.name == instance.name }.length > 1
|
49
|
-
raise "target with name '#{instance.name}' already exists"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def install?
|
54
|
-
@install
|
55
|
-
end
|
56
|
-
|
57
|
-
def setup_install
|
58
|
-
@install = true
|
59
|
-
end
|
60
|
-
|
61
|
-
def src_dir
|
62
|
-
self.name
|
63
|
-
end
|
64
|
-
|
65
|
-
def abs_dir
|
66
|
-
File.expand_path(project.project_dir + "src/#{src_dir}")
|
67
|
-
end
|
68
|
-
|
69
|
-
def compute_src_path(path, options={})
|
70
|
-
options = {:relative_to => :target}.merge(options)
|
71
|
-
|
72
|
-
case options[:relative_to]
|
73
|
-
when :target
|
74
|
-
self.src_dir + "/" + path
|
75
|
-
when :src
|
76
|
-
path
|
77
|
-
when :absolute
|
78
|
-
src_dir = Pathname.new(project.src_dir)
|
79
|
-
input_path = Pathname.new(path)
|
80
|
-
input_path.relative_path_from(src_dir).to_s
|
81
|
-
else
|
82
|
-
raise ArgumentError.new("option :relative_to must be one of :target, :src, and :absolute")
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def include_file(filename, options={})
|
87
|
-
file_content = Ritsu::Utility::Files.read(filename)
|
88
|
-
instance_eval(file_content)
|
89
|
-
end
|
90
|
-
|
91
|
-
def update
|
92
|
-
src_files.each do |src_file|
|
93
|
-
src_file.update
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def self.find_by_name(name)
|
98
|
-
instances.each do |instance|
|
99
|
-
if instance.name == name
|
100
|
-
return instance
|
101
|
-
end
|
102
|
-
end
|
103
|
-
return nil
|
104
|
-
end
|
105
|
-
|
106
|
-
def add_external_library(name)
|
107
|
-
external_library = Ritsu::ExternalLibrary.find_by_name(name.to_s)
|
108
|
-
if !external_library.nil?
|
109
|
-
dependency_libraries << external_library
|
110
|
-
else
|
111
|
-
raise ArgumentError.new("no external library with name '#{name}'")
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def add_external_libraries(*names)
|
116
|
-
names.each do |name|
|
117
|
-
add_external_library(name)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def add_dependency_target(target_or_target_name)
|
122
|
-
if target_or_target_name.kind_of?(String)
|
123
|
-
dependency = Target.find_by_name(target_or_target_name)
|
124
|
-
if dependency.nil?
|
125
|
-
raise ArgumentError.new("no target with name '#{name}'")
|
126
|
-
end
|
127
|
-
else
|
128
|
-
dependency = target_or_target_name
|
129
|
-
end
|
130
|
-
dependency_targets << dependency
|
131
|
-
end
|
132
|
-
|
133
|
-
def add_dependency_targets(*target_or_target_names)
|
134
|
-
target_or_target_names.each do |target|
|
135
|
-
add_dependency_target(target)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def dependency_targets_sorted_by_topological_order
|
140
|
-
Target.compute_topological_orders
|
141
|
-
result = dependency_targets.to_a
|
142
|
-
result.sort! {|x,y| x.topological_order - y.topological_order}
|
143
|
-
result
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
class Project
|
148
|
-
def targets_sorted_by_topological_order
|
149
|
-
Target.compute_topological_orders
|
150
|
-
result = targets.to_a
|
151
|
-
result.sort! {|x,y| x.topological_order - y.topological_order}
|
152
|
-
result
|
153
|
-
end
|
154
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'active_support'
|
3
|
+
require 'set'
|
4
|
+
require 'pathname'
|
5
|
+
require File.expand_path(File.dirname(__FILE__) + '/utility/instance_set')
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + '/utility/strings')
|
7
|
+
require File.expand_path(File.dirname(__FILE__) + '/project')
|
8
|
+
require File.expand_path(File.dirname(__FILE__) + '/utility/check_upon_add_set')
|
9
|
+
require File.expand_path(File.dirname(__FILE__) + '/external_library')
|
10
|
+
require File.expand_path(File.dirname(__FILE__) + '/utility/instance_dependencies')
|
11
|
+
|
12
|
+
module Ritsu
|
13
|
+
class Target
|
14
|
+
include Ritsu::Utility::InstanceSet
|
15
|
+
include Ritsu::Utility::InstanceDependencies
|
16
|
+
include Ritsu::Utility::Strings
|
17
|
+
|
18
|
+
dependencies_between :targets
|
19
|
+
|
20
|
+
attr_reader :name
|
21
|
+
attr_reader :dependency_libraries
|
22
|
+
attr_reader :project
|
23
|
+
attr_reader :src_files
|
24
|
+
attr_reader :custom_commands
|
25
|
+
attr_accessor :topological_order
|
26
|
+
|
27
|
+
def initialize(name, options={})
|
28
|
+
options = {:project => Ritsu::Project.instance}.merge(options)
|
29
|
+
|
30
|
+
if !is_c_name?(name)
|
31
|
+
raise ArgumentError.new(
|
32
|
+
"target name must be a valid C name")
|
33
|
+
end
|
34
|
+
|
35
|
+
@name = name
|
36
|
+
@dependency_libraries = Set.new
|
37
|
+
@project = options[:project]
|
38
|
+
@src_files = Set.new
|
39
|
+
@custom_commands = []
|
40
|
+
@topological_order = 0
|
41
|
+
@install = false
|
42
|
+
|
43
|
+
Target.instances << self
|
44
|
+
@project.targets << self
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.validate_instance(instance)
|
48
|
+
if instances.select { |x| x.name == instance.name }.length > 1
|
49
|
+
raise "target with name '#{instance.name}' already exists"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def install?
|
54
|
+
@install
|
55
|
+
end
|
56
|
+
|
57
|
+
def setup_install
|
58
|
+
@install = true
|
59
|
+
end
|
60
|
+
|
61
|
+
def src_dir
|
62
|
+
self.name
|
63
|
+
end
|
64
|
+
|
65
|
+
def abs_dir
|
66
|
+
File.expand_path(project.project_dir + "src/#{src_dir}")
|
67
|
+
end
|
68
|
+
|
69
|
+
def compute_src_path(path, options={})
|
70
|
+
options = {:relative_to => :target}.merge(options)
|
71
|
+
|
72
|
+
case options[:relative_to]
|
73
|
+
when :target
|
74
|
+
self.src_dir + "/" + path
|
75
|
+
when :src
|
76
|
+
path
|
77
|
+
when :absolute
|
78
|
+
src_dir = Pathname.new(project.src_dir)
|
79
|
+
input_path = Pathname.new(path)
|
80
|
+
input_path.relative_path_from(src_dir).to_s
|
81
|
+
else
|
82
|
+
raise ArgumentError.new("option :relative_to must be one of :target, :src, and :absolute")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def include_file(filename, options={})
|
87
|
+
file_content = Ritsu::Utility::Files.read(filename)
|
88
|
+
instance_eval(file_content)
|
89
|
+
end
|
90
|
+
|
91
|
+
def update
|
92
|
+
src_files.each do |src_file|
|
93
|
+
src_file.update
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.find_by_name(name)
|
98
|
+
instances.each do |instance|
|
99
|
+
if instance.name == name
|
100
|
+
return instance
|
101
|
+
end
|
102
|
+
end
|
103
|
+
return nil
|
104
|
+
end
|
105
|
+
|
106
|
+
def add_external_library(name)
|
107
|
+
external_library = Ritsu::ExternalLibrary.find_by_name(name.to_s)
|
108
|
+
if !external_library.nil?
|
109
|
+
dependency_libraries << external_library
|
110
|
+
else
|
111
|
+
raise ArgumentError.new("no external library with name '#{name}'")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def add_external_libraries(*names)
|
116
|
+
names.each do |name|
|
117
|
+
add_external_library(name)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def add_dependency_target(target_or_target_name)
|
122
|
+
if target_or_target_name.kind_of?(String)
|
123
|
+
dependency = Target.find_by_name(target_or_target_name)
|
124
|
+
if dependency.nil?
|
125
|
+
raise ArgumentError.new("no target with name '#{name}'")
|
126
|
+
end
|
127
|
+
else
|
128
|
+
dependency = target_or_target_name
|
129
|
+
end
|
130
|
+
dependency_targets << dependency
|
131
|
+
end
|
132
|
+
|
133
|
+
def add_dependency_targets(*target_or_target_names)
|
134
|
+
target_or_target_names.each do |target|
|
135
|
+
add_dependency_target(target)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def dependency_targets_sorted_by_topological_order
|
140
|
+
Target.compute_topological_orders
|
141
|
+
result = dependency_targets.to_a
|
142
|
+
result.sort! {|x,y| x.topological_order - y.topological_order}
|
143
|
+
result
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
class Project
|
148
|
+
def targets_sorted_by_topological_order
|
149
|
+
Target.compute_topological_orders
|
150
|
+
result = targets.to_a
|
151
|
+
result.sort! {|x,y| x.topological_order - y.topological_order}
|
152
|
+
result
|
153
|
+
end
|
154
|
+
end
|
155
155
|
end
|