bake-toolkit 2.33.0 → 2.34.0

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
  SHA1:
3
- metadata.gz: 1e7ed2853443ad76ecf1127b80c0cd92eef0b3c5
4
- data.tar.gz: 9cf372289dca4e9951661e8ac196aaacf2d8c574
3
+ metadata.gz: 55e127ea891d694b2055ef9c7233f0c2f52955a1
4
+ data.tar.gz: 897a5a3e47ff5d351ef86395b801389395c8a21f
5
5
  SHA512:
6
- metadata.gz: ed3019529754a80e9d3525aa9bf80f5d787a24b63ac0ba3752e73abe0570faab8617fd0434039766327473808fff9b5f95e12b81b3948cac970c5464cd2bef8a
7
- data.tar.gz: c0ab324a725930bf2fe0302f5f8eaba32a41b8c37e8f2867df034415d27fc3854c895c6d6d133dddfcd5c608ef328dfad30080c083f44a068a26e6319b363e92
6
+ metadata.gz: df5380fdb0f5b84bf0e393726df5aa259502ec3f721a7e6ed110dda3f1ba845758d2c78449cf0ccb7896cff8ca9094bc930af6552c5394b9ae0deddcde4683fa
7
+ data.tar.gz: 335f22338bd491a4edab31ac75c272aef67a2bb781f775dc397be558cd9c98cb6f27f995bc5943b3a7c2dc9215017e05cc2a175748982592c76ff99f30092898
data/bin/bakery CHANGED
@@ -123,6 +123,11 @@ module Bake
123
123
  tocxx = ToCxx.new
124
124
  tocxx.doit()
125
125
  runOk = (ExitHelper.exit_code == 0)
126
+ if Bake::IDEInterface.instance.get_abort
127
+ abort = true
128
+ exitValue = 1
129
+ break
130
+ end
126
131
  rescue SystemExit
127
132
  runOk = (ExitHelper.exit_code == 0)
128
133
  rescue Exception => e
@@ -151,16 +156,14 @@ module Bake
151
156
  else
152
157
  msg1 << "summary: #{maxRuns} of #{maxRuns} builds ok"
153
158
  end
154
- else
155
- end
156
159
 
157
- timeEnd = Time.now
158
- timeDiff = timeEnd - $timeStart
159
- failedRuns.each_with_index do |f,i|
160
- msg1 << "\n#{i+1}: #{f}"
160
+ timeEnd = Time.now
161
+ timeDiff = timeEnd - $timeStart
162
+ failedRuns.each_with_index do |f,i|
163
+ msg1 << "\n#{i+1}: #{f}"
164
+ end
165
+ msg1 << "\ntime: %02d:%02d minutes" % [timeDiff/60, timeDiff%60]
161
166
  end
162
- msg1 << "\ntime: %02d:%02d minutes" % [timeDiff/60, timeDiff%60]
163
-
164
167
 
165
168
  if failedRuns.length == 0
166
169
  Bake.formatter.printSuccess($stars)
@@ -335,6 +335,7 @@ module Bake
335
335
  if (r.length == 3 && r.include?(":/"))
336
336
  r = r + Bake.options.main_project_name # glob would not work otherwise on windows (ruby bug?)
337
337
  end
338
+ puts "Checking root #{r}" if Bake.options.verbose >= 1
338
339
  r = r+"/**{,/*/**}/Project.meta"
339
340
  @potentialProjs.concat(Dir.glob(r).sort)
340
341
  end
@@ -20,7 +20,7 @@ module Bake
20
20
  attr_accessor :build_config, :nocache, :analyze, :eclipseOrder, :envToolchain, :showConfigs
21
21
  attr_reader :main_dir, :project, :filename, :main_project_name, :buildDirDelimiter, :dot, :cc2j_filename # String
22
22
  attr_reader :roots, :include_filter, :exclude_filter, :adapt # String List
23
- attr_reader :conversion_info, :stopOnFirstError, :clean, :rebuild, :show_includes, :show_includes_and_defines, :projectPaths, :qac, :dry # Boolean
23
+ attr_reader :conversion_info, :stopOnFirstError, :clean, :rebuild, :show_includes, :show_includes_and_defines, :projectPaths, :qac, :dry, :syncedOutput # Boolean
24
24
  attr_reader :linkOnly, :compileOnly, :no_autodir, :clobber, :docu, :debug, :prepro, :oldLinkOrder, :prebuild, :printTime, :json, :wparse # Boolean
