bake-toolkit 2.5.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c143942cb26312e75532bba5c4490f350a359bd4
4
- data.tar.gz: 2591b5512f301f5930daa009d1a0eeadf4e8285c
3
+ metadata.gz: 39353992d790cb20e13ce12984ef23ff9951804b
4
+ data.tar.gz: f09033317b5ba518b7ec028d3e7752ab9412a693
5
5
  SHA512:
6
- metadata.gz: 1f913d542233b4b3a6d90d0973f4240f12121f4cad1117ce1f72bf6bb61bc441886fbfe701a578310626aae05f4356ec1f299c54d1fe1242eeb2e09d84a770fc
7
- data.tar.gz: 1aa6a16ea9e8aff26939fa6a2d5ecc21528be6a7ee29769dd464c8dff919ec4b56452a6277be5ddcd04455713a4146226396b2c66980b7713f64f67b19be1512
6
+ metadata.gz: 51bb560b915a1d95bb84f964b3c0aea27b195489e2398492aa5ecc7f34e75005b0f32d463420cd58ccfd3058c61b2f9c1e7e08ebf9127e1e4961dfdf10bd51cd
7
+ data.tar.gz: 72389ef17d8a30ba53c2469cdccd0bc403ab41f832c335a068d7675c4997fe51048404e31e23398ff4ab9df17a6effae27267a04148e651d84450e90f4e4bcac
@@ -7,6 +7,19 @@
7
7
  <body>
8
8
  <h1>Changelog</h1>
9
9
 
10
+ April 22, 2015 - bake-toolkit 2.7.0<br>
11
+ <ul>
12
+ <li><b>Added: possibility to use Eclipse file ordering for compilation (<i>eclipseOrder</i> attribute for <i>DefaultToolchain</i>)</b>
13
+ <li><b>Changed: $(:) and $(/) are now mapped to Ruby internal variables File::PATH_SEPARATOR and File::SEPARATOR.<br>
14
+ This fixes the result in Cygwin/MinGW environments</b>
15
+ <li><b>Bugfix: cmdline files are now written even if the build step fails</b>
16
+ </ul>
17
+
18
+ April 14, 2015 - bake-toolkit 2.6.0<br>
19
+ <ul>
20
+ <li><b>Added: validExitCodes attribute to steps (if a step has valid exit codes != 0)</b>
21
+ <li><b>Added: StartupSteps and ExitSteps (always executed before and after a build)</b>
22
+ </ul>
10
23
 
11
24
  April 8, 2015 - bake-toolkit 2.5.0<br>
12
25
  <ul>
@@ -74,7 +74,7 @@ bake is used to build software <font color="#009900"><b>fast</b></font> and <fon
74
74
 
75
75
  <p>
76
76
  <hr>
77
- <table width="100%" border="0"><tr><td align="left">Described bake-toolkit version: 2.5.0</td><td align="right">April 8, 2015</td></tr></table>
77
+ <table width="100%" border="0"><tr><td align="left">Described bake-toolkit version: 2.7.0</td><td align="right">April 22, 2015</td></tr></table>
78
78
 
79
79
  </body>
80
80
 
@@ -94,17 +94,25 @@ z-index: 100;
94
94
  <span class="help" onMouseover="showMakefileTarget()" onMouseout="notip()">target</span>: &#60;target&#62;,
95
95
  <span class="help" onMouseover="showMakefilePathTo()" onMouseout="notip()">pathTo</span>: &#60;paths&#62;,
96
96
  <span class="help" onMouseover="showStepDefault()" onMouseout="notip()">default</span>: on|off,
97
- <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62; {<br>
97
+ <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;,
98
+ <span class="help" onMouseover="showValidExitCodes()" onMouseout="notip()">validExitCodes</span>: &#60;[array]&#62; {<br>
98
99
  &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showMakefileFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
99
100
  &nbsp; &nbsp; &nbsp; }<br>
100
101
  &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showCommandLine()" onMouseout="notip()">CommandLine</span> &#60;line&#62;,
101
102
  <span class="help" onMouseover="showStepDefault()" onMouseout="notip()">default</span>: on|off,
102
- <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;<br>
103
+ <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;,
104
+ <span class="help" onMouseover="showValidExitCodes()" onMouseout="notip()">validExitCodes</span>: &#60;[array]&#62;<br>
103
105
  &nbsp; &nbsp; }<br>
