cxxproject 0.6.30 → 0.6.31
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 +14 -0
- data/lib/cxxproject.rb +3 -3
- data/lib/cxxproject/buildingblocks/building_block.rb +36 -6
- data/lib/cxxproject/buildingblocks/building_blocks.rb +7 -16
- data/lib/cxxproject/buildingblocks/command_line.rb +2 -2
- data/lib/cxxproject/buildingblocks/has_sources_mixin.rb +81 -63
- data/lib/cxxproject/buildingblocks/linkable.rb +395 -0
- data/lib/cxxproject/buildingblocks/makefile.rb +2 -2
- data/lib/cxxproject/buildingblocks/shared_libs_helper.rb +93 -0
- data/lib/cxxproject/buildingblocks/{source_library.rb → static_library.rb} +35 -22
- data/lib/cxxproject/context.rb +1 -1
- data/lib/cxxproject/ext/rake.rb +51 -29
- data/lib/cxxproject/plugin_context.rb +20 -2
- data/lib/cxxproject/toolchain/provider.rb +38 -13
- data/lib/cxxproject/toolchain/toolchain.rb +3 -0
- data/lib/cxxproject/utils/deprecated.rb +23 -0
- data/lib/cxxproject/utils/utils.rb +10 -4
- data/lib/cxxproject/version.rb +1 -1
- metadata +35 -38
- data/lib/cxxproject/buildingblocks/executable.rb +0 -227
- data/lib/cxxproject/ext/progressbar.rb +0 -20
- data/lib/cxxproject/ext/rake_listener.rb +0 -57
- data/lib/cxxproject/utils/progress.rb +0 -66
- data/lib/cxxproject/utils/progress_helper.rb +0 -77
- data/lib/cxxproject/utils/rbcurse.rb +0 -284
- data/lib/cxxproject/utils/ubigraph.rb +0 -228
@@ -1,66 +0,0 @@
|
|
1
|
-
module Cxxproject
|
2
|
-
module Utils
|
3
|
-
define_progress = lambda do
|
4
|
-
require 'rake'
|
5
|
-
require 'cxxproject/ext/rake'
|
6
|
-
|
7
|
-
require 'progressbar'
|
8
|
-
require 'cxxproject/ext/progressbar'
|
9
|
-
require 'colored'
|
10
|
-
require 'cxxproject/utils/progress_helper'
|
11
|
-
|
12
|
-
class ProgressListener
|
13
|
-
def initialize
|
14
|
-
@progress_helper = ProgressHelper.new
|
15
|
-
Rake::application.top_level_tasks.each do |name|
|
16
|
-
@progress_helper.count_with_filter(name)
|
17
|
-
end
|
18
|
-
@progress = ProgressBar.new('all tasks', @progress_helper.todo)
|
19
|
-
@progress.title_width = 30
|
20
|
-
@progress.unblock
|
21
|
-
end
|
22
|
-
|
23
|
-
def after_execute(name)
|
24
|
-
needed_tasks = @progress_helper.needed_tasks
|
25
|
-
if needed_tasks[name]
|
26
|
-
task = Rake::Task[name]
|
27
|
-
@progress.title = task.name
|
28
|
-
@progress.inc(task.progress_count)
|
29
|
-
if (@progress.total == @progress.current)
|
30
|
-
puts
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
require 'benchmark'
|
37
|
-
class BenchmarkedProgressListener < ProgressListener
|
38
|
-
def initialize
|
39
|
-
Benchmark.bm do |x|
|
40
|
-
x.report('ProgressListener.initialize') do
|
41
|
-
super
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
desc 'show a progressbar for the build (use with -s for best results)'
|
48
|
-
task :progress do
|
49
|
-
require 'cxxproject/ext/rake_listener'
|
50
|
-
Rake::add_listener(ProgressListener.new)
|
51
|
-
end
|
52
|
-
|
53
|
-
task :benchmark_progress do
|
54
|
-
require 'cxxproject/ext/rake_listener'
|
55
|
-
Rake::add_listener(BenchmarkedProgressListener.new)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
could_not_define_progress = lambda {
|
60
|
-
task :progress do
|
61
|
-
puts 'could not define progress'
|
62
|
-
end
|
63
|
-
}
|
64
|
-
optional_package(define_progress, could_not_define_progress)
|
65
|
-
end
|
66
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
module Cxxproject
|
2
|
-
module Utils
|
3
|
-
class ProgressHelper
|
4
|
-
|
5
|
-
attr_reader :todo
|
6
|
-
|
7
|
-
attr_reader :needed_tasks
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@todo = 0.0
|
11
|
-
@needed_tasks = {}
|
12
|
-
end
|
13
|
-
|
14
|
-
def count_with_filter(name)
|
15
|
-
tasks = find_tasks_for_toplevel_task(name)
|
16
|
-
tasks.each do |t|
|
17
|
-
count(t)
|
18
|
-
end
|
19
|
-
if @todo < 1
|
20
|
-
@todo = 1
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def find_tasks_for_toplevel_task(name)
|
25
|
-
regex = create_regex_for_name(name)
|
26
|
-
return filter_all_tasks(regex)
|
27
|
-
end
|
28
|
-
|
29
|
-
def create_regex_for_name(name)
|
30
|
-
res = Regexp.new(name)
|
31
|
-
res = create_regex_for_filter(name, res)
|
32
|
-
return res
|
33
|
-
end
|
34
|
-
|
35
|
-
def is_filter(name)
|
36
|
-
return name.index('filter')
|
37
|
-
end
|
38
|
-
|
39
|
-
def create_regex_for_filter(name, res)
|
40
|
-
return res unless is_filter(name)
|
41
|
-
|
42
|
-
name = name.gsub('filter', '')
|
43
|
-
if name.index('[') == nil
|
44
|
-
name = name + '.*'
|
45
|
-
else
|
46
|
-
name = name.gsub('[', '')
|
47
|
-
name = name.gsub(']', '')
|
48
|
-
end
|
49
|
-
return Regexp.new(name)
|
50
|
-
end
|
51
|
-
|
52
|
-
def filter_all_tasks(regex)
|
53
|
-
return Rake::Task::tasks.find_all do |t|
|
54
|
-
task_name = t.name
|
55
|
-
res = ((task_name.index('filter') == nil) && regex.match(task_name)!=nil)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def count(task)
|
60
|
-
task.visit() do |t|
|
61
|
-
count_needed_tasks(t)
|
62
|
-
true
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def count_needed_tasks(t)
|
67
|
-
c = t.progress_count
|
68
|
-
if c && c > 0
|
69
|
-
if t.needed? && @needed_tasks[t.name] == nil
|
70
|
-
@needed_tasks[t.name] = true
|
71
|
-
@todo += c
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,284 +0,0 @@
|
|
1
|
-
module Cxxproject
|
2
|
-
module Utils
|
3
|
-
define_rbcurse_ui = lambda do
|
4
|
-
require 'rake'
|
5
|
-
require 'ncurses'
|
6
|
-
require 'rbcurse'
|
7
|
-
|
8
|
-
require 'rbcurse/rtable'
|
9
|
-
require 'rbcurse/table/tablecellrenderer'
|
10
|
-
require 'rbcurse/rsplitpane'
|
11
|
-
require 'rbcurse/rtextview'
|
12
|
-
require 'cxxproject/ext/rake_listener'
|
13
|
-
require 'cxxproject/utils/rbcurse_progress'
|
14
|
-
require 'cxxproject/utils/rbcurse_tasktable'
|
15
|
-
|
16
|
-
include RubyCurses
|
17
|
-
|
18
|
-
Rake::TaskManager.record_task_metadata = true
|
19
|
-
|
20
|
-
class RakeGui
|
21
|
-
def initialize
|
22
|
-
require 'cxxproject/utils/rbcurse_executable_ext'
|
23
|
-
Cxxproject::ColorizingFormatter.enabled = false
|
24
|
-
Rake::Task.output_disabled = true
|
25
|
-
|
26
|
-
$log = Logger.new(File.join("./", "view.log"))
|
27
|
-
$log.level = Logger::ERROR
|
28
|
-
@data_stack = []
|
29
|
-
@path_stack = []
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.keycode(s)
|
33
|
-
return s[0].to_i
|
34
|
-
end
|
35
|
-
|
36
|
-
def create_table
|
37
|
-
@col_names = ['name', 'desc']
|
38
|
-
return TaskTable.new(self) do
|
39
|
-
name 'my table'
|
40
|
-
title 'my table'
|
41
|
-
cell_editing_allowed false
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def reenable_including_prerequisites(task)
|
46
|
-
task.visit() do |t|
|
47
|
-
t.reenable
|
48
|
-
true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def invoke(table)
|
53
|
-
t = table.get_value_at(table.focussed_row, 0)
|
54
|
-
@progress_helper = ProgressHelper.new
|
55
|
-
complete_task_name = t.name
|
56
|
-
args = []
|
57
|
-
if @progress_helper.is_filter(t.name)
|
58
|
-
args = [get_string('please input filterpattern', 20, '.*')]
|
59
|
-
complete_task_name = "#{t.name}[#{args[0]}]"
|
60
|
-
end
|
61
|
-
@progress_helper.count_with_filter(complete_task_name)
|
62
|
-
|
63
|
-
@progress.max = @progress_helper.todo
|
64
|
-
Rake::add_listener(self)
|
65
|
-
reenable_including_prerequisites(t)
|
66
|
-
t.invoke(args)
|
67
|
-
Rake::remove_listener(self)
|
68
|
-
show_details_for(table.focussed_row)
|
69
|
-
table.repaint_all(true)
|
70
|
-
end
|
71
|
-
|
72
|
-
def after_execute(name)
|
73
|
-
needed_tasks = @progress_helper.needed_tasks
|
74
|
-
if needed_tasks[name]
|
75
|
-
task = Rake::Task[name]
|
76
|
-
@progress.title = task.name
|
77
|
-
@progress.inc(task.progress_count)
|
78
|
-
@form.repaint
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def details(table)
|
83
|
-
t = table.get_value_at(table.focussed_row, 0)
|
84
|
-
pre = t.prerequisite_tasks
|
85
|
-
if pre.size > 0
|
86
|
-
push_table_data(pre, t.name)
|
87
|
-
table.set_focus_on 0
|
88
|
-
|
89
|
-
show_details_for(0)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def repaint_and_next_char
|
94
|
-
@form.repaint
|
95
|
-
@window.wrefresh
|
96
|
-
return @window.getchar
|
97
|
-
end
|
98
|
-
|
99
|
-
def process_input_events
|
100
|
-
ch = repaint_and_next_char
|
101
|
-
while ch != RakeGui.keycode('q')
|
102
|
-
$log.error "entered key: #{ch}"
|
103
|
-
case ch
|
104
|
-
when RakeGui.keycode('a')
|
105
|
-
@h_split.set_divider_location(@h_split.divider_location+1)
|
106
|
-
when RakeGui.keycode('s')
|
107
|
-
@h_split.set_divider_location(@h_split.divider_location-1)
|
108
|
-
else
|
109
|
-
@form.handle_key(ch)
|
110
|
-
end
|
111
|
-
ch = repaint_and_next_char
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def push_table_data(task_data, new_path=nil)
|
116
|
-
@path_stack.push(new_path) if new_path
|
117
|
-
set_breadcrumbs
|
118
|
-
|
119
|
-
@data_stack.push(task_data)
|
120
|
-
set_table_data(task_data)
|
121
|
-
end
|
122
|
-
def set_table_data(task_data)
|
123
|
-
size = size()
|
124
|
-
new_data = task_data.map{|t|[t, t.comment]}
|
125
|
-
@table.set_data new_data, @col_names
|
126
|
-
tcm = @table.table_column_model
|
127
|
-
first_col_width = task_data.map{|t|t.name.size}.max
|
128
|
-
tcm.column(0).width(first_col_width)
|
129
|
-
tcm.column(1).width(size[0]-first_col_width-3)
|
130
|
-
end
|
131
|
-
def set_breadcrumbs
|
132
|
-
crumbs = File.join(@path_stack.map{|i|"(#{i})"}.join('/'))
|
133
|
-
@breadcrumbs.text = crumbs
|
134
|
-
@breadcrumbs.repaint_all(true)
|
135
|
-
end
|
136
|
-
def pop_data
|
137
|
-
if @data_stack.size > 1
|
138
|
-
@path_stack.pop
|
139
|
-
set_breadcrumbs
|
140
|
-
|
141
|
-
popped = @data_stack.pop
|
142
|
-
top= @data_stack.last
|
143
|
-
set_table_data(top)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def size
|
148
|
-
return @window.default_for(:width), @window.default_for(:height)
|
149
|
-
end
|
150
|
-
|
151
|
-
def show_details_for(row)
|
152
|
-
buffer = StringIO.new
|
153
|
-
t = @table.get_value_at(row, 0)
|
154
|
-
t.visit do |t|
|
155
|
-
if t.output_string && t.output_string.length > 0
|
156
|
-
buffer.puts(t.output_string)
|
157
|
-
end
|
158
|
-
if t.failure
|
159
|
-
true
|
160
|
-
else
|
161
|
-
false
|
162
|
-
end
|
163
|
-
end
|
164
|
-
@output.set_content(buffer.string)
|
165
|
-
@output.set_focus_on(0)
|
166
|
-
@output.repaint_all(true)
|
167
|
-
end
|
168
|
-
|
169
|
-
def start_editor_for_task(t)
|
170
|
-
file_name = t.name
|
171
|
-
return unless File.exists?(file_name)
|
172
|
-
|
173
|
-
start_editor(file_name, 0, 0)
|
174
|
-
end
|
175
|
-
|
176
|
-
def start_editor(file, line, column)
|
177
|
-
$log.error "starting editor for #{file}:#{line}"
|
178
|
-
editor = ENV['EDITOR']
|
179
|
-
editor = 'vi' unless editor
|
180
|
-
cmd = "#{editor} +#{line} #{file}"
|
181
|
-
shell_out(cmd)
|
182
|
-
end
|
183
|
-
|
184
|
-
def shell_out(cmd)
|
185
|
-
@window.hide
|
186
|
-
Ncurses.endwin
|
187
|
-
system(cmd)
|
188
|
-
Ncurses.refresh
|
189
|
-
@window.show
|
190
|
-
end
|
191
|
-
|
192
|
-
def create_breadcrumbs(size)
|
193
|
-
@breadcrumbs = Label.new @form do
|
194
|
-
name 'breadcrumbs'
|
195
|
-
row 0
|
196
|
-
col 0
|
197
|
-
width size[0]
|
198
|
-
height 1
|
199
|
-
end
|
200
|
-
@breadcrumbs.display_length(size[0])
|
201
|
-
@breadcrumbs.text = ''
|
202
|
-
end
|
203
|
-
|
204
|
-
def create_splitpane(size)
|
205
|
-
@h_split = SplitPane.new @form do
|
206
|
-
name 'mainpane'
|
207
|
-
row 1
|
208
|
-
col 0
|
209
|
-
width size[0]
|
210
|
-
height size[1]-3
|
211
|
-
orientation :HORIZONTAL_SPLIT
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def create_output_view(size)
|
216
|
-
@output = TextView.new nil
|
217
|
-
@output.set_content('')
|
218
|
-
@output.configure do
|
219
|
-
bind_key(RakeGui.keycode('e')) do |code|
|
220
|
-
line = selected_item
|
221
|
-
file_pattern = '(.*?):(\d+):(\d*):? '
|
222
|
-
error_pattern = Regexp.new("#{file_pattern}(error: .*)")
|
223
|
-
warning_pattern = Regexp.new("#{file_pattern}(warning: .*)")
|
224
|
-
md = error_pattern.match(line)
|
225
|
-
md = warning_pattern.match(line) unless md
|
226
|
-
if md
|
227
|
-
file_name = md[1]
|
228
|
-
line = md[2]
|
229
|
-
col = md[3]
|
230
|
-
rake_gui.start_editor(file_name, line, col)
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
def create_components(size)
|
237
|
-
create_breadcrumbs(size)
|
238
|
-
@progress = Progress.new(@form, size)
|
239
|
-
create_splitpane(size)
|
240
|
-
@table = create_table
|
241
|
-
push_table_data(Rake::Task.tasks.select {|t|t.comment})
|
242
|
-
|
243
|
-
create_output_view(size)
|
244
|
-
end
|
245
|
-
|
246
|
-
def wire_components
|
247
|
-
@h_split.first_component(@table)
|
248
|
-
@h_split.second_component(@output)
|
249
|
-
@h_split.set_resize_weight(0.50)
|
250
|
-
end
|
251
|
-
|
252
|
-
def run
|
253
|
-
rake_gui = self
|
254
|
-
begin
|
255
|
-
VER::start_ncurses
|
256
|
-
|
257
|
-
@window = VER::Window.root_window
|
258
|
-
@form = Form.new @window
|
259
|
-
|
260
|
-
create_components(size())
|
261
|
-
wire_components
|
262
|
-
|
263
|
-
@table.bind(:TABLE_TRAVERSAL_EVENT) do |e|
|
264
|
-
rake_gui.show_details_for(e.newrow)
|
265
|
-
end
|
266
|
-
|
267
|
-
process_input_events
|
268
|
-
rescue => e
|
269
|
-
puts e
|
270
|
-
end
|
271
|
-
@window.destroy if @window
|
272
|
-
VER::stop_ncurses
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
task :ui do
|
277
|
-
RakeGui.new.run
|
278
|
-
end
|
279
|
-
|
280
|
-
end
|
281
|
-
|
282
|
-
optional_package(define_rbcurse_ui, nil)
|
283
|
-
end
|
284
|
-
end
|
@@ -1,228 +0,0 @@
|
|
1
|
-
module Cxxproject
|
2
|
-
define_ubigraph = lambda do
|
3
|
-
require 'rubigraph'
|
4
|
-
|
5
|
-
module Rubigraph
|
6
|
-
class Vertex
|
7
|
-
alias_method :initialize_original, :initialize
|
8
|
-
def initialize(id = nil)
|
9
|
-
if id != nil
|
10
|
-
@id = id
|
11
|
-
else
|
12
|
-
initialize_original
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class IdsAndEdges
|
19
|
-
attr_reader :ids, :edges
|
20
|
-
def initialize
|
21
|
-
@ids = Hash.new
|
22
|
-
@edges = Hash.new
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class V
|
27
|
-
|
28
|
-
def self.shutdown
|
29
|
-
File.open('id_cache', 'w') do |f|
|
30
|
-
f.write(@@ids_and_edges.to_yaml)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.reset
|
35
|
-
begin
|
36
|
-
File.delete('id_cache')
|
37
|
-
rescue StandardError => e
|
38
|
-
puts e
|
39
|
-
puts 'problem deleting id_cache'
|
40
|
-
end
|
41
|
-
@@ids_and_edges = IdsAndEdges.new
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.startup
|
45
|
-
begin
|
46
|
-
@@ids_and_edges = YAML.load_file('id_cache')
|
47
|
-
rescue
|
48
|
-
@@ids_and_edges = IdsAndEdges.new
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
attr_reader :v
|
53
|
-
|
54
|
-
def initialize(name)
|
55
|
-
h = @@ids_and_edges.ids
|
56
|
-
id = h[name]
|
57
|
-
if !id
|
58
|
-
@v = Rubigraph::Vertex.new
|
59
|
-
@@ids_and_edges.ids()[name] = @v.id
|
60
|
-
else
|
61
|
-
@v = Rubigraph::Vertex.new(id)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
def self.create_edge(edge_and_task1, edge_and_task2)
|
65
|
-
complete_name = "#{edge_and_task1[:task].name}->#{edge_and_task2[:task].name}"
|
66
|
-
if @@ids_and_edges.edges.has_key?(complete_name)
|
67
|
-
return nil
|
68
|
-
else
|
69
|
-
e = Rubigraph::Edge.new(edge_and_task1[:vertex].v, edge_and_task2[:vertex].v)
|
70
|
-
@@ids_and_edges.edges[complete_name] = true
|
71
|
-
return e
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
class UbiGraphSupport
|
77
|
-
|
78
|
-
def object?(name)
|
79
|
-
name.match(/.*\.o\Z/) != nil
|
80
|
-
end
|
81
|
-
|
82
|
-
def exe?(name)
|
83
|
-
name.match(/.*\.exe\Z/) != nil
|
84
|
-
end
|
85
|
-
def library?(name)
|
86
|
-
name.match(/.*\.a\Z/) != nil
|
87
|
-
end
|
88
|
-
def multitask?(name)
|
89
|
-
name.index("Sources") == 0
|
90
|
-
end
|
91
|
-
def interesting?(name)
|
92
|
-
exe?(name) || object?(name) || library?(name) || multitask?(name)
|
93
|
-
end
|
94
|
-
def create_vertices
|
95
|
-
@vertices = {}
|
96
|
-
@interesting_tasks.each do |task|
|
97
|
-
v = V.new(task.name)
|
98
|
-
@vertices[task.name] = {:vertex=>v, :task=>task}
|
99
|
-
end
|
100
|
-
end
|
101
|
-
def create_edges
|
102
|
-
@interesting_tasks.each do |task|
|
103
|
-
name = task.name
|
104
|
-
v1 = @vertices[name]
|
105
|
-
task.prerequisites.each do |p|
|
106
|
-
v2 = @vertices[p]
|
107
|
-
if (v2 != nil)
|
108
|
-
e = V.create_edge(v1, v2)
|
109
|
-
e.width=2 if e
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
def color_vertices
|
115
|
-
@vertices.each do |k, value|
|
116
|
-
v = value[:vertex]
|
117
|
-
v.v.label = k
|
118
|
-
set_attributes(v, k)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
def initialize
|
122
|
-
@interesting_tasks = Rake::Task.tasks.select { |i| interesting?(i.name) }
|
123
|
-
create_vertices
|
124
|
-
create_edges
|
125
|
-
color_vertices
|
126
|
-
end
|
127
|
-
|
128
|
-
def update_colors
|
129
|
-
@vertices.each_key do |k|
|
130
|
-
set_attributes(v, k)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def set_attributes(v, name)
|
135
|
-
v.v.color = state2color(name)
|
136
|
-
v.v.shape = name2shape(name)
|
137
|
-
v.v.size = name2size(name)
|
138
|
-
end
|
139
|
-
|
140
|
-
def name2shape(name)
|
141
|
-
if object?(name)
|
142
|
-
return 'cube'
|
143
|
-
elsif exe?(name)
|
144
|
-
return 'sphere'
|
145
|
-
elsif multitask?(name)
|
146
|
-
return 'torus'
|
147
|
-
else
|
148
|
-
return 'octahedron'
|
149
|
-
end
|
150
|
-
end
|
151
|
-
def name2size(name)
|
152
|
-
if object?(name)
|
153
|
-
return 0.7
|
154
|
-
elsif exe?(name)
|
155
|
-
return 1.2
|
156
|
-
else
|
157
|
-
return 1.0
|
158
|
-
end
|
159
|
-
end
|
160
|
-
def state2color(name)
|
161
|
-
t = @vertices[name][:task]
|
162
|
-
begin
|
163
|
-
if t.dirty?
|
164
|
-
return '#ff0000'
|
165
|
-
else
|
166
|
-
return '#00ff00'
|
167
|
-
end
|
168
|
-
rescue StandardError => bang
|
169
|
-
puts bang
|
170
|
-
return '#ff00ff'
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
def update(name, color)
|
175
|
-
@vertices[name][:vertex].v.color = color if @vertices[name]
|
176
|
-
end
|
177
|
-
|
178
|
-
YELLOW = '#ffff00'
|
179
|
-
def before_prerequisites(name)
|
180
|
-
update(name, YELLOW)
|
181
|
-
end
|
182
|
-
|
183
|
-
ORANGE = '#ff7f00'
|
184
|
-
def after_prerequisites(name)
|
185
|
-
update(name, ORANGE)
|
186
|
-
end
|
187
|
-
|
188
|
-
BLUE = '#0000ff'
|
189
|
-
def before_execute(name)
|
190
|
-
update(name, BLUE)
|
191
|
-
end
|
192
|
-
|
193
|
-
GREEN = '#00ff00'
|
194
|
-
def after_execute(name)
|
195
|
-
update(name, GREEN)
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
namespace :rubygraph do
|
200
|
-
task :init do
|
201
|
-
Rubigraph.init
|
202
|
-
V.startup
|
203
|
-
at_exit do
|
204
|
-
V.shutdown
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
desc 'clear rubygraph'
|
209
|
-
task :clear => :init do
|
210
|
-
Rubigraph.clear
|
211
|
-
V.reset
|
212
|
-
end
|
213
|
-
|
214
|
-
desc 'update rubygraph'
|
215
|
-
task :update => :init do
|
216
|
-
begin
|
217
|
-
require 'cxxproject/ext/rake_listener'
|
218
|
-
require 'cxxproject/ext/rake_dirty'
|
219
|
-
Rake::add_listener(UbiGraphSupport.new)
|
220
|
-
rescue StandardError => e
|
221
|
-
puts e
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
Utils.optional_package(define_ubigraph, nil)
|
228
|
-
end
|