25
25
  attr_reader :threads, :socket # Fixnum
26
26
  attr_reader :vars # map
@@ -78,6 +78,7 @@ module Bake
78
78
  @def_roots = []
79
79
  @main_project_name = ""
80
80
  @adapt = []
81
+ @syncedOutput = false
81
82
 
82
83
  add_option(["-b", "" ], lambda { |x| set_build_config(x) })
83
84
  add_option(["-m" ], lambda { |x| set_main_dir(x) })
@@ -87,6 +88,7 @@ module Bake
87
88
  add_option(["-a" ], lambda { |x| Bake.formatter.setColorScheme(x.to_sym) })
88
89
  add_option(["-w" ], lambda { |x| set_root(x) })
89
90
  add_option(["-r" ], lambda { @stopOnFirstError = true })
91
+ add_option(["-O" ], lambda { @syncedOutput = true })
90
92
  add_option(["--rebuild" ], lambda { @rebuild = true })
91
93
  add_option(["--prepro" ], lambda { @prepro = true })
92
94
  add_option(["--link-only", "--link_only" ], lambda { @linkOnly = true; })
@@ -33,6 +33,7 @@ module Bake
33
33
  puts " --generate-doc Builds docu instead of compiling sources."
34
34
  puts " --ignore-cache Rereads the original meta files - usefull if workspace structure has been changed."
35
35
  puts " -j <num> Set NUMBER of parallel compiled files (default is 8)."
36
+ puts " -O The output will be synchronized per configuration. Note, this delays output."
36
37
  puts " --socket <num> Set SOCKET for sending errors, receiving commands, etc. - used by e.g. Eclipse."
37
38
  puts " --toolchain-info <name> Prints default values of a toolchain."
38
39
  puts " --toolchain-names Prints available toolchains."
data/lib/blocks/block.rb CHANGED
@@ -165,7 +165,11 @@ module Bake
165
165
  end
166
166
 
167
167
  def self.reset_block_counter
168
- @@block_counter = 0
168
+ @@block_counter = 1
169
+ end
170
+
171
+ def self.set_delayed_result
172
+ @@delayed_result = false
169
173
  end
170
174
 
171
175
  def self.reset_delayed_result
@@ -271,37 +275,44 @@ module Bake
271
275
  return depResult
272
276
  end
273
277
 
278
+ def self.waitForFreeThread
279
+ if @@threads.length == Bake.options.threads
280
+ endedThread = ThreadsWait.new(@@threads).next_wait
281
+ @@threads.delete(endedThread)
282
+ end
283
+ end
284
+
274
285
  def execute_in_thread(method)
275
286
  if method == :execute
276
287
  @@mutex.synchronize do
277
- if @@threads.length == Bake.options.threads
278
- endedThread = ThreadsWait.new(@@threads).next_wait
279
- @@threads.delete(endedThread)
280
- end
281
- end
282
- thread = Thread.new() {
283
-
284
- exceptionOccured = false
285
- begin
286
- yield
287
- exceptionOccured = true
288
- rescue Bake::SystemCommandFailed => scf # normal compilation error
289
- rescue SystemExit => exSys
290
- rescue Exception => ex1
291
- if not Bake::IDEInterface.instance.get_abort
292
- SyncOut.mutex.synchronize do
293
- Bake.formatter.printError("Error: #{ex1.message}")
294
- puts ex1.backtrace if Bake.options.debug
288
+ Block::waitForFreeThread()
289
+ return if blockAbort?(true)
290
+
291
+ @@threads << Thread.new(Thread.current[:stdout], Thread.current[:errorStream]) { |outStr, errStr|
292
+ Thread.current[:stdout] = outStr
293
+ Thread.current[:errorStream] = errStr
294
+ exceptionOccured = false
295
+ begin
296
+ yield
297
+ exceptionOccured = true
298
+ rescue Bake::SystemCommandFailed => scf # normal compilation error
299
+ rescue SystemExit => exSys
300
+ rescue Exception => ex1
301
+ if not Bake::IDEInterface.instance.get_abort
302
+ SyncOut.mutex.synchronize do
303
+ Bake.formatter.printError("Error: #{ex1.message}")
304
+ puts ex1.backtrace if Bake.options.debug
305
+ end
295
306
  end
296
307
  end
297
- end
298
- if !exceptionOccured
299
- @result = false
300
- @@delayed_result = false
301
- end
302
- }
303
- @@mutex.synchronize do
304
- @@threads << thread
308
+ if !exceptionOccured
309
+ @result = false
310
+ @@delayed_result = false
311
+ end
312
+ }
313
+
314
+ Block::waitForFreeThread()
315
+ return if blockAbort?(true)
305
316
  end
