bake-toolkit 2.19.2 → 2.20.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/_build/html/_images/dot.png +0 -0
  3. data/documentation/_build/html/_images/dotP.png +0 -0
  4. data/documentation/_build/html/_images/dotPC.png +0 -0
  5. data/documentation/_build/html/_sources/changelog.txt +12 -0
  6. data/documentation/_build/html/_sources/concepts/concepts.txt +2 -0
  7. data/documentation/_build/html/_sources/concepts/inject.txt +65 -0
  8. data/documentation/_build/html/_sources/concepts/prebuild.txt +56 -0
  9. data/documentation/_build/html/_sources/index.txt +1 -1
  10. data/documentation/_build/html/_sources/syntax/auto_adjustment.txt +43 -0
  11. data/documentation/_build/html/_sources/syntax/syntax.txt +1 -1
  12. data/documentation/_build/html/_sources/syntax/variable_substitutions.txt +41 -68
  13. data/documentation/_build/html/_sources/tips_and_tricks/dot.txt +34 -0
  14. data/documentation/_build/html/_sources/tips_and_tricks/tips_and_tricks.txt +1 -1
  15. data/documentation/_build/html/_static/dot.png +0 -0
  16. data/documentation/_build/html/_static/dotP.png +0 -0
  17. data/documentation/_build/html/_static/dotPC.png +0 -0
  18. data/documentation/_build/html/_static/syntax.html +20 -0
  19. data/documentation/_build/html/changelog.html +17 -3
  20. data/documentation/_build/html/commandline/commandline.html +3 -3
  21. data/documentation/_build/html/concepts/build_hierarchy.html +3 -3
  22. data/documentation/_build/html/concepts/concepts.html +13 -3
  23. data/documentation/_build/html/concepts/inject.html +217 -0
  24. data/documentation/_build/html/concepts/link_order.html +3 -3
  25. data/documentation/_build/html/concepts/prebuild.html +205 -0
  26. data/documentation/_build/html/concepts/the_main_project.html +3 -3
  27. data/documentation/_build/html/concepts/the_project_meta_file.html +3 -3
  28. data/documentation/_build/html/genindex.html +3 -3
  29. data/documentation/_build/html/ide/eclipse/eclipse.html +3 -3
  30. data/documentation/_build/html/ide/eclipse/how_to_convert_existing_cdt_workspace.html +3 -3
  31. data/documentation/_build/html/ide/eclipse/how_to_create_a_new_project_in_eclipse.html +3 -3
  32. data/documentation/_build/html/ide/eclipse/how_to_create_a_workspace_in_eclipse.html +3 -3
  33. data/documentation/_build/html/ide/eclipse/how_to_debug_in_eclipse.html +3 -3
  34. data/documentation/_build/html/ide/eclipse/how_to_install_eclipse_plugin.html +3 -3
  35. data/documentation/_build/html/ide/eclipse/how_to_use_bake_in_eclipse.html +3 -3
  36. data/documentation/_build/html/ide/ide_integrations.html +3 -3
  37. data/documentation/_build/html/ide/vs/how_to_create_vs_projects.html +3 -3
  38. data/documentation/_build/html/ide/vs/how_to_debug_in_vs.html +3 -3
  39. data/documentation/_build/html/ide/vs/how_to_used_bake_in_vs.html +3 -3
  40. data/documentation/_build/html/ide/vs/vs.html +3 -3
  41. data/documentation/_build/html/ide/vs/vs_install.html +3 -3
  42. data/documentation/_build/html/index.html +10 -7
  43. data/documentation/_build/html/install/install_bake.html +3 -3
  44. data/documentation/_build/html/internal.html +3 -3
  45. data/documentation/_build/html/known_issues.html +3 -3
  46. data/documentation/_build/html/license.html +3 -3
  47. data/documentation/_build/html/performance/performance.html +5 -5
  48. data/documentation/_build/html/quickstart/quickstart.html +3 -3
  49. data/documentation/_build/html/search.html +3 -3
  50. data/documentation/_build/html/searchindex.js +1 -1
  51. data/documentation/_build/html/syntax/adapt_configs.html +3 -3
  52. data/documentation/_build/html/syntax/auto_adjustment.html +190 -0
  53. data/documentation/_build/html/syntax/derive_configs.html +3 -3
  54. data/documentation/_build/html/syntax/project_meta_syntax.html +23 -3
  55. data/documentation/_build/html/syntax/syntax.html +11 -7
  56. data/documentation/_build/html/syntax/variable_substitutions.html +54 -67
  57. data/documentation/_build/html/tips_and_tricks/{bundle.html → dot.html} +25 -19
  58. data/documentation/_build/html/tips_and_tricks/how_to_use_bake_with_cygwin.html +3 -3
  59. data/documentation/_build/html/tips_and_tricks/static_code_analysis.html +3 -3
  60. data/documentation/_build/html/tips_and_tricks/the_bakery.html +3 -3
  61. data/documentation/_build/html/tips_and_tricks/the_clang.html +5 -5
  62. data/documentation/_build/html/tips_and_tricks/tips_and_tricks.html +4 -4
  63. data/documentation/_build/html/why_bake/why_bake.html +5 -5
  64. data/lib/adapt/config/loader.rb +37 -35
  65. data/lib/bake/config/checks.rb +19 -11
  66. data/lib/bake/config/loader.rb +67 -60
  67. data/lib/bake/model/metamodel.rb +56 -30
  68. data/lib/bake/options/options.rb +37 -3
  69. data/lib/bake/options/usage.rb +12 -3
  70. data/lib/bake/subst.rb +5 -2
  71. data/lib/blocks/block.rb +27 -6
  72. data/lib/blocks/blockBase.rb +2 -17
  73. data/lib/blocks/compile.rb +91 -91
  74. data/lib/blocks/executable.rb +41 -41
  75. data/lib/common/version.rb +1 -1
  76. data/lib/tocxx.rb +212 -55
  77. metadata +16 -4
  78. data/documentation/_build/html/_sources/tips_and_tricks/bundle.txt +0 -24
