diff options
| -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(): |
