bake-toolkit 2.32.0 → 2.33.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,8 @@
1
1
  require 'blocks/blockBase'
2
+
2
3
  require 'multithread/job'
3
4
  require 'common/process'
5
+ require 'common/ext/dir'
4
6
  require 'common/utils'
5
7
  require 'bake/toolchain/colorizing_formatter'
6
8
  require 'bake/config/loader'
@@ -13,6 +15,10 @@ module Bake
13
15
 
14
16
  attr_reader :objects, :include_list
15
17
 
18
+ def mutex
19
+ @mutex ||= Mutex.new
20
+ end
21
+
16
22
  def initialize(block, config, referencedConfigs)
17
23
  super(block, config, referencedConfigs)
18
24
  @objects = []
@@ -41,47 +47,50 @@ module Bake
41
47
  return "because analyzer toolchain is configured" if Bake.options.analyze
42
48
  return "because prepro was specified and source is no assembler file" if Bake.options.prepro
43
49
 
44
- return "because object does not exist" if not File.exist?(object)
45
- oTime = File.mtime(object)
50
+ Dir.mutex.synchronize do
51
+ Dir.chdir(@projectDir) do
52
+ return "because object does not exist" if not File.exist?(object)
53
+ oTime = File.mtime(object)
46
54
 
47
- return "because source is newer than object" if oTime < File.mtime(source)
55
+ return "because source is newer than object" if oTime < File.mtime(source)
48
56
 
49
- if type != :ASM
50
- return "because dependency file does not exist" if not File.exist?(dep_filename_conv)
57
+ if type != :ASM
58
+ return "because dependency file does not exist" if not File.exist?(dep_filename_conv)
51
59
 
52
- begin
53
- File.readlines(dep_filename_conv).map{|line| line.strip}.each do |dep|
54
- Thread.current[:filelist].add(File.expand_path(dep)) if Bake.options.filelist
55
-
56
- if not File.exist?(dep)
57
- # we need a hack here. with some windows configurations the compiler prints unix paths
58
- # into the dep file which cannot be found easily. this will be true for system includes,
59
- # e.g. /usr/lib/...xy.h
60
- if (Bake::Utils::OS.windows? and dep.start_with?"/") or
61
- (not Bake::Utils::OS.windows? and dep.length > 1 and dep[1] == ":")
62
- puts "Dependency header file #{dep} ignored!" if Bake.options.debug
63
- else
64
- return "because dependent header #{dep} does not exist"
60
+ begin
61
+ File.readlines(dep_filename_conv).map{|line| line.strip}.each do |dep|
62
+ Thread.current[:filelist].add(File.expand_path(dep, @projectDir)) if Bake.options.filelist
63
+
64
+ if not File.exist?(dep)
65
+ # we need a hack here. with some windows configurations the compiler prints unix paths
66
+ # into the dep file which cannot be found easily. this will be true for system includes,
67
+ # e.g. /usr/lib/...xy.h
68
+ if (Bake::Utils::OS.windows? and dep.start_with?"/") or
69
+ (not Bake::Utils::OS.windows? and dep.length > 1 and dep[1] == ":")
70
+ puts "Dependency header file #{dep} ignored!" if Bake.options.debug
71
+ else
72
+ return "because dependent header #{dep} does not exist"
73
+ end
74
+ else
75
+ return "because dependent header #{dep} is newer than object" if oTime < File.mtime(dep)
76
+ end
65
77
  end
66
- else
67
- return "because dependent header #{dep} is newer than object" if oTime < File.mtime(dep)
78
+ rescue Exception => ex
79
+ if Bake.options.debug
80
+ puts "While reading #{dep_filename_conv}:"
81
+ puts ex.message
82
+ puts ex.backtrace
83
+ end
84
+ return "because dependency file could not be loaded"
68
85
  end
69
86
  end
70
- rescue Exception => ex
71
- if Bake.options.debug
72
- puts "While reading #{dep_filename_conv}:"
73
- puts ex.message
74
- puts ex.backtrace
75
- end
76
- return "because dependency file could not be loaded"
77
87
  end
78
88
  end
79
-
80
- false
89
+ return false
81
90
  end
82
91
 
83
92
  def calcCmdlineFile(object)
84
- object[0..-3] + ".cmdline"
93
+ File.expand_path(object[0..-3] + ".cmdline", @projectDir)
85
94
  end