@@ -1,11 +1,11 @@
1
1
  require 'blocks/blockBase'
2
2
 
3
3
  module Bake
4
-
4
+
5
5
  module Blocks
6
-
6
+
7
7
  class Executable < BlockBase
8
-
8
+
9
9
  def initialize(block, config, referencedConfigs, tcs, compileBlock)
10
10
  super(block, config, referencedConfigs, tcs)
11
11
  @compileBlock = compileBlock
@@ -15,59 +15,59 @@ module Bake
15
15
  calcLinkerScript
16
16
 
17
17
  end
18
-
18
+
19
19
  def calcLinkerScript
20
- @linker_script = @config.linkerScript.nil? ? nil : @block.convPath(@config.linkerScript)
20
+ @linker_script = @config.linkerScript.nil? ? nil : @block.convPath(@config.linkerScript)
21
21
  end
22
-
22
+
23
23
  def calcArtifactName
24
- if not @config.artifactName.nil? and @config.artifactName.name != ""
24
+ if not @config.artifactName.nil? and @config.artifactName.name != ""
25
25
  baseFilename = @config.artifactName.name
26
26
  else
27
27
  baseFilename = "#{@projectName}#{@tcs[:LINKER][:OUTPUT_ENDING]}"
28
28
  end
29
29
  @exe_name ||= File.join([@output_dir, baseFilename])
30
30
  end
31
-
31
+
32
32
  def calcCmdlineFile()
33
33
  @exe_name + ".cmdline"
34
34
  end
35
-
35
+
36
36
  def calcMapFile
37
37
  @mapfile = nil
38
38
  if (not Bake.options.docu) and (not Bake.options.lint) and (not @config.mapFile.nil?)
39
39
  if @config.mapFile.name == ""
40
40
  @mapfile = @exe_name.chomp(File.extname(@exe_name)) + ".map"
