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.
@@ -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