104
106
  &nbsp; &nbsp; <span class="help" onMouseover="showPostSteps()" onMouseout="notip()">PostSteps</span> {<br>
105
107
  &nbsp; &nbsp; &nbsp; <span class="mycomment"># Same as for PreSteps</span><br>
106
108
  &nbsp; &nbsp; }<br>
107
- &nbsp; &nbsp; <span class="help" onMouseover="showDefaultToolchain()" onMouseout="notip()">DefaultToolchain</span> &#60;basedOn&#62; <span class="help" onMouseover="showOutputDir()" onMouseout="notip()">outputDir</span>: &#60;dir&#62; {<br>
109
+ &nbsp; &nbsp; <span class="help" onMouseover="showStartupSteps()" onMouseout="notip()">StartupSteps</span> {<br>
110
+ &nbsp; &nbsp; &nbsp; <span class="mycomment"># Same as for PreSteps</span><br>
111
+ &nbsp; &nbsp; }<br>
112
+ &nbsp; &nbsp; <span class="help" onMouseover="showExitSteps()" onMouseout="notip()">ExitSteps</span> {<br>
113
+ &nbsp; &nbsp; &nbsp; <span class="mycomment"># Same as for PreSteps</span><br>
114
+ &nbsp; &nbsp; }<br>
115
+ &nbsp; &nbsp; <span class="help" onMouseover="showDefaultToolchain()" onMouseout="notip()">DefaultToolchain</span> &#60;basedOn&#62;, <span class="help" onMouseover="showOutputDir()" onMouseout="notip()">outputDir</span>: &#60;dir&#62;, <span class="help" onMouseover="showEclipseOrder()" onMouseout="notip()">eclipseOrder</span>: true|false {<br>
108
116
  &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultCompiler()" onMouseout="notip()">Compiler</span> ASM | CPP | C,
109
117
  <span class="help" onMouseover="showCommand()" onMouseout="notip()">command</span>: &#60;cmd&#62; {</i><br>
110
118
  &nbsp; &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showDefaultFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
@@ -174,13 +182,15 @@ z-index: 100;
174
182
  <span class="help" onMouseover="showMakefileTarget()" onMouseout="notip()">target</span>: &#60;target&#62;,
175
183
  <span class="help" onMouseover="showMakefilePathTo()" onMouseout="notip()">pathTo</span>: &#60;paths&#62;,
176
184
  <span class="help" onMouseover="showStepDefault()" onMouseout="notip()">default</span>: on|off,
177
- <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62; {<br>
185
+ <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;,
186
+ <span class="help" onMouseover="showValidExitCodes()" onMouseout="notip()">validExitCodes</span>: &#60;[array]&#62; {<br>
178
187
  &nbsp; &nbsp; &nbsp; <span class="help" onMouseover="showMakefileFlags()" onMouseout="notip()">Flags</span> &#60;flags&#62;<br>
179
188
  &nbsp; &nbsp; }<br>
180
189
  </span>
181
190
  <span style="background-color:#DDDDDD;" id="commandline_part" class="hide">&#60;line&#62;,
182
191
  <span class="help" onMouseover="showStepDefault()" onMouseout="notip()">default</span>: on|off,
183
- <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;
192
+ <span class="help" onMouseover="showStepFilter()" onMouseout="notip()">filter</span>: &#60;name&#62;,
193
+ <span class="help" onMouseover="showValidExitCodes()" onMouseout="notip()">validExitCodes</span>: &#60;[array]&#62;
184
194
  </span>
185
195
  &nbsp; &nbsp; <br></span><br></span>
186
196
  &nbsp; }<br>
@@ -319,6 +329,20 @@ function showPostSteps() {
319
329
  ddrivetip("PostSteps", "No","0..1","-",str)
320
330
  }
321
331
 
