bake-toolkit 2.26.1 → 2.27.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: 59e3d776eb440f434be50c4e0c1c3b1052d1a78f
4
- data.tar.gz: dbcec7eea7c0569850cdc9a3648daad825733b56
3
+ metadata.gz: e0e1f90912811da36dbf1370d42792187d92ad06
4
+ data.tar.gz: f3b95ad81adb8298b0ac6bbc2efd1527a797a276
5
5
  SHA512:
6
- metadata.gz: 566277aeca80053e87309f85bd710a4f294e9dd113675155447fcc9d18a597847ecbe65a8f197d5d35c7a451fbef69836330ef1874f31b0bb3216da2c48af1dc
7
- data.tar.gz: 799067a3a8f587f6a356d31f023c479696f6d4e4134381bdeaffe99cc59d2f9151c15a2a487eb988762fa4556cce7a815129c11fb8207ae3b666a97be82da8aa
6
+ metadata.gz: 189d2546359dcd6469d9780f70d753c73875f4ed382697e3ea9214fc139f3c10aece6baa9ffac3f54dfd824a4e14e4bb926a01e8756d1e4bdfd10e031d2de9e4
7
+ data.tar.gz: d10fa61a1f6e25b653f8c778e3a58cb6e06e5e2a1f839429100b7ebc1aecd77266d423faffd565446b5228ed3e9d775c55e1171f24e70d26f8ce3f7fe73bd4e6
data/bin/bakeqac CHANGED
@@ -15,27 +15,53 @@ STDERR.sync = true
15
15
 
16
16
  module Bake
17
17
 
18
- def self.printCip()
19
- cips = Dir.glob(@options.qacdata + "/**/*.cip")
20
- if !cips.empty?
21
- puts "Temporary debug output to find a highly sporadic bug regarding cip file, sorry for spam:"
22
- puts "cip file name: #{cips[0]}"
23
- puts "cip file size: #{File.size?(cips[0])}"
24
- end
25
- end
18
+ @@cipFileSize = 1
26
19
 
27
- def self.cipSize()
20
+ def self.checkCipSize()
28
21
  cips = Dir.glob(@options.qacdata + "/**/*.cip")
29
22
  if !cips.empty?
30
23
  s = File.size?(cips[0])
31
- if s.nil? || s == 0
32
- puts "cip file empty: #{cips[0]}"
33
- return 0
24
+ s = 0 if s.nil?
25
+ if s < @@cipFileSize
26
+ puts "cip file too small: #{cips[0]} has #{s} bytes"
27
+ return false
34
28
  end
35
- return s
29
+ @@cipFileSize = s
30
+ return true
36
31
  end
37
32
  puts "cip file does not exist!"
38
- return 0
33
+ return false
34
+ end
35
+
36
+ def self.executeQacli(cmd, immediateOutput = false)
37
+ timeStart = Time.now
38
+ cSizeCheck = true
39
+ licenseError = false
40
+ consoleOutput = ""
41
+ success = false
42
+
43
+ loop do
44
+ success, consoleOutput = ProcessHelper.run(cmd, immediateOutput)
45
+ licenseError = false
46
+
47
+ consoleOutput.each_line do |line|
48
+ if (line.include?("License Refused") && !line.include?("License Refused: C:"))
49
+ licenseError = true
50
+ puts "License refused!"
51
+ break
52
+ end
53
+ end
54
+
55
+ cSizeCheck = checkCipSize()
56
+
57
+ break unless ((@options.qacretry >= (Time.now - timeStart)) && (!cSizeCheck || licenseError))
58
+ puts "Retry seconds left: %d" % (@options.qacretry - (Time.now - timeStart))
59
+ end
60
+ checkError = !cSizeCheck || licenseError
61
+ puts "Retry timeout over -> failure." if @options.qacretry > 0 && checkError
62
+
63
+ success = false if checkError
64
+ return [success, consoleOutput, checkError]
39
65
  end
40
66
 
41
67
  ###### PREREQUISITE 1: BAKEQAC OPTIONS ######
@@ -43,11 +69,7 @@ end
43
69
  @options = BakeqacOptions.new(ARGV)
44
70
  bakeOptions = Options.new([])
45
71
  @options.parse_options(bakeOptions)
46
-
47
72
  success = false
48
- consoleOutput = ""
49
- licenseError = false
50
- cSize = 1
51
73
 
52
74
  ###### PREREQUISITE 2: BAKE OPTIONS ######
53
75
 
@@ -92,26 +114,8 @@ end
92
114
 
93
115
  puts "bakeqac: creating database..."
94
116
 