41
41
  else
42
- @mapfile = @config.mapFile.name
42
+ @mapfile = @config.mapFile.name
43
43
  end
44
44
  end
45
45
  end
46
-
46
+
47
47
  def ignore?
48
48
  Bake.options.prepro
49
49
  end
50
-
50
+
51
51
  def needed?(libs)
52
52
  return "because linkOnly was specified" if Bake.options.linkOnly
53
-
53
+
54
54
  # exe
55
55
  return "because executable does not exist" if not File.exists?(@exe_name)
56
56
 
57
57
  eTime = File.mtime(@exe_name)
58
-
58
+
59
59
  # linkerscript
60
60
  if @linker_script
61
61
  return "because linker script does not exist - will most probably result in an error" if not File.exists?(@linker_script)
62
62
  return "because linker script is newer than executable" if eTime < File.mtime(@linker_script)
63
63
  end
64
-
64
+
65
65
  # sources
66
66
  @compileBlock.objects.each do |obj|
67
67
  return "because object #{obj} does not exist" if not File.exists?(obj)
68
68
  return "because object #{obj} is newer than executable" if eTime < File.mtime(obj)
69
69
  end
70
-
70
+
71
71
  # libs
72
72
  libs.each do |lib|
73
73
  return "because library #{lib} does not exist" if not File.exists?(lib)
@@ -75,12 +75,12 @@ module Bake
75
75
  end
76
76
  false
77
77
  end
78
-
78
+
79
79
  def execute
80
80
  Dir.chdir(@projectDir) do
81
- childs = getBlocks(:childs)
81
+ childs = @block.getBlocks(:childs)
82
82
  return false if childs.any? { |b| b.result == false }
83
-
83
+
84
84
  allSources = []
85
85
  (childs + [@block]).each do |b|
86
86
  Dir.chdir(b.projectDir) do
@@ -91,28 +91,28 @@ module Bake
91
91
  end
92
92
  duplicateSources = allSources.group_by{ |e| e }.select { |k, v| v.size > 1 }.map(&:first)
93
93
  duplicateSources.each do |d|
94
- Bake.formatter.printWarning("Source compiled more than once: #{d}")
94
+ Bake.formatter.printWarning("Source compiled more than once: #{d}")
95
95
  end
96
-
96
+
97
97
  libs, linker_libs_array = LibElements.calc_linker_lib_string(@block, @tcs)
98
-
98
+
99
99
  cmdLineCheck = false
100
100
  cmdLineFile = calcCmdlineFile()
101
-
101
+
102
102
  return true if ignore?
103
103
  reason = needed?(libs)
104
104
  if not reason
105
105
  cmdLineCheck = true
106
106
  reason = config_changed?(cmdLineFile)
107
107
  end
108
-
108
+
109
109
  linker = @tcs[:LINKER]
110
-
110
+
111
111
  cmd = Utils.flagSplit(linker[:COMMAND], false) # g++
112
112
  cmd += linker[:MUST_FLAGS].split(" ")
113
113
  cmd += Bake::Utils::flagSplit(linker[:FLAGS],true)
114
-
115
-
114
+
115
+
116
116
  cmd << linker[:EXE_FLAG]
117
117
  if linker[:EXE_FLAG_SPACE]
118
118
  cmd << @exe_name
@@ -124,52 +124,52 @@ module Bake
124
124
  cmd << linker[:SCRIPT] if @linker_script # -T
125
125
  cmd << @linker_script if @linker_script # xy/xy.dld
126
126
  cmd += linker[:MAP_FILE_FLAG].split(" ") if @mapfile # -Wl,-m6
127
- if not linker[:MAP_FILE_PIPE] and @mapfile
128
- cmd[cmd.length-1] << @mapfile
127
+ if not linker[:MAP_FILE_PIPE] and @mapfile
128
+ cmd[cmd.length-1] << @mapfile
129
129
  end
130
130
  cmd += Bake::Utils::flagSplit(linker[:LIB_PREFIX_FLAGS],true) # "-Wl,--whole-archive "