86
95
 
87
96
  def calcDepFile(object, type)
@@ -125,7 +134,7 @@ module Bake
125
134
  reason = config_changed?(cmdLineFile)
126
135
  end
127
136
 
128
- Thread.current[:filelist].add(File.expand_path(source)) if Bake.options.filelist
137
+ Thread.current[:filelist].add(File.expand_path(source, @projectDir)) if Bake.options.filelist
129
138
 
130
139
  if @fileTcs.include?(source)
131
140
  compiler = @fileTcs[source][:COMPILER][type]
@@ -189,23 +198,26 @@ module Bake
189
198
  end
190
199
 
191
200
  if not (cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile))
192
- BlockBase.prepareOutput(object)
201
+ BlockBase.prepareOutput(File.expand_path(object,@projectDir))
193
202
  outputType = Bake.options.analyze ? "Analyzing" : (Bake.options.prepro ? "Preprocessing" : "Compiling")
194
- printCmd(cmd, "#{outputType} #{source}", reason, false)
195
- flushOutput()
203
+ printCmd(cmd, "#{outputType} #{@projectName} (#{@config.name}): #{source}", reason, false)
204
+ SyncOut.flushOutput()
196
205
  BlockBase.writeCmdLineFile(cmd, cmdLineFile)
197
206
 
198
207
  success = true
199
208
  consoleOutput = ""
200
- success, consoleOutput = ProcessHelper.run(cmd, false, false) if !Bake.options.dry
209
+ success, consoleOutput = ProcessHelper.run(cmd, false, false, nil, [0], @projectDir) if !Bake.options.dry
201
210
  incList = process_result(cmd, consoleOutput, compiler[:ERROR_PARSER], nil, reason, success)
202
-
203
211
  if type != :ASM and not Bake.options.analyze and not Bake.options.prepro
204
- incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE]) if incList.nil?
205
- Compile.write_depfile(incList, dep_filename_conv)
212
+ Dir.mutex.synchronize do
213
+ Dir.chdir(@projectDir) do
214
+ incList = Compile.read_depfile(dep_filename, @projectDir, @block.tcs[:COMPILER][:DEP_FILE_SINGLE_LINE]) if incList.nil?
215
+ Compile.write_depfile(incList, dep_filename_conv)
216
+ end
217
+ end
206
218
 
207
219
  incList.each do |h|
208
- Thread.current[:filelist].add(File.expand_path(h))
220
+ Thread.current[:filelist].add(File.expand_path(h, @projectDir))
209
221
  end if Bake.options.filelist
210
222
  end
211
223
  check_config_file
@@ -264,72 +276,44 @@ module Bake
264
276
  end
265
277
  end
266
278
 
267
- def mutex
268
- @mutex ||= Mutex.new
269
- end
270
-
271
- def flushOutput
272
- mutex.synchronize do
273
- tmp = Thread.current[:stdout]
274
- if tmp.string.length > 0
275
- Thread.current[:stdout] = Thread.current[:tmpStdout]
276
- puts tmp.string
277
- tmp.reopen("")
278
- Thread.current[:stdout] = tmp
279
- end
280
- end
281
- end
282
-
283
-
284
279
  def execute
285
- Dir.chdir(@projectDir) do
280
+ #Dir.chdir(@projectDir) do
286
281
 
287
282
  calcSources
288
283
  calcObjects
289
284
 
290
- @error_strings = {}
291
-
292
285
  fileListBlock = Set.new if Bake.options.filelist
293
286
  compileJobs = Multithread::Jobs.new(@source_files) do |jobs|
294
287
  while source = jobs.get_next_or_nil do
295
288
 
296
- if (jobs.failed and Bake.options.stopOnFirstError) or Bake::IDEInterface.instance.get_abort
289
+ if ((jobs.failed || !Blocks::Block.delayed_result) and Bake.options.stopOnFirstError) or Bake::IDEInterface.instance.get_abort
297
290
  break
298
291
  end
299
292
 
300
- s = StringIO.new
301
- Thread.current[:tmpStdout] = Thread.current[:stdout]
302
- Thread.current[:stdout] = s unless Thread.current[:tmpStdout]
303
- Thread.current[:filelist] = Set.new if Bake.options.filelist
304
- Thread.current[:lastCommand] = nil
305
-
306
- result = false
293
+ SyncOut.startStream()
307
294
  begin
