bake-toolkit 2.44.0 → 2.44.1

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: 3661ce41b15cb95daa7e30356c5436621bb9b9d8
4
- data.tar.gz: 58ada38722104cc9f3a83348fa839428ffadc648
3
+ metadata.gz: 63594dff72adc9e2399d3e5b3e61c10cfa428937
4
+ data.tar.gz: b5ac0b63c555016846e26bb62db52e609d70db63
5
5
  SHA512:
6
- metadata.gz: 5a95bb26915962630ba32e6693cfb7caa611b7ff3f729f8993d5c882a51587486ffbbe8be2e6ad90aaebf86b67a9ef78ee52ddde5827720ff17f43f5bab14173
7
- data.tar.gz: 75f577c43f0d7ffc103e425cd33d86965bf8ad138c0c5697a2e4adb85731b064f7b6aaf45567969b1bc43f96d529eaec8759b3069deee35b3f7103a0a63c26ca
6
+ metadata.gz: 75df6bc8056a67e5250a0600149f9fcd356d86a51c20ecf0868f266062f918d0b8738d5703f8e4f506a6d4013174bc4fac0aaf7de53886200e863ccb01780646
7
+ data.tar.gz: d728f32ae07a50f727d93b8c9842c2d43c0bf2460d78908cc3abb370d69c8d25e687ab0ce1e0fb2f7a1b27aaa2c1cf76016dac171cfd98ccd41712e970e989d0
@@ -1,393 +1,393 @@
1
- require 'bake/model/loader'
2
- require 'bake/config/checks'
3
- require 'adapt/config/loader'
4
-
5
- module Bake
6
-
7
- class Config
8
- attr_reader :referencedConfigs
9
-
10
- def initialize()
11
- @fullProjects = {}
12
- @defaultToolchainName = ""
13
- @mainProjectName = ""
14
- @mainConfigName = ""
15
- end
16
-
17
- def resolveConfigName(configs, configname)
18
- if (configname == "")
19
- if configs[0].parent.default != ""
20
- configname = configs[0].parent.default
21
- else
22
- Bake.formatter.printError("No default config specified", configs[0].file_name)
23
- ExitHelper.exit(1)
24
- end
25
- end
26
- return configname
27
- end
28
-
29
- def getFullProjectInternal(configs, configname, isMain) # note: configs is never empty
30
-
31
- configname = resolveConfigName(configs, configname)
32
-
33
- if isMain
34
- if Bake.options.qac
35
- configs.each do |c|
36
- if c.name == (configname + "Qac")
37
- configname = configname + "Qac"
38
- break
39
- end
40
- end
41
- end
42
- end
43
-
44
- config = nil
45
- configs.each do |c|
46
- if c.name == configname
47
- if config
48
- Bake.formatter.printError("Config '#{configname}' found more than once",config.file_name)
49
- ExitHelper.exit(1)
50
- end
51
- config = c
52
- end
53
- end
54
-
55
- if not config
56
- Bake.formatter.printError("Config '#{configname}' not found", configs[0].file_name)
57
- ExitHelper.exit(1)
58
- end
59
-
60
- if config.extends != ""
61
- config.extends.split(",").map {|ex| ex.strip}.reverse.each do |ex|
62
- if (ex != "")
63
- parent,parentConfigName = getFullProjectInternal(configs, ex, isMain)
64
- MergeConfig.new(config, parent).merge(:merge)
65
- end
66
- end
67
- end
68
-
69
- [config, configname]
70
- end
71
-
72
- def getFullProject(projName, configs, configname, isMain)
73
-
74
- configname = resolveConfigName(configs, configname)
75
-
76
- if @fullProjects.has_key?(projName + "," + configname)
77
- return @fullProjects[projName + "," + configname]
78
- end
79
-
80
- config, configname = getFullProjectInternal(configs, configname, isMain)
81
-
82
- if isMain
83
- @defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
84
- @mainProjectName = config.parent.name
85
- @mainConfigName = config.name
86
- end
87
-
88
- # check if config has to be manipulated
89
- @adaptConfigs.each do |c|
90
-
91
- if isMain
92
- @defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
93
- @mainProjectName = config.parent.name
94
- @mainConfigName = config.name
95
- end
96
-
97
- projPattern = /\A#{c.project.gsub("*", "(\\w*)")}\z/
98
- confPattern = /\A#{c.name.gsub("*", "(\\w*)")}\z/
99
-
100
- if projPattern.match(config.parent.name) or (isMain and c.project == "__MAIN__") or c.project == "__ALL__"
101
- if confPattern.match(config.name) or (isMain and c.name == "__MAIN__") or c.name == "__ALL__"
102
-
103
- conditionProjPattern = /\A#{c.parent.mainProject.gsub("*", "(\\w*)")}\z/
104
- conditionConfPattern = /\A#{c.parent.mainConfig.gsub("*", "(\\w*)")}\z/
105
-
106
- adaptCondition = (c.parent.toolchain == "" || c.parent.toolchain == @defaultToolchainName) &&
107
- (c.parent.os == "" || c.parent.os == Utils::OS.name) &&
108
- (c.parent.mainProject == "" || !conditionProjPattern.match(@mainProjectName).nil?) &&
109
- (c.parent.mainConfig == "" || !conditionConfPattern.match(@mainConfigName).nil?)
110
-
111
- invertLogic = (Bake::Metamodel::Unless === c.parent)
112
- next if (adaptCondition && invertLogic) || (!adaptCondition && !invertLogic)
113
-
114
- MergeConfig.new(c, config).merge(c.type.to_sym)
115
-
116
- if isMain # can be changed after adapt
117
- @defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
118
- end
119
-
120
- end
121
- end
122
- end
123
-
124
- @fullProjects[projName + "," + configname] = [config, configname]
125
- [config, configname]
126
- end
127
-
128
- def symlinkCheck(filename)
129
- dirOfProjMeta = File.dirname(filename)
130
- Dir.chdir(dirOfProjMeta) do
131
- if Dir.pwd != dirOfProjMeta and File.dirname(Dir.pwd) != File.dirname(dirOfProjMeta)
132
- isSym = false
133
- begin
134
- isSym = File.symlink?(dirOfProjMeta)
135
- rescue
136
- end
137
- if isSym
138
- Bake.formatter.printError("Symlinks only allowed with the same parent dir as the target: #{dirOfProjMeta} --> #{Dir.pwd}", filename)
139
- ExitHelper.exit(1)
140
- end
141
- end
142
- end
143
- end
144
-
145
- def checkVerFormat(ver)
146
- return true if ver.empty?
147
- return false if ver.length > 3
148
- ver.each do |v|
149
- return false if not /\A\d+\z/.match(v)
150
- end
151
- true
152
- end
153
-
154
- def bailOutVer(reqVersion)
155
- text1 = (reqVersion.minimum.empty? ? "" : "minimum = #{reqVersion.minimum}")
156
- text2 = ((reqVersion.minimum.empty? or reqVersion.maximum.empty?) ? "" : ", ")
157
- text3 = (reqVersion.maximum.empty? ? "" : "maximum = #{reqVersion.maximum}")
158
- Bake.formatter.printError("Not compatible with installed bake version: #{text1 + text2 + text3}", reqVersion)
159
- ExitHelper.exit(1)
160
- end
161
-
162
- def checkVer(reqVersion)
163
- return if reqVersion.nil?
164
- min = reqVersion.minimum.split(".")
165
- max = reqVersion.maximum.split(".")
166
- cur = Bake::Version.number.split(".")
167
-
168
- if !checkVerFormat(min) or !checkVerFormat(max)
169
- Bake.formatter.printError("Version must be <major>.<minor>.<patch> whereas minor and patch are optional and all numbers >= 0.", reqVersion)
170
- ExitHelper.exit(1)
171
- end
172
-
173
- [min,max,cur].each { |arr| arr.map! {|x| x.to_i} }
174
- min.each_with_index do |v,i|
175
- break if v < cur[i]
176
- bailOutVer(reqVersion) if v > cur[i]
177
- end
178
- max.each_with_index do |v,i|
179
- break if v > cur[i]
180
- bailOutVer(reqVersion) if v < cur[i]
181
- end
182
- end
183
-
184
- def loadProjMeta(filename)
185
-
186
- Bake::Configs::Checks.symlinkCheck(filename)
187
-
188
- f = @loader.load(filename)
189
-
190
- config = nil
191
-
192
- projRoots = f.root_elements.select { |re| Metamodel::Project === re }
193
- if projRoots.length != 1
194
- Bake.formatter.printError("Config file must have exactly one 'Project' element as root element", filename)
195
- ExitHelper.exit(1)
196
- end
197
- proj = projRoots[0]
198
-
199
- reqVersion = proj.getRequiredBakeVersion
200
- checkVer(reqVersion)
201
-
202
- configs = proj.getConfig
203
- Bake::Configs::Checks::commonMetamodelCheck(configs, filename)
204
-
205
- configs.each do |c|
206
- if not c.project.empty?
207
- Bake.formatter.printError("Attribute 'project' must only be used in adapt config.",c)
208
- ExitHelper.exit(1)
209
- end
210
- if not c.type.empty?
211
- Bake.formatter.printError("Attribute 'type' must only be used in adapt config.",c)
212
- ExitHelper.exit(1)
213
- end
214
- end
215
-
216
- adaptRoots = f.root_elements.select { |re| Metamodel::Adapt === re }
217
- if adaptRoots.length > 0
218
- adaptRoots.each do |adapt|
219
- adapt.mainProject = @mainProjectName if adapt.mainProject == "__THIS__"
220
- adaptConfigs = adapt.getConfig
221
- AdaptConfig.checkSyntax(adaptConfigs, filename, true)
222
- adaptConfigs.each do |ac|
223
- ac.project = proj.name if ac.project == "__THIS__" || ac.project == ""
224
- end
225
- @adaptConfigs.concat(adaptConfigs)
226
- end
227
- end
228
-
229
- configs
230
- end
231
-
232
-
233
- def validateDependencies(config)
234
- config.dependency.each do |dep|
235
- if dep.name.include?"$" or dep.config.include?"$"
236
- Bake.formatter.printError("No variables allowed in Dependency definition", dep)
237
- ExitHelper.exit(1)
238
- end
239
- dep.name = config.parent.name if dep.name == ""
240
- end
241
- end
242
-
243
- def loadMeta(dep)
244
- dep_subbed = dep.name.gsub(/\\/,"/")
245
- if dep_subbed.include?":" or dep_subbed.include?"../" or dep_subbed.start_with?"/" or dep_subbed.end_with?"/"
246
- Bake.formatter.printError("#{dep.name} is invalid", dep)
247
- ExitHelper.exit(1)
248
- end
249
- dep_path, dismiss, dep_name = dep_subbed.rpartition("/")
250
-
251
- # file not loaded yet
252
- if not @loadedConfigs.include?dep_name
253
-
254
- if Bake.options.verbose >= 3
255
- puts "First referenced by #{dep.parent.parent.name} (#{dep.parent.name}):"
256
- end
257
-
258
- pmeta_filenames = []
259
-
260
- @potentialProjs.each do |pp|
261
- if pp.include?("/" + dep_subbed + "/Project.meta") or pp == (dep_subbed + "/Project.meta")
262
- pmeta_filenames << pp
263
- end
264
- end
265
-
266
- if pmeta_filenames.empty?
267
- Bake.formatter.printError("#{dep.name}/Project.meta not found", dep)
268
- ExitHelper.exit(1)
269
- end
270
-
271
- if pmeta_filenames.length > 1
272
- Bake.formatter.printWarning("Project #{dep.name} exists more than once", dep)
273
- chosen = " (chosen)"
274
- pmeta_filenames.each do |f|
275
- Bake.formatter.printWarning(" #{File.dirname(f)}#{chosen}")
276
- chosen = ""
277
- end
278
- end
279
-
280
- @loadedConfigs[dep_name] = loadProjMeta(pmeta_filenames[0])
281
- else
282
- folder = @loadedConfigs[dep_name][0].get_project_dir
283
- if not folder.include?dep_subbed
284
- Bake.formatter.printError("Cannot load #{dep.name}, because #{folder} already loaded", dep)
285
- ExitHelper.exit(1)
286
- end
287
-
288
- end
289
- # get config
290
- if Bake.options.verbose >= 3
291
- puts " #{dep_name} #{dep.config.empty? ? "<default>" : "("+dep.config+")"} referenced by #{dep.parent.parent.name} (#{dep.parent.name})"
292
- end
293
- config, dep.config = getFullProject(dep_name, @loadedConfigs[dep_name], dep.config, false)
294
- dep.name = dep_name
295
-
296
- # config not referenced yet
297
- if not @referencedConfigs.include?dep_name
298
- @referencedConfigs[dep_name] = [config]
299
- elsif @referencedConfigs[dep_name].index { |c| c.name == dep.config } == nil
300
- @referencedConfigs[dep_name] << config
301
- else
302
- return
303
- end
304
-
305
- validateDependencies(config)
306
- @depsPending += config.dependency
307
- end
308
-
309
- def loadMainMeta()
310
- mainMeta = Bake.options.main_dir+"/Project.meta"
311
- configs = loadProjMeta(mainMeta)
312
- @loadedConfigs = {}
313
- @loadedConfigs[Bake.options.main_project_name] = configs
314
-
315
- if not showConfigNames?
316
- config, Bake.options.build_config = getFullProject(Bake.options.main_project_name, configs,Bake.options.build_config, true)
317
-
318
- @referencedConfigs = {}
319
- @referencedConfigs[Bake.options.main_project_name] = [config]
320
-
321
- validateDependencies(config)
322
- @depsPending = config.dependency
323
-
324
- if Bake.options.build_config != "" and config.defaultToolchain == nil
325
- Bake.formatter.printError("Main project configuration must contain DefaultToolchain", config)
326
- ExitHelper.exit(1)
327
- end
328
- end
329
-
330
- end
331
-
332
- def checkRoots()
333
- @potentialProjs = []
334
- Bake.options.roots.each do |root|
335
- r = root.dir
336
- if (r.length == 3 && r.include?(":/"))
337
- r = r + Bake.options.main_project_name # glob would not work otherwise on windows (ruby bug?)
338
- end
339
- depthStr = root.depth.nil? ? "max" : root.depth.to_s
340
- puts "Checking root #{r} (depth: #{depthStr})" if Bake.options.verbose >= 1
341
- @potentialProjs.concat(Root.search_to_depth(r, "Project.meta", root.depth))
342
- end
343
- @potentialProjs.uniq!
344
- end
345
-
346
- def defaultConfigName
347
- @loadedConfigs[Bake.options.main_project_name].first.parent.default
348
- end
349
-
350
- def showConfigNames?
351
- Bake.options.showConfigs or (Bake.options.build_config == "" and defaultConfigName == "")
352
- end
353
-
354
- def printConfigNames
355
- mainConfigName = Bake.options.build_config != "" ? Bake.options.build_config : defaultConfigName
356
- configs = @loadedConfigs[Bake.options.main_project_name]
357
- foundValidConfig = false
358
- configs.each do |c|
359
- config, tmp = getFullProject(Bake.options.main_project_name, configs, c.name, c.name == mainConfigName)
360
- next if config.defaultToolchain.nil?
361
- Kernel.print "* #{config.name}"
362
- Kernel.print " (default)" if config.name == defaultConfigName
363
- Kernel.print ": #{config.description.text}" if config.description
364
- Kernel.print "\n"
365
- foundValidConfig = true
366
- end
367
-
368
- Bake.formatter.printWarning("No configuration with a DefaultToolchain found", Bake.options.main_dir+"/Project.meta") unless foundValidConfig
369
- ExitHelper.exit(0)
370
- end
371
-
372
- def printConfigs(adaptConfigs)
373
- @adaptConfigs = adaptConfigs
374
- @loader = Loader.new
375
- loadMainMeta # note.in cache only needed configs are stored
376
- printConfigNames
377
- end
378
-
379
- def load(adaptConfigs)
380
- @adaptConfigs = adaptConfigs
381
- @loader = Loader.new
382
- loadMainMeta
383
- printConfigNames if showConfigNames? # if neither config name nor default is set, list the configs with DefaultToolchain
384
- checkRoots
385
- while dep = @depsPending.shift
386
- loadMeta(dep)
387
- end
388
-
389
- return @referencedConfigs
390
- end
391
-
392
- end
393
- end
1
+ require 'bake/model/loader'
2
+ require 'bake/config/checks'
3
+ require 'adapt/config/loader'
4
+
5
+ module Bake
6
+
7
+ class Config
8
+ attr_reader :referencedConfigs
9
+
10
+ def initialize()
11
+ @fullProjects = {}
12
+ @defaultToolchainName = ""
13
+ @mainProjectName = ""
14
+ @mainConfigName = ""
15
+ end
16
+
17
+ def resolveConfigName(configs, configname)
18
+ if (configname == "")
19
+ if configs[0].parent.default != ""
20
+ configname = configs[0].parent.default
21
+ else
22
+ Bake.formatter.printError("No default config specified", configs[0].file_name)
23
+ ExitHelper.exit(1)
24
+ end
25
+ end
26
+ return configname
27
+ end
28
+
29
+ def getFullProjectInternal(configs, configname, isMain) # note: configs is never empty
30
+
31
+ configname = resolveConfigName(configs, configname)
32
+
33
+ if isMain
34
+ if Bake.options.qac
35
+ configs.each do |c|
36
+ if c.name == (configname + "Qac")
37
+ configname = configname + "Qac"
38
+ break
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ config = nil
45
+ configs.each do |c|
46
+ if c.name == configname
47
+ if config
48
+ Bake.formatter.printError("Config '#{configname}' found more than once",config.file_name)
49
+ ExitHelper.exit(1)
50
+ end
51
+ config = c
52
+ end
53
+ end
54
+
55
+ if not config
56
+ Bake.formatter.printError("Config '#{configname}' not found", configs[0].file_name)
57
+ ExitHelper.exit(1)
58
+ end
59
+
60
+ if config.extends != ""
61
+ config.extends.split(",").map {|ex| ex.strip}.reverse.each do |ex|
62
+ if (ex != "")
63
+ parent,parentConfigName = getFullProjectInternal(configs, ex, isMain)
64
+ MergeConfig.new(config, parent).merge(:merge)
65
+ end
66
+ end
67
+ end
68
+
69
+ [config, configname]
70
+ end
71
+
72
+ def getFullProject(projName, configs, configname, isMain)
73
+
74
+ configname = resolveConfigName(configs, configname)
75
+
76
+ if @fullProjects.has_key?(projName + "," + configname)
77
+ return @fullProjects[projName + "," + configname]
78
+ end
79
+
80
+ config, configname = getFullProjectInternal(configs, configname, isMain)
81
+
82
+ if isMain
83
+ @defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
84
+ @mainProjectName = config.parent.name
85
+ @mainConfigName = config.name
86
+ end
87
+
88
+ # check if config has to be manipulated
89
+ @adaptConfigs.each do |c|
90
+
91
+ if isMain
92
+ @defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
93
+ @mainProjectName = config.parent.name
94
+ @mainConfigName = config.name
95
+ end
96
+
97
+ projPattern = /\A#{c.project.gsub("*", "(\\w*)")}\z/
98
+ confPattern = /\A#{c.name.gsub("*", "(\\w*)")}\z/
99
+
100
+ if projPattern.match(config.parent.name) or (projName == Bake.options.main_project_name and c.project == "__MAIN__") or c.project == "__ALL__"
101
+ if confPattern.match(config.name) or (isMain and c.name == "__MAIN__") or c.name == "__ALL__"
102
+
103
+ conditionProjPattern = /\A#{c.parent.mainProject.gsub("*", "(\\w*)")}\z/
104
+ conditionConfPattern = /\A#{c.parent.mainConfig.gsub("*", "(\\w*)")}\z/
105
+
106
+ adaptCondition = (c.parent.toolchain == "" || c.parent.toolchain == @defaultToolchainName) &&
107
+ (c.parent.os == "" || c.parent.os == Utils::OS.name) &&
108
+ (c.parent.mainProject == "" || !conditionProjPattern.match(@mainProjectName).nil?) &&
109
+ (c.parent.mainConfig == "" || !conditionConfPattern.match(@mainConfigName).nil?)
110
+
111
+ invertLogic = (Bake::Metamodel::Unless === c.parent)
112
+ next if (adaptCondition && invertLogic) || (!adaptCondition && !invertLogic)
113
+
114
+ MergeConfig.new(c, config).merge(c.type.to_sym)
115
+
116
+ if isMain # can be changed after adapt
117
+ @defaultToolchainName = config.defaultToolchain.basedOn unless config.defaultToolchain.nil?
118
+ end
119
+
120
+ end
121
+ end
122
+ end
123
+
124
+ @fullProjects[projName + "," + configname] = [config, configname]
125
+ [config, configname]
126
+ end
127
+
128
+ def symlinkCheck(filename)
129
+ dirOfProjMeta = File.dirname(filename)
130
+ Dir.chdir(dirOfProjMeta) do
131
+ if Dir.pwd != dirOfProjMeta and File.dirname(Dir.pwd) != File.dirname(dirOfProjMeta)
132
+ isSym = false
133
+ begin
134
+ isSym = File.symlink?(dirOfProjMeta)
135
+ rescue
136
+ end
137
+ if isSym
138
+ Bake.formatter.printError("Symlinks only allowed with the same parent dir as the target: #{dirOfProjMeta} --> #{Dir.pwd}", filename)
139
+ ExitHelper.exit(1)
140
+ end
141
+ end
142
+ end
143
+ end
144
+
145
+ def checkVerFormat(ver)
146
+ return true if ver.empty?
147
+ return false if ver.length > 3
148
+ ver.each do |v|
149
+ return false if not /\A\d+\z/.match(v)
150
+ end
151
+ true
152
+ end
153
+
154
+ def bailOutVer(reqVersion)
155
+ text1 = (reqVersion.minimum.empty? ? "" : "minimum = #{reqVersion.minimum}")
156
+ text2 = ((reqVersion.minimum.empty? or reqVersion.maximum.empty?) ? "" : ", ")
157
+ text3 = (reqVersion.maximum.empty? ? "" : "maximum = #{reqVersion.maximum}")
158
+ Bake.formatter.printError("Not compatible with installed bake version: #{text1 + text2 + text3}", reqVersion)
159
+ ExitHelper.exit(1)
160
+ end
161
+
162
+ def checkVer(reqVersion)
163
+ return if reqVersion.nil?
164
+ min = reqVersion.minimum.split(".")
165
+ max = reqVersion.maximum.split(".")
166
+ cur = Bake::Version.number.split(".")
167
+
168
+ if !checkVerFormat(min) or !checkVerFormat(max)
169
+ Bake.formatter.printError("Version must be <major>.<minor>.<patch> whereas minor and patch are optional and all numbers >= 0.", reqVersion)
170
+ ExitHelper.exit(1)
171
+ end
172
+
173
+ [min,max,cur].each { |arr| arr.map! {|x| x.to_i} }
174
+ min.each_with_index do |v,i|
175
+ break if v < cur[i]
176
+ bailOutVer(reqVersion) if v > cur[i]
177
+ end
178
+ max.each_with_index do |v,i|
179
+ break if v > cur[i]
180
+ bailOutVer(reqVersion) if v < cur[i]
181
+ end
182
+ end
183
+
184
+ def loadProjMeta(filename)
185
+
186
+ Bake::Configs::Checks.symlinkCheck(filename)
187
+
188
+ f = @loader.load(filename)
189
+
190
+ config = nil
191
+
192
+ projRoots = f.root_elements.select { |re| Metamodel::Project === re }
193
+ if projRoots.length != 1
194
+ Bake.formatter.printError("Config file must have exactly one 'Project' element as root element", filename)
195
+ ExitHelper.exit(1)
196
+ end
197
+ proj = projRoots[0]
198
+
199
+ reqVersion = proj.getRequiredBakeVersion
200
+ checkVer(reqVersion)
201
+
202
+ configs = proj.getConfig
203
+ Bake::Configs::Checks::commonMetamodelCheck(configs, filename)
204
+
205
+ configs.each do |c|
206
+ if not c.project.empty?
207
+ Bake.formatter.printError("Attribute 'project' must only be used in adapt config.",c)
208
+ ExitHelper.exit(1)
209
+ end
210
+ if not c.type.empty?
211
+ Bake.formatter.printError("Attribute 'type' must only be used in adapt config.",c)
212
+ ExitHelper.exit(1)
213
+ end
214
+ end
215
+
216
+ adaptRoots = f.root_elements.select { |re| Metamodel::Adapt === re }
217
+ if adaptRoots.length > 0
218
+ adaptRoots.each do |adapt|
219
+ adapt.mainProject = @mainProjectName if adapt.mainProject == "__THIS__"
220
+ adaptConfigs = adapt.getConfig
221
+ AdaptConfig.checkSyntax(adaptConfigs, filename, true)
222
+ adaptConfigs.each do |ac|
223
+ ac.project = proj.name if ac.project == "__THIS__" || ac.project == ""
224
+ end
225
+ @adaptConfigs.concat(adaptConfigs)
226
+ end
227
+ end
228
+
229
+ configs
230
+ end
231
+
232
+
233
+ def validateDependencies(config)
234
+ config.dependency.each do |dep|
235
+ if dep.name.include?"$" or dep.config.include?"$"
236
+ Bake.formatter.printError("No variables allowed in Dependency definition", dep)
237
+ ExitHelper.exit(1)
238
+ end
239
+ dep.name = config.parent.name if dep.name == ""
240
+ end
241
+ end
242
+
243
+ def loadMeta(dep)
244
+ dep_subbed = dep.name.gsub(/\\/,"/")
245
+ if dep_subbed.include?":" or dep_subbed.include?"../" or dep_subbed.start_with?"/" or dep_subbed.end_with?"/"
246
+ Bake.formatter.printError("#{dep.name} is invalid", dep)
247
+ ExitHelper.exit(1)
248
+ end
249
+ dep_path, dismiss, dep_name = dep_subbed.rpartition("/")
250
+
251
+ # file not loaded yet
252
+ if not @loadedConfigs.include?dep_name
253
+
254
+ if Bake.options.verbose >= 3
255
+ puts "First referenced by #{dep.parent.parent.name} (#{dep.parent.name}):"
256
+ end
257
+
258
+ pmeta_filenames = []
259
+
260
+ @potentialProjs.each do |pp|
261
+ if pp.include?("/" + dep_subbed + "/Project.meta") or pp == (dep_subbed + "/Project.meta")
262
+ pmeta_filenames << pp
263
+ end
264
+ end
265
+
266
+ if pmeta_filenames.empty?
267
+ Bake.formatter.printError("#{dep.name}/Project.meta not found", dep)
268
+ ExitHelper.exit(1)
269
+ end
270
+
271
+ if pmeta_filenames.length > 1
272
+ Bake.formatter.printWarning("Project #{dep.name} exists more than once", dep)
273
+ chosen = " (chosen)"
274
+ pmeta_filenames.each do |f|
275
+ Bake.formatter.printWarning(" #{File.dirname(f)}#{chosen}")
276
+ chosen = ""
277
+ end
278
+ end
279
+
280
+ @loadedConfigs[dep_name] = loadProjMeta(pmeta_filenames[0])
281
+ else
282
+ folder = @loadedConfigs[dep_name][0].get_project_dir
283
+ if not folder.include?dep_subbed
284
+ Bake.formatter.printError("Cannot load #{dep.name}, because #{folder} already loaded", dep)
285
+ ExitHelper.exit(1)
286
+ end
287
+
288
+ end
289
+ # get config
290
+ if Bake.options.verbose >= 3
291
+ puts " #{dep_name} #{dep.config.empty? ? "<default>" : "("+dep.config+")"} referenced by #{dep.parent.parent.name} (#{dep.parent.name})"
292
+ end
293
+ config, dep.config = getFullProject(dep_name, @loadedConfigs[dep_name], dep.config, false)
294
+ dep.name = dep_name
295
+
296
+ # config not referenced yet
297
+ if not @referencedConfigs.include?dep_name
298
+ @referencedConfigs[dep_name] = [config]
299
+ elsif @referencedConfigs[dep_name].index { |c| c.name == dep.config } == nil
300
+ @referencedConfigs[dep_name] << config
301
+ else
302
+ return
303
+ end
304
+
305
+ validateDependencies(config)
306
+ @depsPending += config.dependency
307
+ end
308
+
309
+ def loadMainMeta()
310
+ mainMeta = Bake.options.main_dir+"/Project.meta"
311
+ configs = loadProjMeta(mainMeta)
312
+ @loadedConfigs = {}
313
+ @loadedConfigs[Bake.options.main_project_name] = configs
314
+
315
+ if not showConfigNames?
316
+ config, Bake.options.build_config = getFullProject(Bake.options.main_project_name, configs,Bake.options.build_config, true)
317
+
318
+ @referencedConfigs = {}
319
+ @referencedConfigs[Bake.options.main_project_name] = [config]
320
+
321
+ validateDependencies(config)
322
+ @depsPending = config.dependency
323
+
324
+ if Bake.options.build_config != "" and config.defaultToolchain == nil
325
+ Bake.formatter.printError("Main project configuration must contain DefaultToolchain", config)
326
+ ExitHelper.exit(1)
327
+ end
328
+ end
329
+
330
+ end
331
+
332
+ def checkRoots()
333
+ @potentialProjs = []
334
+ Bake.options.roots.each do |root|
335
+ r = root.dir
336
+ if (r.length == 3 && r.include?(":/"))
337
+ r = r + Bake.options.main_project_name # glob would not work otherwise on windows (ruby bug?)
338
+ end
339
+ depthStr = root.depth.nil? ? "max" : root.depth.to_s
340
+ puts "Checking root #{r} (depth: #{depthStr})" if Bake.options.verbose >= 1
341
+ @potentialProjs.concat(Root.search_to_depth(r, "Project.meta", root.depth))
342
+ end
343
+ @potentialProjs.uniq!
344
+ end
345
+
346
+ def defaultConfigName
347
+ @loadedConfigs[Bake.options.main_project_name].first.parent.default
348
+ end
349
+
350
+ def showConfigNames?
351
+ Bake.options.showConfigs or (Bake.options.build_config == "" and defaultConfigName == "")
352
+ end
353
+
354
+ def printConfigNames
355
+ mainConfigName = Bake.options.build_config != "" ? Bake.options.build_config : defaultConfigName
356
+ configs = @loadedConfigs[Bake.options.main_project_name]
357
+ foundValidConfig = false
358
+ configs.each do |c|
359
+ config, tmp = getFullProject(Bake.options.main_project_name, configs, c.name, c.name == mainConfigName)
360
+ next if config.defaultToolchain.nil?
361
+ Kernel.print "* #{config.name}"
362
+ Kernel.print " (default)" if config.name == defaultConfigName
363
+ Kernel.print ": #{config.description.text}" if config.description
364
+ Kernel.print "\n"
365
+ foundValidConfig = true
366
+ end
367
+
368
+ Bake.formatter.printWarning("No configuration with a DefaultToolchain found", Bake.options.main_dir+"/Project.meta") unless foundValidConfig
369
+ ExitHelper.exit(0)
370
+ end
371
+
372
+ def printConfigs(adaptConfigs)
373
+ @adaptConfigs = adaptConfigs
374
+ @loader = Loader.new
375
+ loadMainMeta # note.in cache only needed configs are stored
376
+ printConfigNames
377
+ end
378
+
379
+ def load(adaptConfigs)
380
+ @adaptConfigs = adaptConfigs
381
+ @loader = Loader.new
382
+ loadMainMeta
383
+ printConfigNames if showConfigNames? # if neither config name nor default is set, list the configs with DefaultToolchain
384
+ checkRoots
385
+ while dep = @depsPending.shift
386
+ loadMeta(dep)
387
+ end
388
+
389
+ return @referencedConfigs
390
+ end
391
+
392
+ end
393
+ end
@@ -148,7 +148,7 @@ module Bake
148
148
 
