bake-toolkit 2.26.1 → 2.27.0

Sign up to get free protection for your applications and to get access to all the features.
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.