308
- compileFile(source)
309
- result = true
310
- rescue Bake::SystemCommandFailed => scf # normal compilation error
311
- rescue SystemExit => exSys
312
- rescue Exception => ex1
313
- if not Bake::IDEInterface.instance.get_abort
314
- Bake.formatter.printError("Error: #{ex1.message}")
315
- puts ex1.backtrace if Bake.options.debug
295
+ Thread.current[:filelist] = Set.new if Bake.options.filelist
296
+ Thread.current[:lastCommand] = nil
297
+
298
+ result = false
299
+ begin
300
+ compileFile(source)
301
+ result = true
302
+ rescue Bake::SystemCommandFailed => scf # normal compilation error
303
+ rescue SystemExit => exSys
304
+ rescue Exception => ex1
305
+ if not Bake::IDEInterface.instance.get_abort
306
+ Bake.formatter.printError("Error: #{ex1.message}")
307
+ puts ex1.backtrace if Bake.options.debug
308
+ end
316
309
  end
317
- end
318
310
 
319
- jobs.set_failed if not result
320
-
321
- Thread.current[:stdout] = Thread.current[:tmpStdout]
322
-
323
- mutex.synchronize do
311
+ jobs.set_failed if not result
312
+ ensure
313
+ SyncOut.stopStream(result)
314
+ end
315
+ self.mutex.synchronize do
324
316
  fileListBlock.merge(Thread.current[:filelist]) if Bake.options.filelist
325
-
326
- if s.string.length > 0
327
- if Bake.options.stopOnFirstError and not result
328
- @error_strings[source] = s.string
329
- else
330
- puts s.string
331
- end
332
- end
333
317
  end
334
318
 
335
319
  end
@@ -339,8 +323,9 @@ module Bake
339
323
  if Bake.options.filelist && !Bake.options.dry
340
324
  Bake.options.filelist.merge(fileListBlock.merge(fileListBlock))
341
325
 
342
- FileUtils.mkdir_p(@block.output_dir)
343
- File.open(@block.output_dir + "/" + "file-list.txt", 'wb') do |f|
326
+ odir = File.expand_path(@block.output_dir, @projectDir)
327
+ FileUtils.mkdir_p(odir)
328
+ File.open(odir + "/" + "file-list.txt", 'wb') do |f|
344
329
  fileListBlock.sort.each do |entry|
345
330
  f.puts(entry)
346
331
  end
@@ -348,16 +333,9 @@ module Bake
348
333
 
349
334
  end
350
335
 
351
-
352
- # can only happen in case of bail_on_first_error.
353
- # if not sorted, it may be confusing when builing more than once and the order of the error appearances changes from build to build
354
- # (it is not deterministic which file compilation finishes first)
355
- @error_strings.sort.each {|es| puts es[1]}
356
-
357
336
  raise SystemCommandFailed.new if compileJobs.failed
358
337
 
359
-
360
- end
338
+ #end
361
339
  return true
362
340
  end
363
341
 
@@ -419,65 +397,64 @@ module Bake
419
397
 
420
398
  def calcSources(cleaning = false, keep = false)
421
399
  return @source_files if @source_files and not @source_files.empty?
422
- Dir.chdir(@projectDir) do
423
- @source_files = []
400
+ @source_files = []
424
401
 
425
- exclude_files = Set.new
426
- @config.excludeFiles.each do |p|
427
- Dir.glob(p.name).each {|f| exclude_files << f}
428
- end
402
+ exclude_files = Set.new
403
+ @config.excludeFiles.each do |p|
404
+ Dir.glob_dir(p.name, @projectDir).each {|f| exclude_files << f}
405
+ end
429
406
 