95
- cipCounter = 0
96
- loop do
97
- FileUtils.rm_rf @options.qacdata
98
- success, consoleOutput = ProcessHelper.run(cmd, true)
99
-
100
- break if not success
101
-
102
- printCip()
103
-
104
- cips = Dir.glob(@options.qacdata + "/**/*.cip")
105
- break if (!cips.empty?) && (!File.size?(cips[0]).nil?) # this is the regular case, note: "size?" returns nil if empty or not existing
106
-
107
- cipCounter += 1
108
- if cipCounter < 10
109
- puts "cip file does not exist or is empty, trying again..."
110
- else
111
- success = false
112
- break
113
- end
114
- end
117
+ FileUtils.rm_rf @options.qacdata
118
+ success, consoleOutput, checkError = executeQacli(cmd, true)
115
119
 
116
120
  if success
117
121
  cctFilename = @options.qacdata+"/prqa/config/"+File.basename(@options.cct[0])
@@ -137,7 +141,6 @@ end
137
141
  else
138
142
  puts consoleOutput
139
143
  end
140
-
141
144
  end
142
145
 
143
146
  ###### STEP 2: BUILD ######
@@ -164,43 +167,26 @@ end
164
167
 
165
168
  puts "bakeqac: building and analyzing files..."
166
169
 
167
- timeStart = Time.now
168
- loop do
169
- success, consoleOutput = ProcessHelper.run(cmd, false)
170
- licenseError = false
170
+ success, consoleOutput, checkError = executeQacli(cmd)
171
+ success = false # we have to parse the output, qacli returns always an error here...
171
172
 
173
+ if !checkError
174
+ filterOutput = []
175
+ filter = []
176
+ endFound = false
172
177
  consoleOutput.each_line do |line|
173
- if (line.include?("License Refused") && !line.include?("License Refused: C:"))
174
- licenseError = true
175
- puts "License refused!"
176
- break
177
- end
178
- end
179
-
180
- cSize = cipSize()
181
-
182
- break unless ((@options.qacretry >= (Time.now - timeStart)) && (cSize == 0 || licenseError))
183
- puts "Retry seconds left: %d" % (@options.qacretry - (Time.now - timeStart))
184
- end
185
- puts "Retry timeout over -> failure." if (@options.qacretry > 0 && (cSize == 0 || licenseError))
186
-
187
- success = false # we have to parse the output, qacli returns always an error here...
188
- filterOutput = []
189
- filter = []
190
- endFound = false
191
- consoleOutput.each_line do |line|
192
- scan_res = line.scan(/Project path: ([a-zA-Z]{0,1})(:{0,1})(.*)/)
193
- if scan_res.length > 0
194
- filter << (scan_res[0][0].downcase + scan_res[0][1] + scan_res[0][2].gsub(/\\/,"/").strip)
195
- elsif !endFound
196
- filterOutput << line
197
- if line.start_with?("Rebuilding ")
198
- endFound = true
199
- success = true if line.include?("Rebuilding done") # don't know why the return value is 2 in this case...
178
+ scan_res = line.scan(/Project path: ([a-zA-Z]{0,1})(:{0,1})(.*)/)
179
+ if scan_res.length > 0
180
+ filter << (scan_res[0][0].downcase + scan_res[0][1] + scan_res[0][2].gsub(/\\/,"/").strip)
181
+ elsif !endFound
182
+ filterOutput << line
183
+ if line.start_with?("Rebuilding ")
184
+ endFound = true
185
+ success = true if line.include?("Rebuilding done") # don't know why the return value is 2 in this case...
186
+ end
200
187
  end
201
188
  end
202
189
  end
203
- success = false if (cSize == 0 || licenseError)
204
190
 
205
191
  if @options.qacfilter
206
192
  if success
@@ -214,8 +200,6 @@ end
214
200
  else
215
201
  puts consoleOutput # no filter
216
202
  end
217
-
218
- printCip()
219
203
  end
220
204
 
221
205
 
@@ -241,27 +225,7 @@ end
241
225
  cmd += ["-f", "%?u==0%(MSG: %:trc: %)%F(%l,%c): (%r:%N)%t%?v%(\n%v%)"]
242
226
  end
243
227
 
244
- timeStart = Time.now
245
- loop do
246
- success, consoleOutput = ProcessHelper.run(cmd, false)
247
- licenseError = false
248
-
249
- consoleOutput.each_line do |line|
250
- if (line.include?("License Refused") && !line.include?("License Refused: C:"))
251
- licenseError = true
252
- puts "License refused!"
253
- break
254
- end
255
- end
256
-
257
- cSize = cipSize()
258
-
259
- break unless ((@options.qacretry >= (Time.now - timeStart)) && (cSize == 0 || licenseError))
260
- puts "Retry seconds left: %d" % (@options.qacretry - (Time.now - timeStart))
261
- end
262
- puts "Retry timeout over -> failure." if (@options.qacretry > 0 && (cSize == 0 || licenseError))
263
-
264
- success = false if (cSize == 0 || licenseError)
228
+ success, consoleOutput, checkError = executeQacli(cmd)
265
229
 
