bake-toolkit 2.62.0 → 2.64.1
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.
- checksums.yaml +4 -4
- data/bin/bakery +25 -0
- data/lib/adapt/config/loader.rb +5 -0
- data/lib/bake/cache.rb +10 -4
- data/lib/bake/config/checks.rb +4 -0
- data/lib/bake/config/loader.rb +5 -4
- data/lib/bake/libElement.rb +13 -0
- data/lib/bake/model/loader.rb +1 -0
- data/lib/bake/model/metamodel.rb +9 -0
- data/lib/bake/options/options.rb +12 -7
- data/lib/bakery/model/loader.rb +1 -0
- data/lib/bakery/toBake.rb +5 -1
- data/lib/blocks/block.rb +45 -14
- data/lib/blocks/compile.rb +49 -29
- data/lib/blocks/executable.rb +4 -0
- data/lib/common/cleanup.rb +1 -1
- data/lib/common/ext/rgen.rb +23 -0
- data/lib/common/utils.rb +14 -4
- data/lib/common/version.rb +1 -1
- data/lib/tocxx.rb +106 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd55725b65ac6296092196df2fe85d8dead231341649db552cac76415643ba54
|
4
|
+
data.tar.gz: c8fc064f5c929e3968218bde7aee9b2548ee00bfcc9d55bc762f0e1ab917f0da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cad40c4ee60207533b867a29b53fb6efa8e0d5d12d1f9d929535fe5a682bc08a585ea0c64b5af3b3bcdcb80b920b3a924c460a2441ab33e1edda790bccd5b70
|
7
|
+
data.tar.gz: 577f622dc1d27c4abfa72b0ec484ffe2054f4bc75e67ae1afb4e48c598447d928ec463e6bd4cf3126fed0e9eeee743436852f1741cd54e7fa1d7809670256ccc
|
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
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../../bake/model/loader'
|
2
|
+
require_relative '../../bake/config/loader'
|
2
3
|
require_relative '../../bake/config/checks'
|
3
4
|
|
4
5
|
module Bake
|
@@ -24,6 +25,10 @@ module Bake
|
|
24
25
|
ExitHelper.exit(1)
|
25
26
|
end
|
26
27
|
|
28
|
+
f.root_elements.each do |a|
|
29
|
+
Bake::Config::checkVer(a.requiredBakeVersion)
|
30
|
+
end
|
31
|
+
|
27
32
|
configs = []
|
28
33
|
f.root_elements.each { |re| configs.concat(re.getConfig) }
|
29
34
|
AdaptConfig::checkSyntax(configs, filename)
|
data/lib/bake/cache.rb
CHANGED
@@ -31,7 +31,7 @@ module Bake
|
|
31
31
|
@cacheFilename = Bake.options.main_dir+"/.bake/Project.meta." + sanitize_filename(Bake.options.build_config) + qacStr + ".cache"
|
32
32
|
end
|
33
33
|
if !Bake.options.dry
|
34
|
-
Utils.gitIgnore(File.dirname(@cacheFilename))
|
34
|
+
Utils.gitIgnore(File.dirname(@cacheFilename), :silent)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -187,10 +187,16 @@ module Bake
|
|
187
187
|
cache.adapt_filenames = AdaptConfig.filenames
|
188
188
|
bbdump = Marshal.dump(cache)
|
189
189
|
begin
|
190
|
-
File.
|
191
|
-
rescue
|
190
|
+
File.open(@cacheFilename, 'wb') {|file| file.write(bbdump) }
|
191
|
+
rescue Exception=>e
|
192
|
+
if Bake.options.verbose >= 3
|
193
|
+
Bake.formatter.printWarning("Warning: Could not write cache file #{@cacheFilename}")
|
194
|
+
if Bake.options.debug
|
195
|
+
puts e.message
|
196
|
+
puts e.backtrace
|
197
|
+
end
|
198
|
+
end
|
192
199
|
end
|
193
|
-
File.open(@cacheFilename, 'wb') {|file| file.write(bbdump) }
|
194
200
|
Bake.options.nocache = false
|
195
201
|
end
|
196
202
|
|
data/lib/bake/config/checks.rb
CHANGED
@@ -103,6 +103,10 @@ module Bake
|
|
103
103
|
Bake.formatter.printError("IncludeDir must have inject OR infix (deprecated)", inc)
|
104
104
|
ExitHelper.exit(1)
|
105
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
|
106
110
|
end if config.respond_to?("includeDir")
|
107
111
|
|
108
112
|
if not ["", "yes", "no", "all"].include?config.mergeInc
|
data/lib/bake/config/loader.rb
CHANGED
@@ -161,7 +161,7 @@ module Bake
|
|
161
161
|
[config, configname]
|
162
162
|
end
|
163
163
|
|
164
|
-
def checkVerFormat(ver)
|
164
|
+
def self.checkVerFormat(ver)
|
165
165
|
return true if ver.empty?
|
166
166
|
return false if ver.length > 3
|
167
167
|
ver.each do |v|
|
@@ -170,7 +170,7 @@ module Bake
|
|
170
170
|
true
|
171
171
|
end
|
172
172
|
|
173
|
-
def bailOutVer(reqVersion)
|
173
|
+
def self.bailOutVer(reqVersion)
|
174
174
|
text1 = (reqVersion.minimum.empty? ? "" : "minimum = #{reqVersion.minimum}")
|
175
175
|
text2 = ((reqVersion.minimum.empty? or reqVersion.maximum.empty?) ? "" : ", ")
|
176
176
|
text3 = (reqVersion.maximum.empty? ? "" : "maximum = #{reqVersion.maximum}")
|
@@ -178,7 +178,7 @@ module Bake
|
|
178
178
|
ExitHelper.exit(1)
|
179
179
|
end
|
180
180
|
|
181
|
-
def checkVer(reqVersion)
|
181
|
+
def self.checkVer(reqVersion)
|
182
182
|
return if reqVersion.nil?
|
183
183
|
min = reqVersion.minimum.split(".")
|
184
184
|
max = reqVersion.maximum.split(".")
|
@@ -217,7 +217,7 @@ module Bake
|
|
217
217
|
proj = projRoots[0]
|
218
218
|
|
219
219
|
reqVersion = proj.getRequiredBakeVersion
|
220
|
-
checkVer(reqVersion)
|
220
|
+
Bake::Config::checkVer(reqVersion)
|
221
221
|
|
222
222
|
configs = proj.getConfig
|
223
223
|
Bake::Configs::Checks::commonMetamodelCheck(configs, filename)
|
@@ -236,6 +236,7 @@ module Bake
|
|
236
236
|
adaptRoots = f.root_elements.select { |re| Metamodel::Adapt === re }
|
237
237
|
if adaptRoots.length > 0
|
238
238
|
adaptRoots.each do |adapt|
|
239
|
+
Bake::Config::checkVer(adapt.requiredBakeVersion)
|
239
240
|
adapt.mainProject = @mainProjectName if adapt.mainProject == "__THIS__"
|
240
241
|
adaptConfigs = adapt.getConfig
|
241
242
|
AdaptConfig.checkSyntax(adaptConfigs, filename, true)
|
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/loader.rb
CHANGED
data/lib/bake/model/metamodel.rb
CHANGED
@@ -147,6 +147,7 @@ module Bake
|
|
147
147
|
class Files < ModelElement
|
148
148
|
has_attr 'name', String, :defaultValueLiteral => ""
|
149
149
|
has_attr 'compileOnly', Boolean, :defaultValueLiteral => "false"
|
150
|
+
has_attr 'linkDirectly', Boolean, :defaultValueLiteral => "false"
|
150
151
|
contains_many 'define', Define, 'parent'
|
151
152
|
contains_many 'flags', Flags, 'parent'
|
152
153
|
end
|
@@ -283,6 +284,12 @@ module Bake
|
|
283
284
|
has_attr 'env', Boolean, :defaultValueLiteral => "false"
|
284
285
|
end
|
285
286
|
|
287
|
+
class CompilationCheck < ModelElement
|
288
|
+
has_attr 'exclude', String, :defaultValueLiteral => ""
|
289
|
+
has_attr 'include', String, :defaultValueLiteral => ""
|
290
|
+
has_attr 'ignore', String, :defaultValueLiteral => ""
|
291
|
+
end
|
292
|
+
|
286
293
|
class BaseConfig_INTERNAL < ModelElement
|
287
294
|
has_attr 'name', String, :defaultValueLiteral => ""
|
288
295
|
has_attr 'extends', String, :defaultValueLiteral => ""
|
@@ -304,6 +311,7 @@ module Bake
|
|
304
311
|
contains_many 'set', Set, 'parent'
|
305
312
|
contains_many 'prebuild', Prebuild, 'parent'
|
306
313
|
contains_one 'cdb', CompilationDB, 'parent'
|
314
|
+
contains_many 'compilationCheck', CompilationCheck, 'parent'
|
307
315
|
|
308
316
|
module ClassModule
|
309
317
|
def ident
|
@@ -355,6 +363,7 @@ module Bake
|
|
355
363
|
has_attr 'mainConfig', String, :defaultValueLiteral => ""
|
356
364
|
contains_many 'config', BaseConfig_INTERNAL, 'parent'
|
357
365
|
contains_many 'scopes', Scope, 'parent'
|
366
|
+
contains_one 'requiredBakeVersion', RequiredBakeVersion, 'parent'
|
358
367
|
end
|
359
368
|
|
360
369
|
class If < Adapt
|
data/lib/bake/options/options.rb
CHANGED
@@ -11,13 +11,6 @@ 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
15
|
attr_accessor :build_config, :nocache, :analyze, :eclipseOrder, :showConfigs, :cc2j_filename
|
23
16
|
attr_reader :main_dir, :working_dir, :project, :filename, :main_project_name, :buildDirDelimiter, :dot, :dotFilename # String
|
@@ -368,6 +361,10 @@ module Bake
|
|
368
361
|
end
|
369
362
|
|
370
363
|
def set_verbose(num)
|
364
|
+
if num.nil?
|
365
|
+
Bake.formatter.printError("Error: verbose must be between 0 and 3")
|
366
|
+
ExitHelper.exit(1)
|
367
|
+
end
|
371
368
|
checkNum(num)
|
372
369
|
@verbose = String === num ? num.to_i : num
|
373
370
|
if @verbose < 0 || verbose > 3
|
@@ -393,6 +390,14 @@ module Bake
|
|
393
390
|
|
394
391
|
end
|
395
392
|
|
393
|
+
def self.options
|
394
|
+
@@options ||= Options.new([])
|
395
|
+
end
|
396
|
+
|
397
|
+
def self.options=(options)
|
398
|
+
@@options = options
|
399
|
+
end
|
400
|
+
|
396
401
|
end
|
397
402
|
|
398
403
|
|
data/lib/bakery/model/loader.rb
CHANGED
data/lib/bakery/toBake.rb
CHANGED
@@ -35,7 +35,7 @@ module Bake
|
|
35
35
|
projs << root.dir + "/Project.meta"
|
36
36
|
end
|
37
37
|
if projs.length == 0
|
38
|
-
|
38
|
+
Bake.formatter.printWarning("pattern does not match any project: #{p.name}", p)
|
39
39
|
end
|
40
40
|
projs.each do |f|
|
41
41
|
toBuildPattern << BuildPattern.new(f, "^"+p.config.gsub("*","(\\w*)")+"$", p.args, p)
|
@@ -58,6 +58,10 @@ module Bake
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
toBuildPattern.select {|bp| !bp.coll_p.isFound}.map {|bp| bp.coll_p}.uniq.each do |p|
|
62
|
+
Bake.formatter.printWarning("pattern does not match any config: #{p.config}", p)
|
63
|
+
end
|
64
|
+
|
61
65
|
col.exclude.each do |p|
|
62
66
|
p.name = "/"+p.name.gsub("*","(\\w*)")+"/Project.meta"
|
63
67
|
p.config = "^"+p.config.gsub("*","(\\w*)")+"$"
|
data/lib/blocks/block.rb
CHANGED
@@ -22,7 +22,7 @@ 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
|
25
|
+
attr_reader :lib_elements, :projectDir, :library, :executable, :config, :projectName, :configName, :prebuild, :output_dir, :tcs
|
26
26
|
attr_accessor :visited, :inDeps, :result, :bes, :besDirect
|
27
27
|
|
28
28
|
def 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
|
@@ -119,6 +124,13 @@ module Bake
|
|
119
124
|
resPathMagic = inc[1..-1].join("/") # within self
|
120
125
|
resPathMagic = "." if resPathMagic == ""
|
121
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
|
122
134
|
elsif @referencedConfigs.include?(inc[0])
|
123
135
|
dirOther = @referencedConfigs[inc[0]].first.parent.get_project_dir
|
124
136
|
resPathMagic = File.rel_from_to_project(@projectDir, dirOther, false)
|
@@ -126,17 +138,19 @@ module Bake
|
|
126
138
|
resPathMagic = resPathMagic + "/" + postfix if postfix != ""
|
127
139
|
resPathMagic = "." if resPathMagic == ""
|
128
140
|
res << resPathMagic
|
141
|
+
Bake.formatter.printInfo("\"#{d}\" uses path magic in IncludeDir, please use a Dependency to \"#{inc[0]}\" instead", elem) if warnIfLocal
|
129
142
|
end
|
130
143
|
|
131
144
|
if File.exists?(@projectDir + "/" + d) # prio 2: local, e.g. "include"
|
132
145
|
res << d
|
133
146
|
end
|
134
147
|
|
135
|
-
#
|
148
|
+
# prio 3: check if dir exists without Project.meta entry
|
136
149
|
Bake.options.roots.each do |r|
|
137
150
|
absIncDir = r.dir+"/"+d
|
138
151
|
if File.exists?(absIncDir)
|
139
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
|
140
154
|
end
|
141
155
|
end
|
142
156
|
|
@@ -355,14 +369,14 @@ module Bake
|
|
355
369
|
def callSteps(method)
|
356
370
|
@config.writeEnvVars()
|
357
371
|
Thread.current[:lastCommand] = nil
|
358
|
-
allSteps = (preSteps + mainSteps + postSteps)
|
372
|
+
@allSteps = (preSteps + mainSteps + postSteps)
|
359
373
|
# check if we have to delay the output (if the last step of this block is not in a thread)
|
360
374
|
@outputStep = nil
|
361
|
-
allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
362
|
-
while
|
375
|
+
@allSteps.each { |step| @outputStep = independent?(method, step) ? step : nil }
|
376
|
+
while !@allSteps.empty?
|
363
377
|
parallel = []
|
364
|
-
while allSteps.first && independent?(method, allSteps.first)
|
365
|
-
parallel << allSteps.shift
|
378
|
+
while @allSteps.first && independent?(method, @allSteps.first)
|
379
|
+
parallel << @allSteps.shift
|
366
380
|
end
|
367
381
|
if parallel.length > 0
|
368
382
|
execute_in_thread(parallel) {
|
@@ -383,7 +397,7 @@ module Bake
|
|
383
397
|
end
|
384
398
|
}
|
385
399
|
else
|
386
|
-
step = allSteps.shift
|
400
|
+
step = @allSteps.shift
|
387
401
|
Blocks::Block::waitForAllThreads()
|
388
402
|
@result = executeStep(step, method) if @result
|
389
403
|
@outputStep = nil if !@result && blockAbort?(@result)
|
@@ -404,13 +418,29 @@ module Bake
|
|
404
418
|
return true
|
405
419
|
end
|
406
420
|
|
407
|
-
|
408
|
-
|
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
|
409
430
|
|
410
431
|
@inDeps = true
|
411
|
-
|
432
|
+
begin
|
433
|
+
depResult = callDeps(:execute)
|
434
|
+
rescue Exception => e
|
435
|
+
@allSteps = []
|
436
|
+
raise
|
437
|
+
end
|
438
|
+
|
412
439
|
@inDeps = false
|
413
|
-
|
440
|
+
if blockAbort?(depResult)
|
441
|
+
@allSteps = []
|
442
|
+
return @result && depResult
|
443
|
+
end
|
414
444
|
|
415
445
|
Bake::IDEInterface.instance.set_build_info(@projectName, @configName)
|
416
446
|
begin
|
@@ -445,8 +475,9 @@ module Bake
|
|
445
475
|
SyncOut.discardStreams()
|
446
476
|
end
|
447
477
|
end
|
478
|
+
@allSteps = []
|
448
479
|
end
|
449
|
-
|
480
|
+
|
450
481
|
return (depResult && @result)
|
451
482
|
end
|
452
483
|
|
data/lib/blocks/compile.rb
CHANGED
@@ -7,47 +7,52 @@ require_relative '../common/utils'
|
|
7
7
|
require_relative '../bake/toolchain/colorizing_formatter'
|
8
8
|
require_relative '../bake/config/loader'
|
9
9
|
|
10
|
-
|
11
10
|
begin
|
12
|
-
|
11
|
+
module Kernel32
|
12
|
+
require 'fiddle'
|
13
|
+
require 'fiddle/import'
|
14
|
+
require 'fiddle/types'
|
15
|
+
extend Fiddle::Importer
|
16
|
+
dlload 'kernel32'
|
17
|
+
include Fiddle::Win32Types
|
18
|
+
extern 'DWORD GetLongPathName(LPCSTR, LPSTR, DWORD)'
|
19
|
+
extern 'DWORD GetShortPathName(LPCSTR, LPSTR, DWORD)'
|
20
|
+
end
|
13
21
|
|
14
|
-
def longname short_name
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
22
|
+
def longname short_name
|
23
|
+
max_path = 1024
|
24
|
+
long_name = " " * max_path
|
25
|
+
lfn_size = Kernel32.GetLongPathName(short_name, long_name, max_path)
|
26
|
+
return long_name[0..lfn_size-1]
|
27
|
+
end
|
20
28
|
|
21
|
-
def shortname long_name
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
29
|
+
def shortname long_name
|
30
|
+
max_path = 1024
|
31
|
+
short_name = " " * max_path
|
32
|
+
lfn_size = Kernel32.GetShortPathName(long_name, short_name, max_path)
|
33
|
+
return short_name[0..lfn_size-1]
|
34
|
+
end
|
27
35
|
|
28
|
-
def realname file
|
29
|
-
longname(shortname(file))
|
30
|
-
end
|
36
|
+
def realname file
|
37
|
+
x = longname(shortname(file))
|
38
|
+
end
|
31
39
|
|
32
|
-
rescue
|
40
|
+
rescue Fiddle::DLError
|
33
41
|
|
34
|
-
def realname file
|
42
|
+
def realname file
|
35
43
|
file
|
36
|
-
end
|
44
|
+
end
|
37
45
|
|
38
46
|
end
|
39
47
|
|
40
48
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
49
|
module Bake
|
45
50
|
|
46
51
|
module Blocks
|
47
52
|
|
48
53
|
class Compile < BlockBase
|
49
54
|
|
50
|
-
attr_reader :objects, :include_list, :source_files_ignored_in_lib
|
55
|
+
attr_reader :objects, :source_files, :source_files_compiled, :include_list, :source_files_ignored_in_lib, :object_files_ignored_in_lib
|
51
56
|
|
52
57
|
def mutex
|
53
58
|
@mutex ||= Mutex.new
|
@@ -421,6 +426,7 @@ module Bake
|
|
421
426
|
Utils.gitIgnore(odir) if !Bake.options.dry
|
422
427
|
|
423
428
|
fileListBlock = Set.new if Bake.options.filelist
|
429
|
+
@source_files_compiled = @source_files.dup
|
424
430
|
compileJobs = Multithread::Jobs.new(@source_files) do |jobs|
|
425
431
|
while source = jobs.get_next_or_nil do
|
426
432
|
|
@@ -513,6 +519,7 @@ module Bake
|
|
513
519
|
end
|
514
520
|
|
515
521
|
def calcObjects
|
522
|
+
@object_files_ignored_in_lib = []
|
516
523
|
@source_files.each do |source|
|
517
524
|
type = get_source_type(source)
|
518
525
|
if not type.nil?
|
@@ -526,15 +533,22 @@ module Bake
|
|
526
533
|
end
|
527
534
|
end
|
528
535
|
@object_files[source] = object
|
529
|
-
|
536
|
+
if @source_files_ignored_in_lib.include?(source)
|
537
|
+
if @source_files_link_directly.include?(source)
|
538
|
+
@object_files_ignored_in_lib << object
|
539
|
+
end
|
540
|
+
else
|
541
|
+
@objects << object
|
542
|
+
end
|
530
543
|
end
|
531
544
|
end
|
532
545
|
end
|
533
546
|
|
534
547
|
def calcSources(cleaning = false, keep = false)
|
535
|
-
return @source_files if @source_files
|
548
|
+
return @source_files if @source_files && !@source_files.empty?
|
536
549
|
@source_files = []
|
537
550
|
@source_files_ignored_in_lib = []
|
551
|
+
@source_files_link_directly = []
|
538
552
|
@fileTcs = {}
|
539
553
|
|
540
554
|
exclude_files = Set.new
|
@@ -564,11 +578,17 @@ module Bake
|
|
564
578
|
if ((!@fileTcs.has_key?(f)) || singleFile)
|
565
579
|
@fileTcs[f] = icf
|
566
580
|
end
|
567
|
-
|
568
|
-
|
581
|
+
if source_files.include?(f) || exclude_files.include?(f)
|
582
|
+
if (singleFile)
|
583
|
+
@source_files_ignored_in_lib << f if sources.compileOnly || sources.linkDirectly
|
584
|
+
@source_files_link_directly << f if sources.linkDirectly
|
585
|
+
end
|
586
|
+
next
|
587
|
+
end
|
569
588
|
source_files << f
|
570
589
|
@source_files << f
|
571
|
-
@source_files_ignored_in_lib << f if sources.compileOnly
|
590
|
+
@source_files_ignored_in_lib << f if sources.compileOnly || sources.linkDirectly
|
591
|
+
@source_files_link_directly << f if sources.linkDirectly
|
572
592
|
end
|
573
593
|
end
|
574
594
|
|
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
@@ -0,0 +1,23 @@
|
|
1
|
+
module RGen
|
2
|
+
module Util
|
3
|
+
|
4
|
+
class FileCacheMap
|
5
|
+
alias_method :orig_store_data, :store_data
|
6
|
+
def store_data(key_path, value_data)
|
7
|
+
begin
|
8
|
+
orig_store_data(key_path, value_data)
|
9
|
+
rescue Exception=>e
|
10
|
+
if Bake.options.verbose >= 3
|
11
|
+
cf = cache_file(key_path)
|
12
|
+
Bake.formatter.printWarning("Warning: Could not write cache file #{cf}")
|
13
|
+
if Bake.options.debug
|
14
|
+
puts e.message
|
15
|
+
puts e.backtrace
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/common/utils.rb
CHANGED
@@ -4,11 +4,21 @@ module Bake
|
|
4
4
|
|
5
5
|
module Utils
|
6
6
|
|
7
|
-
def self.gitIgnore(folder)
|
8
|
-
FileUtils::mkdir_p(folder)
|
7
|
+
def self.gitIgnore(folder, mode = :report)
|
9
8
|
gitignore = folder + "/.gitignore"
|
10
|
-
|
11
|
-
|
9
|
+
begin
|
10
|
+
FileUtils::mkdir_p(folder)
|
11
|
+
if !File.exist?(gitignore)
|
12
|
+
File.write(gitignore, ".\n")
|
13
|
+
end
|
14
|
+
rescue Exception=>e
|
15
|
+
if mode != :silent && Bake.options.verbose >= 3
|
16
|
+
Bake.formatter.printWarning("Warning: Could not write file #{gitignore}")
|
17
|
+
if Bake.options.debug
|
18
|
+
puts e.message
|
19
|
+
puts e.backtrace
|
20
|
+
end
|
21
|
+
end
|
12
22
|
end
|
13
23
|
end
|
14
24
|
|
data/lib/common/version.rb
CHANGED
data/lib/tocxx.rb
CHANGED
@@ -36,6 +36,7 @@ require_relative 'common/abortException'
|
|
36
36
|
|
37
37
|
require_relative 'adapt/config/loader'
|
38
38
|
require "thwait"
|
39
|
+
require 'pathname'
|
39
40
|
|
40
41
|
module Bake
|
41
42
|
|
@@ -45,10 +46,19 @@ module Bake
|
|
45
46
|
class ToCxx
|
46
47
|
|
47
48
|
@@linkBlock = 0
|
49
|
+
@@include_deps = {}
|
48
50
|
|
49
51
|
def self.linkBlock
|
50
52
|
@@linkBlock = 1
|
51
53
|
end
|
54
|
+
|
55
|
+
def self.include_deps
|
56
|
+
@@include_deps
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.reset_include_deps
|
60
|
+
@@include_deps = {}
|
61
|
+
end
|
52
62
|
|
53
63
|
def initialize
|
54
64
|
@configTcMap = {}
|
@@ -232,6 +242,22 @@ module Bake
|
|
232
242
|
end
|
233
243
|
end
|
234
244
|
|
245
|
+
def makeDepOverview
|
246
|
+
return if !Bake.options.dev_features.any? {|feature| feature.start_with?("dep-overview=") }
|
247
|
+
Blocks::ALL_BLOCKS.each do |name,block|
|
248
|
+
block.bes.each do |depInc|
|
249
|
+
@@include_deps[block.projectDir] = Set.new if !@@include_deps.has_key?(block.projectDir)
|
250
|
+
if (Metamodel::Dependency === depInc)
|
251
|
+
c = @referencedConfigs[depInc.name].detect { |configRef| configRef.name == depInc.config }
|
252
|
+
@@include_deps[block.projectDir] << Blocks::ALL_BLOCKS[c.qname].projectDir
|
253
|
+
else
|
254
|
+
@@include_deps[block.projectDir] << depInc.name
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
ExitHelper.exit(0)
|
259
|
+
end
|
260
|
+
|
235
261
|
def makeIncs
|
236
262
|
Blocks::ALL_BLOCKS.each do |name,block|
|
237
263
|
bes2 = []
|
@@ -692,6 +718,8 @@ module Bake
|
|
692
718
|
makeGraph
|
693
719
|
puts "Profiling #{Time.now - $timeStart}: make includes..." if Bake.options.profiling
|
694
720
|
makeIncs
|
721
|
+
puts "Profiling #{Time.now - $timeStart}: make dep overview..." if Bake.options.profiling
|
722
|
+
makeDepOverview
|
695
723
|
puts "Profiling #{Time.now - $timeStart}: make uniq..." if Bake.options.profiling
|
696
724
|
makeUniq
|
697
725
|
puts "Profiling #{Time.now - $timeStart}: convert to building blocks..." if Bake.options.profiling
|
@@ -825,6 +853,84 @@ module Bake
|
|
825
853
|
if Bake.options.linkOnly and @@linkBlock == 0
|
826
854
|
Bake.formatter.printSuccess("\nNothing to link.")
|
827
855
|
else
|
856
|
+
# CompilationCheck
|
857
|
+
if !Bake.options.project &&
|
858
|
+
!Bake.options.filename &&
|
859
|
+
!Bake.options.linkOnly &&
|
860
|
+
!Bake.options.prepro &&
|
861
|
+
!Bake.options.compileOnly &&
|
862
|
+
!Bake.options.clean
|
863
|
+
|
864
|
+
ccChecks = []
|
865
|
+
ccIncludes = Set.new
|
866
|
+
ccExcludes = Set.new
|
867
|
+
ccIgnores = Set.new
|
868
|
+
@referencedConfigs.each do |projName, configs|
|
869
|
+
configs.compilationCheck.each do |cc|
|
870
|
+
ccChecks << cc
|
871
|
+
end
|
872
|
+
end
|
873
|
+
ccChecks.each do |cc|
|
874
|
+
Dir.chdir(cc.parent.parent.get_project_dir) do
|
875
|
+
Dir.glob(cc.include).select {|f| File.file?(f)}.each {|f| ccIncludes << File.expand_path(f)}
|
876
|
+
Dir.glob(cc.exclude).select {|f| File.file?(f)}.each {|f| ccExcludes << File.expand_path(f)}
|
877
|
+
Dir.glob(cc.ignore). select {|f| File.file?(f)}.each {|f| ccIgnores << File.expand_path(f)}
|
878
|
+
end
|
879
|
+
end
|
880
|
+
ccIncludes -= ccIgnores
|
881
|
+
ccExcludes -= ccIgnores
|
882
|
+
ccIncludes -= ccExcludes
|
883
|
+
|
884
|
+
if !ccIncludes.empty? || !ccExcludes.empty?
|
885
|
+
inCompilation = Set.new
|
886
|
+
Blocks::ALL_BLOCKS.each do |name,block|
|
887
|
+
block.mainSteps.each do |b|
|
888
|
+
if Blocks::Compile === b && !b.source_files_compiled.nil?
|
889
|
+
b.source_files_compiled.each do |s|
|
890
|
+
inCompilation << File.expand_path(s, b.projectDir)
|
891
|
+
type = b.get_source_type(s)
|
892
|
+
if type != :ASM
|
893
|
+
b.objects.each do |o|
|
894
|
+
dep_filename = b.calcDepFile(o, type)
|
895
|
+
dep_filename_conv = b.calcDepFileConv(dep_filename)
|
896
|
+
File.readlines(File.expand_path(dep_filename_conv, b.projectDir)).map{|line| line.strip}.each do |dep|
|
897
|
+
header = File.expand_path(dep, b.projectDir)
|
898
|
+
if File.exist?(header)
|
899
|
+
inCompilation << header
|
900
|
+
end
|
901
|
+
end
|
902
|
+
end
|
903
|
+
end
|
904
|
+
end
|
905
|
+
end
|
906
|
+
end
|
907
|
+
end
|
908
|
+
pnPwd = Pathname.new(Dir.pwd)
|
909
|
+
ccNotIncluded = (ccIncludes - inCompilation).to_a
|
910
|
+
ccNotExcluded = inCompilation.select {|i| ccExcludes.include?(i) }
|
911
|
+
ccNotIncluded.each do |cc|
|
912
|
+
cc = Pathname.new(cc).relative_path_from(pnPwd)
|
913
|
+
Bake.formatter.printWarning("Warning: file not included in build: #{cc}")
|
914
|
+
end
|
915
|
+
ccNotExcluded.each do |cc|
|
916
|
+
cc = Pathname.new(cc).relative_path_from(pnPwd)
|
917
|
+
Bake.formatter.printWarning("Warning: file not excluded from build: #{cc}")
|
918
|
+
end
|
919
|
+
|
920
|
+
if Bake.options.verbose >= 3
|
921
|
+
if ccNotIncluded.empty? && ccNotExcluded.empty?
|
922
|
+
Bake.formatter.printInfo("Info: CompilationCheck passed")
|
923
|
+
end
|
924
|
+
end
|
925
|
+
|
926
|
+
elsif !ccChecks.empty?
|
927
|
+
if Bake.options.verbose >= 3
|
928
|
+
Bake.formatter.printInfo("Info: CompilationCheck passed")
|
929
|
+
end
|
930
|
+
end
|
931
|
+
end
|
932
|
+
|
933
|
+
|
828
934
|
Bake.formatter.printSuccess("\n#{taskType} done.")
|
829
935
|
end
|
830
936
|
end
|
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.64.1
|
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-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rtext
|
@@ -112,16 +112,16 @@ dependencies:
|
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 12.
|
117
|
+
version: 12.3.3
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 12.
|
124
|
+
version: 12.3.3
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- lib/common/exit_helper.rb
|
263
263
|
- lib/common/ext/dir.rb
|
264
264
|
- lib/common/ext/file.rb
|
265
|
+
- lib/common/ext/rgen.rb
|
265
266
|
- lib/common/ext/rtext.rb
|
266
267
|
- lib/common/ext/stdout.rb
|
267
268
|
- lib/common/ide_interface.rb
|