306
317
  else
307
318
  yield
@@ -314,31 +325,38 @@ module Bake
314
325
  end
315
326
 
316
327
  def callSteps(method)
317
-
318
328
  @config.writeEnvVars()
319
329
  Thread.current[:lastCommand] = nil
320
330
 
321
331
  preSteps.each do |step|
322
332
  ThreadsWait.all_waits(Blocks::Block::threads)
323
333
  @result = executeStep(step, method) if @result
324
- return false if blockAbort?(@result)
334
+ return @result if blockAbort?(@result)
325
335
  end unless @prebuild
326
336
 
327
337
  threadableSteps = mainSteps.select { |step| method == :execute && (Library === step || Compile === step) }
328
338
  nonThreadableSteps = mainSteps.select { |step| method != :execute || !(Library === step || Compile === step) }
329
339
 
340
+ @outputInMainThread = nonThreadableSteps.any?{ |step| !@prebuild || (Library === step) } ||
341
+ postSteps.length > 0 ||
342
+ (threadableSteps.length == 0 && preSteps.length > 0)
343
+
330
344
  execute_in_thread(method) {
331
- threadableSteps.each do |step|
332
- if !@prebuild || (Library === step)
333
- Multithread::Jobs.incThread() if Library === step
334
- begin
335
- @result = executeStep(step, method) if @result
336
- ensure
337
- Multithread::Jobs.decThread() if Library === step
345
+ begin
346
+ threadableSteps.each do |step|
347
+ if !@prebuild || (Library === step)
348
+ Multithread::Jobs.incThread() if Library === step
349
+ begin
350
+ @result = executeStep(step, method) if @result
351
+ ensure
352
+ Multithread::Jobs.decThread() if Library === step
353
+ end
354
+ @@delayed_result &&= @result
338
355
  end
339
- @@delayed_result &&= @result
356
+ break if blockAbort?(@result)
340
357
  end
341
- break if blockAbort?(@result)
358
+ ensure
359
+ SyncOut.stopStream(@result) if !@outputInMainThread
342
360
  end
343
361
  } if !threadableSteps.empty?
344
362
  nonThreadableSteps.each do |step|
@@ -346,13 +364,13 @@ module Bake
346
364
  ThreadsWait.all_waits(Blocks::Block::threads)
347
365
  @result = executeStep(step, method) if @result
348
366
  end
349
- return false if blockAbort?(@result)
367
+ return @result if blockAbort?(@result)
350
368
  end
351
369
 
352
370
  postSteps.each do |step|
353
371
  ThreadsWait.all_waits(Blocks::Block::threads)
354
372
  @result = executeStep(step, method) if @result
355
- return false if blockAbort?(@result)
373
+ return @result if blockAbort?(@result)
356
374
  end unless @prebuild
357
375
 
358
376
  return @result
@@ -374,26 +392,44 @@ module Bake
374
392
  @inDeps = true
375
393
  depResult = callDeps(:execute)
376
394
  @inDeps = false
377
- return false if blockAbort?(depResult)
395
+ return @result if blockAbort?(depResult)
378
396
 
379
397
  Bake::IDEInterface.instance.set_build_info(@projectName, @configName)
380
398
 
381
- SyncOut.mutex.synchronize do
382
- if Bake.options.verbose >= 2 || isBuildBlock? || @prebuild
383
- typeStr = "Building"
384
- if @prebuild
385
- typeStr = "Using"
386
- elsif not isBuildBlock?
387
- typeStr = "Applying"
399
+ begin
400
+ SyncOut.mutex.synchronize do
401
+ @outputInMainThread = true
402
+ SyncOut.startStream() if Bake.options.syncedOutput
403
+ if Bake.options.verbose >= 2 || isBuildBlock? || @prebuild
404
+ typeStr = "Building"
405
+ if @prebuild
406
+ typeStr = "Using"
407
+ elsif not isBuildBlock?
408
+ typeStr = "Applying"
409
+ end
410
+
411
+ bcStr = ">>CONF_NUM<<"
412
+ if !Bake.options.syncedOutput
413
+ bcStr = Block.block_counter
414
+ Block.inc_block_counter()
415
+ end
416
+
417
+ Bake.formatter.printAdditionalInfo "**** #{typeStr} #{bcStr} of #{@@num_projects}: #{@projectName} (#{@configName}) ****"
388
418
  end