332
+ function showStartupSteps() {
333
+ str = 'StartupSteps of ALL projects are executed before building the first project.<br>'+
334
+ 'The number of steps are not limited.<br>'+
335
+ 'If a step fails, all further startup steps of the project will be skipped.'
336
+ ddrivetip("StartupSteps", "No","0..1","-",str)
337
+ }
338
+
339
+ function showExitSteps() {
340
+ str = 'ExitSteps of ALL projects are executed after building complete workspace even if the build has failed.<br>'+
341
+ 'The number of steps are not limited.<br>'+
342
+ 'If a step fails, all further exit steps of the project will be skipped.'
343
+ ddrivetip("ExitSteps", "No","0..1","-",str)
344
+ }
345
+
322
346
  function showStepDefault() {
323
347
  str = 'Specifies if a step will be executed by default.<br>'+
324
348
  'Disabling a step by default is useful if the step shall not be executed every build, e.g. special steps for releasing a software or some kind of developer test steps.'
@@ -332,6 +356,13 @@ function showStepFilter() {
332
356
  ddrivetip("filter", "No","-","-",str)
333
357
  }
334
358
 
359
+ function showValidExitCodes() {
360
+ str = 'Define it as an array, e.g.:<br>'+
361
+ '..., validExitCodes: [200,201,202]'
362
+ ddrivetip("validExitCodes", "No","-","[0]",str)
363
+ }
364
+
365
+
335
366
  function getMakefileDesc() {
336
367
  return 'Makefile to be started, e.g.:<br>'+
337
368
  '<i> &nbsp; &nbsp; Makefile "subDir/makefile"</i><br>'
@@ -378,6 +409,15 @@ function showCommandLine() {
378
409
  ddrivetip("CommandLine", "No","0..n","-",getCommandLineDesc())
379
410
  }
380
411
 
412
+
413
+ function showEclipseOrder() {
414
+ str = 'If not specified or false, all files are compiled in alphabetical order using their full names.<p>'+
415
+ 'If true, files are compiled in alphabetical order within a folder, '+
416
+ 'but the folders are sorted in reverse alphabetical order.<br>'+
417
+ 'This is only used for backward compatibility.'
418
+ ddrivetip("eclipseOrder", "No","-","false",str)
419
+ }
420
+
381
421
  function showOutputDir() {
382
422
  str = 'Specifies the output folder.<p>'+
383
423
  'Use always relative paths, not absolute paths due to portability.<p>'+
@@ -229,8 +229,10 @@ module Bake
229
229
  def filterSteps
230
230
  @referencedConfigs.each do |projName, configs|
231
231
  configs.each do |config|
232
- config.preSteps.step = config.preSteps.step.delete_if { |step| filterStep(step, "PRE") } if config.preSteps
233
- config.postSteps.step = config.postSteps.step.delete_if { |step| filterStep(step, "POST") } if config.postSteps
232
+ config.startupSteps.step = config.startupSteps.step.delete_if { |step| filterStep(step, "STARTUP") } if config.startupSteps
233
+ config.preSteps.step = config.preSteps.step.delete_if { |step| filterStep(step, "PRE") } if config.preSteps
234
+ config.postSteps.step = config.postSteps.step.delete_if { |step| filterStep(step, "POST") } if config.postSteps
235
+ config.exitSteps.step = config.exitSteps.step.delete_if { |step| filterStep(step, "EXIT") } if config.exitSteps
234
236
  if Metamodel::CustomConfig === config and config.step
235
237
  config.step = nil if filterStep(config.step, nil)
236
238
  end
@@ -64,6 +64,9 @@ module Bake
64
64
  if ct.basedOn == "" and pt.basedOn != ""
65
65
  ct.setBasedOn(pt.basedOn)
66
66
  end
67
+ if pt.eclipseOrder # is that a good idea?
68
+ ct.setEclipseOrder(pt.eclipseOrder)
69
+ end
67
70
  if ct.internalIncludes.nil? and not pt.internalIncludes.nil?
68
71
  ct.setInternalIncludes(pt.internalIncludes)
69
72
  end
@@ -95,6 +98,14 @@ module Bake
95
98
  @child.setExLibSearchPath(@parent.exLibSearchPath + @child.exLibSearchPath)
96
99
  @child.setUserLibrary(@parent.userLibrary + @child.userLibrary)
97
100
 
101
+ if not @parent.startupSteps.nil?
102
+ if (@child.startupSteps.nil?)
103
+ @child.setStartupSteps(@parent.startupSteps)
104
+ else
105
+ @child.startupSteps.setStep(@parent.startupSteps.step + @child.startupSteps.step)
106
+ end
107
+ end
108
+
98
109
  if not @parent.preSteps.nil?
99
110
  if (@child.preSteps.nil?)
100
111
  @child.setPreSteps(@parent.preSteps)
@@ -110,6 +121,14 @@ module Bake
110
121
  @child.postSteps.setStep(@parent.postSteps.step + @child.postSteps.step)
111
122
  end
112
123
  end
124
+
125
+ if not @parent.exitSteps.nil?
126
+ if (@child.exitSteps.nil?)
127
+ @child.setExitSteps(@parent.exitSteps)
128
+ else
129
+ @child.exitSteps.setStep(@parent.exitSteps.step + @child.exitSteps.step)
130
+ end
131
+ end
113
132
 
114
133
  pt = @parent.defaultToolchain
115
134
  ct = @child.defaultToolchain
@@ -85,6 +85,7 @@ module Bake
85
85
  class DefaultToolchain < ModelElement
86
86
  has_attr 'basedOn', String, :defaultValueLiteral => ""
87
87
  has_attr 'outputDir', String, :defaultValueLiteral => ""
88
+ has_attr 'eclipseOrder', Boolean, :defaultValueLiteral => "false"
88
89
  contains_many 'compiler', Compiler, 'parent'
89
90
  contains_one 'archiver', Archiver, 'parent'
90
91
  contains_one 'linker', Linker, 'parent'
@@ -142,7 +143,7 @@ module Bake
142
143
  has_attr 'name', String, :defaultValueLiteral => ""
143
144
  has_attr 'default', String, :defaultValueLiteral => "on"
144
145
  has_attr 'filter', String, :defaultValueLiteral => ""
145
- has_many_attr 'validExitCodes', Integer, :defaultValueLiteral => ["0"]
146
+ has_many_attr 'validExitCodes', Integer
146
147
  end
147
148
 
148
149
  class Makefile < Step
@@ -167,6 +168,10 @@ module Bake
167
168
  contains_many 'step', Step, 'parent'
168
169
  end
169
170
 
171
+ class StartupSteps < ModelElement
172
+ contains_many 'step', Step, 'parent'
173
+ end
174
+
170
175
  class UserLibrary < ModelElement
171
176
  has_attr 'lib', String, :defaultValueLiteral => ""
172
177
  end
@@ -193,6 +198,7 @@ module Bake
193
198
  class BaseConfig_INTERNAL < ModelElement
194
199
  has_attr 'name', String, :defaultValueLiteral => ""
195
200
  has_attr 'extends', String, :defaultValueLiteral => ""
201
+ contains_one 'startupSteps', StartupSteps, 'parent'
196
202
  contains_one 'preSteps', PreSteps, 'parent'
197
203
  contains_one 'postSteps', PostSteps, 'parent'
198
204
  contains_one 'exitSteps', ExitSteps, 'parent'
@@ -17,7 +17,7 @@ module Bake
17
17
  end
18
18
 
19
19
  class Options < Parser
20
- attr_accessor :build_config, :nocache, :analyze, :envToolchain
20
+ attr_accessor :build_config, :nocache, :analyze, :eclipseOrder, :envToolchain
21
21
  attr_reader :main_dir, :project, :filename, :main_project_name, :cc2j_filename # String
22
22
  attr_reader :roots, :include_filter, :exclude_filter # String List
23
23
  attr_reader :stopOnFirstError, :clean, :rebuild, :show_includes, :show_includes_and_defines, :linkOnly, :no_autodir, :clobber, :lint, :docu, :debug, :prepro # Boolean
@@ -32,6 +32,7 @@ module Bake
32
32
 
33
33
  @envToolchain = false
34
34
  @analyze = false
35
+ @eclipseOrder = false
35
36
  @showConfigs = false
36
37
  @consoleOutput_fullnames = false
37
38
  @consoleOutput_visualStudio = false
@@ -31,9 +31,9 @@ module Bake
31
31
  puts " --toolchain_info <name> Prints default values of a toolchain."
32
32
  puts " --toolchain_names Prints available toolchains."
33
33
  puts " --include_filter <name> Includes steps with this filter name (can be used multiple times)."
34
- puts " 'PRE' or 'POST' includes all PreSteps respectively PostSteps."
34
+ puts " 'PRE', 'POST', 'STARTUP' or 'EXIT' includes all according steps."
35
35
  puts " --exclude_filter <name> Excludes steps with this filter name (can be used multiple times)."
36
- puts " 'PRE' or 'POST' excludes all PreSteps respectively PostSteps."
36
+ puts " 'PRE', 'POST', 'STARTUP' or 'EXIT' excludes all according steps."
37
37
  puts " --show_abs_paths Compiler prints absolute filename paths instead of relative paths."
38
38
  puts " --no_autodir Disable auto completion of paths like in IncludeDir"
39
39
  puts " --set <key>=<value> Sets a variable. Overwrites variables defined in Project.metas (can be used multiple times)."
@@ -244,17 +244,9 @@ module Bake
244
244
  elsif var == "Roots"
245
245
  substStr << "___ROOTS___"
246
246
  elsif var == "/"
247
- if Bake::Utils::OS.windows?
248
- substStr << "\\"
249
- else
250
- substStr << "/"
251
- end
247
+ substStr << File::SEPARATOR
252
248
  elsif var == ":"
253
- if Bake::Utils::OS.windows?
254
- substStr << ";"
255
- else
256
- substStr << ":"
257
- end
249
+ substStr << File::PATH_SEPARATOR
258
250
  elsif ENV[var]
259
251
  substStr << ENV[var]
260
252
  else
@@ -17,7 +17,11 @@ module Bake
17
17
 
18
18
  attr_reader :lib_elements, :projectDir, :library, :config
19
19
  attr_accessor :visited, :inDeps, :result
20
-
20
+
21
+ def startupSteps
22
+ @startupSteps ||= []
23
+ end
24
+
21
25
  def preSteps
22
26
  @preSteps ||= []
23
27
  end
@@ -30,6 +34,10 @@ module Bake
30
34
  @postSteps ||= []
31
35
  end
32
36
 
37
+ def exitSteps
38
+ @exitSteps ||= []
39
+ end
40
+
33
41
  def dependencies
34
42
  @dependencies ||= []
35
43
  end
@@ -213,9 +221,50 @@ module Bake
213
221
  end
214
222
  end
215
223
 
224
+ return (depResult && result)
225
+ end
226
+
227
+ def startup
228
+ return true if (@visited)
229
+ @visited = true
230
+
231
+ depResult = callDeps(:startup)
232
+ return false if not depResult and Bake.options.stopOnFirstError
233
+
234
+ if Bake.options.verbose >= 1 and not startupSteps.empty?
235
+ Bake.formatter.printAdditionalInfo "**** Starting up #{@projectName} (#{@configName}) ****"
236
+ end
237
+
238
+ result = true
239
+ startupSteps.each do |step|
240
+ result = executeStep(step, :startupStep) if result
241
+ return false if not result and Bake.options.stopOnFirstError
242
+ end
243
+
216
244
  return (depResult && result)
217
245
  end
218
-
246
+
247
+ def exits
248
+ return true if (@visited)
249
+ @visited = true
250
+
251
+ depResult = callDeps(:exits)
252
+ return false if not depResult and Bake.options.stopOnFirstError
253
+
254
+ if Bake.options.verbose >= 1 and not exitSteps.empty?
255
+ Bake.formatter.printAdditionalInfo "**** Exiting #{@projectName} (#{@configName}) ****"
256
+ end
257
+
258
+ result = true
259
+ exitSteps.each do |step|
260
+ result = executeStep(step, :exitStep) if result
261
+ return false if not result and Bake.options.stopOnFirstError
262
+ end
263
+
264
+ return (depResult && result)
265
+ end
266
+
267
+
219
268
  end
220
269
 
221
270
 
@@ -13,8 +13,17 @@ module Bake
13
13
  end
14
14
 
15
15
  def execute
16
- executeCommand(@commandLine)
16
+ executeCommand(@commandLine, nil, @config.validExitCodes)
17
17
  end
18
+
19
+ def startupStep
20
+ executeCommand(@commandLine, nil, @config.validExitCodes)
21
+ end
22
+
23
+ def exitStep
24
+ executeCommand(@commandLine, nil, @config.validExitCodes)
25
+ end
26
+
18
27
  def clean
19
28
  # nothing to do here
20
29
  end
@@ -16,6 +16,7 @@ module Bake
16
16
  def initialize(block, config, referencedConfigs, tcs)
17
17
  super(block, config, referencedConfigs, tcs)
18
18
  @objects = []
19
+ @object_files = {}
19
20
 
20
21
  calcFileTcs
21
22
  calcIncludes
@@ -106,8 +107,7 @@ module Bake
106
107
  type = get_source_type(source)
107
108
  return true if type.nil?
108
109
 
109
- object = get_object_file(source)
110
- @objects << object
110
+ object = @object_files[source]
111
111
 
112
112
  dep_filename = calcDepFile(object, type)
113
113
  dep_filename_conv = calcDepFileConv(dep_filename) if type != :ASM
@@ -183,8 +183,8 @@ module Bake
183
183
  return if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
184
184
 
185
185
  BlockBase.prepareOutput(object)
186
+ BlockBase.writeCmdLineFile(cmd, cmdLineFile)
186
187
  success, consoleOutput = ProcessHelper.run(cmd, false, false)
187
- BlockBase.writeCmdLineFile(cmd, cmdLineFile) if success
188
188
 
189
189
  outputType = Bake.options.analyze ? "Analyzing" : (Bake.options.prepro ? "Preprocessing" : "Compiling")
190
190
  incList = process_result(cmd, consoleOutput, compiler[:ERROR_PARSER], "#{outputType} #{source}", reason, success)
@@ -241,6 +241,7 @@ module Bake
241
241
  Dir.chdir(@projectDir) do
242
242
 
243
243
  calcSources
244
+ calcObjects
244
245
 
245
246
  @error_strings = {}
246
247
 
@@ -326,6 +327,17 @@ module Bake
326
327
  end
327
328
  end
328
329
 
330
+ def calcObjects
331
+ @source_files.each do |source|
332
+ type = get_source_type(source)
333
+ if not type.nil?
334
+ object = get_object_file(source)
335
+ @object_files[source] = object
336
+ @objects << object
337
+ end
338
+ end
339
+ end
340
+
329
341
  def calcSources(cleaning = false)
330
342
  @source_files = []
331
343
 
@@ -362,6 +374,27 @@ module Bake
362
374
  end
363
375
 
364
376
  @source_files = source_files.sort.to_a
377
+
378
+ if Bake.options.eclipseOrder # directories reverse order, files in directories in alphabetical order
379
+ dirs = []
380
+ filemap = {}
381
+ @source_files.reverse.each do |o|
382
+ d = File.dirname(o)
383
+ if filemap.include?(d)
384
+ filemap[d] << o
385
+ else
386
+ filemap[d] = [o]
387
+ dirs << d
388
+ end
389
+ end
390
+ @source_files = []
391
+ dirs.each do |d|
392
+ filemap[d].reverse.each do |f|
393
+ @source_files << f
394
+ end
395
+ end
396
+ end
397
+
365
398
  end
366
399
 
367
400
  def calcIncludes
@@ -137,8 +137,8 @@ module Bake
137
137
  BlockBase.prepareOutput(@exe_name)
138
138
 
139
139
  printCmd(cmdLinePrint, "Linking #{@exe_name}", reason, false)
140
+ BlockBase.writeCmdLineFile(cmd, cmdLineFile)
140
141
  success, consoleOutput = ProcessHelper.run(cmd, false, false, outPipe)
141
- BlockBase.writeCmdLineFile(cmd, cmdLineFile) if success
142
142
  process_result(cmdLinePrint, consoleOutput, linker[:ERROR_PARSER], nil, reason, success)
143
143
 
144
144
  check_config_file()
@@ -4,14 +4,14 @@ module Bake
4
4
 
5
5
  module HasExecuteCommand
6
6
 
7
- def executeCommand(commandLine, ignoreStr=nil)
7
+ def executeCommand(commandLine, ignoreStr=nil, exitCodeArray = [0])
8
8
  puts commandLine if Bake.options.verbose >= 1
9
9
  puts "(executed in '#{@projectDir}')" if Bake.options.verbose >= 3
10
10
  cmd_result = false
11
11
  output = ""
12
12
  begin
13
13
  Dir.chdir(@projectDir) do
14
- cmd_result, output = ProcessHelper.run([commandLine], true)
14
+ cmd_result, output = ProcessHelper.run([commandLine], true, true, nil, exitCodeArray)
15
15
  end
16
16
  rescue Exception=>e
17
17
  puts e.message
@@ -70,8 +70,8 @@ module Bake
70
70
 
71
71
  BlockBase.prepareOutput(archive_name)
72
72
 
73
+ BlockBase.writeCmdLineFile(cmd, cmdLineFile)
73
74
  success, consoleOutput = ProcessHelper.run(cmd, false, false)
74
- BlockBase.writeCmdLineFile(cmd, cmdLineFile) if success
75
75
  process_result(cmd, consoleOutput, archiver[:ERROR_PARSER], "Creating #{archive_name}", reason, success)
76
76
 
77
77
  check_config_file()
@@ -74,11 +74,19 @@ module Bake
74
74
  end
75
75
 
76
76
  def execute
77
- executeCommand(@commandLine)
77
+ executeCommand(@commandLine, nil, @config.validExitCodes)
78
78
  end
79
-
79
+
80
+ def startupStep
81
+ executeCommand(@commandLine, nil, @config.validExitCodes)
82
+ end
83
+
84
+ def exitStep
85
+ executeCommand(@commandLine, nil, @config.validExitCodes)
86
+ end
87
+
80
88
  def clean
81
- executeCommand(@cleanLine, "No rule to make target 'clean'.") unless Bake.options.filename
89
+ executeCommand(@cleanLine, "No rule to make target 'clean'.", @config.validExitCodes) unless Bake.options.filename
82
90
  end
83
91
 
84
92
  end
@@ -4,7 +4,7 @@ module Bake
4
4
  @@pid = nil
5
5
  @@rd = nil
6
6
 
7
- def self.run(cmdLineArray, immediateOutput=false, force=true, outpipe=nil)
7
+ def self.run(cmdLineArray, immediateOutput=false, force=true, outpipe=nil, exitCodeArray = [0])
8
8
  rd, wr = IO.pipe
9
9
  @@rd = rd if force
10
10
  duppedCmdLineArray = cmdLineArray.dup
@@ -43,7 +43,8 @@ module Bake
43
43
  @@pid = nil
44
44
  @@rd = nil
45
45
  return [false, output] if status.nil?
46
- [status.success?, output]
46
+ exitCodeArray = [0] if exitCodeArray.empty?
47
+ [(exitCodeArray.include?status.exitstatus), output]
47
48
  end
48
49
 
49
50
  def self.killProcess(force) # do not kill compile processes or implement rd and pid array if really needed
@@ -1,7 +1,7 @@
1
1
  module Bake
2
2
  class Version
3
3
  def self.number
4
- "2.5.0"
4
+ "2.7.0"
5
5
  end
6
6
  end
7
7
 
@@ -102,6 +102,9 @@ module Bake
102
102
 
103
103
  Blocks::ALL_BLOCKS[config.qname] = block
104
104
 
105
+ addSteps(block, block.startupSteps, config.startupSteps)
106
+ addSteps(block, block.exitSteps, config.exitSteps)
107
+
105
108
  if not Bake.options.linkOnly and not Bake.options.prepro and not Bake.options.lint and not Bake.options.docu and not Bake.options.filename and not Bake.options.analyze
106
109
  addSteps(block, block.preSteps, config.preSteps)
107
110
  addSteps(block, block.postSteps, config.postSteps)
@@ -261,6 +264,7 @@ module Bake
261
264
 
262
265
  # todo: cleanup this hack
263
266
  Bake.options.analyze = @defaultToolchain[:COMPILER][:CPP][:COMPILE_FLAGS].include?"analyze"
267
+ Bake.options.eclipseOrder = @mainConfig.defaultToolchain.eclipseOrder
264
268
 
265
269
  createBaseTcsForConfig
266
270
  substVars
@@ -274,15 +278,27 @@ module Bake
274
278
 
275
279
  Bake::IDEInterface.instance.set_build_info(@mainConfig.parent.name, @mainConfig.name, Blocks::ALL_BLOCKS.length)
276
280
 
281
+ ideAbort = false
277
282
  begin
278
- result = true
283
+ result = callBlocks(startBlocks, :startup)
279
284
  if Bake.options.clean or Bake.options.rebuild
280
- result = callBlocks(startBlocks, :clean)
285
+ if not Bake.options.stopOnFirstError or result
286
+ result = callBlocks(startBlocks, :clean) && result
287
+ end
281
288
  end
282
289
  if Bake.options.rebuild or not Bake.options.clean
283
- result = callBlocks(startBlocks, :execute) && result
290
+ if not Bake.options.stopOnFirstError or result
291
+ result = callBlocks(startBlocks, :execute) && result
292
+ end
284
293
  end
285
294
  rescue AbortException
295
+ ideAbort = true
296
+ end
297
+ if not Bake.options.stopOnFirstError or result
298
+ result = callBlocks(startBlocks, :exits) && result
299
+ end
300
+
301
+ if ideAbort
286
302
  Bake.formatter.printError("\n#{taskType} aborted.")
287
303
  ExitHelper.set_exit_code(1)
288
304
  return
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.5.0
4
+ version: 2.7.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: 2015-04-08 00:00:00.000000000 Z
11
+ date: 2015-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rtext