131
131
  cmd += linker_libs_array
132
132
  cmd += Bake::Utils::flagSplit(linker[:LIB_POSTFIX_FLAGS],true) # "-Wl,--no-whole-archive "
133
-
133
+
134
134
  mapfileStr = (@mapfile and linker[:MAP_FILE_PIPE]) ? " >#{@mapfile}" : ""
135
-
135
+
136
136
  # pre print because linking can take much time
137
137
  cmdLinePrint = cmd.dup
138
138
  outPipe = (@mapfile and linker[:MAP_FILE_PIPE]) ? "#{@mapfile}" : nil
139
139
  cmdLinePrint << "> #{outPipe}" if outPipe
140
-
140
+
141
141
  if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
142
142
  success = true
143
143
  else
144
144
  ToCxx.linkBlock
145
-
145
+
146
146
  BlockBase.prepareOutput(@exe_name)
147
-
147
+
148
148
  printCmd(cmdLinePrint, "Linking #{@exe_name}", reason, false)
149
149
  BlockBase.writeCmdLineFile(cmd, cmdLineFile)
150
150
  success, consoleOutput = ProcessHelper.run(cmd, false, false, outPipe)
151
151
  process_result(cmdLinePrint, consoleOutput, linker[:ERROR_PARSER], nil, reason, success)
152
-
152
+
153
153
  check_config_file()
154
154
  end
155
-
155
+
156
156
  Bake::Bundle.instance.addBinary(@exe_name, @linker_script, isMainProject? ? @config : nil)
157
-
157
+
158
158
  return success
159
159
  end
160
160
  end
161
-
161
+
162
162
  def clean
163
163
  Dir.chdir(@projectDir) do
164
- if File.exist?@output_dir
164
+ if File.exist?@output_dir
165
165
  puts "Deleting folder #{@output_dir}" if Bake.options.verbose >= 2
166
166
  FileUtils.rm_rf(@output_dir)
167
167
  end
168
168
  end unless Bake.options.filename
169
169
  return true
170
170
  end
171
-
171
+
172
172
  end
173
-
173
+
174
174
  end
175
175
  end
@@ -1,7 +1,7 @@
1
1
  module Bake
2
2
  class Version
3
3
  def self.number
4
- "2.19.2"
4
+ "2.20.1"
5
5
  end
6
6
  end
7
7
 
@@ -40,15 +40,15 @@ module Bake
40
40
 
41
41
  class SystemCommandFailed < Exception
42
42
  end
43
-
43
+
44
44
  class ToCxx
45
-
45
+
46
46
  @@linkBlock = 0
47
47
 
48
48
  def self.linkBlock
49
49
  @@linkBlock = 1
50
50
  end
51
-
51
+
52
52
  def initialize
53
53
  @configTcMap = {}
54
54
  end
@@ -58,7 +58,7 @@ module Bake
58
58
  configs.each do |config|
59
59
  tcs = Utils.deep_copy(@defaultToolchain)
60
60
  @configTcMap[config] = tcs
61
- end
61
+ end
62
62
  end
63
63
  end
64
64
 
@@ -66,23 +66,23 @@ module Bake
66
66
  @loadedConfig.referencedConfigs.each do |projName, configs|
67
67
  configs.each do |config|
68
68
  integrateToolchain(@configTcMap[config], config.toolchain)
69
- end
69
+ end
70
70
  end
71
71
  end
72
-
72
+
73
73
  def substVars
74
74
  Subst.itute(@mainConfig, Bake.options.main_project_name, true, @configTcMap[@mainConfig], @loadedConfig, @configTcMap)
75
75
  @loadedConfig.referencedConfigs.each do |projName, configs|
76
76
  configs.each do |config|
77
- if config != @mainConfig
77
+ if config != @mainConfig
78
78
  Subst.itute(config, projName, false, @configTcMap[config], @loadedConfig, @configTcMap)
