cxxproject 0.5.48 → 0.5.59
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/Rakefile.rb +116 -116
- data/bin/cxx +10 -10
- data/lib/cxxproject.rb +23 -23
- data/lib/cxxproject/buildingblocks/binary_library.rb +39 -39
- data/lib/cxxproject/buildingblocks/building_block.rb +251 -239
- data/lib/cxxproject/buildingblocks/command_line.rb +79 -79
- data/lib/cxxproject/buildingblocks/custom_building_block.rb +39 -41
- data/lib/cxxproject/buildingblocks/executable.rb +257 -249
- data/lib/cxxproject/buildingblocks/has_dependencies_mixin.rb +83 -83
- data/lib/cxxproject/buildingblocks/has_includes_mixin.rb +20 -20
- data/lib/cxxproject/buildingblocks/has_libraries_mixin.rb +34 -34
- data/lib/cxxproject/buildingblocks/has_sources_mixin.rb +371 -364
- data/lib/cxxproject/buildingblocks/makefile.rb +153 -153
- data/lib/cxxproject/buildingblocks/module.rb +35 -35
- data/lib/cxxproject/buildingblocks/single_source.rb +33 -33
- data/lib/cxxproject/buildingblocks/source_library.rb +124 -124
- data/lib/cxxproject/errorparser/diab_compiler_error_parser.rb +40 -40
- data/lib/cxxproject/errorparser/diab_linker_error_parser.rb +41 -33
- data/lib/cxxproject/errorparser/error_parser.rb +50 -50
- data/lib/cxxproject/errorparser/gcc_compiler_error_parser.rb +35 -30
- data/lib/cxxproject/errorparser/gcc_linker_error_parser.rb +35 -29
- data/lib/cxxproject/errorparser/ti_compiler_error_parser.rb +30 -30
- data/lib/cxxproject/errorparser/ti_linker_error_parser.rb +30 -29
- data/lib/cxxproject/eval_context.rb +144 -136
- data/lib/cxxproject/ext/file.rb +71 -71
- data/lib/cxxproject/ext/filelist.rb +6 -6
- data/lib/cxxproject/ext/progressbar.rb +20 -20
- data/lib/cxxproject/ext/rake.rb +419 -397
- data/lib/cxxproject/ext/rake_dirty.rb +30 -30
- data/lib/cxxproject/ext/rake_listener.rb +59 -59
- data/lib/cxxproject/ext/stdout.rb +44 -44
- data/lib/cxxproject/ext/string.rb +9 -9
- data/lib/cxxproject/ide_interface.rb +187 -181
- data/lib/cxxproject/toolchain/clang.rb +39 -39
- data/lib/cxxproject/toolchain/colorizing_formatter.rb +99 -99
- data/lib/cxxproject/toolchain/diab.rb +3 -1
- data/lib/cxxproject/toolchain/gcc.rb +2 -1
- data/lib/cxxproject/toolchain/provider.rb +131 -128
- data/lib/cxxproject/toolchain/toolchain.rb +38 -38
- data/lib/cxxproject/toolchain/toolchain_benchmark.rb +23 -23
- data/lib/cxxproject/torake.rb +218 -216
- data/lib/cxxproject/utils/cleanup.rb +20 -20
- data/lib/cxxproject/utils/console.rb +6 -6
- data/lib/cxxproject/utils/exit_helper.rb +40 -40
- data/lib/cxxproject/utils/graphstream.rb +154 -154
- data/lib/cxxproject/utils/optional.rb +16 -16
- data/lib/cxxproject/utils/printer.rb +50 -50
- data/lib/cxxproject/utils/process.rb +52 -52
- data/lib/cxxproject/utils/progress.rb +66 -66
- data/lib/cxxproject/utils/progress_helper.rb +77 -77
- data/lib/cxxproject/utils/rbcurse.rb +284 -284
- data/lib/cxxproject/utils/rbcurse_executable_ext.rb +14 -14
- data/lib/cxxproject/utils/rbcurse_progress.rb +71 -71
- data/lib/cxxproject/utils/rbcurse_tasktable.rb +51 -51
- data/lib/cxxproject/utils/stats.rb +60 -60
- data/lib/cxxproject/utils/ubigraph.rb +228 -228
- data/lib/cxxproject/utils/utils.rb +60 -37
- data/lib/cxxproject/utils/valgrind.rb +11 -11
- data/lib/cxxproject/version.rb +7 -7
- data/lib/tools/Rakefile.rb.template +10 -10
- data/lib/tools/project.rb.template +6 -6
- data/lib/tools/project_wizard.rb +66 -66
- data/spec/building_block_spec.rb +56 -56
- data/spec/cxxproject_2_rake_spec.rb +186 -186
- data/spec/file_ext_spec.rb +30 -30
- data/spec/ide_interface_spec.rb +41 -41
- data/spec/object_dependency_spec.rb +83 -83
- data/spec/project_path_spec.rb +71 -71
- data/spec/rake_listener_ext_spec.rb +58 -58
- data/spec/spec_helper.rb +18 -18
- data/spec/string_spec.rb +11 -11
- data/spec/testdata/basic/exe12/project.rb +5 -5
- data/spec/testdata/basic/lib1/project.rb +5 -5
- data/spec/testdata/basic/lib2/project.rb +8 -8
- data/spec/testdata/multiple_levels/libs/lib1/project.rb +5 -5
- data/spec/testdata/multiple_levels/libs/lib2/project.rb +19 -19
- data/spec/testdata/multiple_levels/mainproject/basic/project.rb +8 -8
- data/spec/testdata/onlyOneHeader/Rakefile.rb +4 -4
- data/spec/testdata/onlyOneHeader/project.rb +4 -4
- data/spec/toolchain_spec.rb +29 -29
- metadata +58 -58
@@ -1,50 +1,50 @@
|
|
1
|
-
require 'cxxproject/toolchain/colorizing_formatter'
|
2
|
-
|
3
|
-
module Cxxproject
|
4
|
-
|
5
|
-
class Printer
|
6
|
-
@@cf = ColorizingFormatter.new
|
7
|
-
|
8
|
-
def self.printInfo(str)
|
9
|
-
if @@cf.enabled?
|
10
|
-
puts @@cf.printInfo(str)
|
11
|
-
else
|
12
|
-
puts str
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.printAdditionalInfo(str)
|
17
|
-
if @@cf.enabled?
|
18
|
-
puts @@cf.printAdditionalInfo(str)
|
19
|
-
else
|
20
|
-
puts str
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.printWarning(str)
|
25
|
-
if @@cf.enabled?
|
26
|
-
puts @@cf.printWarning(str)
|
27
|
-
else
|
28
|
-
puts str
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.printError(str)
|
33
|
-
if @@cf.enabled?
|
34
|
-
puts @@cf.printError(str)
|
35
|
-
else
|
36
|
-
puts str
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.printSuccess(str)
|
41
|
-
if @@cf.enabled?
|
42
|
-
puts @@cf.printSuccess(str)
|
43
|
-
else
|
44
|
-
puts str
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
1
|
+
require 'cxxproject/toolchain/colorizing_formatter'
|
2
|
+
|
3
|
+
module Cxxproject
|
4
|
+
|
5
|
+
class Printer
|
6
|
+
@@cf = ColorizingFormatter.new
|
7
|
+
|
8
|
+
def self.printInfo(str)
|
9
|
+
if @@cf.enabled?
|
10
|
+
puts @@cf.printInfo(str)
|
11
|
+
else
|
12
|
+
puts str
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.printAdditionalInfo(str)
|
17
|
+
if @@cf.enabled?
|
18
|
+
puts @@cf.printAdditionalInfo(str)
|
19
|
+
else
|
20
|
+
puts str
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.printWarning(str)
|
25
|
+
if @@cf.enabled?
|
26
|
+
puts @@cf.printWarning(str)
|
27
|
+
else
|
28
|
+
puts str
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.printError(str)
|
33
|
+
if @@cf.enabled?
|
34
|
+
puts @@cf.printError(str)
|
35
|
+
else
|
36
|
+
puts str
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.printSuccess(str)
|
41
|
+
if @@cf.enabled?
|
42
|
+
puts @@cf.printSuccess(str)
|
43
|
+
else
|
44
|
+
puts str
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -1,53 +1,53 @@
|
|
1
|
-
module Cxxproject
|
2
|
-
|
3
|
-
class ProcessHelper
|
4
|
-
@@pid = nil
|
5
|
-
|
6
|
-
def self.readOutput(sp, rd, wr)
|
7
|
-
wr.close
|
8
|
-
|
9
|
-
consoleOutput = ""
|
10
|
-
begin
|
11
|
-
while not rd.eof?
|
12
|
-
tmp = rd.read(1000)
|
13
|
-
if (tmp != nil)
|
14
|
-
consoleOutput << tmp
|
15
|
-
end
|
16
|
-
end
|
17
|
-
rescue Exception=>e
|
18
|
-
# Seems to be a bug in ruby: sometimes there is a bad file descriptor on Windows instead of eof, which causes
|
19
|
-
# an exception on read(). However, this happens not before everything is read, so there is no practical difference
|
20
|
-
# how to "break" the loop.
|
21
|
-
# This problem occurs on Windows command shell and Cygwin.
|
22
|
-
end
|
23
|
-
|
24
|
-
Process.wait(sp)
|
25
|
-
rd.close
|
26
|
-
|
27
|
-
# seems that pipe cannot handle non-ascii characters right on windows (even with correct encoding)
|
28
|
-
consoleOutput.gsub!(/\xE2\x80\x98/,"`") # ���
|
29
|
-
consoleOutput.gsub!(/\xE2\x80\x99/,"'") # ���
|
30
|
-
|
31
|
-
consoleOutput
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.spawnProcess(cmdLine)
|
35
|
-
return system
|
36
|
-
|
37
|
-
@@pid = spawn(cmdLine)
|
38
|
-
pid, status = Process.wait2(@@pid)
|
39
|
-
@@pid = nil
|
40
|
-
status.success?
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.killProcess
|
44
|
-
begin
|
45
|
-
Process.kill("KILL",@@pid)
|
46
|
-
rescue
|
47
|
-
end
|
48
|
-
@@pid = nil
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
1
|
+
module Cxxproject
|
2
|
+
|
3
|
+
class ProcessHelper
|
4
|
+
@@pid = nil
|
5
|
+
|
6
|
+
def self.readOutput(sp, rd, wr)
|
7
|
+
wr.close
|
8
|
+
|
9
|
+
consoleOutput = ""
|
10
|
+
begin
|
11
|
+
while not rd.eof?
|
12
|
+
tmp = rd.read(1000)
|
13
|
+
if (tmp != nil)
|
14
|
+
consoleOutput << tmp
|
15
|
+
end
|
16
|
+
end
|
17
|
+
rescue Exception=>e
|
18
|
+
# Seems to be a bug in ruby: sometimes there is a bad file descriptor on Windows instead of eof, which causes
|
19
|
+
# an exception on read(). However, this happens not before everything is read, so there is no practical difference
|
20
|
+
# how to "break" the loop.
|
21
|
+
# This problem occurs on Windows command shell and Cygwin.
|
22
|
+
end
|
23
|
+
|
24
|
+
Process.wait(sp)
|
25
|
+
rd.close
|
26
|
+
|
27
|
+
# seems that pipe cannot handle non-ascii characters right on windows (even with correct encoding)
|
28
|
+
consoleOutput.gsub!(/\xE2\x80\x98/,"`") # ���
|
29
|
+
consoleOutput.gsub!(/\xE2\x80\x99/,"'") # ���
|
30
|
+
|
31
|
+
consoleOutput
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.spawnProcess(cmdLine)
|
35
|
+
return system(cmdLine) if Cxxproject::Utils.old_ruby?
|
36
|
+
|
37
|
+
@@pid = spawn(cmdLine)
|
38
|
+
pid, status = Process.wait2(@@pid)
|
39
|
+
@@pid = nil
|
40
|
+
status.success?
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.killProcess
|
44
|
+
begin
|
45
|
+
Process.kill("KILL",@@pid)
|
46
|
+
rescue
|
47
|
+
end
|
48
|
+
@@pid = nil
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
53
|
end
|
@@ -1,66 +1,66 @@
|
|
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
|
+
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 +1,77 @@
|
|
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
|
+
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
|