diff options
author | Richard Purdie <richard@openedhand.com> | 2008-04-22 21:22:11 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2008-04-22 21:22:11 +0000 |
commit | 1e53b0f578d415624bfec2c977a6e6c1dc3ae010 (patch) | |
tree | 14efe4f6f1f5fb9e2b595e321209e3c570dd4476 | |
parent | 9dc0c9fe0f6802478160d4beb883db6380f384ce (diff) | |
download | poky-1e53b0f578d415624bfec2c977a6e6c1dc3ae010.tar.gz |
insane.bbclass: Drop pointless QA_LOG variable, add QA_LOGFILE so QA errors can optionally end up logged in one place for ease of reference. Add sanity check searching for tmpdir references within built packages, not fatal at present.
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4309 311d38ba-8fff-0310-9ca6-ca027cbcb966
-rw-r--r-- | meta/classes/insane.bbclass | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index d1bea89133..1f136d78ce 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -178,16 +178,13 @@ def package_qa_make_fatal_error(error_class, name, path,d): | |||
178 | 178 | ||
179 | TODO: Load a whitelist of known errors | 179 | TODO: Load a whitelist of known errors |
180 | """ | 180 | """ |
181 | return not error_class in [0, 5, 7, 8] | 181 | return not error_class in [0, 5, 7, 8, 9] |
182 | 182 | ||
183 | def package_qa_write_error(error_class, name, path, d): | 183 | def package_qa_write_error(error_class, name, path, d): |
184 | """ | 184 | """ |
185 | Log the error | 185 | Log the error |
186 | """ | 186 | """ |
187 | import bb, os | 187 | import bb, os |
188 | if not bb.data.getVar('QA_LOG', d): | ||
189 | bb.note("a QA error occured but will not be logged because QA_LOG is not set") | ||
190 | return | ||
191 | 188 | ||
192 | ERROR_NAMES =[ | 189 | ERROR_NAMES =[ |
193 | "non dev contains .so", | 190 | "non dev contains .so", |
@@ -199,6 +196,7 @@ def package_qa_write_error(error_class, name, path, d): | |||
199 | "evil hides inside the .pc", | 196 | "evil hides inside the .pc", |
200 | "the desktop file is not valid", | 197 | "the desktop file is not valid", |
201 | ".la contains reference to the workdir", | 198 | ".la contains reference to the workdir", |
199 | "package contains reference to tmpdir paths", | ||
202 | ] | 200 | ] |
203 | 201 | ||
204 | log_path = os.path.join( bb.data.getVar('T', d, True), "log.qa_package" ) | 202 | log_path = os.path.join( bb.data.getVar('T', d, True), "log.qa_package" ) |
@@ -207,11 +205,25 @@ def package_qa_write_error(error_class, name, path, d): | |||
207 | (ERROR_NAMES[error_class], name, package_qa_clean_path(path,d)) | 205 | (ERROR_NAMES[error_class], name, package_qa_clean_path(path,d)) |
208 | f.close() | 206 | f.close() |
209 | 207 | ||
208 | logfile = bb.data.getVar('QA_LOGFILE', d, True) | ||
209 | if logfile: | ||
210 | p = bb.data.getVar('P', d, True) | ||
211 | f = file( logfile, "a+") | ||
212 | print >> f, "%s, %s, %s, %s" % \ | ||
213 | (p, ERROR_NAMES[error_class], name, package_qa_clean_path(path,d)) | ||
214 | f.close() | ||
215 | |||
210 | def package_qa_handle_error(error_class, error_msg, name, path, d): | 216 | def package_qa_handle_error(error_class, error_msg, name, path, d): |
211 | import bb | 217 | import bb |
212 | bb.error("QA Issue: %s" % error_msg) | 218 | fatal = package_qa_make_fatal_error(error_class, name, path, d) |
219 | if fatal: | ||
220 | bb.error("QA Issue: %s" % error_msg) | ||
221 | else: | ||
222 | # Use bb.warn here when it works | ||
223 | bb.note("QA Issue: %s" % error_msg) | ||
213 | package_qa_write_error(error_class, name, path, d) | 224 | package_qa_write_error(error_class, name, path, d) |
214 | return not package_qa_make_fatal_error(error_class, name, path, d) | 225 | |
226 | return not fatal | ||
215 | 227 | ||
216 | def package_qa_check_rpath(file,name,d): | 228 | def package_qa_check_rpath(file,name,d): |
217 | """ | 229 | """ |
@@ -321,6 +333,28 @@ def package_qa_check_desktop(path, name, d): | |||
321 | 333 | ||
322 | return sane | 334 | return sane |
323 | 335 | ||
336 | def package_qa_check_buildpaths(path, name, d): | ||
337 | """ | ||
338 | Check for build paths inside target files and error if not found in the whitelist | ||
339 | """ | ||
340 | import bb, os | ||
341 | sane = True | ||
342 | |||
343 | # Ignore .debug files, not interesting | ||
344 | if path.find(".debug") != -1: | ||
345 | return True | ||
346 | |||
347 | # Ignore symlinks | ||
348 | if os.path.islink(path): | ||
349 | return True | ||
350 | |||
351 | tmpdir = bb.data.getVar('TMPDIR', d, True) | ||
352 | file_content = open(path).read() | ||
353 | if tmpdir in file_content: | ||
354 | error_msg = "File %s in package contained reference to tmpdir" % package_qa_clean_path(path,d) | ||
355 | sane = package_qa_handle_error(9, error_msg, name, path, d) | ||
356 | return sane | ||
357 | |||
324 | def package_qa_check_staged(path,d): | 358 | def package_qa_check_staged(path,d): |
325 | """ | 359 | """ |
326 | Check staged la and pc files for sanity | 360 | Check staged la and pc files for sanity |
@@ -428,7 +462,7 @@ python do_package_qa () { | |||
428 | 462 | ||
429 | checks = [package_qa_check_rpath, package_qa_check_devdbg, | 463 | checks = [package_qa_check_rpath, package_qa_check_devdbg, |
430 | package_qa_check_perm, package_qa_check_arch, | 464 | package_qa_check_perm, package_qa_check_arch, |
431 | package_qa_check_desktop] | 465 | package_qa_check_desktop, package_qa_check_buildpaths] |
432 | walk_sane = True | 466 | walk_sane = True |
433 | rdepends_sane = True | 467 | rdepends_sane = True |
434 | for package in packages.split(): | 468 | for package in packages.split(): |