bake-toolkit 1.8.0.1 → 2.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/bin/bake +14 -53
  3. data/bin/bakery +50 -43
  4. data/bin/createVSProjects +3 -3
  5. data/doc/cmd/install.html +1 -5
  6. data/doc/cmd/usecmd.html +29 -5
  7. data/doc/dyk/lint.html +21 -4
  8. data/doc/dyk/tipps.html +0 -6
  9. data/doc/eclipse/import.html +3 -1
  10. data/doc/eclipse/import/Import.png +0 -0
  11. data/doc/eclipse/use.html +8 -5
  12. data/doc/further/change.html +134 -1
  13. data/doc/further/issues.html +1 -0
  14. data/doc/further/wish.html +24 -21
  15. data/doc/index.html +1 -1
  16. data/doc/syntax/subst.html +8 -1
  17. data/doc/syntax/syntax.html +42 -14
  18. data/lib/bake/cache.rb +51 -59
  19. data/lib/bake/config/loader.rb +289 -0
  20. data/lib/bake/libElement.rb +134 -0
  21. data/lib/bake/mergeConfig.rb +1 -1
  22. data/lib/bake/model/language.rb +1 -1
  23. data/lib/bake/model/loader.rb +88 -0
  24. data/lib/bake/model/metamodel.rb +24 -16
  25. data/lib/bake/model/metamodel_ext.rb +9 -4
  26. data/lib/bake/options/options.rb +222 -0
  27. data/lib/bake/options/showConfigNames.rb +44 -0
  28. data/lib/bake/options/showDoc.rb +19 -0
  29. data/lib/bake/options/showLicense.rb +9 -0
  30. data/lib/bake/options/showToolchains.rb +39 -0
  31. data/lib/bake/options/usage.rb +54 -0
  32. data/lib/bake/process_output.rb +10 -0
  33. data/lib/bake/subst.rb +105 -40
  34. data/lib/bake/toolchain/clang.rb +44 -0
  35. data/lib/bake/toolchain/colorizing_formatter.rb +125 -0
  36. data/lib/bake/toolchain/diab.rb +53 -0
  37. data/lib/bake/toolchain/errorparser/diab_compiler_error_parser.rb +40 -0
  38. data/lib/bake/toolchain/errorparser/diab_linker_error_parser.rb +41 -0
  39. data/lib/bake/toolchain/errorparser/error_parser.rb +71 -0
  40. data/lib/bake/toolchain/errorparser/gcc_compiler_error_parser.rb +35 -0
  41. data/lib/bake/toolchain/errorparser/gcc_linker_error_parser.rb +35 -0
  42. data/lib/bake/toolchain/errorparser/greenhills_compiler_error_parser.rb +32 -0
  43. data/lib/bake/toolchain/errorparser/greenhills_linker_error_parser.rb +44 -0
  44. data/lib/bake/toolchain/errorparser/keil_compiler_error_parser.rb +40 -0
  45. data/lib/bake/toolchain/errorparser/keil_linker_error_parser.rb +30 -0
  46. data/lib/bake/toolchain/errorparser/lint_error_parser.rb +34 -0
  47. data/lib/bake/toolchain/errorparser/process_output.rb +3 -0
  48. data/lib/bake/toolchain/errorparser/ti_compiler_error_parser.rb +30 -0
  49. data/lib/bake/toolchain/errorparser/ti_linker_error_parser.rb +30 -0
  50. data/lib/bake/toolchain/gcc.rb +49 -0
  51. data/lib/bake/toolchain/gcc_param.rb +7 -0
  52. data/lib/bake/toolchain/greenhills.rb +52 -0
  53. data/lib/bake/toolchain/keil.rb +55 -0
  54. data/lib/bake/toolchain/lint.rb +20 -0
  55. data/lib/bake/toolchain/provider.rb +136 -0
  56. data/lib/bake/toolchain/ti.rb +47 -0
  57. data/lib/bake/util.rb +27 -15
  58. data/lib/bakery/buildPattern.rb +1 -1
  59. data/lib/bakery/model/language.rb +1 -1
  60. data/lib/bakery/model/loader.rb +56 -0
  61. data/lib/bakery/model/metamodel.rb +1 -1
  62. data/lib/bakery/options/options.rb +87 -0
  63. data/lib/bakery/toBake.rb +10 -6
  64. data/lib/blocks/block.rb +225 -0
  65. data/lib/blocks/blockBase.rb +155 -0
  66. data/lib/blocks/commandLine.rb +25 -0
  67. data/lib/blocks/compile.rb +382 -0
  68. data/lib/blocks/docu.rb +28 -0
  69. data/lib/blocks/executable.rb +143 -0
  70. data/lib/blocks/has_execute_command.rb +31 -0
  71. data/lib/blocks/library.rb +78 -0
  72. data/lib/blocks/lint.rb +53 -0
  73. data/lib/blocks/makefile.rb +87 -0
  74. data/lib/blocks/showIncludes.rb +114 -0
  75. data/lib/common/abortException.rb +4 -0
  76. data/lib/common/cleanup.rb +9 -0
  77. data/lib/common/exit_helper.rb +28 -0
  78. data/lib/common/ext/file.rb +88 -0
  79. data/lib/common/ext/stdout.rb +45 -0
  80. data/lib/common/ide_interface.rb +194 -0
  81. data/lib/common/options/option.rb +13 -0
  82. data/lib/common/options/parser.rb +59 -0
  83. data/lib/common/process.rb +64 -0
  84. data/lib/common/utils.rb +52 -0
  85. data/lib/{bake → common}/version.rb +3 -10
  86. data/lib/multithread/job.rb +44 -0
  87. data/lib/tocxx.rb +201 -932
  88. data/lib/vs/options.rb +3 -2
  89. data/license.txt +47 -22
  90. metadata +90 -30
  91. data/bin/bake-doc +0 -12
  92. data/lib/alias/loader.rb +0 -56
  93. data/lib/alias/model/language.rb +0 -22
  94. data/lib/alias/model/metamodel.rb +0 -29
  95. data/lib/bake/loader.rb +0 -92
  96. data/lib/bake/options.rb +0 -421
  97. data/lib/bakery/loader.rb +0 -57
  98. data/lib/bakery/options.rb +0 -105
  99. data/lib/option/parser.rb +0 -73
