bake-toolkit 2.60.2 → 2.63.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 196c55cc08919bff9381fc2c148d1cd4ec295667eb6fa90f4af8ae3080c3b9cc
4
- data.tar.gz: 271409c11aeb347eaf6a3d6110a9e3d4aca6ce9f45cc144324f7bbaf63e3162f
3
+ metadata.gz: 007d1495eeb33f601eb10747f21cae6b0c478041092799bcfd284ab8cdce7253
4
+ data.tar.gz: cabe15ec22fe017a9946b4287cc8321b5df6fd14b64dac6c0fa0b6f11c88f58a
5
5
  SHA512:
6
- metadata.gz: 3902c531628b8cdaf2ce297b9be23b5bd1daaa7009e451797f28df16ff074624ff9c78a2599ae66590ca5fcff7d992e06ffe3e52daa4e937650134c33c2fb3dc
7
- data.tar.gz: efb3178b80e2c48a164f1b5d8f6d16661ccffb3a795bb451afe3c64956b5f08315a38798dc7267575cda11633779875ae8f353c741bcee73e0c3234341ba0dcf
6
+ metadata.gz: ec0beb0df1b8a9f191faba73671da192424f04714af16b80f047dac259808a778ac822a9f790ffcd679d86579a9100e1fc3325bc83b19a8d40b2b3c30ec6b769
7
+ data.tar.gz: 2c75dc962078394be1033cd484834b90e4fd326c83a103b8fdb780d827f8f6a78f1689d2e383bc09d6e3aee0e1c0cf2d91a5fafad868eca6e7ad8f660eb09259
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
 
@@ -15,6 +15,7 @@ module Bake
15
15
  def loadProjMeta(filename, filenum)
16
16
 
17
17
  Bake::Configs::Checks.symlinkCheck(filename)
18
+ Bake::Configs::Checks.sanityFolderName(filename)
18
19
 
19
20
  f = @loader.load(filename)
20
21
 
@@ -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.delete(@cacheFilename)
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
 
@@ -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
@@ -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
- @fullProjects[projName + "," + configname] = [config, configname]
141
- [config, configname]
142
- end
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
 
@@ -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)
@@ -9,6 +9,7 @@ require 'rgen/util/file_cache_map'
9
9
 
10
10
  require 'rtext/default_loader'
11
11
 
12
+ require_relative '../../common/ext/rgen'
12
13
  require_relative '../../common/exit_helper'
13
14
  require_relative '../toolchain/colorizing_formatter'
14
15
  require_relative '../options/options'
@@ -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
@@ -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, :cc2j_filename # String
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
- root = Root.extract_depth(dir)
328
- check_valid_dir(root.dir)
329
- root.dir = File.expand_path(root.dir.gsub(/[\\]/,'/'))
330
- @roots << root
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
- Bake.formatter.printError("Error: #{num} is not a positive number")
342
- ExitHelper.exit(1)
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
 
@@ -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
@@ -7,6 +7,7 @@ require 'rgen/fragment/fragmented_model'
7
7
 
8
8
  require 'rtext/default_loader'
9
9
 
10
+ require_relative '../../common/ext/rgen'
10
11
  require_relative '../../common/exit_helper'
11
12
  require_relative '../../bake/toolchain/colorizing_formatter'
12
13
 
@@ -91,10 +91,14 @@ module Bake
91
91
  end
92
92
 
93
93
  def set_root(dir)
94
- root = Root.extract_depth(dir)
95
- check_valid_dir(root.dir)
96
- root.dir = File.expand_path(root.dir.gsub(/[\\]/,'/'))
97
- @roots << root
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
@@ -35,7 +35,7 @@ module Bake
35
35
  projs << root.dir + "/Project.meta"
36
36
  end
37
37
  if projs.length == 0
38
- toBuildPattern << BuildPattern.new(nil, nil, p.args, p) # remember it for sorted info printout
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*)")+"$"
@@ -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
- # prioo 3: check if dir exists without Project.meta entry
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 !allSteps.empty?
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
- return true if (@visited)
408
- @visited = true
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
- depResult = callDeps(:execute)
432
+ begin
433
+ depResult = callDeps(:execute)
434
+ rescue Exception => e
435
+ @allSteps = []
436
+ raise
437
+ end
438
+
412
439
  @inDeps = false
413
- return @result && depResult if blockAbort?(depResult)
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
 
@@ -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
@@ -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 and not Bake.options.analyze and not Bake.options.prepro
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
- @objects << object unless @source_files_ignored_in_lib.include?(source)
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
- next if exclude_files.include?(f)
569
- next if source_files.include?(f)
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
 
@@ -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
@@ -1,5 +1,6 @@
1
1
  require_relative "../blocks/block"
