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
This commit is contained in:
Richard Purdie 2008-04-22 21:22:11 +00:00
parent 9dc0c9fe0f
commit 1e53b0f578
1 changed files with 41 additions and 7 deletions

View File

@ -178,16 +178,13 @@ def package_qa_make_fatal_error(error_class, name, path,d):
TODO: Load a whitelist of known errors
"""
return not error_class in [0, 5, 7, 8]
return not error_class in [0, 5, 7, 8, 9]
def package_qa_write_error(error_class, name, path, d):
"""
Log the error
"""
import bb, os
if not bb.data.getVar('QA_LOG', d):
bb.note("a QA error occured but will not be logged because QA_LOG is not set")
return
ERROR_NAMES =[
"non dev contains .so",
@ -199,6 +196,7 @@ def package_qa_write_error(error_class, name, path, d):
"evil hides inside the .pc",
"the desktop file is not valid",
".la contains reference to the workdir",
"package contains reference to tmpdir paths",
]
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):
(ERROR_NAMES[error_class], name, package_qa_clean_path(path,d))
f.close()
logfile = bb.data.getVar('QA_LOGFILE', d, True)
if logfile:
p = bb.data.getVar('P', d, True)
f = file( logfile, "a+")
print >> f, "%s, %s, %s, %s" % \
(p, ERROR_NAMES[error_class], name, package_qa_clean_path(path,d))
f.close()
def package_qa_handle_error(error_class, error_msg, name, path, d):
import bb
bb.error("QA Issue: %s" % error_msg)
fatal = package_qa_make_fatal_error(error_class, name, path, d)
if fatal:
bb.error("QA Issue: %s" % error_msg)
else:
# Use bb.warn here when it works
bb.note("QA Issue: %s" % error_msg)
package_qa_write_error(error_class, name, path, d)
return not package_qa_make_fatal_error(error_class, name, path, d)
return not fatal
def package_qa_check_rpath(file,name,d):
"""
@ -321,6 +333,28 @@ def package_qa_check_desktop(path, name, d):
return sane
def package_qa_check_buildpaths(path, name, d):
"""
Check for build paths inside target files and error if not found in the whitelist
"""
import bb, os
sane = True
# Ignore .debug files, not interesting
if path.find(".debug") != -1:
return True
# Ignore symlinks
if os.path.islink(path):
return True
tmpdir = bb.data.getVar('TMPDIR', d, True)
file_content = open(path).read()
if tmpdir in file_content:
error_msg = "File %s in package contained reference to tmpdir" % package_qa_clean_path(path,d)
sane = package_qa_handle_error(9, error_msg, name, path, d)
return sane
def package_qa_check_staged(path,d):
"""
Check staged la and pc files for sanity
@ -428,7 +462,7 @@ python do_package_qa () {
checks = [package_qa_check_rpath, package_qa_check_devdbg,
package_qa_check_perm, package_qa_check_arch,
package_qa_check_desktop]
package_qa_check_desktop, package_qa_check_buildpaths]
walk_sane = True
rdepends_sane = True
for package in packages.split():