149
149
  add_option(["--version" ], lambda { Bake::Usage.version })
150
150
  add_option(["--list", "--show_configs" ], lambda { @showConfigs = true })
151
- add_option(["--compilation-db" ], lambda { |x,dummy| @cc2j_filename = (x ? x : "compilation-db.json" )})
151
+ add_option(["--compilation-db" ], lambda { |x,dummy| @cc2j_filename = (x ? x : "compile_commands.json" )})
152
152
  add_option(["--link-2-17", "--link_2_17" ], lambda { @oldLinkOrder = true })
153
153
  add_option(["--build_", ], lambda { @buildDirDelimiter = "_" })
154
154
 
@@ -55,7 +55,7 @@ module Bake
55
55
  puts " --file-list Writes all sources and headers used by a SINGLE config into '<config output folder>/file-list.txt'."
56
56
  puts " Writes all sources and headers used by ALL configs into '<main config output folder/global-file-list.txt'."
57
57
  puts " --prebuild Does not build configs which are marked as 'prebuild', this feature is used for distributions."
58
- puts " --compilation-db [<fn>] Writes compilation information into filename fn in json format, default for fn is compilation-db.json"
58
+ puts " --compilation-db [<fn>] Writes compilation information into filename fn in json format, default for fn is compile_commands.json"
59
59
  puts " --create exe|lib|custom Creates a project with exe, lib or custom template"