79
- end
80
- end
79
+ end
80
+ end
81
81
  end
82
82
  end
83
-
84
83
 
85
-
84
+
85
+
86
86
  def addSteps(block, blockSteps, configSteps)
87
87
  Array(configSteps.step).each do |step|
88
88
  if Bake::Metamodel::Makefile === step
@@ -102,53 +102,205 @@ module Bake
102
102
  block.childs << blockRef
103
103
  blockRef.parents << block
104
104
  break
105
- end
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ def calcPrebuildBlocks
111
+ @loadedConfig.referencedConfigs.each do |projName, configs|
112
+ configs.each do |config|
113
+ if config.prebuild
114
+ @prebuild ||= {}
115
+ config.prebuild.except.each do |except|
116
+ pName = projName
117
+ if not except.name.empty?
118
+ if not @loadedConfig.referencedConfigs.keys.include? except.name
119
+ Bake.formatter.printWarning("Warning: prebuild project #{except.name} not found")
120
+ next
121
+ end
122
+ pName = except.name
123
+ end
124
+ if except.config != "" && !@loadedConfig.referencedConfigs[pName].any? {|config| config.name == except.config}
125
+ Bake.formatter.printWarning("Warning: prebuild config #{except.config} of project #{pName} not found")
126
+ next
127
+ end
128
+
129
+ if not @prebuild.include?pName
130
+ @prebuild[pName] = [except.config]
131
+ else
132
+ @prebuild[pName] << except.config
133
+ end
134
+ end
135
+ end
106
136
  end
107
137
  end
108
- end
138
+ end
109
139
 
110
140
  def makeBlocks
111
141
  @loadedConfig.referencedConfigs.each do |projName, configs|
112
142
  configs.each do |config|
113
- block = Blocks::Block.new(config, @loadedConfig.referencedConfigs)
143
+
144
+ prebuild = !@prebuild.nil?
145
+ if @prebuild and @prebuild.has_key?projName
146
+ prebuild = false if (@prebuild[projName].include?"" or @prebuild[projName].include?config.name)
147
+ end
148
+
149
+ block = Blocks::Block.new(config, @loadedConfig.referencedConfigs, prebuild)
114
150
  Blocks::ALL_BLOCKS[config.qname] = block
115
151
  end
116
152
  end
117
153
  end
118
-
154
+
119
155
  def makeGraph
120
- @loadedConfig.referencedConfigs.each do |projName, configs|
121
- configs.each do |config|
122
- block = Blocks::ALL_BLOCKS[config.qname]
123
- addDependencies(block, config)
156
+ @loadedConfig.referencedConfigs.each do |projName, configs|
157
+ configs.each do |config|
158
+ block = Blocks::ALL_BLOCKS[config.qname]
159
+ addDependencies(block, config)
160
+ end
161
+ end
162
+ Blocks::ALL_BLOCKS.each do |name,block|
163
+ block.dependencies.uniq!
164
+ block.childs.uniq!
165
+ block.parents.uniq!
166
+ end
167
+
168
+ # inject dependencies
169
+ num_interations = 0
170
+ begin
171
+ if (num_interations > 0) and Bake.options.debug and Bake.options.verbose >= 3
172
+ puts "Inject dependencies, iteration #{num_interations}:"
173
+ Blocks::ALL_BLOCKS.each do |name,block|
174
+ puts block.config.qname
175
+ block.dependencies.each { |d| puts "- #{d}" }
124
176
  end
125
177
  end
178
+
179
+ counter = 0
126
180
  Blocks::ALL_BLOCKS.each do |name,block|