266
230
  if useFilter
267
231
  if success
@@ -342,9 +306,6 @@ end
342
306
  else
343
307
  puts consoleOutput # no filter
344
308
  end
345
-
346
- printCip()
347
-
348
309
  end
349
310
 
350
311
  ###### STEP 4a: REPORT SCRIPT CHECK (OPTIONAL) ######
@@ -1,9 +1,13 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ January x, 2017 - bake-toolkit 2.27.0
5
+ * Added: local *Adapt* with conditions (e.g. toolchain), see :ref:`adapt_reference`.
6
+ * Changed: qac: cip workaround slightly adapted, removed temporary debug output.
7
+
4
8
  December 23, 2016 - bake-toolkit 2.26.1
5
- * Changed: qac: next try to add a workaround for the cip file bug..
6
- * Cosmetic: possible wrong message when reloading metas ("corrupt" instead of "changed")
9
+ * Changed: qac: next try to add a workaround for the cip file bug.
10
+ * Cosmetic: fixed possible wrong message when reloading metas ("corrupt" instead of "changed")
7
11
 
8
12
  December 20, 2016 - bake-toolkit 2.26.0
9
13
  * Changed: before this version, "-w" command line args (which define the workspace roots) have overwritten roots.bake file. Now these roots will be
@@ -1,4 +1,4 @@
1
- bake 2.26.1
1
+ bake 2.27.0
2
2
  ==========================================
3
3
  bake, building software **fast** and **easy**!
4
4
 
@@ -1,8 +1,20 @@
1
+ .. _adapt_reference:
2
+
1
3
  Adapt configs
2
4
  =============
3
5
 
4
6
  Introduction
5
- ************
7
+ ------------
8
+
9
+ There are two major use cases:
10
+
11
+ - Changing the configs from outside, e.g. injecting a toolchain.
12
+ - Changing the configs depending on variables like the operating system.
13
+
14
+ Both is possible with the *Adapt* feature.
15
+
16
+ From command line
17
+ -----------------
6
18
 
7
19
  If you want to manipulate existing configs without changing them, you can "adapt" them via command line.
8
20
 
@@ -10,7 +22,7 @@ If you want to manipulate existing configs without changing them, you can "adapt
10
22
 
11
23
  User@Host:~$ bake test --adapt abc
12
24
 
13
- bake searches for abc/Adapt.meta within the workspace roots. If found, the configs from the adapt file are parsed:
25
+ bake searches for abc/Adapt.meta within the workspace roots. If found, the configs from the Adapt.meta are parsed:
14
26
 
15
27
  .. code-block:: text
16
28
 
@@ -20,7 +32,7 @@ bake searches for abc/Adapt.meta within the workspace roots. If found, the confi
20
32
  CustomConfig ... # 0..n
21
33
  }
22
34
 
23
- Here is an example to change the DefaultToolchain
35
+ Here is an example to change the DefaultToolchain (details explained below):
24
36
 
25
37
  .. code-block:: text
26
38
 
@@ -30,12 +42,71 @@ Here is an example to change the DefaultToolchain
30
42
  }
31
43
  }
32
44
 
45
+ From Project.meta
46
+ -----------------
47
+
48
+ You can do the same within the Project.meta:
49
+
50
+ .. code-block:: text
51
+
52
+ Project {
53
+ ...
54
+ }
55
+ Adapt {
56
+ ...
57
+ }
58
+ Adapt {
59
+ ...
60
+ }
61
+
62
+ Conditions and effectiveness
63
+ ----------------------------
64
+
65
+ Be aware, these are two different things but look very similar.
66
+
67
+ Condition
68
+ ~~~~~~~~~
69
+
70
+ An *Adapt* can have up to four attributes:
71
+
72
+ - **toolchain**: e.g. GCC
73
+ - **os**: can be Windows, Mac, Linux, Unix (which is != Linux)
74
+ - **mainConfig**: name of the main config
75
+ - **mainProject**: name of the main project
76
+
77
+ The "Adapt* configs will be only applied if all these attributes are either empty or true. Example:
78
+
79
+ .. code-block:: text
80
+
81
+ Adapt toolchain: GCC, os: Windows {
82
+ ...
83
+ }
84
+
85
+ Here the *Adapt* configs will be applied if toolchain is GCC on Windows.
86
+
33
87
  Effectiveness