60
60
  puts " --nb Suppresses the lines \"**** Building x of y: name (config) ****"
61
61
  puts " --crc32 <string> Calulates the CRC32 of string (0x4C11DB7, init 0, final xor 0, input and result not reflected), used for Uid variable calculation"
@@ -237,7 +237,12 @@ module Bake
237
237
 
238
238
  if Bake.options.cc2j_filename
239
239
  cmdJson = cmd.is_a?(Array) ? cmd.join(' ') : cmd
240
- Blocks::CC2J << { :directory => @projectDir, :command => cmdJson, :file => source }
240
+ srcFilePath = source
241
+ if Bake.options.consoleOutput_fullnames
242
+ srcFilePath = File.join(@projectDir, srcFilePath)
243
+ cmdJson[source] = srcFilePath
244
+ end
245
+ Blocks::CC2J << { :directory => @projectDir, :command => cmdJson, :file => srcFilePath }
241
246
  end
242
247
 
243
248
  if not (cmdLineCheck and BlockBase.isCmdLineEqual?(cmd, cmdLineFile))
@@ -1,7 +1,7 @@
1
1
  module Bake
2
2
  class Version
3
3
  def self.number
4
- "2.44.0"
4
+ "2.44.1"
5
5
  end
6
6
 
7
7
  def self.printBakeVersion(ry = "")