127
- block.dependencies.uniq!
128
- block.childs.uniq!
129
- block.parents.uniq!
181
+ block.getBlocks(:parents).each do |b|
182
+ b.config.dependency.each do |d|
183
+ next if d.inject == ""
184
+
185
+ dqname = "#{d.name},#{d.config}"
186
+ next if name == dqname
187
+ next if block.dependencies.include? dqname
188
+ dblock = Blocks::ALL_BLOCKS[dqname]
189
+ counter += 1
190
+ newD = MergeConfig::cloneModelElement(d)
191
+ newD.setInject("")
192
+ ls = block.config.getLibStuff
193
+ dblock.parents << block
194
+
195
+ if d.inject == "front"
196
+ block.config.setLibStuff(ls.unshift(newD))
197
+ block.childs.unshift dblock
198
+ block.dependencies.unshift dqname
199
+ else
200
+ block.config.setLibStuff(ls + [newD])
201
+ block.childs << dblock
202
+ block.dependencies << dqname
203
+ end
204
+ end
205
+ end
206
+ end
207
+ num_interations += 1
208
+ end while counter > 0
209
+ end
210
+
211
+ def makeDot
212
+
213
+ File.open(Bake.options.dot, 'w') do |file|
214
+ puts "Creating #{Bake.options.dot}"
215
+
216
+ file.write "# Generated by bake\n"
217
+ file.write "# Example to show the graph: dot #{Bake.options.dot} -Tpng -o out.png\n"
218
+ file.write "# Example to reduce the graph: tred #{Bake.options.dot} | dot -Tpng -o out.png\n\n"
219
+
220
+ file.write "digraph #{Bake.options.main_project_name}_#{Bake.options.build_config} {\n\n"
221
+
222
+ file.write " concentrate = true\n\n"
223
+
224
+ onlyProjectName = nil
225
+ onlyConfigName = nil
226
+ if Bake.options.project
227
+ splitted = Bake.options.project.split(',')
228
+ onlyProjectName = splitted[0]
229
+ onlyConfigName = splitted[1] if splitted.length == 2
230
+ end
231
+
232
+ if onlyProjectName
233
+ if not @loadedConfig.referencedConfigs.include? onlyProjectName
234
+ Bake.formatter.printError("Error: project #{onlyProjectName} not found")
235
+ ExitHelper.exit(1)
236
+ end
237
+ if onlyConfigName
238
+ if not @loadedConfig.referencedConfigs[onlyProjectName].any? {|c| c.name == onlyConfigName}
239
+ Bake.formatter.printError("Error: project #{onlyProjectName} with config #{onlyConfigName} not found")
240
+ ExitHelper.exit(1)
241
+ end
242
+ end
243
+ end
244
+
245
+ foundProjs = {}
246
+ @loadedConfig.referencedConfigs.each do |projName, configs|
247
+ configs.each do |config|
248
+ config.dependency.each do |d|
249
+ if onlyProjectName
250
+ next if config.parent.name != onlyProjectName && d.name != onlyProjectName
251
+ if onlyConfigName
252
+ leftSide = config.name == onlyConfigName && config.parent.name == onlyProjectName
253
+ rightSide = d.config == onlyConfigName && d.name == onlyProjectName
254
+ next if not leftSide and not rightSide
255
+ end
256
+ end
257
+ file.write " \"#{config.qname}\" -> \"#{d.name},#{d.config}\"\n"
258
+
259
+ foundProjs[config.parent.name] = [] if not foundProjs.include? config.parent.name
260
+ foundProjs[config.parent.name] << config.name if not foundProjs[config.parent.name].include? config.name
261
+ foundProjs[d.name] = [] if not foundProjs.include? d.name
262
+ foundProjs[d.name] << d.config if not foundProjs[config.parent.name].include? d.config
263
+ end
264
+ end
265
+ end
266
+ file.write "\n"
267
+
268
+ @loadedConfig.referencedConfigs.each do |projName, configs|
269
+ next if Bake.options.project and not foundProjs.include?projName
270
+ file.write " subgraph cluster_#{projName} {\n"
271
+ file.write " label =\"#{projName}\"\n"
272
+ configs.each do |config|
273
+ next if Bake.options.project and not foundProjs[projName].include? config.name
274
+ file.write " \"#{projName},#{config.name}\" [label = #{config.name}, style = filled, fillcolor = #{config.color}]\n"
275
+ end
276
+ file.write " }\n\n"
277
+ end
278
+
279
+ file.write "}\n"
130
280
  end