430
- source_files = Set.new
431
- @config.files.each do |sources|
432
- p = sources.name
433
- p = p[2..-1] if p.start_with?"./"
434
-
435
- res = Dir.glob(p).sort
436
- if res.length == 0 and cleaning == false
437
- if not p.include?"*" and not p.include?"?"
438
- Bake.formatter.printError("Source file '#{p}' not found", sources)
439
- raise SystemCommandFailed.new
440
- elsif Bake.options.verbose >= 1
441
- Bake.formatter.printInfo("Source file pattern '#{p}' does not match to any file", sources)
442
- end
443
- end
444
- res.each do |f|
445
- next if exclude_files.include?(f)
446
- next if source_files.include?(f)
447
- source_files << f
448
- @source_files << f
407
+ source_files = Set.new
408
+ @config.files.each do |sources|
409
+ p = sources.name
410
+ p = p[2..-1] if p.start_with?"./"
411
+
412
+ res = Dir.glob_dir(p, @projectDir).sort
413
+ if res.length == 0 and cleaning == false
414
+ if not p.include?"*" and not p.include?"?"
415
+ Bake.formatter.printError("Source file '#{p}' not found", sources)
416
+ raise SystemCommandFailed.new
417
+ elsif Bake.options.verbose >= 1
418
+ Bake.formatter.printInfo("Source file pattern '#{p}' does not match to any file", sources)
449
419
  end
450
420
  end
421
+ res.each do |f|
422
+ next if exclude_files.include?(f)
423
+ next if source_files.include?(f)
424
+ source_files << f
425
+ @source_files << f
426
+ end
427
+ end
451
428
 
452
- if Bake.options.filename
453
- @source_files.keep_if do |source|
454
- source.include?Bake.options.filename
455
- end
456
- if @source_files.length == 0 and cleaning == false and @config.files.length > 0
457
- Bake.formatter.printInfo("#{Bake.options.filename} does not match to any source", @config)
458
- end
429
+ if Bake.options.filename
430
+ @source_files.keep_if do |source|
431
+ source.include?Bake.options.filename
432
+ end
433
+ if @source_files.length == 0 and cleaning == false and @config.files.length > 0
434
+ Bake.formatter.printInfo("#{Bake.options.filename} does not match to any source", @config)
459
435
  end
436
+ end
460
437
 
461
- if Bake.options.eclipseOrder # directories reverse order, files in directories in alphabetical order
462
- dirs = []
463
- filemap = {}
464
- @source_files.sort.reverse.each do |o|
465
- d = File.dirname(o)
466
- if filemap.include?(d)
467
- filemap[d] << o
468
- else
469
- filemap[d] = [o]
470
- dirs << d
471
- end
438
+ if Bake.options.eclipseOrder # directories reverse order, files in directories in alphabetical order
439
+ dirs = []
440
+ filemap = {}
441
+ @source_files.sort.reverse.each do |o|
442
+ d = File.dirname(o)
443
+ if filemap.include?(d)
444
+ filemap[d] << o
445
+ else
446
+ filemap[d] = [o]
447
+ dirs << d
472
448
  end
473
- @source_files = []
474
- dirs.each do |d|
475
- filemap[d].reverse.each do |f|
476
- @source_files << f
477
- end
449
+ end
450
+ @source_files = []
451
+ dirs.each do |d|
452
+ filemap[d].reverse.each do |f|
453
+ @source_files << f
478
454
  end
479
455
  end
480
456
  end
457
+
481
458
  @source_files
482
459
  end
483
460
 
@@ -153,7 +153,7 @@ module Bake
153
153
 
154
154
  BlockBase.prepareOutput(@exe_name)
155
155
 
156
- printCmd(cmdLinePrint, "Linking #{@exe_name}", reason, false)
156
+ printCmd(cmdLinePrint, "Linking #{@projectName} (#{@config.name}): #{@exe_name}", reason, false)
157
157
  BlockBase.writeCmdLineFile(cmd, cmdLineFile)
158
158
  success = true
159
159
  consoleOutput = ""