389
- Block.inc_block_counter()
390
- Bake.formatter.printAdditionalInfo "**** #{typeStr} #{Block.block_counter} of #{@@num_projects}: #{@projectName} (#{@configName}) ****"
419
+ puts "Project path: #{@projectDir}" if Bake.options.projectPaths
420
+ end
421
+
422
+ @result = callSteps(:execute)
423
+ ensure
424
+ if @outputInMainThread
425
+ SyncOut.stopStream(@result)
426
+ else
427
+ SyncOut.discardStreams()
391
428
  end
392
- puts "Project path: #{@projectDir}" if Bake.options.projectPaths
393
429
  end
394
430
 
395
- @result = callSteps(:execute)
396
- return (depResult && @result)
431
+
432
+ return (depResult && @result)# && @@delayed_result)
397
433
  end
398
434
 
399
435
  def clean
@@ -403,10 +439,6 @@ module Bake
403
439
  depResult = callDeps(:clean)
404
440
  return false if not depResult and Bake.options.stopOnFirstError
405
441
 
406
- if Bake.options.verbose >= 2 || isBuildBlock? || @prebuild
407
- Block.inc_block_counter()
408
- end
409
-
410
442
  if Bake.options.verbose >= 2
411
443
  typeStr = "Cleaning"
412
444
  if @prebuild
@@ -414,10 +446,13 @@ module Bake
414
446
  elsif not isBuildBlock?
415
447
  typeStr = "Skipping"
416
448
  end
417
- Block.inc_block_counter()
418
449
  Bake.formatter.printAdditionalInfo "**** #{typeStr} #{Block.block_counter} of #{@@num_projects}: #{@projectName} (#{@configName}) ****"
419
450
  end
420
451
 
452
+ if Bake.options.verbose >= 2 || isBuildBlock? || @prebuild
453
+ Block.inc_block_counter()
454
+ end
455
+
421
456
  @result = callSteps(:clean)
422
457
 
423
458
  if Bake.options.clobber
@@ -291,6 +291,7 @@ module Bake
291
291
  end
292
292
 
293
293
  SyncOut.startStream()
294
+ SyncOut.reset_errors()
294
295
  begin
295
296
  Thread.current[:filelist] = Set.new if Bake.options.filelist
296
297
  Thread.current[:lastCommand] = nil
@@ -311,6 +312,7 @@ module Bake
311
312
  jobs.set_failed if not result
312
313
  ensure
313
314
  SyncOut.stopStream(result)
315
+ SyncOut.flush_errors()
314
316
  end
315
317
  self.mutex.synchronize do
316
318
  fileListBlock.merge(Thread.current[:filelist]) if Bake.options.filelist
@@ -79,7 +79,14 @@ module Bake
79
79
  def execute
80
80
  Dir.chdir(@projectDir) do
81
81
  childs = @block.getBlocks(:childs)
82
- return false if childs.any? { |b| b.result == false }
82
+ if childs.any? { |b| b.result == false }
83
+ if Bake.options.stopOnFirstError
84
+ Blocks::Block.set_delayed_result
85
+ return true
86
+ else
87
+ return false
88
+ end
89
+ end
83
90
 
84
91
  allSources = []
85
92
  (childs + [@block]).each do |b|
@@ -8,7 +8,7 @@ module Bake
8
8
  Blocks::CC2J.clear
9
9
  Bake::IDEInterface.instance.set_abort(false)
10
10
  Blocks::Block.reset_block_counter
11
- Blocks::Block.delayed_result
11
+ Blocks::Block.reset_delayed_result
12
12
  end
13
13
 
14
14
  end
@@ -1,4 +1,5 @@
1
1
  require 'stringio'
2
+ require 'blocks/block'
2
3
 
3
4
  class ThreadOut
4
5
 
@@ -44,6 +45,10 @@ STDERR.sync = true
44
45
  $stdout = ThreadOut.new(STDOUT)
45
46
  $stderr = ThreadOut.new(STDERR)
46
47
 
48
+ def puts(o)
49
+ tmp = Thread.current[:stdout]
50
+ tmp ? tmp.puts(o) : super(o)
51
+ end
47
52
 
48
53
  class SyncOut
49
54
  def self.mutex
@@ -54,7 +59,7 @@ class SyncOut
54
59
  mutex.synchronize do
55
60
  tmp = Thread.current[:stdout]
56
61
  if tmp.string.length > 0