@@ -1,6 +1,6 @@
1
1
  bake License:
2
2
 
3
- Copyright (c) 2012-2015 E.S.R.Labs AG
3
+ Copyright (c) 2012-2018 E.S.R.Labs AG
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
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.44.0
4
+ version: 2.44.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Schaal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-26 00:00:00.000000000 Z
11
+ date: 2018-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rtext
@@ -98,42 +98,42 @@ dependencies:
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: coveralls
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - '>='
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  description: See documentation for more details
@@ -249,23 +249,23 @@ licenses:
249
249
  metadata: {}
250
250
  post_install_message:
251
251
  rdoc_options:
252
- - "-x"
252
+ - -x
253
253
  - doc
254
254
  require_paths:
255
255
  - lib
256
256
  required_ruby_version: !ruby/object:Gem::Requirement
257
257
  requirements:
258
- - - ">="
258
+ - - '>='
259
259
  - !ruby/object:Gem::Version
260
260
  version: '1.9'
261
261
  required_rubygems_version: !ruby/object:Gem::Requirement
262
262
  requirements:
263
- - - ">="
263
+ - - '>='
264
264
  - !ruby/object:Gem::Version
265
265
  version: '0'
266
266
  requirements: []
267
267
  rubyforge_project:
268
- rubygems_version: 2.6.13
268
+ rubygems_version: 2.6.7
269
269
  signing_key:
270
270
  specification_version: 4
271
271
  summary: Build tool to compile C/C++ projects fast and easy.