34
- *************
88
+ ~~~~~~~~~~~~~
35
89
 
36
- The adapt configs can be applied to all configs from regular build. This can be controlled by the config names and the project attributes. The example above
37
- is adapted only to the config "test" of the main project. __MAIN__ and __ALL__ are keywords. __MAIN__ means the main project or config, __ALL__ means all
38
- projects or configs. If you want to apply the changes only to the top level config, write:
90
+ The *Adapt* configs can be applied to all configs from regular build. This can be controlled by the config names and the project attributes.
91
+ Remember the example from the beginning?
92
+
93
+ .. code-block:: text
94
+
95
+ Adapt {
96
+ ExecutableConfig test, project: __MAIN__, type: replace {
97
+ DefaultToolchain GCC
98
+ }
99
+ }
100
+
101
+ This config is applied only to the config "test" of the main project.
102
+
103
+ __MAIN__, __ALL__ and __THIS__ are keywords:
104
+
105
+ - **__MAIN__** means the main project or main config
106
+ - **__ALL__** means all projects or configs
107
+ - **__THIS__** is only valid for project name, which can be used for *Adapts* within a Project.meta to restrict the adaption to the current project.
108
+
109
+ If you want to apply the changes only to the top level config, write:
39
110
 
40
111
  .. code-block:: text
41
112
 
@@ -50,9 +121,9 @@ If you want to apply the changes to all configs, write:
50
121
  It is possible to mix the keywords with reals project or config names.
51
122
 
52
123
  Occurrences
53
- ***********
124
+ -----------
54
125
 
55
- You can specify more configs in one adapt file and you can specify more than one adapt file:
126
+ You can specify more configs in one *Adapt* and you can specify more than one Adapt.meta file:
56
127
 
57
128
  .. code-block:: text
58
129
 
@@ -73,10 +144,25 @@ You can specify more configs in one adapt file and you can specify more than one
73
144
 
74
145
  User@Host:~$ bake test --adapt abc --adapt xy
75
146
 
76
- They will be applied in the specified order.
147
+ Apply order
148
+ -----------
149
+
150
+ The *Adapt* configs will be applied in the order in which they were parsed. First the Adapt.metas referenced from the command line are read. Then the Project.metas are read
151
+ one by one as usual. If an *Adapt* is found, it will be appended to the list of *Adapts*. Note, *Adapts* will be applied immediately when a Project.meta is read.
152
+
153
+ If you inject a Toolchain from outside, e.g. "--adapt gcc", you can use the toolchain info for local *Adapts*:
154
+
155
+ .. code-block:: text
156
+
157
+ Project {
158
+ ...
159
+ }
160
+ Adapt toolchain: GCC {
161
+ ...
162
+ }
77
163
 
78
164
  Types
79
- *****
165
+ -----
80
166
 
81
167
  It is possible to specify the type of adaption:
82
168
 
@@ -84,15 +170,19 @@ It is possible to specify the type of adaption:
84
170
 
85
171
  ExecutableConfig ..., type: replace
86
172
 
87
- The type can be "replace", "remove" or "extend".
173
+ The type can be
174
+
175
+ - **replace**
176
+ - **remove**
177
+ - **extend**
88
178
 
89
179
  Type: extend
90
- ------------
180
+ ~~~~~~~~~~~~
91
181
 
92
182
  This works exactly like for :doc:`derive_configs`.
93
183
 
94
184
  Type: remove
95
- ------------
185
+ ~~~~~~~~~~~~
96
186
 
97
187
  If parent elements can be found which matches to the child elements, they will be removed.
98
188
 
@@ -104,7 +194,7 @@ Example project config:
104
194
  DefaultToolchain GCC
105
195
  }
106
196
 
107
- Example adapt configs:
197
+ Example *Adapt* configs:
108
198
 
109
199
  .. code-block:: text
110
200
 
@@ -125,7 +215,7 @@ Example adapt configs:
125
215
  }
126
216
 
127
217
  Type: replace
128
- -------------
218
+ ~~~~~~~~~~~~~
129
219
 
130
220
  This is for convenience. "replace" will remove all elements with the same type and extends the configs.
131
221
 
@@ -140,4 +230,4 @@ Example:
140
230
  }
141
231
  }
142
232
 
143
- This removes all "Files" and the "DefaultToolchain" from the original config regardless their attributes and replaces them by the elements of the adapt config.
233
+ This removes all "Files" and the "DefaultToolchain" from the original config regardless their attributes and replaces them by the elements of the *Adapt* config.