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,153 +1,153 @@
|
|
1
|
-
require 'cxxproject/buildingblocks/building_block'
|
2
|
-
require 'cxxproject/buildingblocks/has_libraries_mixin'
|
3
|
-
require 'cxxproject/utils/printer'
|
4
|
-
require 'cxxproject/utils/process'
|
5
|
-
|
6
|
-
module Cxxproject
|
7
|
-
class Makefile < BuildingBlock
|
8
|
-
include HasLibraries
|
9
|
-
|
10
|
-
def set_target(x)
|
11
|
-
@target = x
|
12
|
-
self
|
13
|
-
end
|
14
|
-
|
15
|
-
def set_flags(x)
|
16
|
-
@flags = x
|
17
|
-
self
|
18
|
-
end
|
19
|
-
|
20
|
-
def get_flags(x)
|
21
|
-
@flags
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
def set_makefile(x)
|
26
|
-
@makefile = x
|
27
|
-
self
|
28
|
-
end
|
29
|
-
|
30
|
-
def set_path_to(hash)
|
31
|
-
@path_to = hash
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
def get_makefile
|
36
|
-
@makefile
|
37
|
-
end
|
38
|
-
|
39
|
-
def get_target
|
40
|
-
@target
|
41
|
-
end
|
42
|
-
|
43
|
-
def initialize(mfile, mtarget)
|
44
|
-
@target = mtarget != "" ? mtarget : "all"
|
45
|
-
@makefile = mfile
|
46
|
-
@flags = ""
|
47
|
-
@path_to = {}
|
48
|
-
@num = Rake.application.makefile_number
|
49
|
-
super(get_task_name)
|
50
|
-
end
|
51
|
-
|
52
|
-
def get_task_name()
|
53
|
-
"makefile (#{@num}): " + get_makefile + (get_target ? ("_"+get_target) : "")
|
54
|
-
end
|
55
|
-
|
56
|
-
def calc_pathes_to_projects
|
57
|
-
vars = []
|
58
|
-
@path_to.each do |k,v|
|
59
|
-
bb = ALL_BUILDING_BLOCKS[p]
|
60
|
-
if bb
|
61
|
-
pref = File.rel_from_to_project(@project_dir,bb.project_dir)
|
62
|
-
rex = Regexp.new "\\.\\.\\/(.*)#{p}"
|
63
|
-
var = pref.scan(rex)[0]
|
64
|
-
if var
|
65
|
-
vars << "PATH_TO_#{p}=#{var[0]}"
|
66
|
-
end
|
67
|
-
else
|
68
|
-
vars << "PATH_TO_#{k}=#{v}"
|
69
|
-
end
|
70
|
-
end
|
71
|
-
vars.join(" ")
|
72
|
-
end
|
73
|
-
|
74
|
-
def executeCmd(cmd)
|
75
|
-
Dir.chdir(@project_dir) do
|
76
|
-
check_config_file
|
77
|
-
puts cmd + (RakeFileUtils.verbose ? " (executed in '#{@project_dir}')" : "")
|
78
|
-
cmd_result = false
|
79
|
-
begin
|
80
|
-
cmd_result = ProcessHelper.spawnProcess(cmd + " 2>&1")
|
81
|
-
rescue
|
82
|
-
end
|
83
|
-
if (cmd_result == false)
|
84
|
-
if Rake.application.idei
|
85
|
-
err_res = ErrorDesc.new
|
86
|
-
err_res.file_name = @project_dir + "/" + get_makefile()
|
87
|
-
err_res.line_number = 1
|
88
|
-
err_res.severity = ErrorParser::SEVERITY_ERROR
|
89
|
-
if get_target != ""
|
90
|
-
err_res.message = "Target \"#{get_target}\" failed"
|
91
|
-
else
|
92
|
-
err_res.message = "Failed"
|
93
|
-
end
|
94
|
-
Rake.application.idei.set_errors([err_res])
|
95
|
-
end
|
96
|
-
Printer.printError "Error: command \"#{cmd}\" failed" + (RakeFileUtils.verbose ? "" : " (executed in '#{@project_dir}')")
|
97
|
-
raise SystemCommandFailed.new
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def convert_to_rake()
|
103
|
-
pathes_to_projects = calc_pathes_to_projects
|
104
|
-
|
105
|
-
mfile = get_makefile()
|
106
|
-
make = @tcs[:MAKE]
|
107
|
-
cmd = remove_empty_strings_and_join([
|
108
|
-
make[:COMMAND], # make
|
109
|
-
get_target, # all
|
110
|
-
make[:MAKE_FLAGS],
|
111
|
-
@flags, # -j
|
112
|
-
make[:DIR_FLAG], # -C
|
113
|
-
File.dirname(mfile), # x/y
|
114
|
-
make[:FILE_FLAG], # -f
|
115
|
-
File.basename(mfile), # x/y/makefile
|
116
|
-
pathes_to_projects
|
117
|
-
])
|
118
|
-
|
119
|
-
mfileTask = task get_task_name do
|
120
|
-
executeCmd(cmd)
|
121
|
-
end
|
122
|
-
|
123
|
-
mfileTask.immediate_output = true
|
124
|
-
mfileTask.transparent_timestamp = true
|
125
|
-
mfileTask.type = Rake::Task::MAKE
|
126
|
-
mfileTask.enhance(@config_files)
|
127
|
-
|
128
|
-
create_clean_task(@project_dir+"/"+mfile, pathes_to_projects)
|
129
|
-
setup_rake_dependencies(mfileTask)
|
130
|
-
mfileTask
|
131
|
-
end
|
132
|
-
|
133
|
-
def create_clean_task(mfile, pathes_to_projects)
|
134
|
-
# generate the clean task
|
135
|
-
if not Rake.application["clean"].prerequisites.include?(mfile+"Clean")
|
136
|
-
cmd = remove_empty_strings_and_join([@tcs[:MAKE][:COMMAND], # make
|
137
|
-
@tcs[:MAKE][:CLEAN], # clean
|
138
|
-
@tcs[:MAKE][:DIR_FLAG], # -C
|
139
|
-
File.dirname(mfile), # x/y
|
140
|
-
@tcs[:MAKE][:FILE_FLAG], # -f
|
141
|
-
File.basename(mfile), # x/y/makefile
|
142
|
-
pathes_to_projects
|
143
|
-
])
|
144
|
-
mfileCleanTask = task mfile+"Clean" do
|
145
|
-
executeCmd(cmd)
|
146
|
-
end
|
147
|
-
mfileCleanTask.immediate_output = true
|
148
|
-
Rake.application["clean"].enhance([mfileCleanTask])
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
end
|
153
|
-
end
|
1
|
+
require 'cxxproject/buildingblocks/building_block'
|
2
|
+
require 'cxxproject/buildingblocks/has_libraries_mixin'
|
3
|
+
require 'cxxproject/utils/printer'
|
4
|
+
require 'cxxproject/utils/process'
|
5
|
+
|
6
|
+
module Cxxproject
|
7
|
+
class Makefile < BuildingBlock
|
8
|
+
include HasLibraries
|
9
|
+
|
10
|
+
def set_target(x)
|
11
|
+
@target = x
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_flags(x)
|
16
|
+
@flags = x
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_flags(x)
|
21
|
+
@flags
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def set_makefile(x)
|
26
|
+
@makefile = x
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_path_to(hash)
|
31
|
+
@path_to = hash
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_makefile
|
36
|
+
@makefile
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_target
|
40
|
+
@target
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(mfile, mtarget)
|
44
|
+
@target = mtarget != "" ? mtarget : "all"
|
45
|
+
@makefile = mfile
|
46
|
+
@flags = ""
|
47
|
+
@path_to = {}
|
48
|
+
@num = Rake.application.makefile_number
|
49
|
+
super(get_task_name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_task_name()
|
53
|
+
"makefile (#{@num}): " + get_makefile + (get_target ? ("_"+get_target) : "")
|
54
|
+
end
|
55
|
+
|
56
|
+
def calc_pathes_to_projects
|
57
|
+
vars = []
|
58
|
+
@path_to.each do |k,v|
|
59
|
+
bb = ALL_BUILDING_BLOCKS[p]
|
60
|
+
if bb
|
61
|
+
pref = File.rel_from_to_project(@project_dir,bb.project_dir)
|
62
|
+
rex = Regexp.new "\\.\\.\\/(.*)#{p}"
|
63
|
+
var = pref.scan(rex)[0]
|
64
|
+
if var
|
65
|
+
vars << "PATH_TO_#{p}=#{var[0]}"
|
66
|
+
end
|
67
|
+
else
|
68
|
+
vars << "PATH_TO_#{k}=#{v}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
vars.join(" ")
|
72
|
+
end
|
73
|
+
|
74
|
+
def executeCmd(cmd)
|
75
|
+
Dir.chdir(@project_dir) do
|
76
|
+
check_config_file
|
77
|
+
puts cmd + (RakeFileUtils.verbose ? " (executed in '#{@project_dir}')" : "")
|
78
|
+
cmd_result = false
|
79
|
+
begin
|
80
|
+
cmd_result = ProcessHelper.spawnProcess(cmd + " 2>&1")
|
81
|
+
rescue
|
82
|
+
end
|
83
|
+
if (cmd_result == false)
|
84
|
+
if Rake.application.idei
|
85
|
+
err_res = ErrorDesc.new
|
86
|
+
err_res.file_name = @project_dir + "/" + get_makefile()
|
87
|
+
err_res.line_number = 1
|
88
|
+
err_res.severity = ErrorParser::SEVERITY_ERROR
|
89
|
+
if get_target != ""
|
90
|
+
err_res.message = "Target \"#{get_target}\" failed"
|
91
|
+
else
|
92
|
+
err_res.message = "Failed"
|
93
|
+
end
|
94
|
+
Rake.application.idei.set_errors([err_res])
|
95
|
+
end
|
96
|
+
Printer.printError "Error: command \"#{cmd}\" failed" + (RakeFileUtils.verbose ? "" : " (executed in '#{@project_dir}')")
|
97
|
+
raise SystemCommandFailed.new
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def convert_to_rake()
|
103
|
+
pathes_to_projects = calc_pathes_to_projects
|
104
|
+
|
105
|
+
mfile = get_makefile()
|
106
|
+
make = @tcs[:MAKE]
|
107
|
+
cmd = remove_empty_strings_and_join([
|
108
|
+
make[:COMMAND], # make
|
109
|
+
get_target, # all
|
110
|
+
make[:MAKE_FLAGS],
|
111
|
+
@flags, # -j
|
112
|
+
make[:DIR_FLAG], # -C
|
113
|
+
File.dirname(mfile), # x/y
|
114
|
+
make[:FILE_FLAG], # -f
|
115
|
+
File.basename(mfile), # x/y/makefile
|
116
|
+
pathes_to_projects
|
117
|
+
])
|
118
|
+
|
119
|
+
mfileTask = task get_task_name do
|
120
|
+
executeCmd(cmd)
|
121
|
+
end
|
122
|
+
|
123
|
+
mfileTask.immediate_output = true
|
124
|
+
mfileTask.transparent_timestamp = true
|
125
|
+
mfileTask.type = Rake::Task::MAKE
|
126
|
+
mfileTask.enhance(@config_files)
|
127
|
+
|
128
|
+
create_clean_task(@project_dir+"/"+mfile, pathes_to_projects)
|
129
|
+
setup_rake_dependencies(mfileTask)
|
130
|
+
mfileTask
|
131
|
+
end
|
132
|
+
|
133
|
+
def create_clean_task(mfile, pathes_to_projects)
|
134
|
+
# generate the clean task
|
135
|
+
if not Rake.application["clean"].prerequisites.include?(mfile+"Clean")
|
136
|
+
cmd = remove_empty_strings_and_join([@tcs[:MAKE][:COMMAND], # make
|
137
|
+
@tcs[:MAKE][:CLEAN], # clean
|
138
|
+
@tcs[:MAKE][:DIR_FLAG], # -C
|
139
|
+
File.dirname(mfile), # x/y
|
140
|
+
@tcs[:MAKE][:FILE_FLAG], # -f
|
141
|
+
File.basename(mfile), # x/y/makefile
|
142
|
+
pathes_to_projects
|
143
|
+
])
|
144
|
+
mfileCleanTask = task mfile+"Clean" do
|
145
|
+
executeCmd(cmd)
|
146
|
+
end
|
147
|
+
mfileCleanTask.immediate_output = true
|
148
|
+
Rake.application["clean"].enhance([mfileCleanTask])
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
require 'cxxproject/buildingblocks/building_block'
|
2
|
-
require 'cxxproject/buildingblocks/has_libraries_mixin'
|
3
|
-
require 'cxxproject/buildingblocks/has_sources_mixin'
|
4
|
-
require 'cxxproject/buildingblocks/has_includes_mixin'
|
5
|
-
|
6
|
-
|
7
|
-
# can be used as wrapper for other tasks
|
8
|
-
module Cxxproject
|
9
|
-
class ModuleBuildingBlock < BuildingBlock
|
10
|
-
|
11
|
-
attr_accessor :contents
|
12
|
-
attr_accessor :main_content
|
13
|
-
attr_accessor :last_content
|
14
|
-
|
15
|
-
def initialize(name)
|
16
|
-
super
|
17
|
-
@contents = []
|
18
|
-
@last_content = self
|
19
|
-
@main_content = nil
|
20
|
-
end
|
21
|
-
|
22
|
-
def get_task_name()
|
23
|
-
name
|
24
|
-
end
|
25
|
-
|
26
|
-
def convert_to_rake()
|
27
|
-
res = task get_task_name
|
28
|
-
res.type = Rake::Task::MODULE
|
29
|
-
res.transparent_timestamp = true
|
30
|
-
|
31
|
-
setup_rake_dependencies(res)
|
32
|
-
res
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
1
|
+
require 'cxxproject/buildingblocks/building_block'
|
2
|
+
require 'cxxproject/buildingblocks/has_libraries_mixin'
|
3
|
+
require 'cxxproject/buildingblocks/has_sources_mixin'
|
4
|
+
require 'cxxproject/buildingblocks/has_includes_mixin'
|
5
|
+
|
6
|
+
|
7
|
+
# can be used as wrapper for other tasks
|
8
|
+
module Cxxproject
|
9
|
+
class ModuleBuildingBlock < BuildingBlock
|
10
|
+
|
11
|
+
attr_accessor :contents
|
12
|
+
attr_accessor :main_content
|
13
|
+
attr_accessor :last_content
|
14
|
+
|
15
|
+
def initialize(name)
|
16
|
+
super
|
17
|
+
@contents = []
|
18
|
+
@last_content = self
|
19
|
+
@main_content = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_task_name()
|
23
|
+
name
|
24
|
+
end
|
25
|
+
|
26
|
+
def convert_to_rake()
|
27
|
+
res = task get_task_name
|
28
|
+
res.type = Rake::Task::MODULE
|
29
|
+
res.transparent_timestamp = true
|
30
|
+
|
31
|
+
setup_rake_dependencies(res)
|
32
|
+
res
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,33 +1,33 @@
|
|
1
|
-
require 'cxxproject/buildingblocks/building_block'
|
2
|
-
require 'cxxproject/buildingblocks/has_sources_mixin'
|
3
|
-
require 'cxxproject/buildingblocks/has_includes_mixin'
|
4
|
-
|
5
|
-
module Cxxproject
|
6
|
-
module SingleSourceModule
|
7
|
-
def get_task_name()
|
8
|
-
get_sources_task_name
|
9
|
-
end
|
10
|
-
|
11
|
-
def convert_to_rake()
|
12
|
-
objects_multitask = prepare_tasks_for_objects()
|
13
|
-
|
14
|
-
if objects_multitask
|
15
|
-
namespace "compile" do
|
16
|
-
desc "compile sources in #{@name}-configuration"
|
17
|
-
task @name => objects_multitask
|
18
|
-
end
|
19
|
-
objects_multitask.add_description("compile sources only")
|
20
|
-
end
|
21
|
-
|
22
|
-
setup_rake_dependencies(objects_multitask)
|
23
|
-
objects_multitask
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class SingleSource < BuildingBlock
|
28
|
-
include HasSources
|
29
|
-
include HasIncludes
|
30
|
-
|
31
|
-
include SingleSourceModule
|
32
|
-
end
|
33
|
-
end
|
1
|
+
require 'cxxproject/buildingblocks/building_block'
|
2
|
+
require 'cxxproject/buildingblocks/has_sources_mixin'
|
3
|
+
require 'cxxproject/buildingblocks/has_includes_mixin'
|
4
|
+
|
5
|
+
module Cxxproject
|
6
|
+
module SingleSourceModule
|
7
|
+
def get_task_name()
|
8
|
+
get_sources_task_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def convert_to_rake()
|
12
|
+
objects_multitask = prepare_tasks_for_objects()
|
13
|
+
|
14
|
+
if objects_multitask
|
15
|
+
namespace "compile" do
|
16
|
+
desc "compile sources in #{@name}-configuration"
|
17
|
+
task @name => objects_multitask
|
18
|
+
end
|
19
|
+
objects_multitask.add_description("compile sources only")
|
20
|
+
end
|
21
|
+
|
22
|
+
setup_rake_dependencies(objects_multitask)
|
23
|
+
objects_multitask
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class SingleSource < BuildingBlock
|
28
|
+
include HasSources
|
29
|
+
include HasIncludes
|
30
|
+
|
31
|
+
include SingleSourceModule
|
32
|
+
end
|
33
|
+
end
|
@@ -1,124 +1,124 @@
|
|
1
|
-
require 'cxxproject/buildingblocks/building_block'
|
2
|
-
require 'cxxproject/buildingblocks/has_libraries_mixin'
|
3
|
-
require 'cxxproject/buildingblocks/has_sources_mixin'
|
4
|
-
require 'cxxproject/buildingblocks/has_includes_mixin'
|
5
|
-
require 'cxxproject/utils/process'
|
6
|
-
require 'cxxproject/utils/utils'
|
7
|
-
|
8
|
-
module Cxxproject
|
9
|
-
class SourceLibrary < BuildingBlock
|
10
|
-
include HasLibraries
|
11
|
-
include HasSources
|
12
|
-
include HasIncludes
|
13
|
-
|
14
|
-
def initialize(name)
|
15
|
-
super(name)
|
16
|
-
end
|
17
|
-
|
18
|
-
def complete_init()
|
19
|
-
if @output_dir_abs
|
20
|
-
add_lib_element(HasLibraries::SEARCH_PATH, File.join(@output_dir, 'libs'), true)
|
21
|
-
add_lib_element(HasLibraries::LIB, @name, true)
|
22
|
-
else
|
23
|
-
add_lib_element(HasLibraries::LIB_WITH_PATH, File.join(@output_dir,"lib#{@name}.a"), true)
|
24
|
-
end
|
25
|
-
super
|
26
|
-
end
|
27
|
-
|
28
|
-
def get_archive_name() # relative path
|
29
|
-
return @archive_name if @archive_name
|
30
|
-
parts = [@output_dir]
|
31
|
-
|
32
|
-
if @output_dir_abs
|
33
|
-
parts = [@output_dir_relPath] if @output_dir_relPath
|
34
|
-
parts << 'libs'
|
35
|
-
end
|
36
|
-
|
37
|
-
parts << "lib#{@name}.a"
|
38
|
-
|
39
|
-
@archive_name = File.join(parts)
|
40
|
-
@archive_name
|
41
|
-
end
|
42
|
-
|
43
|
-
def get_task_name() # full path
|
44
|
-
return @task_name if @task_name
|
45
|
-
|
46
|
-
parts = [@output_dir]
|
47
|
-
parts << 'libs' if @output_dir_abs
|
48
|
-
parts << "lib#{@name}.a"
|
49
|
-
@task_name = File.join(parts)
|
50
|
-
@task_name = @project_dir + "/" + @task_name unless @output_dir_abs
|
51
|
-
@task_name
|
52
|
-
end
|
53
|
-
|
54
|
-
# task that will link the given object files to a static lib
|
55
|
-
#
|
56
|
-
def convert_to_rake()
|
57
|
-
object_multitask = prepare_tasks_for_objects()
|
58
|
-
archiver = @tcs[:ARCHIVER]
|
59
|
-
|
60
|
-
res = typed_file_task Rake::Task::LIBRARY, get_task_name => object_multitask do
|
61
|
-
dir = @project_dir
|
62
|
-
objs = @objects
|
63
|
-
aname = get_archive_name
|
64
|
-
|
65
|
-
if @output_dir_abs
|
66
|
-
dir = @output_dir
|
67
|
-
prefix = File.rel_from_to_project(@project_dir, @output_dir)
|
68
|
-
objs.map! { |m| m[prefix.length..-1] }
|
69
|
-
aname = aname[prefix.length..-1]
|
70
|
-
end
|
71
|
-
|
72
|
-
Dir.chdir(dir) do
|
73
|
-
FileUtils.rm(aname) if File.exists?(aname)
|
74
|
-
cmd = [archiver[:COMMAND]] # ar
|
75
|
-
cmd += archiver[:ARCHIVE_FLAGS].split(" ")
|
76
|
-
cmd += archiver[:FLAGS]
|
77
|
-
cmd << aname # -o debug/x.exe
|
78
|
-
cmd += objs
|
79
|
-
|
80
|
-
if Cxxproject::Utils.old_ruby?
|
81
|
-
cmd.map! {|c| ((c.include?" ") ? ("\""+c+"\"") : c )}
|
82
|
-
|
83
|
-
cmdLine = cmd.join(" ")
|
84
|
-
if cmdLine.length > 8000
|
85
|
-
inputName = aname+".tmp"
|
86
|
-
File.open(inputName,"wb") { |f| f.write(cmd[1..-1].join(" ")) }
|
87
|
-
consoleOutput = `#{archiver[:COMMAND] + " @" + inputName}`
|
88
|
-
else
|
89
|
-
consoleOutput = `#{cmd.join(" ")} 2>&1`
|
90
|
-
end
|
91
|
-
else
|
92
|
-
rd, wr = IO.pipe
|
93
|
-
cmd << {
|
94
|
-
:err=>wr,
|
95
|
-
:out=>wr
|
96
|
-
}
|
97
|
-
sp = spawn(*cmd)
|
98
|
-
cmd.pop
|
99
|
-
|
100
|
-
consoleOutput = ProcessHelper.readOutput(sp, rd, wr)
|
101
|
-
end
|
102
|
-
|
103
|
-
process_result(cmd, consoleOutput, archiver[:ERROR_PARSER], "Creating #{aname}")
|
104
|
-
|
105
|
-
check_config_file()
|
106
|
-
end
|
107
|
-
end
|
108
|
-
enhance_with_additional_files(res)
|
109
|
-
add_output_dir_dependency(get_task_name, res, true)
|
110
|
-
|
111
|
-
add_grouping_tasks(get_task_name)
|
112
|
-
|
113
|
-
setup_rake_dependencies(res, object_multitask)
|
114
|
-
return res
|
115
|
-
end
|
116
|
-
|
117
|
-
def add_grouping_tasks(archive)
|
118
|
-
namespace 'lib' do
|
119
|
-
desc archive
|
120
|
-
task @name => archive
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
1
|
+
require 'cxxproject/buildingblocks/building_block'
|
2
|
+
require 'cxxproject/buildingblocks/has_libraries_mixin'
|
3
|
+
require 'cxxproject/buildingblocks/has_sources_mixin'
|
4
|
+
require 'cxxproject/buildingblocks/has_includes_mixin'
|
5
|
+
require 'cxxproject/utils/process'
|
6
|
+
require 'cxxproject/utils/utils'
|
7
|
+
|
8
|
+
module Cxxproject
|
9
|
+
class SourceLibrary < BuildingBlock
|
10
|
+
include HasLibraries
|
11
|
+
include HasSources
|
12
|
+
include HasIncludes
|
13
|
+
|
14
|
+
def initialize(name)
|
15
|
+
super(name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def complete_init()
|
19
|
+
if @output_dir_abs
|
20
|
+
add_lib_element(HasLibraries::SEARCH_PATH, File.join(@output_dir, 'libs'), true)
|
21
|
+
add_lib_element(HasLibraries::LIB, @name, true)
|
22
|
+
else
|
23
|
+
add_lib_element(HasLibraries::LIB_WITH_PATH, File.join(@output_dir,"lib#{@name}.a"), true)
|
24
|
+
end
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_archive_name() # relative path
|
29
|
+
return @archive_name if @archive_name
|
30
|
+
parts = [@output_dir]
|
31
|
+
|
32
|
+
if @output_dir_abs
|
33
|
+
parts = [@output_dir_relPath] if @output_dir_relPath
|
34
|
+
parts << 'libs'
|
35
|
+
end
|
36
|
+
|
37
|
+
parts << "lib#{@name}.a"
|
38
|
+
|
39
|
+
@archive_name = File.join(parts)
|
40
|
+
@archive_name
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_task_name() # full path
|
44
|
+
return @task_name if @task_name
|
45
|
+
|
46
|
+
parts = [@output_dir]
|
47
|
+
parts << 'libs' if @output_dir_abs
|
48
|
+
parts << "lib#{@name}.a"
|
49
|
+
@task_name = File.join(parts)
|
50
|
+
@task_name = @project_dir + "/" + @task_name unless @output_dir_abs
|
51
|
+
@task_name
|
52
|
+
end
|
53
|
+
|
54
|
+
# task that will link the given object files to a static lib
|
55
|
+
#
|
56
|
+
def convert_to_rake()
|
57
|
+
object_multitask = prepare_tasks_for_objects()
|
58
|
+
archiver = @tcs[:ARCHIVER]
|
59
|
+
|
60
|
+
res = typed_file_task Rake::Task::LIBRARY, get_task_name => object_multitask do
|
61
|
+
dir = @project_dir
|
62
|
+
objs = @objects
|
63
|
+
aname = get_archive_name
|
64
|
+
|
65
|
+
if @output_dir_abs
|
66
|
+
dir = @output_dir
|
67
|
+
prefix = File.rel_from_to_project(@project_dir, @output_dir)
|
68
|
+
objs.map! { |m| m[prefix.length..-1] }
|
69
|
+
aname = aname[prefix.length..-1]
|
70
|
+
end
|
71
|
+
|
72
|
+
Dir.chdir(dir) do
|
73
|
+
FileUtils.rm(aname) if File.exists?(aname)
|
74
|
+
cmd = [archiver[:COMMAND]] # ar
|
75
|
+
cmd += archiver[:ARCHIVE_FLAGS].split(" ")
|
76
|
+
cmd += Cxxproject::Utils::flagSplit(archiver[:FLAGS]) # --all_load
|
77
|
+
cmd << aname # -o debug/x.exe
|
78
|
+
cmd += objs
|
79
|
+
|
80
|
+
if Cxxproject::Utils.old_ruby?
|
81
|
+
cmd.map! {|c| ((c.include?" ") ? ("\""+c+"\"") : c )}
|
82
|
+
|
83
|
+
cmdLine = cmd.join(" ")
|
84
|
+
if cmdLine.length > 8000
|
85
|
+
inputName = aname+".tmp"
|
86
|
+
File.open(inputName,"wb") { |f| f.write(cmd[1..-1].join(" ")) }
|
87
|
+
consoleOutput = `#{archiver[:COMMAND] + " @" + inputName}`
|
88
|
+
else
|
89
|
+
consoleOutput = `#{cmd.join(" ")} 2>&1`
|
90
|
+
end
|
91
|
+
else
|
92
|
+
rd, wr = IO.pipe
|
93
|
+
cmd << {
|
94
|
+
:err=>wr,
|
95
|
+
:out=>wr
|
96
|
+
}
|
97
|
+
sp = spawn(*cmd)
|
98
|
+
cmd.pop
|
99
|
+
|
100
|
+
consoleOutput = ProcessHelper.readOutput(sp, rd, wr)
|
101
|
+
end
|
102
|
+
|
103
|
+
process_result(cmd, consoleOutput, archiver[:ERROR_PARSER], "Creating #{aname}")
|
104
|
+
|
105
|
+
check_config_file()
|
106
|
+
end
|
107
|
+
end
|
108
|
+
enhance_with_additional_files(res)
|
109
|
+
add_output_dir_dependency(get_task_name, res, true)
|
110
|
+
|
111
|
+
add_grouping_tasks(get_task_name)
|
112
|
+
|
113
|
+
setup_rake_dependencies(res, object_multitask)
|
114
|
+
return res
|
115
|
+
end
|
116
|
+
|
117
|
+
def add_grouping_tasks(archive)
|
118
|
+
namespace 'lib' do
|
119
|
+
desc archive
|
120
|
+
task @name => archive
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|