2
2
  require_relative "ext/file"
3
+ require_relative "../bake/config/checks"
3
4
 
4
5
  module Bake
5
6
 
@@ -10,7 +11,8 @@ module Bake
10
11
  Bake::IDEInterface.instance.set_abort(false)
11
12
  Blocks::Block.reset_block_counter
12
13
  Blocks::Block.reset_delayed_result
13
- File.cleanupWarnings
14
+ Configs::Checks.cleanupWarnings
15
+ ToCxx::reset_include_deps
14
16
  end
15
17
 
16
18
  end
@@ -52,7 +52,7 @@ class File
52
52
 
53
53
  while i < max
54
54
  if toSplitted[i] != fromSplitted[i]
55
- if Bake.options.verbose >= 1
55
+ if Bake.options.verbose >= 1 && Bake.options.caseSensitivityCheck
56
56
  if toSplitted[i].casecmp(fromSplitted[i]) == 0
57
57
  if !@@warnedCase.include?(fromSplitted[0..i].join("/"))
58
58
  fromsj = fromSplitted[0..i].join("/")
@@ -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
@@ -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)
@@ -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(/[\\]/,'/')
@@ -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
- if !File.exist?(gitignore)
11
- File.write(gitignore, ".\n")
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
 
@@ -1,7 +1,7 @@
1
1
  module Bake
2
2
  class Version
3
3
  def self.number
4
- "2.60.2"
4
+ "2.63.2"
5
5
  end
6
6
 
7
7
  def self.printBakeVersion(ry = "")
@@ -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 = {}
@@ -232,6 +241,22 @@ module Bake
232
241
  end
233
242
  end
234
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
+ ExitHelper.exit(0)
258
+ end
259
+
235
260
  def makeIncs
236
261
  Blocks::ALL_BLOCKS.each do |name,block|
237
262
  bes2 = []
@@ -692,6 +717,8 @@ module Bake
692
717
  makeGraph
693
718
  puts "Profiling #{Time.now - $timeStart}: make includes..." if Bake.options.profiling
694
719
  makeIncs
720
+ puts "Profiling #{Time.now - $timeStart}: make dep overview..." if Bake.options.profiling
721
+ makeDepOverview
695
722
  puts "Profiling #{Time.now - $timeStart}: make uniq..." if Bake.options.profiling
696
723
  makeUniq
697
724
  puts "Profiling #{Time.now - $timeStart}: convert to building blocks..." if Bake.options.profiling
@@ -701,7 +728,17 @@ module Bake
701
728
  makeDot
702
729
  end
703
730
 
704
-
731
+ if !Bake.options.cc2j_filename
732
+ if !@mainConfig.cdb.nil?
733
+ Bake.options.cc2j_filename = @mainConfig.cdb.name
734
+ if !File.is_absolute?(Bake.options.cc2j_filename)
735
+ Bake.options.cc2j_filename = File.join(
736
+ File.rel_from_to_project(Dir.pwd, @mainConfig.parent.get_project_dir, false),
737
+ Bake.options.cc2j_filename)
738
+ end
739
+ end
740
+ end
741
+
705
742
  metadata_json = Bake.options.dev_features.detect { |x| x.start_with?("metadata=") }
706
743
  if metadata_json
707
744
  metadata_file = metadata_json[9..-1]
@@ -730,7 +767,7 @@ module Bake
730
767
  puts "File #{metadata_file} written."
731
768
  ExitHelper.exit(0)
732
769
  else
733
- Bake.formatter.printError("Error: dev-feature metadata is only for LibraryConfig for ExecutableConfig.")
770
+ Bake.formatter.printError("Error: dev-feature metadata is only for LibraryConfig or ExecutableConfig.")
734
771
  ExitHelper.exit(1)
735
772
  end
736
773
  end
@@ -785,7 +822,14 @@ module Bake
785
822
 
786
823
  if Bake.options.cc2j_filename
787
824
  require "json"
788
- File.write(Bake.options.cc2j_filename, JSON.pretty_generate(Blocks::CC2J))
825
+ begin
826
+ Bake.formatter.printInfo("Info: writing compilation database #{Bake.options.cc2j_filename}") if Bake.options.verbose >= 1
827
+ File.write(Bake.options.cc2j_filename, JSON.pretty_generate(Blocks::CC2J))
828
+ rescue Exception => ex
829
+ Bake.formatter.printError("Error: could not write compilation database: #{ex.message}")
830
+ puts ex.backtrace if Bake.options.debug
831
+ result = false
832
+ end
789
833
  end
790
834
 
791
835
  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.60.2
4
+ version: 2.63.2
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-03-25 00:00:00.000000000 Z
11
+ date: 2020-06-22 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.2.1
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.2.1
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