57
- Thread.current[:stdout] = Thread.current[:tmpStdout]
62
+ Thread.current[:stdout] = Thread.current[:tmpStdout][Thread.current[:tmpStdout].length-1]
58
63
  puts tmp.string
59
64
  tmp.reopen("")
60
65
  Thread.current[:stdout] = tmp
@@ -64,31 +69,57 @@ class SyncOut
64
69
 
65
70
  def self.startStream
66
71
  s = StringIO.new
67
- Thread.current[:tmpStdout] = Thread.current[:stdout]
72
+ if Thread.current[:tmpStdout].nil?
73
+ Thread.current[:tmpStdout] = [Thread.current[:stdout]]
74
+ else
75
+ Thread.current[:tmpStdout] << Thread.current[:stdout]
76
+ end
77
+
68
78
  Thread.current[:stdout] = s
69
79
  end
70
80
 
71
- def self.stopStream(result)
81
+ def self.convertConfNum(str)
82
+ if Bake.options.syncedOutput
83
+ while str.sub!(">>CONF_NUM<<", Bake::Blocks::Block.block_counter.to_s) do
84
+ Bake::Blocks::Block.inc_block_counter
85
+ end
86
+ end
87
+ end
88
+
89
+ def self.stopStream(result=true)
72
90
  s = Thread.current[:stdout]
73
- Thread.current[:stdout] = Thread.current[:tmpStdout]
91
+ return if s.nil?
92
+ Thread.current[:stdout] = Thread.current[:tmpStdout] ? Thread.current[:tmpStdout].pop : nil
74
93
  if s.string.length > 0
75
94
  mutex.synchronize do
76
95
  if !result && Bake.options.stopOnFirstError
77
- @@errors << s.string
96
+ Thread.current[:errorStream] << s.string
78
97
  else
98
+ convertConfNum(s.string)
79
99
  puts s.string
80
100
  end
81
101
  end
102
+ s.reopen("")
82
103
  end
83
104
  end
84
105
 
106
+
107
+ def self.discardStreams()
108
+ Thread.current[:tmpStdout] = []
109
+ end
110
+
85
111
  def self.flush_errors
86
- puts @@errors unless @@errors.empty?
87
- reset_errors
112
+ if !Thread.current[:errorStream].empty?
113
+ mutex.synchronize do
114
+ convertConfNum(Thread.current[:errorStream])
115
+ puts Thread.current[:errorStream]
116
+ reset_errors
117
+ end
118
+ end
88
119
  end
89
120
 
90
121
  def self.reset_errors
91
- @@errors = ""
122
+ Thread.current[:errorStream] = ""
92
123
  end
93
124
 
94
125
  end
@@ -1,7 +1,7 @@
1
1
  module Bake
2
2
  class Version
3
3
  def self.number
4
- "2.33.0"
4
+ "2.34.0"
5
5
  end
6
6
 
7
7
  def self.printBakeVersion(ry = "")
@@ -38,7 +38,9 @@ module Bake
38
38
  @jobs = jobs
39
39
  @threads = []
40
40
  nr_of_threads.times do
41
- @threads << ::Thread.new do
41
+ @threads << ::Thread.new(Thread.current[:stdout], Thread.current[:errorStream]) do |outStr, errStr|
42
+ Thread.current[:stdout] = outStr
43
+ Thread.current[:errorStream] = errStr
42
44
  Jobs.incThread()
43
45
  block.call(self)
44
46
  Jobs.decThread()
data/lib/tocxx.rb CHANGED
@@ -356,9 +356,9 @@ module Bake
356
356
  result = callBlock(block, method) && result
357
357
  ensure
358
358
  ThreadsWait.all_waits(Blocks::Block::threads)
359
- SyncOut.flush_errors
359
+ result &&= Blocks::Block.delayed_result
360
+ SyncOut.stopStream(result)
360
361
  end
361
- result &&= Blocks::Block.delayed_result
362
362
  if not ignoreStopOnFirstError
363
363
  return false if not result and Bake.options.stopOnFirstError
364
364
  end
@@ -536,6 +536,7 @@ module Bake
536
536
  rescue AbortException
537
537
  ideAbort = true
538
538
  end
539
+ SyncOut.flush_errors
539
540
  result = callBlocks(startBlocks, :exits, true) && result
540
541
 
541
542
  if ideAbort || Bake::IDEInterface.instance.get_abort
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.33.0
4
+ version: 2.34.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: 2017-03-02 00:00:00.000000000 Z
11
+ date: 2017-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rtext