281
+
282
+ ExitHelper.exit(0)
131
283
  end
132
-
284
+
133
285
  def convert2bb
134
286
  @loadedConfig.referencedConfigs.each do |projName, configs|
135
287
  configs.each do |config|
136
288
  block = Blocks::ALL_BLOCKS[config.qname]
137
-
289
+
138
290
  addSteps(block, block.startupSteps, config.startupSteps)
139
291
  addSteps(block, block.exitSteps, config.exitSteps)
140
-
292
+
141
293
  if not Bake.options.prepro and not Bake.options.lint and not Bake.options.conversion_info and not Bake.options.docu and not Bake.options.filename and not Bake.options.analyze
142
294
  addSteps(block, block.preSteps, config.preSteps)
143
295
  addSteps(block, block.postSteps, config.postSteps)
144
296
  end
145
-
297
+
146
298
  if Bake.options.docu
147
299
  block.mainSteps << Blocks::Docu.new(config, @configTcMap[config])
148
300
  elsif Metamodel::CustomConfig === config
149
301
  if not Bake.options.prepro and not Bake.options.lint and not Bake.options.conversion_info and not Bake.options.docu and not Bake.options.filename and not Bake.options.analyze
150
302
  addSteps(block, block.mainSteps, config) if config.step
151
- end
303
+ end
152
304
  elsif Bake.options.conversion_info
153
305
  block.mainSteps << Blocks::Convert.new(block, config, @loadedConfig.referencedConfigs, @configTcMap[config])
154
306
  elsif Bake.options.lint
@@ -167,7 +319,7 @@ module Bake
167
319
  end
168
320
 
169
321
 
170
-
322
+
171
323
  end
172
324
  end
173
325
  end
@@ -181,11 +333,11 @@ module Bake
181
333
  if Bake.options.debug
182
334
  puts ex.message
183
335
  puts ex.backtrace
184
- end
336
+ end
185
337
  return false
186
338
  end
187
339
  end
188
-
340
+
189
341
  def callBlocks(startBlocks, method, ignoreStopOnFirstError = false)
190
342
  Blocks::ALL_BLOCKS.each {|name,block| block.visited = false; block.result = true; block.inDeps = false }
191
343
  Blocks::Block.reset_block_counter
@@ -198,7 +350,7 @@ module Bake
198
350
  end
199
351
  return result
200
352
  end
201
-
353
+
202
354
  def calcStartBlocks
203
355
  startProjectName = nil
204
356
  startConfigName = nil
@@ -233,9 +385,9 @@ module Bake
233
385
  startBlocks = [Blocks::ALL_BLOCKS[Bake.options.main_project_name+","+Bake.options.build_config]]
234
386
  Blocks::Block.set_num_projects(Blocks::ALL_BLOCKS.length)
235
387
  end
236
- return startBlocks
388
+ return startBlocks
237
389
  end
238
-
390
+
239
391
  def doit()
240
392
 
241
393
  taskType = "Building"
@@ -253,19 +405,19 @@ module Bake
253
405
  taskType = "Rebuilding"
254
406
  elsif Bake.options.clean
255
407
  taskType = "Cleaning"
256
- end
257
-
258
- begin
408
+ end
409
+
410
+ begin
259
411
  al = AdaptConfig.new
260
412
  adaptConfigs = al.load()
261
-
413
+
262
414
  @loadedConfig = Config.new
263
415
  @loadedConfig.load(adaptConfigs)
264
-
416
+
265
417
  taskType = "Analyzing" if Bake.options.analyze
266
-
418
+
267
419
  @mainConfig = @loadedConfig.referencedConfigs[Bake.options.main_project_name].select { |c| c.name == Bake.options.build_config }.first
268
-
420
+
269
421
  if Bake.options.lint
270
422
  @defaultToolchain = Utils.deep_copy(Bake::Toolchain::Provider["Lint"])