@@ -1,132 +1,148 @@
1
- require 'blocks/blockBase'
2
-
3
- module Bake
4
-
5
- module Blocks
6
-
7
- class Library < BlockBase
8
-
9
- attr_reader :compileBlock, :archive_name
10
-
11
- def initialize(block, config, referencedConfigs, compileBlock)
12
- super(block,config, referencedConfigs)
13
- @compileBlock = compileBlock
14
-
15
- block.set_library(self)
16
-
17
- calcArtifactName
18
- end
19
-
20
- def calcArtifactName
21
- if not @config.artifactName.nil? and @config.artifactName.name != ""
22
- baseFilename = @config.artifactName.name
23
- else
24
- baseFilename = "lib#{@projectName}.a"
25
- end
26
- @archive_name ||= File.join([@block.output_dir, baseFilename])
27
- end
28
-
29
- def calcCmdlineFile()
30
- @archive_name + ".cmdline"
31
- end
32
-
33
- def ignore?
34
- Bake.options.linkOnly or Bake.options.prepro
35
- end
36
-
37
- def needed?
38
- # lib
39
- return "because library does not exist" if not File.exists?(@archive_name)
40
-
41
- aTime = File.mtime(@archive_name)
42
-
43
- # sources
44
- @objects.each do |obj|
45
- return "because object #{obj} does not exist" if not File.exists?(obj)
46
- return "because object #{obj} is newer than executable" if aTime < File.mtime(obj)
47
- end
48
-
49
- false
50
- end
51
-
52
- def execute
53
-
54
- Dir.chdir(@projectDir) do
55
-
56
- @objects = @compileBlock.objects
57
- if !@block.prebuild
58
- if @objects.empty?
59
- puts "No source files, library won't be created" if Bake.options.verbose >= 2
60
- return true
61
- end
62
- else
63
- @objects = Dir.glob("#{@block.output_dir}/**/*.o")
64
- if @objects.empty?
65
- if !File.exists?(@archive_name)
66
- puts "No object files, library won't be created" if Bake.options.verbose >= 2
67
- end
68
- return true
69
- end
70
- end
71
-
72
- cmdLineCheck = false
73
- cmdLineFile = calcCmdlineFile()
74
-
75
- return true if ignore?
76
- reason = needed?
77
- if not reason
78
- cmdLineCheck = true
79
- reason = config_changed?(cmdLineFile)
80
- end
81
- archiver = @block.tcs[:ARCHIVER]
82
-
83
- cmd = Utils.flagSplit(archiver[:PREFIX], false)
84
- cmd += Utils.flagSplit(archiver[:COMMAND], false) # ar
85
- cmd += Bake::Utils::flagSplit(archiver[:FLAGS],true) # --all_load
86
- cmd += archiver[:ARCHIVE_FLAGS].split(" ")
87
-
88
- if archiver[:ARCHIVE_FLAGS_SPACE]
89
- cmd << @archive_name
90
- else
91
- cmd[cmd.length-1] += @archive_name
92
- end
93
-
94
- cmd += @objects
95
-
96
- if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
97
- success = true
98
- else
99
- BlockBase.prepareOutput(@archive_name)
100
-
101
- BlockBase.writeCmdLineFile(cmd, cmdLineFile)
102
- success = true
103
- consoleOutput = ""
104
- success, consoleOutput = ProcessHelper.run(cmd, false, false) if !Bake.options.dry
105
- process_result(cmd, consoleOutput, archiver[:ERROR_PARSER], "Creating #{@archive_name}", reason, success)
106
-
107
- check_config_file()
108
- end
109
-
110
- return success
111
- end
112
- end
113
-
114
- def clean
115
- if @block.prebuild
116
- Dir.chdir(@projectDir) do
117
- @objects = Dir.glob("#{@block.output_dir}/**/*.o")
118
- if !@objects.empty? && File.exist?(@archive_name)
119
- puts "Deleting file #{@archive_name}" if Bake.options.verbose >= 2
120
- if !Bake.options.dry
121
- FileUtils.rm_rf(@archive_name)
122
- end
123
- end
124
- end
125
- else
126
- return cleanProjectDir()
127
- end
128
- end
129
-
130
- end
131
- end
1
+ require 'blocks/blockBase'
2
+
3
+ module Bake
4
+
5
+ module Blocks
6
+
7
+ class Library < BlockBase
8
+
9
+ attr_reader :compileBlock, :archive_name
10
+
11
+ def initialize(block, config, referencedConfigs, compileBlock)
12
+ super(block,config, referencedConfigs)
13
+ @compileBlock = compileBlock
14
+
15
+ block.set_library(self)
16
+
17
+ calcArtifactName
18
+ end
19
+
20
+ def calcArtifactName
21
+ if not @config.artifactName.nil? and @config.artifactName.name != ""
22
+ baseFilename = @config.artifactName.name
23
+ else
24
+ baseFilename = "lib#{@projectName}.a"
25
+ end
26
+ @archive_name ||= File.join([@block.output_dir, baseFilename])
27
+ end
28
+
29
+ def calcCmdlineFile()
30
+ File.expand_path(@archive_name + ".cmdline", @projectDir)
31
+ end
32
+
33
+ def ignore?
34
+ Bake.options.linkOnly or Bake.options.prepro
35
+ end
36
+
37
+ def needed?
38
+ Dir.mutex.synchronize do
39
+ Dir.chdir(@projectDir) do
40
+ # lib
41
+ return "because library does not exist" if not File.exists?(@archive_name)
42
+
43
+ aTime = File.mtime(@archive_name)
44
+
45
+ # sources
46
+ @objects.each do |obj|
47
+ return "because object #{obj} does not exist" if not File.exists?(obj)
48
+ return "because object #{obj} is newer than executable" if aTime < File.mtime(obj)
49
+ end
50
+ end
51
+ end
52
+ return false
53
+ end
54
+
55
+ def execute
56
+
57
+ #Dir.chdir(@projectDir) do
58
+
59
+ @objects = @compileBlock.objects
60
+ if !@block.prebuild
61
+ if @objects.empty?
62
+ SyncOut.mutex.synchronize do
63
+ puts "No source files, library won't be created" if Bake.options.verbose >= 2
64
+ end
65
+ return true
66
+ end
67
+ else
68
+ @objects = Dir.glob_dir("#{@block.output_dir}/**/*.o", @projectDir)
69
+ if @objects.empty?
70
+ if !File.exists?(File.expand_path(@archive_name, @projectDir))
71
+ SyncOut.mutex.synchronize do
72
+ puts "No object files, library won't be created" if Bake.options.verbose >= 2
73
+ end
74
+ end
75
+ return true
76
+ end
77
+ end
78
+
79
+ cmdLineCheck = false
80
+ cmdLineFile = calcCmdlineFile()
81
+
82
+ return true if ignore?
83
+ reason = needed?
84
+ if not reason
85
+ cmdLineCheck = true
86
+ reason = config_changed?(cmdLineFile)
87
+ end
88
+ archiver = @block.tcs[:ARCHIVER]
89
+
90
+ cmd = Utils.flagSplit(archiver[:PREFIX], false)
91
+ cmd += Utils.flagSplit(archiver[:COMMAND], false) # ar
92
+ cmd += Bake::Utils::flagSplit(archiver[:FLAGS],true) # --all_load
93
+ cmd += archiver[:ARCHIVE_FLAGS].split(" ")
94
+
95
+ if archiver[:ARCHIVE_FLAGS_SPACE]
96
+ cmd << @archive_name
97
+ else
98
+ cmd[cmd.length-1] += @archive_name
99
+ end
100
+
101
+ cmd += @objects
102
+
103
+ if cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile)
104
+ success = true
105
+ else
106
+ SyncOut.startStream()
107
+
108
+ begin
109
+ success = true
110
+ BlockBase.prepareOutput(File.expand_path(@archive_name, @projectDir))
111
+ BlockBase.writeCmdLineFile(cmd, cmdLineFile)
112
+ consoleOutput = ""
113
+
114
+ printCmd(cmd, "Creating #{@projectName} (#{@config.name}): #{@archive_name}", reason, false)
115
+ SyncOut.flushOutput()
116
+
117
+ success, consoleOutput = ProcessHelper.run(cmd, false, false, nil, [0], @projectDir) if !Bake.options.dry
118
+ process_result(cmd, consoleOutput, archiver[:ERROR_PARSER], nil, reason, success)
119
+
120
+ check_config_file()
121
+ ensure
122
+ SyncOut.stopStream(success)
123
+ end
124
+ end
125
+
126
+ return success
127
+ #end
128
+ end
129
+
130
+ def clean
131
+ if @block.prebuild
132
+ Dir.chdir(@projectDir) do
133
+ @objects = Dir.glob_dir("#{@block.output_dir}/**/*.o", @projectDir)
134
+ if !@objects.empty? && File.exist?(@archive_name)
135
+ puts "Deleting file #{@archive_name}" if Bake.options.verbose >= 2
136
+ if !Bake.options.dry
137
+ FileUtils.rm_rf(@archive_name)
138
+ end
139
+ end
140
+ end
141
+ else
142
+ return cleanProjectDir()
143
+ end
144
+ end
145
+
146
+ end
147
+ end
132
148
  end