@@ -1,4 +1,4 @@
1
- module Cxxproject
1
+ module Bake
2
2
 
3
3
  class BuildPattern
4
4
  attr_reader :proj, :conf, :coll_p
@@ -1,7 +1,7 @@
1
1
  require 'bake/model/metamodel'
2
2
  require 'rtext/language'
3
3
 
4
- module Cxxproject
4
+ module Bake
5
5
 
6
6
  BakeryLanguage =
7
7
  RText::Language.new(BakeryModel.ecore,
@@ -0,0 +1,56 @@
1
+ require 'bakery/model/metamodel'
2
+ require 'bakery/model/language'
3
+ require 'common/version'
4
+
5
+ require 'rgen/environment'
6
+ require 'rgen/fragment/fragmented_model'
7
+
8
+ require 'rtext/default_loader'
9
+
10
+ require 'common/exit_helper'
11
+ require 'bake/toolchain/colorizing_formatter'
12
+
13
+ module Bake
14
+
15
+ class BakeryLoader
16
+
17
+ attr_reader :model
18
+
19
+ def initialize
20
+ @env = RGen::Environment.new
21
+ @model = RGen::Fragment::FragmentedModel.new(:env => @env)
22
+ end
23
+
24
+ def load(filename)
25
+
26
+ sumErrors = 0
27
+
28
+ if not File.exists?filename
29
+ Bake.formatter.printError("Error: #{filename} does not exist")
30
+ ExitHelper.exit(1)
31
+ end
32
+
33
+ loader = RText::DefaultLoader.new(
34
+ Bake::BakeryLanguage,
35
+ @model,
36
+ :file_provider => proc { [filename] },
37
+ :cache => @DumpFileCache)
38
+ loader.load()
39
+
40
+ f = @model.fragments[0]
41
+
42
+ f.data[:problems].each do |p|
43
+ Bake.formatter.printError(p.message, p.file, p.line)
44
+ end
45
+
46
+ if f.data[:problems].length > 0
47
+ ExitHelper.exit(1)
48
+ end
49
+
50
+ return @env
51
+
52
+ end
53
+
54
+
55
+ end
56
+ end
@@ -1,7 +1,7 @@
1
1
  require 'rgen/metamodel_builder'
2
2
  require 'rgen/metamodel_builder/data_types'
3
3
 
4
- module Cxxproject
4
+ module Bake
5
5
 
6
6
  module BakeryModel
7
7
  extend RGen::MetamodelBuilder::ModuleExtension
@@ -0,0 +1,87 @@
1
+ require 'bake/toolchain/colorizing_formatter'
2
+ require 'common/options/parser'
3
+
4
+ module Bake
5
+
6
+ class BakeryOptions < Parser
7
+ attr_reader :collection_name, :collection_dir # String
8
+ attr_reader :roots # String List
9
+ attr_reader :color, :error # Boolean
10
+ attr_reader :socket # Fixnum
11
+
12
+ def initialize(argv)
13
+ super(argv)
14
+
15
+ @collection_name = ""
16
+ @collection_dir = nil
17
+ @color = nil
18
+ @error = false
19
+ @roots = []
20
+ @socket = 0
21
+ @def_roots = []
22
+
23
+ add_option(Option.new("-b",true) { |x| set_collection_name(x) })
24
+ add_option(Option.new("-m",true) { |x| set_collection_dir(x) })
25
+ add_option(Option.new("-r",false) { @error = true })
26
+ add_option(Option.new("-a",true) { |x|Bake.formatter.setColorScheme(x.to_sym) })
27
+ add_option(Option.new("-w",true) { |x| set_root(x) })
28
+ add_option(Option.new("--socket",true) { |x| @socket = String === x ? x.to_i : x })
29
+ add_option(Option.new("-h",false) { usage; ExitHelper.exit(0) })
30
+ end
31
+
32
+ def usage
33
+ puts "\nUsage: bake <name> [options]"
34
+ puts " -b <name> Name of the collection to build."
35
+ puts " -m <dir> Directory containing the collection file (default is current directory)."
36
+ puts " -r Stop on first error."
37
+ puts " -a <scheme> Use ansi color sequences (console must support it). Possible values are 'white' and 'black'."
38
+ puts " -h Print this help."
39
+ puts " -w <root> Add a workspace root (can be used multiple times)."
40
+ puts " If no root is specified, the parent directory of Collection.meta is added automatically."
41
+ puts " --socket <num> Set socket for sending errors, receiving commands, etc. - used by e.g. Eclipse."
42
+ puts "Note: all parameters except -b, -m and -h will be passed to bake - see bake help for more options."
43
+ end
44
+
45
+ def parse_options()
46
+ parse_internal(true)
47
+ set_collection_dir(Dir.pwd) if @collection_dir.nil?
48
+ if @roots.length == 0
49
+ @roots = @def_roots
50
+ end
51
+ end
52
+
53
+ def check_valid_dir(dir)
54
+ if not File.exists?(dir)
55
+ Bake.formatter.printError("Error: Directory #{dir} does not exist")
56
+ ExitHelper.exit(1)
57
+ end
58
+ if not File.directory?(dir)
59
+ Bake.formatter.printError("Error: #{dir} is not a directory")
60
+ ExitHelper.exit(1)
61
+ end
62
+ end
63
+
64
+ def set_collection_name(collection_name)
65
+ if not @collection_name.empty?
66
+ Bake.formatter.printError("Error: Cannot set collection name '#{collection_name}', because collection name is already set to '#{@collection_name}'")
67
+ ExitHelper.exit(1)
68
+ end
69
+ @collection_name = collection_name
70
+ end
71
+
72
+ def set_collection_dir(dir)
73
+ check_valid_dir(dir)
74
+ @collection_dir = File.expand_path(dir.gsub(/[\\]/,'/'))
75
+ @def_roots = calc_def_roots(@collection_dir)
76
+ end
77
+
78
+ def set_root(dir)
79
+ check_valid_dir(dir)
80
+ r = File.expand_path(dir.gsub(/[\\]/,'/'))
81
+ @roots << r if not @roots.include?r
82
+ end
83
+
84
+
85
+ end
86
+
87
+ end
data/lib/bakery/toBake.rb CHANGED
@@ -1,14 +1,16 @@
1
1
  require "bakery/buildPattern"
2
2
 
3
- module Cxxproject
3
+ module Bake
4
4
 
5
5
  def self.getBuildPattern(cols, name)
6
6
 
7
+ colMeta = @options.collection_dir+"/Collection.meta"
8
+
7
9
  if (cols.length == 0)
8
- Printer.printError "Collection #{name} not found in #{@options.collection_dir+"/Collection.meta"}"
10
+ Bake.formatter.printError("Collection #{name} not found", colMeta)
9
11
  ExitHelper.exit(1)
10
12
  elsif (cols.length > 1)
11
- Printer.printError "Collection #{name} found more than once in #{@options.collection_dir+"/Collection.meta"}"
13
+ Bake.formatter.printError("Collection #{name} found more than once", colMeta)
12
14
  ExitHelper.exit(1)
13
15
  end
14
16
 
@@ -16,11 +18,11 @@ module Cxxproject
16
18
 
17
19
  col.project.each do |p|
18
20
  if p.name == ""
19
- Printer.printError "Error in #{@options.collection_dir+"/Collection.meta"} (line #{p.line_number}): Project name empty"
21
+ Bake.formatter.printError("Project name empty", p)
20
22
  ExitHelper.exit(1)
21
23
  end
22
24
  if p.config == ""
23
- Printer.printError "Error in #{@options.collection_dir+"/Collection.meta"} (line #{p.line_number}): Config name empty"
25
+ Bake.formatter.printError("Config name empty", p)
24
26
  ExitHelper.exit(1)
25
27
  end
26
28
  end
@@ -54,7 +56,9 @@ module Cxxproject
54
56
  end
55
57
 
56
58
  toBuildPattern.each do |bp|
57
- Printer.printInfo "Info in #{@options.collection_dir+"/Collection.meta"} (line #{bp.coll_p.line_number}): No match for project #{bp.coll_p.name} with config #{bp.coll_p.config}" unless bp.coll_p.isFound
59
+ if not bp.coll_p.isFound
60
+ Bake.formatter.printInfo("No match for project #{bp.coll_p.name} with config #{bp.coll_p.config}", @options.collection_dir+"/Collection.meta", bp.coll_p.line_number)
61
+ end
58
62
  end
59
63
 
60
64
  col.exclude.each do |p|
@@ -0,0 +1,225 @@
1
+ require 'bake/libElement'
2
+ require 'common/abortException'
3
+
4
+ module Bake
5
+
6
+ BUILD_PASSED = 0
7
+ BUILD_FAILED = 1
8
+ BUILD_ABORTED = 2
9
+
10
+ module Blocks
11
+
12
+ ALL_BLOCKS = {}
13
+ ALL_COMPILE_BLOCKS = {}
14
+
15
+ class Block
16
+
17
+ attr_reader :lib_elements, :projectDir, :library, :config
18
+ attr_accessor :visited, :inDeps, :result
19
+
20
+ def preSteps
21
+ @preSteps ||= []
22
+ end
23
+
24
+ def mainSteps
25
+ @mainSteps ||= []
26
+ end
27
+
28
+ def postSteps
29
+ @postSteps ||= []
30
+ end
31
+
32
+ def dependencies
33
+ @dependencies ||= []
34
+ end
35
+
36
+ def set_library(library)
37
+ @library = library
38
+ end
39
+
40
+ def initialize(config, referencedConfigs)
41
+ @inDeps = false
42
+ @visited = false
43
+ @library = nil
44
+ @config = config
45
+ @referencedConfigs = referencedConfigs
46
+ @projectName = config.parent.name
47
+ @configName = config.name
48
+ @projectDir = config.get_project_dir
49
+ @@block_counter = 0
50
+ @result = false
51
+
52
+ @lib_elements = Bake::LibElements.calcLibElements(self)
53
+ end
54
+
55
+ def add_lib_element(elem)
56
+ @lib_elements[2000000000] = [elem]
57
+ end
58
+
59
+ def convPath(dir, elem=nil)
60
+ if dir.respond_to?("name")
61
+ d = dir.name
62
+ elem = dir
63
+ else
64
+ d = dir
65
+ end
66
+
67
+ return d if Bake.options.no_autodir
68
+
69
+ inc = d.split("/")
70
+ if (inc[0] == @projectName)
71
+ res = inc[1..-1].join("/") # within self
72
+ res = "." if res == ""
73
+ elsif @referencedConfigs.include?(inc[0])
74
+ dirOther = @referencedConfigs[inc[0]].first.parent.get_project_dir
75
+ res = File.rel_from_to_project(@projectDir, dirOther, false)
76
+ postfix = inc[1..-1].join("/")
77
+ res = res + "/" + postfix if postfix != ""
78
+ else
79
+ if (inc[0] != "..")
80
+ return d if File.exists?(@projectDir + "/" + d) # e.g. "include"
81
+
82
+ # check if dir exists without Project.meta entry
83
+ Bake.options.roots.each do |r|
84
+ absIncDir = r+"/"+d
85
+ if File.exists?(absIncDir)
86
+ res = File.rel_from_to_project(@projectDir,absIncDir,false)
87
+ if not res.nil?
88
+ return res
89
+ end
90
+ end
91
+ end
92
+ else
93
+ if elem and Bake.options.verboseHigh
94
+ Bake.formatter.printInfo("\"..\" in path name found", elem)
95
+ end
96
+ end
97
+
98
+ res = d # relative from self as last resort
99
+ end
100
+ res
101
+ end
102
+
103
+
104
+ def self.block_counter
105
+ @@block_counter += 1
106
+ end
107
+
108
+ def self.reset_block_counter
109
+ @@block_counter = 0
110
+ end
111
+
112
+ def self.set_num_projects(num)
113
+ @@num_projects = num
114
+ end
115
+
116
+ def executeStep(step, method)
117
+ result = false
118
+ begin
119
+ step.send method
120
+ result = true
121
+ rescue Bake::SystemCommandFailed => scf
122
+ rescue SystemExit => exSys
123
+ ProcessHelper.killProcess(true)
124
+ rescue Exception => ex1
125
+ if not Bake::IDEInterface.instance.get_abort
126
+ Bake.formatter.printError("Error: #{ex1.message}")
127
+ puts ex1.backtrace if Bake.options.debug
128
+ end
129
+ end
130
+
131
+ if Bake::IDEInterface.instance.get_abort
132
+ raise AbortException.new
133
+ end
134
+
135
+ return result
136
+ end
137
+
138
+ def callDeps(method)
139
+ depResult = true
140
+ dependencies.each do |dep|
141
+ depResult = (ALL_BLOCKS[dep].send(method) and depResult)
142
+ break if not depResult and Bake.options.stopOnFirstError
143
+ end
144
+ return depResult
145
+ end
146
+
147
+ def callSteps(method)
148
+ result = true
149
+ preSteps.each do |step|
150
+ result = executeStep(step, method) if result
151
+ return false if not result and Bake.options.stopOnFirstError
152
+ end
153
+
154
+ mainSteps.each do |step|
155
+ result = executeStep(step, method) if result
156
+ return false if not result and Bake.options.stopOnFirstError
157
+ end
158
+
159
+ postSteps.each do |step|
160
+ result = executeStep(step, method) if result
161
+ return false if not result and Bake.options.stopOnFirstError
162
+ end
163
+
164
+ return result
165
+ end
166
+
167
+ def execute
168
+ if (@inDeps)
169
+ if not Bake.options.verboseLow
170
+ Bake.formatter.printWarning("Circular dependency found including project #{@projectName} with config #{@configName}", @config)
171
+ end
172
+ return true
173
+ end
174
+
175
+ return true if (@visited)
176
+ @visited = true
177
+
178
+ @inDeps = true
179
+ depResult = callDeps(:execute)
180
+ @inDeps = false
181
+ return false if not depResult and Bake.options.stopOnFirstError
182
+
183
+ Bake::IDEInterface.instance.set_build_info(@projectName, @configName)
184
+
185
+ if not Bake.options.verboseLow
186
+ Bake.formatter.printAdditionalInfo "**** Building #{Block.block_counter} of #{@@num_projects}: #{@projectName} (#{@configName}) ****"
187
+ end
188
+
189
+ @result = callSteps(:execute)
190
+ return (depResult && result)
191
+ end
192
+
193
+ def clean
194
+ return true if (@visited)
195
+ @visited = true
196
+
197
+ depResult = callDeps(:clean)
198
+ return false if not depResult and Bake.options.stopOnFirstError
199
+
200
+ if Bake.options.verboseHigh
201
+ Bake.formatter.printAdditionalInfo "**** Cleaning #{Block.block_counter} of #{@@num_projects}: #{@projectName} (#{@configName}) ****"
202
+ end
203
+
204
+ @result = callSteps(:clean)
205
+
206
+ if Bake.options.clobber
207
+ Dir.chdir(@projectDir) do
208
+ if File.exist?".bake"
209
+ puts "Deleting folder .bake" if Bake.options.verboseHigh
210
+ FileUtils.rm_rf(".bake")
211
+ end
212
+ end
213
+ end
214
+
215
+ return (depResult && result)
216
+ end
217
+
218
+ end
219
+
220
+
221
+
222
+ end
223
+
224
+
225
+ end
@@ -0,0 +1,155 @@
1
+ module Bake
2
+ module Blocks
3
+
4
+ class BlockBase
5
+
6
+ attr_reader :tcs
7
+
8
+ def initialize(block, config, referencedConfigs, tcs)
9
+ @block = block
10
+ @config = config
11
+ @referencedConfigs = referencedConfigs
12
+ @projectName = config.parent.name
13
+ @projectDir = config.get_project_dir
14
+ @tcs = tcs
15
+ @config_date = Time.now
16
+
17
+ @printedCmdAlternate = false
18
+ @lastCommand = nil
19
+
20
+ calcOutputDir
21
+ end
22
+
23
+ def check_config_file()
24
+ if File.exists?(@config.file_name) and File.mtime(@config.file_name) > @config_date
25
+ begin
26
+ FileUtils.touch(@config.file_name)
27
+ rescue Exception=>e
28
+ if Bake.options.verboseHigh
29
+ Bake.formatter.printWarning("Could not touch #{@config.file_name}: #{e.message}", @config.file_name)
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def prepareOutput(filename)
36
+ begin
37
+ if File.exists?(filename)
38
+ FileUtils.rm(filename)
39
+ else
40
+ FileUtils.mkdir_p(File.dirname(filename))
41
+ end
42
+ rescue Exception => e
43
+ if Bake.options.debug
44
+ puts e.message
45
+ puts e.backtrace
46
+ end
47
+ end
48
+ end
49
+
50
+ def calcOutputDir
51
+ if @tcs[:OUTPUT_DIR] != nil
52
+ p = @block.convPath(@tcs[:OUTPUT_DIR])
53
+ @output_dir = p
54
+ elsif @projectName == Bake.options.main_project_name and @config.name == Bake.options.build_config
55
+ @output_dir = Bake.options.build_config
56
+ else
57
+ @output_dir = @config.name + "_" + Bake.options.main_project_name + "_" + Bake.options.build_config
58
+ end
59
+ end
60
+
61
+ def printCmd(cmd, alternate, reason, forceVerbose)
62
+
63
+ if (cmd == @lastCommand)
64
+ if (Bake.options.verboseHigh or (@printedCmdAlternate and not forceVerbose))
65
+ return
66
+ end
67
+ end
68
+
69
+ @lastCommand = cmd
70
+
71
+ return if Bake.options.verboseLow and not forceVerbose
72
+
73
+ if forceVerbose or Bake.options.verboseHigh or not alternate
74
+ @printedCmdAlternate = false
75
+ if Bake.options.verboseHigh
76
+ puts "" # for A.K. :-)
77
+ exedIn = "\n(executed in '#{@projectDir}')"
78
+ because = reason ? "\n(#{reason})" : ""
79
+ else
80
+ exedIn = ""
81
+ because = ""
82
+ end
83
+
84
+ if cmd.is_a?(Array)
85
+ puts cmd.join(' ') + exedIn + because
86
+ else
87
+ puts cmd + exedIn + because
88
+ end
89
+ else
90
+ @printedCmdAlternate = true
91
+ puts alternate
92
+ end
93
+
94
+ end
95
+
96
+ def process_console_output(console_output, error_parser)
97
+ ret = false
98
+ if not console_output.empty?
99
+ if error_parser
100
+ begin
101
+ error_descs, console_output_full = error_parser.scan_lines(console_output, @projectDir)
102
+
103
+ console_output = console_output_full if Bake.options.consoleOutput_fullnames
104
+
105
+ if Bake.options.consoleOutput_visualStudio
106
+ console_output_VS = ""
107
+ descCounter = 0
108
+ console_output.each_line do |l|
109
+ d = error_descs[descCounter]
110
+ console_output_VS << error_parser.makeVsError(l.rstrip, d) << "\n"
111
+ descCounter = descCounter + 1
112
+ end
113
+ console_output = console_output_VS
114
+ end
115
+
116
+ if Bake.options.lint
117
+ ret = error_descs.any? { |e| e.severity != ErrorParser::SEVERITY_OK }
118
+ else
119
+ ret = error_descs.any? { |e| e.severity == ErrorParser::SEVERITY_ERROR }
120
+ end
121
+
122
+ console_output.gsub!(/[\r]/, "")
123
+ Bake.formatter.format(console_output, error_descs, error_parser)
124
+
125
+ Bake::IDEInterface.instance.set_errors(error_descs)
126
+ rescue Exception => e
127
+ Bake.formatter.printWarning("Parsing output failed (maybe language not set to English?): " + e.message)
128
+ Bake.formatter.printWarning("Original output:")
129
+ Bake.formatter.printWarning(console_output)
130
+ raise e
131
+ end
132
+ else
133
+ puts console_output # fallback
134
+ end
135
+ end
136
+ ret
137
+ end
138
+
139
+ def process_result(cmd, console_output, error_parser, alternate, reason, success)
140
+ hasError = (success == false)
141
+ printCmd(cmd, alternate, reason, (hasError and not Bake.options.lint))
142
+ errorPrinted = process_console_output(console_output, error_parser)
143
+
144
+ if hasError and not errorPrinted
145
+ Bake.formatter.printError("System command failed", @projectDir)
146
+ end
147
+ if hasError or errorPrinted
148
+ raise SystemCommandFailed.new
149
+ end
150
+ end
151
+
152
+ end
153
+
154
+ end
155
+ end