271
423
  else
@@ -276,7 +428,7 @@ module Bake
276
428
  ExitHelper.exit(1)
277
429
  end
278
430
 
279
- # The flag "-FS" must only be set for VS2013 and above
431
+ # The flag "-FS" must only be set for VS2013 and above
280
432
  ENV["MSVC_FORCE_SYNC_PDB_WRITES"] = ""
281
433
  if basedOn == "MSVC"
282
434
  begin
@@ -296,33 +448,38 @@ module Bake
296
448
  ExitHelper.exit(1)
297
449
  end
298
450
  end
299
-
451
+
300
452
  @defaultToolchain = Utils.deep_copy(basedOnToolchain)
301
453
  Bake.options.envToolchain = true if (basedOn.include?"_ENV")
302
454
  end
303
455
  integrateToolchain(@defaultToolchain, @mainConfig.defaultToolchain)
304
-
456
+
305
457
  # todo: cleanup this hack
306
458
  Bake.options.analyze = @defaultToolchain[:COMPILER][:CPP][:COMPILE_FLAGS].include?"analyze"
307
459
  Bake.options.eclipseOrder = @mainConfig.defaultToolchain.eclipseOrder
308
-
460
+
309
461
  createBaseTcsForConfig
310
462
  substVars
311
463
  createTcsForConfig
312
-
464
+
313
465
  @@linkBlock = 0
314
-
466
+
467
+ @prebuild = nil
468
+ calcPrebuildBlocks if Bake.options.prebuild
469
+
315
470
  makeBlocks
316
471
  makeGraph
472
+ makeDot if Bake.options.dot
473
+
317
474
  convert2bb
318
-
475
+
319
476
  Blocks::Show.includes if Bake.options.show_includes
320
477
  Blocks::Show.includesAndDefines(@mainConfig, @configTcMap[@mainConfig]) if Bake.options.show_includes_and_defines
321
-
478
+
322
479
  startBlocks = calcStartBlocks
323
480
 
324
481
  Bake::IDEInterface.instance.set_build_info(@mainConfig.parent.name, @mainConfig.name, Blocks::ALL_BLOCKS.length)
325
-
482
+
326
483
  ideAbort = false
327
484
  begin
328
485
  result = callBlocks(startBlocks, :startup, true)
@@ -335,21 +492,21 @@ module Bake
335
492
  if not Bake.options.stopOnFirstError or result
336
493
  result = callBlocks(startBlocks, :execute) && result
337
494
  end
338
- end
495
+ end
339
496
  rescue AbortException
340
497
  ideAbort = true
341
498
  end
342
499
  result = callBlocks(startBlocks, :exits, true) && result
343
-
500
+
344
501
  if ideAbort
345
502
  Bake.formatter.printError("\n#{taskType} aborted.")
346
503
  ExitHelper.set_exit_code(1)
347
504
  return
348
505
  end
349
-
506
+
350
507
  if Bake.options.cc2j_filename
351
508
  Blocks::BlockBase.prepareOutput(Bake.options.cc2j_filename)
352
- File.open(Bake.options.cc2j_filename, 'w') do |f|
509
+ File.open(Bake.options.cc2j_filename, 'w') do |f|
353
510
  f.puts "["
354
511
  noComma = Blocks::CC2J.length - 1
355
512
  Blocks::CC2J.each_with_index do |c, index|
@@ -361,7 +518,7 @@ module Bake
361
518
  f.puts "]"
362
519
  end
363
520
  end
364
-
521
+
365
522
  if result == false
366
523
  Bake.formatter.printError("\n#{taskType} failed.")
367
524
  ExitHelper.set_exit_code(1)
@@ -376,7 +533,7 @@ module Bake
376
533
  rescue SystemExit
377
534
  Bake.formatter.printError("\n#{taskType} failed.") if ExitHelper.exit_code != 0
378
535
  end
379
-
536
+
380
537
  end
381
538
 
382
539
  def connect()