cxxproject 0.5.48 → 0.5.59
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/spec/file_ext_spec.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cxxproject'
|
3
|
-
|
4
|
-
describe File do
|
5
|
-
|
6
|
-
it 'should calc if a pathname is absolute' do
|
7
|
-
File.is_absolute?('/test').should eq(true)
|
8
|
-
File.is_absolute?('a:test').should eq(true)
|
9
|
-
File.is_absolute?('test').should eq(false)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should find a good relative directory for subdirectories' do
|
13
|
-
File.rel_from_to_project('x/main/a', 'x/main/b').should eq('../b/')
|
14
|
-
File.rel_from_to_project('x/main/a/b', 'x/main').should eq('../../')
|
15
|
-
File.rel_from_to_project('x/main', 'x/main/a/b').should eq('a/b/')
|
16
|
-
File.rel_from_to_project('x/main', 'x/main').should eq('')
|
17
|
-
File.rel_from_to_project('x/main', nil).should eq(nil)
|
18
|
-
File.rel_from_to_project(nil, 'x/main').should eq(nil)
|
19
|
-
File.rel_from_to_project('x/a', 'y/b').should eq("../../y/b/")
|
20
|
-
File.rel_from_to_project('x/x', 'x/x').should eq('')
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'add prefix only if file is not absolute' do
|
24
|
-
File.add_prefix('abc/', '/usr/local').should eq('/usr/local')
|
25
|
-
File.add_prefix('abc/', 'nix/usr/local').should eq('abc/nix/usr/local')
|
26
|
-
File.add_prefix('abc/', 'c:/usr/local').should eq('c:/usr/local')
|
27
|
-
File.add_prefix('abc/', 'c:\\usr/local').should eq('c:\\usr/local')
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cxxproject'
|
3
|
+
|
4
|
+
describe File do
|
5
|
+
|
6
|
+
it 'should calc if a pathname is absolute' do
|
7
|
+
File.is_absolute?('/test').should eq(true)
|
8
|
+
File.is_absolute?('a:test').should eq(true)
|
9
|
+
File.is_absolute?('test').should eq(false)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should find a good relative directory for subdirectories' do
|
13
|
+
File.rel_from_to_project('x/main/a', 'x/main/b').should eq('../b/')
|
14
|
+
File.rel_from_to_project('x/main/a/b', 'x/main').should eq('../../')
|
15
|
+
File.rel_from_to_project('x/main', 'x/main/a/b').should eq('a/b/')
|
16
|
+
File.rel_from_to_project('x/main', 'x/main').should eq('')
|
17
|
+
File.rel_from_to_project('x/main', nil).should eq(nil)
|
18
|
+
File.rel_from_to_project(nil, 'x/main').should eq(nil)
|
19
|
+
File.rel_from_to_project('x/a', 'y/b').should eq("../../y/b/")
|
20
|
+
File.rel_from_to_project('x/x', 'x/x').should eq('')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'add prefix only if file is not absolute' do
|
24
|
+
File.add_prefix('abc/', '/usr/local').should eq('/usr/local')
|
25
|
+
File.add_prefix('abc/', 'nix/usr/local').should eq('abc/nix/usr/local')
|
26
|
+
File.add_prefix('abc/', 'c:/usr/local').should eq('c:/usr/local')
|
27
|
+
File.add_prefix('abc/', 'c:\\usr/local').should eq('c:\\usr/local')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/spec/ide_interface_spec.rb
CHANGED
@@ -1,41 +1,41 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cxxproject/ide_interface'
|
3
|
-
require 'cxxproject/utils/utils'
|
4
|
-
require 'cxxproject/errorparser/error_parser'
|
5
|
-
|
6
|
-
def check_long(e, l)
|
7
|
-
e.next.should eq(l)
|
8
|
-
e.next.should eq(0)
|
9
|
-
e.next.should eq(0)
|
10
|
-
e.next.should eq(0)
|
11
|
-
end
|
12
|
-
def check_string(e, s)
|
13
|
-
s.bytes do |i|
|
14
|
-
e.next.should eq(i)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe Cxxproject::IDEInterface do
|
19
|
-
|
20
|
-
it 'should create a correct package from an error-array' do
|
21
|
-
ide = Cxxproject::IDEInterface.new
|
22
|
-
error = Cxxproject::ErrorDesc.new
|
23
|
-
error.severity = 2
|
24
|
-
error.line_number = 10
|
25
|
-
error.file_name = 'filename'
|
26
|
-
error.message = 'error'
|
27
|
-
packet = ide.create_error_packet(error)
|
28
|
-
|
29
|
-
if not Cxxproject::Utils.old_ruby? # in Ruby 1.8.6 there is no bytes methods...
|
30
|
-
e = packet.bytes
|
31
|
-
e.next.should eq(1)
|
32
|
-
check_long(e, 22)
|
33
|
-
check_long(e, 8)
|
34
|
-
check_string(e, 'filename')
|
35
|
-
check_long(e, 10)
|
36
|
-
e.next.should eq(2)
|
37
|
-
check_string(e, 'error')
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cxxproject/ide_interface'
|
3
|
+
require 'cxxproject/utils/utils'
|
4
|
+
require 'cxxproject/errorparser/error_parser'
|
5
|
+
|
6
|
+
def check_long(e, l)
|
7
|
+
e.next.should eq(l)
|
8
|
+
e.next.should eq(0)
|
9
|
+
e.next.should eq(0)
|
10
|
+
e.next.should eq(0)
|
11
|
+
end
|
12
|
+
def check_string(e, s)
|
13
|
+
s.bytes do |i|
|
14
|
+
e.next.should eq(i)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe Cxxproject::IDEInterface do
|
19
|
+
|
20
|
+
it 'should create a correct package from an error-array' do
|
21
|
+
ide = Cxxproject::IDEInterface.new
|
22
|
+
error = Cxxproject::ErrorDesc.new
|
23
|
+
error.severity = 2
|
24
|
+
error.line_number = 10
|
25
|
+
error.file_name = 'filename'
|
26
|
+
error.message = 'error'
|
27
|
+
packet = ide.create_error_packet(error)
|
28
|
+
|
29
|
+
if not Cxxproject::Utils.old_ruby? # in Ruby 1.8.6 there is no bytes methods...
|
30
|
+
e = packet.bytes
|
31
|
+
e.next.should eq(1)
|
32
|
+
check_long(e, 22)
|
33
|
+
check_long(e, 8)
|
34
|
+
check_string(e, 'filename')
|
35
|
+
check_long(e, 10)
|
36
|
+
e.next.should eq(2)
|
37
|
+
check_string(e, 'error')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -1,83 +1,83 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cxxproject'
|
3
|
-
require 'cxxproject/ext/rake_listener.rb'
|
4
|
-
require 'cxxproject/utils/cleanup'
|
5
|
-
|
6
|
-
describe Rake::Task do
|
7
|
-
|
8
|
-
before(:each) do
|
9
|
-
Rake::application.options.silent = true
|
10
|
-
Cxxproject::Utils.cleanup_rake
|
11
|
-
end
|
12
|
-
after(:each) do
|
13
|
-
Cxxproject::Utils.cleanup_rake
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should fail if source of object is missing' do
|
17
|
-
file 'test.cc' => 'compiler'
|
18
|
-
File.delete('test.cc') if File.exists?('test.cc')
|
19
|
-
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
20
|
-
cxx = CxxProject2Rake.new([], 'build', GCCChain)
|
21
|
-
|
22
|
-
task = Rake::application['lib:testlib']
|
23
|
-
task.invoke
|
24
|
-
task.failure.should eq(true)
|
25
|
-
|
26
|
-
FileUtils.rm_rf('build')
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should not fail if include-dependency of object is missing' do
|
30
|
-
File.open('test.cc', 'w') do |io|
|
31
|
-
io.puts('#include "test.h"')
|
32
|
-
end
|
33
|
-
|
34
|
-
File.open('test.h', 'w') do |io|
|
35
|
-
end
|
36
|
-
|
37
|
-
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
38
|
-
CxxProject2Rake.new([], 'build', GCCChain)
|
39
|
-
|
40
|
-
task = Rake::application['lib:testlib']
|
41
|
-
task.invoke
|
42
|
-
task.failure.should eq(false)
|
43
|
-
|
44
|
-
Cxxproject::Utils.cleanup_rake
|
45
|
-
|
46
|
-
FileUtils.rm_rf('test.h')
|
47
|
-
File.open('test.cc', 'w') do |io|
|
48
|
-
end
|
49
|
-
|
50
|
-
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
51
|
-
CxxProject2Rake.new([], 'build', GCCChain)
|
52
|
-
|
53
|
-
task = Rake::application['build/libs/libtestlib.a']
|
54
|
-
task.invoke
|
55
|
-
task.failure.should eq(false)
|
56
|
-
|
57
|
-
FileUtils.rm_rf('test.cc')
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'should not fail if generated headerfile is missing' do
|
61
|
-
file 'test.h' do
|
62
|
-
sh 'touch test.h'
|
63
|
-
end
|
64
|
-
|
65
|
-
file 'test.cc' => 'test.h' do |t|
|
66
|
-
File.open(t.name, 'w') do |io|
|
67
|
-
io.puts('#include "test.h"')
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
72
|
-
CxxProject2Rake.new([], 'build', GCCChain)
|
73
|
-
|
74
|
-
task = Rake::application['build/libs/libtestlib.a']
|
75
|
-
task.invoke
|
76
|
-
task.failure.should eq(false)
|
77
|
-
|
78
|
-
FileUtils.rm_rf('build')
|
79
|
-
FileUtils.rm_rf('test.cc')
|
80
|
-
FileUtils.rm_rf('test.h')
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cxxproject'
|
3
|
+
require 'cxxproject/ext/rake_listener.rb'
|
4
|
+
require 'cxxproject/utils/cleanup'
|
5
|
+
|
6
|
+
describe Rake::Task do
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
Rake::application.options.silent = true
|
10
|
+
Cxxproject::Utils.cleanup_rake
|
11
|
+
end
|
12
|
+
after(:each) do
|
13
|
+
Cxxproject::Utils.cleanup_rake
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should fail if source of object is missing' do
|
17
|
+
file 'test.cc' => 'compiler'
|
18
|
+
File.delete('test.cc') if File.exists?('test.cc')
|
19
|
+
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
20
|
+
cxx = CxxProject2Rake.new([], 'build', GCCChain)
|
21
|
+
|
22
|
+
task = Rake::application['lib:testlib']
|
23
|
+
task.invoke
|
24
|
+
task.failure.should eq(true)
|
25
|
+
|
26
|
+
FileUtils.rm_rf('build')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should not fail if include-dependency of object is missing' do
|
30
|
+
File.open('test.cc', 'w') do |io|
|
31
|
+
io.puts('#include "test.h"')
|
32
|
+
end
|
33
|
+
|
34
|
+
File.open('test.h', 'w') do |io|
|
35
|
+
end
|
36
|
+
|
37
|
+
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
38
|
+
CxxProject2Rake.new([], 'build', GCCChain)
|
39
|
+
|
40
|
+
task = Rake::application['lib:testlib']
|
41
|
+
task.invoke
|
42
|
+
task.failure.should eq(false)
|
43
|
+
|
44
|
+
Cxxproject::Utils.cleanup_rake
|
45
|
+
|
46
|
+
FileUtils.rm_rf('test.h')
|
47
|
+
File.open('test.cc', 'w') do |io|
|
48
|
+
end
|
49
|
+
|
50
|
+
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
51
|
+
CxxProject2Rake.new([], 'build', GCCChain)
|
52
|
+
|
53
|
+
task = Rake::application['build/libs/libtestlib.a']
|
54
|
+
task.invoke
|
55
|
+
task.failure.should eq(false)
|
56
|
+
|
57
|
+
FileUtils.rm_rf('test.cc')
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should not fail if generated headerfile is missing' do
|
61
|
+
file 'test.h' do
|
62
|
+
sh 'touch test.h'
|
63
|
+
end
|
64
|
+
|
65
|
+
file 'test.cc' => 'test.h' do |t|
|
66
|
+
File.open(t.name, 'w') do |io|
|
67
|
+
io.puts('#include "test.h"')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
sl = Cxxproject::SourceLibrary.new('testlib').set_sources(['test.cc']).set_project_dir(".")
|
72
|
+
CxxProject2Rake.new([], 'build', GCCChain)
|
73
|
+
|
74
|
+
task = Rake::application['build/libs/libtestlib.a']
|
75
|
+
task.invoke
|
76
|
+
task.failure.should eq(false)
|
77
|
+
|
78
|
+
FileUtils.rm_rf('build')
|
79
|
+
FileUtils.rm_rf('test.cc')
|
80
|
+
FileUtils.rm_rf('test.h')
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
data/spec/project_path_spec.rb
CHANGED
@@ -1,71 +1,71 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cxxproject'
|
3
|
-
require 'cxxproject/utils/cleanup'
|
4
|
-
|
5
|
-
RSPECDIR = File.dirname(__FILE__)
|
6
|
-
|
7
|
-
describe CxxProject2Rake do
|
8
|
-
|
9
|
-
def execute_all_tasks(tasks)
|
10
|
-
tasks.each do |t|
|
11
|
-
t.invoke
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def fresh_cxx(outputdir,base)
|
16
|
-
Cxxproject::Utils.cleanup_rake
|
17
|
-
project_configs = nil
|
18
|
-
cd base do # have to be relative to base
|
19
|
-
project_configs = Dir.glob('**/project.rb')
|
20
|
-
end
|
21
|
-
CxxProject2Rake.new(project_configs, outputdir, GCCChain, base)
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
# def is_older? fileA, fileB
|
26
|
-
# File.mtime(fileA) < File.mtime(fileB)
|
27
|
-
# end
|
28
|
-
|
29
|
-
# def is_newer? fileA, fileB
|
30
|
-
# File.mtime(fileA) > File.mtime(fileB)
|
31
|
-
# end
|
32
|
-
|
33
|
-
def test_on_level(base, outputdir)
|
34
|
-
libOne = "#{outputdir}/libs/lib1.a"
|
35
|
-
libTwo = "#{outputdir}/libs/lib2.a"
|
36
|
-
exe = "#{outputdir}/basic.exe"
|
37
|
-
exe2 = "#{outputdir}/debug.exe"
|
38
|
-
|
39
|
-
rm_r outputdir if File.directory?(outputdir)
|
40
|
-
tasks = fresh_cxx(outputdir, base).all_tasks
|
41
|
-
CLOBBER.each { |fn| rm_r fn rescue nil }
|
42
|
-
|
43
|
-
[libOne,libTwo,exe,exe2].all? {|f| File.exists?(f).should be_false }
|
44
|
-
|
45
|
-
execute_all_tasks(tasks)
|
46
|
-
|
47
|
-
[libOne,libTwo,exe,exe2].all? {|f| File.exists?(f).should be_true }
|
48
|
-
|
49
|
-
# cleanup
|
50
|
-
rm_r outputdir if File.directory?(outputdir)
|
51
|
-
Cxxproject::Utils.cleanup_rake
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should resolve paths on different levels' do
|
55
|
-
outputdir = 'output'
|
56
|
-
|
57
|
-
cd("#{RSPECDIR}/testdata/multiple_levels", :verbose => false) do
|
58
|
-
test_on_level(".", outputdir)
|
59
|
-
end
|
60
|
-
|
61
|
-
cd("#{RSPECDIR}/testdata/multiple_levels/mainproject", :verbose => false) do
|
62
|
-
test_on_level("..", outputdir)
|
63
|
-
end
|
64
|
-
|
65
|
-
cd("#{RSPECDIR}/testdata", :verbose => false) do
|
66
|
-
test_on_level("multiple_levels/", outputdir)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cxxproject'
|
3
|
+
require 'cxxproject/utils/cleanup'
|
4
|
+
|
5
|
+
RSPECDIR = File.dirname(__FILE__)
|
6
|
+
|
7
|
+
describe CxxProject2Rake do
|
8
|
+
|
9
|
+
def execute_all_tasks(tasks)
|
10
|
+
tasks.each do |t|
|
11
|
+
t.invoke
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def fresh_cxx(outputdir,base)
|
16
|
+
Cxxproject::Utils.cleanup_rake
|
17
|
+
project_configs = nil
|
18
|
+
cd base do # have to be relative to base
|
19
|
+
project_configs = Dir.glob('**/project.rb')
|
20
|
+
end
|
21
|
+
CxxProject2Rake.new(project_configs, outputdir, GCCChain, base)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
# def is_older? fileA, fileB
|
26
|
+
# File.mtime(fileA) < File.mtime(fileB)
|
27
|
+
# end
|
28
|
+
|
29
|
+
# def is_newer? fileA, fileB
|
30
|
+
# File.mtime(fileA) > File.mtime(fileB)
|
31
|
+
# end
|
32
|
+
|
33
|
+
def test_on_level(base, outputdir)
|
34
|
+
libOne = "#{outputdir}/libs/lib1.a"
|
35
|
+
libTwo = "#{outputdir}/libs/lib2.a"
|
36
|
+
exe = "#{outputdir}/basic.exe"
|
37
|
+
exe2 = "#{outputdir}/debug.exe"
|
38
|
+
|
39
|
+
rm_r outputdir if File.directory?(outputdir)
|
40
|
+
tasks = fresh_cxx(outputdir, base).all_tasks
|
41
|
+
CLOBBER.each { |fn| rm_r fn rescue nil }
|
42
|
+
|
43
|
+
[libOne,libTwo,exe,exe2].all? {|f| File.exists?(f).should be_false }
|
44
|
+
|
45
|
+
execute_all_tasks(tasks)
|
46
|
+
|
47
|
+
[libOne,libTwo,exe,exe2].all? {|f| File.exists?(f).should be_true }
|
48
|
+
|
49
|
+
# cleanup
|
50
|
+
rm_r outputdir if File.directory?(outputdir)
|
51
|
+
Cxxproject::Utils.cleanup_rake
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should resolve paths on different levels' do
|
55
|
+
outputdir = 'output'
|
56
|
+
|
57
|
+
cd("#{RSPECDIR}/testdata/multiple_levels", :verbose => false) do
|
58
|
+
test_on_level(".", outputdir)
|
59
|
+
end
|
60
|
+
|
61
|
+
cd("#{RSPECDIR}/testdata/multiple_levels/mainproject", :verbose => false) do
|
62
|
+
test_on_level("..", outputdir)
|
63
|
+
end
|
64
|
+
|
65
|
+
cd("#{RSPECDIR}/testdata", :verbose => false) do
|
66
|
+
test_on_level("multiple_levels/", outputdir)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|