bake-toolkit 2.59.0 → 2.63.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bakery +25 -0
- data/lib/adapt/config/loader.rb +1 -0
- data/lib/bake/config/checks.rb +31 -0
- data/lib/bake/config/loader.rb +22 -18
- data/lib/bake/libElement.rb +13 -0
- data/lib/bake/model/metamodel.rb +6 -0
- data/lib/bake/options/options.rb +32 -17
- data/lib/bake/subst.rb +2 -0
- data/lib/bakery/options/options.rb +8 -4
- data/lib/blocks/block.rb +51 -17
- data/lib/blocks/blockBase.rb +0 -1
- data/lib/blocks/compile.rb +25 -12
- data/lib/blocks/executable.rb +4 -0
- data/lib/common/cleanup.rb +4 -0
- data/lib/common/ext/file.rb +115 -96
- data/lib/common/options/parser.rb +2 -2
- data/lib/common/root.rb +1 -1
- data/lib/common/version.rb +1 -1
- data/lib/tocxx.rb +56 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 225fc376c9b3409d01e708f2ec67bb2d80f9c081d26de339d5b4bb3451141e50
|
4
|
+
data.tar.gz: e3769b3550aee5ae45685d8445b0ea3bfec59eea4ffa885900a461c82269b16b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 419125459eab7fb1ea49939389ff85c43ef6e7ddfd2fdc4bbd555e0a5b8d0e282d28e6e52da5ab3bac1d08d1b5cee4d163315d99bceab7700011aa5f3feda46f
|
7
|
+
data.tar.gz: 3e273c6f6a16f89ba30b1d40c8a787a9439693ba50dd33d4667328c91894b7302ae3c1f6e9f2c4d48078fdbba545270fb5c73ff0158f0e6766bc640774808896
|
data/bin/bakery
CHANGED
@@ -24,6 +24,8 @@ require_relative "../lib/bakery/buildPattern"
|
|
24
24
|
require_relative '../lib/common/ext/stdout'
|
25
25
|
require_relative '../lib/common/cleanup'
|
26
26
|
|
27
|
+
require 'json'
|
28
|
+
|
27
29
|
module Bake
|
28
30
|
|
29
31
|
@options = BakeryOptions.new(ARGV)
|
@@ -104,6 +106,7 @@ module Bake
|
|
104
106
|
|
105
107
|
exitValue = 0
|
106
108
|
abort = false
|
109
|
+
@ideps = {}
|
107
110
|
@toBuild.each do |bp|
|
108
111
|
currentRun += 1
|
109
112
|
p = File.dirname(bp.proj)
|
@@ -135,6 +138,12 @@ module Bake
|
|
135
138
|
puts e.message
|
136
139
|
end
|
137
140
|
|
141
|
+
if Bake.options.dev_features.detect { |x| x.start_with?("dep-overview=") }
|
142
|
+
Bake::ToCxx.include_deps.each do |pdir, deps|
|
143
|
+
@ideps[pdir] = Set.new if !@ideps.has_key?(pdir)
|
144
|
+
@ideps[pdir].merge(deps)
|
145
|
+
end
|
146
|
+
end
|
138
147
|
Bake::cleanup
|
139
148
|
ExitHelper.reset_exit_code
|
140
149
|
|
@@ -148,6 +157,22 @@ module Bake
|
|
148
157
|
end
|
149
158
|
end
|
150
159
|
end
|
160
|
+
|
161
|
+
dep_json = Bake.options.dev_features.detect { |x| x.start_with?("dep-overview=") }
|
162
|
+
if dep_json
|
163
|
+
# remove duplicates
|
164
|
+
@ideps.each do |m,d|
|
165
|
+
d.delete_if {|d_tbc| d_tbc.start_with?(m) }
|
166
|
+
d.delete_if {|d_tbc| d.any? {|any_d| d_tbc != any_d && d_tbc.start_with?(any_d + "/") } }
|
167
|
+
end
|
168
|
+
# generate format for output
|
169
|
+
ideps = []
|
170
|
+
@ideps.each do |m,d|
|
171
|
+
ideps << {"module" => m, "dependencies" => d.sort.to_a}
|
172
|
+
end
|
173
|
+
# output
|
174
|
+
File.write(dep_json[13..-1], JSON.pretty_generate(ideps))
|
175
|
+
end
|
151
176
|
|
152
177
|
print "\n"
|
153
178
|
|
data/lib/adapt/config/loader.rb
CHANGED
data/lib/bake/config/checks.rb
CHANGED
@@ -3,6 +3,12 @@ module Bake
|
|
3
3
|
|
4
4
|
class Checks
|
5
5
|
|
6
|
+
@@warnedCase = []
|
7
|
+
|
8
|
+
def self.cleanupWarnings
|
9
|
+
@@warnedCase.clear
|
10
|
+
end
|
11
|
+
|
6
12
|
def self.symlinkCheck(filename)
|
7
13
|
dirOfProjMeta = File.dirname(filename)
|
8
14
|
Dir.chdir(dirOfProjMeta) do
|
@@ -19,6 +25,27 @@ module Bake
|
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
28
|
+
|
29
|
+
def self.sanityFolderName(dorg)
|
30
|
+
return if !Bake.options.caseSensitivityCheck
|
31
|
+
return if Bake.options.verbose < 1
|
32
|
+
d = dorg
|
33
|
+
while (d != File.dirname(d))
|
34
|
+
b = File.basename(d)
|
35
|
+
dnew = File.dirname(d)
|
36
|
+
Dir.chdir(dnew) do
|
37
|
+
files = Dir.glob("*")
|
38
|
+
if !files.include?(b)
|
39
|
+
possible = files.select{ |f| f.casecmp(b)==0 }
|
40
|
+
if possible.length > 0 && !@@warnedCase.include?(d)
|
41
|
+
@@warnedCase << d
|
42
|
+
Bake.formatter.printWarning("Warning: '#{b}' not found in '#{dnew}'. Alternatives: #{possible.map{|p| "'#{p}'"}.join(", ")}. Maybe a typo happened while entering a folder in the shell?")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
d = dnew
|
47
|
+
end
|
48
|
+
end
|
22
49
|
|
23
50
|
def self.commonMetamodelCheck(configs, filename, isAdapt = false)
|
24
51
|
|
@@ -76,6 +103,10 @@ module Bake
|
|
76
103
|
Bake.formatter.printError("IncludeDir must have inject OR infix (deprecated)", inc)
|
77
104
|
ExitHelper.exit(1)
|
78
105
|
end
|
106
|
+
if (inc.name.empty? || inc.name[0] == " ")
|
107
|
+
Bake.formatter.printError("IncludeDir must not be empty or start with a space", inc)
|
108
|
+
ExitHelper.exit(1)
|
109
|
+
end
|
79
110
|
end if config.respond_to?("includeDir")
|
80
111
|
|
81
112
|
if not ["", "yes", "no", "all"].include?config.mergeInc
|
data/lib/bake/config/loader.rb
CHANGED
@@ -70,6 +70,7 @@ module Bake
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def getFullProject(projName, configs, configname, isMain)
|
73
|
+
|
73
74
|
|
74
75
|
configname = resolveConfigName(configs, configname)
|
75
76
|
|
@@ -83,6 +84,7 @@ module Bake
|
|
83
84
|
@defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
|
84
85
|
@mainProjectName = config.parent.name
|
85
86
|
@mainConfigName = config.name
|
87
|
+
@configHashMain = {}
|
86
88
|
end
|
87
89
|
|
88
90
|
# check if config has to be manipulated
|
@@ -113,7 +115,18 @@ module Bake
|
|
113
115
|
configHash[s.name] = [] unless configHash.has_key?(s.name)
|
114
116
|
configHash[s.name] += s.value.split(";")
|
115
117
|
end
|
116
|
-
|
118
|
+
|
119
|
+
if !isMain
|
120
|
+
@configHashMain.each do |k,v|
|
121
|
+
if configHash.has_key?(k)
|
122
|
+
configHash[k] += v
|
123
|
+
configHash[k].uniq!
|
124
|
+
else
|
125
|
+
configHash[k] = v
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
117
130
|
checkCondition = lambda {|name,value|
|
118
131
|
return true if adaptHash[name].empty?
|
119
132
|
if !configHash.has_key?(name)
|
@@ -137,25 +150,15 @@ module Bake
|
|
137
150
|
end
|
138
151
|
end
|
139
152
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
def symlinkCheck(filename)
|
145
|
-
dirOfProjMeta = File.dirname(filename)
|
146
|
-
Dir.chdir(dirOfProjMeta) do
|
147
|
-
if Dir.pwd != dirOfProjMeta and File.dirname(Dir.pwd) != File.dirname(dirOfProjMeta)
|
148
|
-
isSym = false
|
149
|
-
begin
|
150
|
-
isSym = File.symlink?(dirOfProjMeta)
|
151
|
-
rescue
|
152
|
-
end
|
153
|
-
if isSym
|
154
|
-
Bake.formatter.printError("Symlinks only allowed with the same parent dir as the target: #{dirOfProjMeta} --> #{Dir.pwd}", filename)
|
155
|
-
ExitHelper.exit(1)
|
156
|
-
end
|
153
|
+
if isMain
|
154
|
+
config.scopes.each do |s|
|
155
|
+
@configHashMain[s.name] = [] unless @configHashMain.has_key?(s.name)
|
156
|
+
@configHashMain[s.name] += s.value.split(";")
|
157
157
|
end
|
158
158
|
end
|
159
|
+
|
160
|
+
@fullProjects[projName + "," + configname] = [config, configname]
|
161
|
+
[config, configname]
|
159
162
|
end
|
160
163
|
|
161
164
|
def checkVerFormat(ver)
|
@@ -200,6 +203,7 @@ module Bake
|
|
200
203
|
def loadProjMeta(filename)
|
201
204
|
|
202
205
|
Bake::Configs::Checks.symlinkCheck(filename)
|
206
|
+
Bake::Configs::Checks.sanityFolderName(filename)
|
203
207
|
|
204
208
|
f = @loader.load(filename)
|
205
209
|
|
data/lib/bake/libElement.rb
CHANGED
@@ -60,6 +60,19 @@ module Bake
|
|
60
60
|
@@source_libraries << adaptedPath
|
61
61
|
end
|
62
62
|
end
|
63
|
+
le = block.library ? block.library : (block.executable ? block.executable : nil)
|
64
|
+
if le
|
65
|
+
cb = le.compileBlock
|
66
|
+
if !cb.nil? && !cb.object_files_ignored_in_lib.nil?
|
67
|
+
cb.object_files_ignored_in_lib.each do |ldirect|
|
68
|
+
adaptedPath, prefix = adaptPath(ldirect, block, prefix)
|
69
|
+
if (!block.prebuild or File.exist?adaptedPath)
|
70
|
+
@@linker_libs_array << adaptedPath
|
71
|
+
@@source_libraries << adaptedPath
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
63
76
|
end
|
64
77
|
|
65
78
|
def self.collect_recursive(block, levels = -1)
|
data/lib/bake/model/metamodel.rb
CHANGED
@@ -131,6 +131,10 @@ module Bake
|
|
131
131
|
has_attr 'text', String, :defaultValueLiteral => ""
|
132
132
|
end
|
133
133
|
|
134
|
+
class CompilationDB < ModelElement
|
135
|
+
has_attr 'name', String, :defaultValueLiteral => "$(WorkingDir)/compile_commands.json"
|
136
|
+
end
|
137
|
+
|
134
138
|
class RequiredBakeVersion < ModelElement
|
135
139
|
has_attr 'minimum', String, :defaultValueLiteral => ""
|
136
140
|
has_attr 'maximum', String, :defaultValueLiteral => ""
|
@@ -143,6 +147,7 @@ module Bake
|
|
143
147
|
class Files < ModelElement
|
144
148
|
has_attr 'name', String, :defaultValueLiteral => ""
|
145
149
|
has_attr 'compileOnly', Boolean, :defaultValueLiteral => "false"
|
150
|
+
has_attr 'linkDirectly', Boolean, :defaultValueLiteral => "false"
|
146
151
|
contains_many 'define', Define, 'parent'
|
147
152
|
contains_many 'flags', Flags, 'parent'
|
148
153
|
end
|
@@ -299,6 +304,7 @@ module Bake
|
|
299
304
|
contains_one 'toolchain', Toolchain, 'parent'
|
300
305
|
contains_many 'set', Set, 'parent'
|
301
306
|
contains_many 'prebuild', Prebuild, 'parent'
|
307
|
+
contains_one 'cdb', CompilationDB, 'parent'
|
302
308
|
|
303
309
|
module ClassModule
|
304
310
|
def ident
|
data/lib/bake/options/options.rb
CHANGED
@@ -11,16 +11,9 @@ require_relative '../../common/crc32'
|
|
11
11
|
|
12
12
|
module Bake
|
13
13
|
|
14
|
-
def self.options
|
15
|
-
@@options
|
16
|
-
end
|
17
|
-
def self.options=(options)
|
18
|
-
@@options = options
|
19
|
-
end
|
20
|
-
|
21
14
|
class Options < Parser
|
22
|
-
attr_accessor :build_config, :nocache, :analyze, :eclipseOrder, :showConfigs
|
23
|
-
attr_reader :main_dir, :project, :filename, :main_project_name, :buildDirDelimiter, :dot, :dotFilename
|
15
|
+
attr_accessor :build_config, :nocache, :analyze, :eclipseOrder, :showConfigs, :cc2j_filename
|
16
|
+
attr_reader :main_dir, :working_dir, :project, :filename, :main_project_name, :buildDirDelimiter, :dot, :dotFilename # String
|
24
17
|
attr_reader :include_filter, :exclude_filter, :adapt # String List
|
25
18
|
attr_reader :conversion_info, :stopOnFirstError, :clean, :rebuild, :show_includes, :show_includes_and_defines, :projectPaths, :qac, :dry, :syncedOutput, :debug_threads, :skipBuildingLine # Boolean
|
26
19
|
attr_reader :linkOnly, :compileOnly, :no_autodir, :clobber, :docu, :debug, :prepro, :prebuild, :printTime, :json, :wparse, :caseSensitivityCheck, :fileCmd, :profiling # Boolean
|
@@ -193,6 +186,7 @@ module Bake
|
|
193
186
|
Bake.formatter.printError("Error: Project.meta not found in #{searchDir} or upwards")
|
194
187
|
ExitHelper.exit(1)
|
195
188
|
end
|
189
|
+
set_working_dir()
|
196
190
|
|
197
191
|
def_roots = Root.calc_roots_bake(@main_dir)
|
198
192
|
@roots += def_roots
|
@@ -323,11 +317,19 @@ module Bake
|
|
323
317
|
@main_project_name = File::basename(@main_dir)
|
324
318
|
end
|
325
319
|
|
320
|
+
def set_working_dir()
|
321
|
+
@working_dir = File.expand_path(Dir.pwd.gsub(/[\\]/,'/'))
|
322
|
+
end
|
323
|
+
|
326
324
|
def set_root(dir)
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
325
|
+
if File.file?(dir)
|
326
|
+
@roots += Root.calc_roots_bake(dir)
|
327
|
+
else
|
328
|
+
root = Root.extract_depth(dir)
|
329
|
+
check_valid_dir(root.dir)
|
330
|
+
root.dir = File.expand_path(root.dir.gsub(/[\\]/,'/'))
|
331
|
+
@roots << root
|
332
|
+
end
|
331
333
|
end
|
332
334
|
|
333
335
|
def set_adapt(name)
|
@@ -336,16 +338,21 @@ module Bake
|
|
336
338
|
end
|
337
339
|
end
|
338
340
|
|
339
|
-
def checkNum(num)
|
341
|
+
def checkNum(num, quite = false)
|
340
342
|
if String === num && !/\A\d+\z/.match(num)
|
341
|
-
|
342
|
-
|
343
|
+
if !quite
|
344
|
+
Bake.formatter.printError("Error: #{num} is not a positive number")
|
345
|
+
ExitHelper.exit(1)
|
346
|
+
else
|
347
|
+
return false
|
348
|
+
end
|
343
349
|
end
|
350
|
+
return true
|
344
351
|
end
|
345
352
|
|
346
353
|
def set_threads(num)
|
347
354
|
return if num == nil # -j without number shall behave the same as not set
|
348
|
-
checkNum(num)
|
355
|
+
return :ignore if !checkNum(num, true)
|
349
356
|
@threads = String === num ? num.to_i : num
|
350
357
|
if @threads <= 0
|
351
358
|
Bake.formatter.printError("Error: number of threads must be > 0")
|
@@ -379,6 +386,14 @@ module Bake
|
|
379
386
|
|
380
387
|
end
|
381
388
|
|
389
|
+
def self.options
|
390
|
+
@@options ||= Options.new([])
|
391
|
+
end
|
392
|
+
|
393
|
+
def self.options=(options)
|
394
|
+
@@options = options
|
395
|
+
end
|
396
|
+
|
382
397
|
end
|
383
398
|
|
384
399
|
|
data/lib/bake/subst.rb
CHANGED
@@ -202,6 +202,8 @@ module Bake
|
|
202
202
|
substStr << Bake.options.main_project_name
|
203
203
|
elsif var == "MainProjectDir"
|
204
204
|
substStr << Bake.options.main_dir
|
205
|
+
elsif var == "WorkingDir"
|
206
|
+
substStr << Bake.options.working_dir
|
205
207
|
elsif var == "ConfigName"
|
206
208
|
substStr << @@configName
|
207
209
|
elsif var == "ToolchainName" and defined?@@toolchainName
|
@@ -91,10 +91,14 @@ module Bake
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def set_root(dir)
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
94
|
+
if File.file?(dir)
|
95
|
+
@roots += Root.calc_roots_bake(dir)
|
96
|
+
else
|
97
|
+
root = Root.extract_depth(dir)
|
98
|
+
check_valid_dir(root.dir)
|
99
|
+
root.dir = File.expand_path(root.dir.gsub(/[\\]/,'/'))
|
100
|
+
@roots << root
|
101
|
+
end
|
98
102
|
end
|
99
103
|
|
100
104
|
end
|
data/lib/blocks/block.rb
CHANGED
@@ -22,8 +22,8 @@ module Bake
|
|
22
22
|
@@delayed_result = true
|
23
23
|
@@threads = []
|
24
24
|
|
25
|
-
attr_reader :lib_elements, :projectDir, :library, :config, :projectName, :configName, :prebuild, :output_dir, :tcs
|
26
|
-
attr_accessor :visited, :inDeps, :result, :bes
|
25
|
+
attr_reader :lib_elements, :projectDir, :library, :executable, :config, :projectName, :configName, :prebuild, :output_dir, :tcs
|
26
|
+
attr_accessor :visited, :inDeps, :result, :bes, :besDirect
|
27
27
|
|
28
28
|
def startupSteps
|
29
29
|
@startupSteps ||= []
|
@@ -64,7 +64,11 @@ module Bake
|
|
64
64
|
def set_library(library)
|
65
65
|
@library = library
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
|
+
def set_executable(executable)
|
69
|
+
@executable = executable
|
70
|
+
end
|
71
|
+
|
68
72
|
def qname()
|
69
73
|
@projectName + "," + @configName
|
70
74
|
end
|
@@ -74,6 +78,7 @@ module Bake
|
|
74
78
|
@prebuild = prebuild
|
75
79
|
@visited = false
|
76
80
|
@library = nil
|
81
|
+
@executable = nil
|
77
82
|
@config = config
|
78
83
|
@referencedConfigs = referencedConfigs
|
79
84
|
@projectName = config.parent.name
|
@@ -82,6 +87,7 @@ module Bake
|
|
82
87
|
@result = true
|
83
88
|
@tcs = tcs
|
84
89
|
@bes = []
|
90
|
+
@besDirect = []
|
85
91
|
@lib_elements = []
|
86
92
|
|
87
93
|
calcOutputDir
|
@@ -118,6 +124,13 @@ module Bake
|
|
118
124
|
resPathMagic = inc[1..-1].join("/") # within self
|
119
125
|
resPathMagic = "." if resPathMagic == ""
|
120
126
|
res << resPathMagic
|
127
|
+
if warnIfLocal
|
128
|
+
if resPathMagic == "."
|
129
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please use \".\" instead", elem)
|
130
|
+
else
|
131
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please omit \"#{inc[0]}/\" or use \"./#{resPathMagic}\"", elem) if warnIfLocal
|
132
|
+
end
|
133
|
+
end
|
121
134
|
elsif @referencedConfigs.include?(inc[0])
|
122
135
|
dirOther = @referencedConfigs[inc[0]].first.parent.get_project_dir
|
123
136
|
resPathMagic = File.rel_from_to_project(@projectDir, dirOther, false)
|
@@ -125,17 +138,19 @@ module Bake
|
|
125
138
|
resPathMagic = resPathMagic + "/" + postfix if postfix != ""
|
126
139
|
resPathMagic = "." if resPathMagic == ""
|
127
140
|
res << resPathMagic
|
141
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please use a Dependency to \"#{inc[0]}\" instead", elem) if warnIfLocal
|
128
142
|
end
|
129
143
|
|
130
144
|
if File.exists?(@projectDir + "/" + d) # prio 2: local, e.g. "include"
|
131
145
|
res << d
|
132
146
|
end
|
133
147
|
|
134
|
-
#
|
148
|
+
# prio 3: check if dir exists without Project.meta entry
|
135
149
|
Bake.options.roots.each do |r|
|
136
150
|
absIncDir = r.dir+"/"+d
|
137
151
|
if File.exists?(absIncDir)
|
138
152
|
res << File.rel_from_to_project(@projectDir,absIncDir,false)
|
153
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please create a Project.meta in \"#{absIncDir}\" or upwards and use a Dependency instead", elem) if warnIfLocal && res.length == 1
|
139
154
|
end
|
140
155
|
end
|
141
156
|
|
@@ -278,9 +293,11 @@ module Bake
|
|
278
293
|
end
|
279
294
|
|
280
295
|
def callDeps(method)
|
296
|
+
return true if Bake.options.project
|
281
297
|
depResult = true
|
282
|
-
|
283
|
-
|
298
|
+
bes.each do |dep|
|
299
|
+
next if Metamodel::IncludeDir === dep
|
300
|
+
depResult = (ALL_BLOCKS[dep.name+","+dep.config].send(method) and depResult)
|
284
301
|
break if (!depResult) && Bake.options.stopOnFirstError
|
285
302
|
end
|
286
303
|
return depResult
|
@@ -352,14 +369,14 @@ module Bake
|
|
352
369
|
def callSteps(method)
|
353
370
|
@config.writeEnvVars()
|
354
371
|
Thread.current[:lastCommand] = nil
|
355
|
-
allSteps = (preSteps + mainSteps + postSteps)
|
372
|
+
@allSteps = (preSteps + mainSteps + postSteps)
|
356
373
|
# check if we have to delay the output (if the last step of this block is not in a thread)
|
357
374
|
@outputStep = nil
|
358
|
-
allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
359
|
-
while
|
375
|
+
@allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
376
|
+
while !@allSteps.empty?
|
360
377
|
parallel = []
|
361
|
-
while allSteps.first && independent?(method, allSteps.first)
|
362
|
-
parallel << allSteps.shift
|
378
|
+
while @allSteps.first && independent?(method, @allSteps.first)
|
379
|
+
parallel << @allSteps.shift
|
363
380
|
end
|
364
381
|
if parallel.length > 0
|
365
382
|
execute_in_thread(parallel) {
|
@@ -380,7 +397,7 @@ module Bake
|
|
380
397
|
end
|
381
398
|
}
|
382
399
|
else
|
383
|
-
step = allSteps.shift
|
400
|
+
step = @allSteps.shift
|
384
401
|
Blocks::Block::waitForAllThreads()
|
385
402
|
@result = executeStep(step, method) if @result
|
386
403
|
@outputStep = nil if !@result && blockAbort?(@result)
|
@@ -401,13 +418,29 @@ module Bake
|
|
401
418
|
return true
|
402
419
|
end
|
403
420
|
|
404
|
-
|
405
|
-
|
421
|
+
SyncOut.mutex.synchronize do
|
422
|
+
if @visited
|
423
|
+
while !defined?(@allSteps) || !@allSteps.empty?
|
424
|
+
sleep(0.1)
|
425
|
+
end
|
426
|
+
return true # maybe to improve later (return false if step has a failed non-independent step)
|
427
|
+
end
|
428
|
+
@visited = true
|
429
|
+
end
|
406
430
|
|
407
431
|
@inDeps = true
|
408
|
-
|
432
|
+
begin
|
433
|
+
depResult = callDeps(:execute)
|
434
|
+
rescue Exception => e
|
435
|
+
@allSteps = []
|
436
|
+
raise
|
437
|
+
end
|
438
|
+
|
409
439
|
@inDeps = false
|
410
|
-
|
440
|
+
if blockAbort?(depResult)
|
441
|
+
@allSteps = []
|
442
|
+
return @result && depResult
|
443
|
+
end
|
411
444
|
|
412
445
|
Bake::IDEInterface.instance.set_build_info(@projectName, @configName)
|
413
446
|
begin
|
@@ -442,8 +475,9 @@ module Bake
|
|
442
475
|
SyncOut.discardStreams()
|
443
476
|
end
|
444
477
|
end
|
478
|
+
@allSteps = []
|
445
479
|
end
|
446
|
-
|
480
|
+
|
447
481
|
return (depResult && @result)
|
448
482
|
end
|
449
483
|
|
data/lib/blocks/blockBase.rb
CHANGED
@@ -131,7 +131,6 @@ module Bake
|
|
131
131
|
if metadata_json = Bake.options.dev_features.include?("no-error-parser")
|
132
132
|
error_descs = []
|
133
133
|
console_output_full = x[0]
|
134
|
-
incList = []
|
135
134
|
else
|
136
135
|
error_descs, console_output_full, incList = error_parser.scan_lines(x, @projectDir)
|
137
136
|
end
|
data/lib/blocks/compile.rb
CHANGED
@@ -47,7 +47,7 @@ module Bake
|
|
47
47
|
|
48
48
|
class Compile < BlockBase
|
49
49
|
|
50
|
-
attr_reader :objects, :include_list, :source_files_ignored_in_lib
|
50
|
+
attr_reader :objects, :include_list, :source_files_ignored_in_lib, :object_files_ignored_in_lib
|
51
51
|
|
52
52
|
def mutex
|
53
53
|
@mutex ||= Mutex.new
|
@@ -264,16 +264,17 @@ module Bake
|
|
264
264
|
success = true
|
265
265
|
consoleOutput = ""
|
266
266
|
incList = nil
|
267
|
+
|
267
268
|
if !Bake.options.diabCaseCheck
|
268
269
|
success, consoleOutput = ProcessHelper.run(realCmd, false, false, nil, [0], @projectDir) if !Bake.options.dry
|
269
270
|
incList = process_result(realCmd, consoleOutput, compiler[:ERROR_PARSER], nil, reason, success)
|
270
271
|
end
|
271
272
|
|
272
|
-
if type != :ASM
|
273
|
+
if type != :ASM && !Bake.options.analyze && !Bake.options.prepro
|
273
274
|
Dir.mutex.synchronize do
|
274
275
|
if !Bake.options.diabCaseCheck
|
275
276
|
Dir.chdir(@projectDir) do
|
276
|
-
incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE]) if incList.nil?
|
277
|
+
incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE], compiler[:COMMAND]) if incList.nil?
|
277
278
|
Compile.write_depfile(source, incList, dep_filename_conv, @projectDir)
|
278
279
|
end
|
279
280
|
end
|
@@ -291,7 +292,7 @@ module Bake
|
|
291
292
|
raise SystemCommandFailed.new
|
292
293
|
end
|
293
294
|
Dir.chdir(@projectDir) do
|
294
|
-
incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE])
|
295
|
+
incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE], compiler[:COMMAND])
|
295
296
|
Compile.write_depfile(source, incList, dep_filename_conv, @projectDir)
|
296
297
|
end
|
297
298
|
ergs = consoleOutput.scan(/# \d+ "([^"]+)" \d+/)
|
@@ -341,14 +342,12 @@ module Bake
|
|
341
342
|
SyncOut.flushOutput()
|
342
343
|
end
|
343
344
|
end
|
344
|
-
|
345
|
-
|
346
|
-
|
347
345
|
end
|
348
346
|
|
349
|
-
def self.read_depfile(dep_filename, projDir, lineType)
|
347
|
+
def self.read_depfile(dep_filename, projDir, lineType, command = "")
|
350
348
|
deps = []
|
351
349
|
begin
|
350
|
+
lineType = :single if command.include?("cafeCC")
|
352
351
|
if lineType == :single
|
353
352
|
File.readlines(dep_filename).each do |line|
|
354
353
|
splitted = line.split(": ")
|
@@ -514,6 +513,7 @@ module Bake
|
|
514
513
|
end
|
515
514
|
|
516
515
|
def calcObjects
|
516
|
+
@object_files_ignored_in_lib = []
|
517
517
|
@source_files.each do |source|
|
518
518
|
type = get_source_type(source)
|
519
519
|
if not type.nil?
|
@@ -527,7 +527,13 @@ module Bake
|
|
527
527
|
end
|
528
528
|
end
|
529
529
|
@object_files[source] = object
|
530
|
-
|
530
|
+
if @source_files_ignored_in_lib.include?(source)
|
531
|
+
if @source_files_link_directly.include?(source)
|
532
|
+
@object_files_ignored_in_lib << object
|
533
|
+
end
|
534
|
+
else
|
535
|
+
@objects << object
|
536
|
+
end
|
531
537
|
end
|
532
538
|
end
|
533
539
|
end
|
@@ -536,6 +542,7 @@ module Bake
|
|
536
542
|
return @source_files if @source_files and not @source_files.empty?
|
537
543
|
@source_files = []
|
538
544
|
@source_files_ignored_in_lib = []
|
545
|
+
@source_files_link_directly = []
|
539
546
|
@fileTcs = {}
|
540
547
|
|
541
548
|
exclude_files = Set.new
|
@@ -565,11 +572,17 @@ module Bake
|
|
565
572
|
if ((!@fileTcs.has_key?(f)) || singleFile)
|
566
573
|
@fileTcs[f] = icf
|
567
574
|
end
|
568
|
-
|
569
|
-
|
575
|
+
if source_files.include?(f) || exclude_files.include?(f)
|
576
|
+
if (singleFile)
|
577
|
+
@source_files_ignored_in_lib << f if sources.compileOnly || sources.linkDirectly
|
578
|
+
@source_files_link_directly << f if sources.linkDirectly
|
579
|
+
end
|
580
|
+
next
|
581
|
+
end
|
570
582
|
source_files << f
|
571
583
|
@source_files << f
|
572
|
-
@source_files_ignored_in_lib << f if sources.compileOnly
|
584
|
+
@source_files_ignored_in_lib << f if sources.compileOnly || sources.linkDirectly
|
585
|
+
@source_files_link_directly << f if sources.linkDirectly
|
573
586
|
end
|
574
587
|
end
|
575
588
|
|
data/lib/blocks/executable.rb
CHANGED
@@ -6,10 +6,14 @@ module Bake
|
|
6
6
|
|
7
7
|
class Executable < BlockBase
|
8
8
|
|
9
|
+
attr_reader :compileBlock
|
10
|
+
|
9
11
|
def initialize(block, config, referencedConfigs, compileBlock)
|
10
12
|
super(block, config, referencedConfigs)
|
11
13
|
@compileBlock = compileBlock
|
12
14
|
|
15
|
+
block.set_executable(self)
|
16
|
+
|
13
17
|
calcArtifactName
|
14
18
|
calcMapFile
|
15
19
|
calcLinkerScript
|
data/lib/common/cleanup.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require_relative "../blocks/block"
|
2
|
+
require_relative "ext/file"
|
3
|
+
require_relative "../bake/config/checks"
|
2
4
|
|
3
5
|
module Bake
|
4
6
|
|
@@ -9,6 +11,8 @@ module Bake
|
|
9
11
|
Bake::IDEInterface.instance.set_abort(false)
|
10
12
|
Blocks::Block.reset_block_counter
|
11
13
|
Blocks::Block.reset_delayed_result
|
14
|
+
Configs::Checks.cleanupWarnings
|
15
|
+
ToCxx::reset_include_deps
|
12
16
|
end
|
13
17
|
|
14
18
|
end
|
data/lib/common/ext/file.rb
CHANGED
@@ -1,96 +1,115 @@
|
|
1
|
-
require_relative '../utils'
|
2
|
-
|
3
|
-
class File
|
4
|
-
|
5
|
-
SLASH = '/'
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
return
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
1
|
+
require_relative '../utils'
|
2
|
+
|
3
|
+
class File
|
4
|
+
|
5
|
+
SLASH = '/'
|
6
|
+
|
7
|
+
@@warnedCase = []
|
8
|
+
|
9
|
+
def self.cleanupWarnings
|
10
|
+
@@warnedCase.clear
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.is_absolute?(filename)
|
14
|
+
filename[0] == SLASH or filename[1] == ':'
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.normalize(filename)
|
18
|
+
if filename.length > 1
|
19
|
+
toIsWindowsAbs = filename[1] == ':'
|
20
|
+
return filename[0].downcase + filename[1..-1] if toIsWindowsAbs
|
21
|
+
end
|
22
|
+
return filename
|
23
|
+
end
|
24
|
+
|
25
|
+
# seems both are rel or both are abs in all cases
|
26
|
+
def self.rel_from_to_project(from,to,endWithSlash = true)
|
27
|
+
|
28
|
+
return nil if from.nil? or to.nil?
|
29
|
+
|
30
|
+
toSplitted = to.split('/')
|
31
|
+
fromSplitted = from.split('/')
|
32
|
+
|
33
|
+
max = [toSplitted.length, fromSplitted.length].min
|
34
|
+
|
35
|
+
|
36
|
+
return nil if max < 1
|
37
|
+
|
38
|
+
i = 0
|
39
|
+
|
40
|
+
# path letter in windows may be case different
|
41
|
+
toIsWindowsAbs = false
|
42
|
+
if toSplitted[0].length > 1 and fromSplitted[0].length > 1
|
43
|
+
toIsWindowsAbs = toSplitted[0][1] == ':'
|
44
|
+
i = 1 if toIsWindowsAbs and fromSplitted[0][1] == ':' and toSplitted[0][0].downcase == fromSplitted[0][0].downcase
|
45
|
+
end
|
46
|
+
|
47
|
+
if (toIsWindowsAbs and i==0)
|
48
|
+
res = to
|
49
|
+
res += "/" if endWithSlash
|
50
|
+
return res
|
51
|
+
end
|
52
|
+
|
53
|
+
while i < max
|
54
|
+
if toSplitted[i] != fromSplitted[i]
|
55
|
+
if Bake.options.verbose >= 1 && Bake.options.caseSensitivityCheck
|
56
|
+
if toSplitted[i].casecmp(fromSplitted[i]) == 0
|
57
|
+
if !@@warnedCase.include?(fromSplitted[0..i].join("/"))
|
58
|
+
fromsj = fromSplitted[0..i].join("/")
|
59
|
+
tosj = toSplitted[0..i].join("/")
|
60
|
+
@@warnedCase << fromsj
|
61
|
+
@@warnedCase << tosj
|
62
|
+
Bake.formatter.printWarning("Warning: different cases for folders \"#{fromsj}\" and \"#{tosj}\" detected.")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
break
|
67
|
+
end
|
68
|
+
i += 1
|
69
|
+
end
|
70
|
+
j = i
|
71
|
+
|
72
|
+
res = []
|
73
|
+
while i < fromSplitted.length
|
74
|
+
res << ".."
|
75
|
+
i += 1
|
76
|
+
end
|
77
|
+
|
78
|
+
while j < toSplitted.length
|
79
|
+
res << toSplitted[j]
|
80
|
+
j += 1
|
81
|
+
end
|
82
|
+
|
83
|
+
if res.length == 0
|
84
|
+
return ""
|
85
|
+
end
|
86
|
+
|
87
|
+
res = res.join('/')
|
88
|
+
res += "/" if endWithSlash
|
89
|
+
res
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def self.add_prefix(prefix, file)
|
94
|
+
if not prefix or is_absolute?(file)
|
95
|
+
file
|
96
|
+
else
|
97
|
+
prefix + file
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.which(cmd)
|
102
|
+
return "" if not cmd
|
103
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
104
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
105
|
+
exts.each { |ext|
|
106
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
107
|
+
if File.executable?(exe) && !File.directory?(exe)
|
108
|
+
return File.dirname(exe.gsub(/[\\]/,'/'))
|
109
|
+
end
|
110
|
+
}
|
111
|
+
end
|
112
|
+
return ""
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
@@ -81,8 +81,8 @@ module Bake
|
|
81
81
|
if inPlaceArg
|
82
82
|
option.call(inPlaceArg, nil, nil)
|
83
83
|
else
|
84
|
-
option.call(@argv[pos+1], nil, nil) # do not use inplace value
|
85
|
-
pos = pos + 1
|
84
|
+
ignore = option.call(@argv[pos+1], nil, nil) # do not use inplace value
|
85
|
+
pos = pos + 1 if ignore != :ignore
|
86
86
|
end
|
87
87
|
else
|
88
88
|
option.call(nil, nil, nil)
|
data/lib/common/root.rb
CHANGED
@@ -58,7 +58,7 @@ module Bake
|
|
58
58
|
|
59
59
|
def self.calc_roots_bake(dir)
|
60
60
|
def_roots = []
|
61
|
-
rootsFile = searchRootsFile(dir)
|
61
|
+
rootsFile = (File.file?(dir) ? dir : searchRootsFile(dir))
|
62
62
|
if (rootsFile)
|
63
63
|
File.open(rootsFile).each do |line|
|
64
64
|
line = line.split("#")[0].strip.gsub(/[\\]/,'/')
|
data/lib/common/version.rb
CHANGED
data/lib/tocxx.rb
CHANGED
@@ -45,10 +45,19 @@ module Bake
|
|
45
45
|
class ToCxx
|
46
46
|
|
47
47
|
@@linkBlock = 0
|
48
|
+
@@include_deps = {}
|
48
49
|
|
49
50
|
def self.linkBlock
|
50
51
|
@@linkBlock = 1
|
51
52
|
end
|
53
|
+
|
54
|
+
def self.include_deps
|
55
|
+
@@include_deps
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.reset_include_deps
|
59
|
+
@@include_deps = {}
|
60
|
+
end
|
52
61
|
|
53
62
|
def initialize
|
54
63
|
@configTcMap = {}
|
@@ -156,6 +165,7 @@ module Bake
|
|
156
165
|
block.visited = true
|
157
166
|
|
158
167
|
block.bes = []
|
168
|
+
block.besDirect = []
|
159
169
|
block.config.depInc.each do |dep|
|
160
170
|
if (Metamodel::Dependency === dep)
|
161
171
|
@referencedConfigs[dep.name].each do |configRef|
|
@@ -175,6 +185,7 @@ module Bake
|
|
175
185
|
block.bes += subDeps
|
176
186
|
end
|
177
187
|
block.bes << dep
|
188
|
+
block.besDirect << dep
|
178
189
|
break
|
179
190
|
end
|
180
191
|
end
|
@@ -230,6 +241,21 @@ module Bake
|
|
230
241
|
end
|
231
242
|
end
|
232
243
|
|
244
|
+
def makeDepOverview
|
245
|
+
return if !Bake.options.dev_features.any? {|feature| feature.start_with?("dep-overview=") }
|
246
|
+
Blocks::ALL_BLOCKS.each do |name,block|
|
247
|
+
block.bes.each do |depInc|
|
248
|
+
@@include_deps[block.projectDir] = Set.new if !@@include_deps.has_key?(block.projectDir)
|
249
|
+
if (Metamodel::Dependency === depInc)
|
250
|
+
c = @referencedConfigs[depInc.name].detect { |configRef| configRef.name == depInc.config }
|
251
|
+
@@include_deps[block.projectDir] << Blocks::ALL_BLOCKS[c.qname].projectDir
|
252
|
+
else
|
253
|
+
@@include_deps[block.projectDir] << depInc.name
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
233
259
|
def makeIncs
|
234
260
|
Blocks::ALL_BLOCKS.each do |name,block|
|
235
261
|
bes2 = []
|
@@ -324,17 +350,12 @@ module Bake
|
|
324
350
|
|
325
351
|
block.bes.each do |dep|
|
326
352
|
next unless Metamodel::Dependency === dep
|
327
|
-
|
328
|
-
|
329
|
-
diba2 = diba.select{|d| Metamodel::IncludeDir === d }
|
330
|
-
else
|
331
|
-
difr2 = difr
|
332
|
-
diba2 = diba
|
333
|
-
end
|
334
|
-
|
353
|
+
difr2 = difr.select{|d| Metamodel::IncludeDir === d || d != dep}
|
354
|
+
diba2 = diba.select{|d| Metamodel::IncludeDir === d || d != dep}
|
335
355
|
fde = Blocks::ALL_BLOCKS[dep.name+","+dep.config]
|
336
356
|
l1 = fde.bes.length
|
337
|
-
fde.bes = (difr2 + fde.bes + diba2).uniq
|
357
|
+
fde.bes = (difr2 + fde.bes + diba2).uniq
|
358
|
+
fde.besDirect = (difr2 + fde.besDirect + diba2).uniq
|
338
359
|
l2 = fde.bes.length
|
339
360
|
counter += 1 if (l2 != l1)
|
340
361
|
end
|
@@ -410,13 +431,15 @@ module Bake
|
|
410
431
|
@referencedConfigs.each do |projName, configs|
|
411
432
|
depsToProj = []
|
412
433
|
configs.each do |config|
|
413
|
-
config.
|
434
|
+
the_c = Blocks::ALL_BLOCKS[config.parent.name+","+config.name]
|
435
|
+
the_c.besDirect.each do |d|
|
436
|
+
next if Metamodel::IncludeDir === d
|
414
437
|
if onlyProjectName
|
415
438
|
next if config.parent.name != onlyProjectName && d.name != onlyProjectName
|
416
439
|
if onlyConfigName
|
417
440
|
leftSide = config.name == onlyConfigName && config.parent.name == onlyProjectName
|
418
441
|
rightSide = d.config == onlyConfigName && d.name == onlyProjectName
|
419
|
-
next if
|
442
|
+
next if !leftSide && !rightSide
|
420
443
|
end
|
421
444
|
end
|
422
445
|
if Bake.options.dotShowProjOnly
|
@@ -693,6 +716,8 @@ module Bake
|
|
693
716
|
makeGraph
|
694
717
|
puts "Profiling #{Time.now - $timeStart}: make includes..." if Bake.options.profiling
|
695
718
|
makeIncs
|
719
|
+
puts "Profiling #{Time.now - $timeStart}: make dep overview..." if Bake.options.profiling
|
720
|
+
makeDepOverview
|
696
721
|
puts "Profiling #{Time.now - $timeStart}: make uniq..." if Bake.options.profiling
|
697
722
|
makeUniq
|
698
723
|
puts "Profiling #{Time.now - $timeStart}: convert to building blocks..." if Bake.options.profiling
|
@@ -702,7 +727,17 @@ module Bake
|
|
702
727
|
makeDot
|
703
728
|
end
|
704
729
|
|
705
|
-
|
730
|
+
if !Bake.options.cc2j_filename
|
731
|
+
if !@mainConfig.cdb.nil?
|
732
|
+
Bake.options.cc2j_filename = @mainConfig.cdb.name
|
733
|
+
if !File.is_absolute?(Bake.options.cc2j_filename)
|
734
|
+
Bake.options.cc2j_filename = File.join(
|
735
|
+
File.rel_from_to_project(Dir.pwd, @mainConfig.parent.get_project_dir, false),
|
736
|
+
Bake.options.cc2j_filename)
|
737
|
+
end
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
706
741
|
metadata_json = Bake.options.dev_features.detect { |x| x.start_with?("metadata=") }
|
707
742
|
if metadata_json
|
708
743
|
metadata_file = metadata_json[9..-1]
|
@@ -731,7 +766,7 @@ module Bake
|
|
731
766
|
puts "File #{metadata_file} written."
|
732
767
|
ExitHelper.exit(0)
|
733
768
|
else
|
734
|
-
Bake.formatter.printError("Error: dev-feature metadata is only for LibraryConfig
|
769
|
+
Bake.formatter.printError("Error: dev-feature metadata is only for LibraryConfig or ExecutableConfig.")
|
735
770
|
ExitHelper.exit(1)
|
736
771
|
end
|
737
772
|
end
|
@@ -786,7 +821,14 @@ module Bake
|
|
786
821
|
|
787
822
|
if Bake.options.cc2j_filename
|
788
823
|
require "json"
|
789
|
-
|
824
|
+
begin
|
825
|
+
Bake.formatter.printInfo("Info: writing compilation database #{Bake.options.cc2j_filename}") if Bake.options.verbose >= 1
|
826
|
+
File.write(Bake.options.cc2j_filename, JSON.pretty_generate(Blocks::CC2J))
|
827
|
+
rescue Exception => ex
|
828
|
+
Bake.formatter.printError("Error: could not write compilation database: #{ex.message}")
|
829
|
+
puts ex.backtrace if Bake.options.debug
|
830
|
+
result = false
|
831
|
+
end
|
790
832
|
end
|
791
833
|
|
792
834
|
if Bake.options.filelist && !Bake.options.dry
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bake-toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.63.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Schaal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rtext
|