From 986c1887923b2c61a0056ef82ce3d46399f8dfc4 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 18 Feb 2007 15:54:12 +0000 Subject: classes/insane.bbclass: Print the actual error, write a log file -Print all errors of the built packages and if we have printed any errors fail -Log the errors to a log file, so we can see them afterwards -Print the path (- the TMPDIR) of the package in question --- classes/insane.bbclass | 90 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 72 insertions(+), 18 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 2599348351..bf75496cd0 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -24,6 +24,28 @@ inherit package PACKAGE_DEPENDS += "pax-utils-native" PACKAGEFUNCS += " do_package_qa " +def package_qa_clean_path(path,d): + import bb + return path.replace(bb.data.getVar('TMPDIR',d,True),"") + +def package_qa_write_error(error_class, name, path, d): + import bb, os + if not bb.data.getVar('QA_LOG', d): + return + + ERROR_NAMES =[ + "dev/dbg contains .so", + "package contains RPATH", + "package depends on debug package", + ] + + + log_path = os.path.join( bb.data.getVar('T', d, True), "log.qa_package" ) + f = file( log_path, "a+") + print >> f, "%s, %s, %s" % (ERROR_NAMES[error_class], name, package_qa_clean_path(path,d)) + f.close() + + def package_qa_check_rpath(file,name,d): """ Check for dangerous RPATHs @@ -32,16 +54,18 @@ def package_qa_check_rpath(file,name,d): scanelf = os.path.join(bb.data.getVar('STAGING_BINDIR_NATIVE',d,True),'scanelf') bad_dir = bb.data.getVar('TMPDIR', d, True) + "/work" if not os.path.exists(scanelf): - bb.note("Can not check RPATH scanelf not found") + bb.fatal("Can not check RPATH scanelf not found") if not bad_dir in bb.data.getVar('WORKDIR', d, True): bb.fatal("This class assumed that WORKDIR is ${TMPDIR}/work... Not doing any check") output = os.popen("%s -Byr %s" % (scanelf,file)) txt = output.readline().rsplit() if bad_dir in txt: - bb.fatal("QA Issue package %s contains bad RPATH %s in file %s" % (name, txt, file)) + package_qa_write_error( 1, name, file, d) + bb.error("QA Issue package %s contains bad RPATH %s in file %s" % (name, txt, file)) + return False - pass + return True def package_qa_check_devdbg(path, name,d): """ @@ -50,50 +74,69 @@ def package_qa_check_devdbg(path, name,d): """ import bb + sane = True + if not "-dev" in name: if path[-3:] == ".so": - bb.fatal("QA Issue: non dev package contains .so: %s" % name) + package_qa_write_error( 0, name, path, d ) + bb.error("QA Issue: non dev package contains .so: %s path '%s'" % (name, package_qa_clean_path(path,d))) + sane = False if not "-dbg" in name: if '.debug' in path: - bb.fatal("QA Issue: non debug package contains .debug directory: %s" % name) + package_qa_write_error( 0, name, path, d ) + bb.error("QA Issue: non debug package contains .debug directory: %s path %s" % (name, package_qa_clean_path(path,d))) + sane = False + + return sane def package_qa_check_perm(path,name,d): """ Check the permission of files """ - pass + sane = True + return sane def package_qa_check_arch(path,name,d): """ Check if archs are compatible """ - pass + sane = True + return sane def package_qa_check_pcla(path,name,d): """ - .pc and .la files should not point + .pc and .la files should not point to the WORKDIR """ + sane = True + return sane def package_qa_check_staged(path,d): """ Check staged la and pc files for sanity -e.g. installed being false """ - pass + sane = True + return sane # Walk over all files in a directory and call func def package_qa_walk(path, funcs, package,d): import os + sane = True + for root, dirs, files in os.walk(path): for file in files: path = os.path.join(root,file) for func in funcs: - func(path, package,d) + if not func(path, package,d): + sane = False + + return sane def package_qa_check_rdepends(pkg, workdir, d): - import bb + import bb + sane = True if not "-dbg" in pkg and not "task-" in pkg and not "-image" in pkg: # Copied from package_ipk.bbclass # boiler plate to update the data @@ -122,7 +165,11 @@ def package_qa_check_rdepends(pkg, workdir, d): # Now do the sanity check!!! for rdepend in rdepends: if "-dbg" in rdepend: - bb.fatal("QA issue, koen give us a better msg!!!") + package_qa_write_error( 2, name, rdepend, d ) + bb.error("QA issue, koen give us a better msg!!!") + sane = False + + return sane # The PACKAGE FUNC to scan each package python do_package_qa () { @@ -134,12 +181,19 @@ python do_package_qa () { if not packages: return + walk_sane = True + rdepends_sane = True for package in packages.split(): - bb.note("Package: %s" % package) + bb.note("Checking Package: %s" % package) path = "%s/install/%s" % (workdir, package) - package_qa_walk(path, [package_qa_check_rpath, package_qa_check_devdbg, package_qa_check_perm, package_qa_check_arch], package, d) - package_qa_check_rdepends(package, workdir, d) - + if not package_qa_walk(path, [package_qa_check_rpath, package_qa_check_devdbg, package_qa_check_perm, package_qa_check_arch], package, d): + walk_sane = False + if not package_qa_check_rdepends(package, workdir, d): + rdepends_sane = False + + if not walk_sane or not rdepends_sane: + bb.fatal("QA ran found fatal errors. Please consider fixing them") + bb.note("DONE with PACKAGE QA") } @@ -156,8 +210,8 @@ addtask qa_configure after do_configure before do_compile python do_qa_configure() { bb.note("Checking sanity of the config.log file") import os - for root, dirs, files in os.walk(bb.data.getVar('S', d, True)): + for root, dirs, files in os.walk(bb.data.getVar('WORKDIR', d, True)): if "config.log" in files: if os.system("grep 'CROSS COMPILE Badness:' %s > /dev/null" % (os.path.join(root,"config.log"))) == 0: - bb.fatal("This autoconf log indicates errors, it looked at host includes") + bb.fatal("This autoconf log indicates errors, it looked at host includes. Rerun configure task after fixing this. Path was '%s'", root) } -- cgit v1.2.3 From 80ed16db761962e949ef21ec10a9bc199c56cb61 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 18 Feb 2007 17:19:11 +0000 Subject: classes/insane.bbclass: Allow errors to be ignored Add a method to implement koen's skipping of errors of type .so in non dev package. This will turn into a list of known and acked issues which we decided to ignore. I do not yet know how to maintain such a list properly though Split the .so in non-dev package and the .debug in non-dbg package into two different packages --- classes/insane.bbclass | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index bf75496cd0..d11d8ddd7e 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -24,19 +24,41 @@ inherit package PACKAGE_DEPENDS += "pax-utils-native" PACKAGEFUNCS += " do_package_qa " +# +# +# Known Error classes +# 0 - non dev contains .so +# 1 - package contains a dangerous RPATH +# 2 - package depends on debug package +# 3 - non dbg contains .so +# +# + def package_qa_clean_path(path,d): import bb return path.replace(bb.data.getVar('TMPDIR',d,True),"") +def package_qa_make_fatal_error(error_class, name, path,d): + """ + decide if an error is fatal + + TODO: Load a whitelist of known errors + """ + if error_class == 0: + return False + else: + return True + def package_qa_write_error(error_class, name, path, d): import bb, os if not bb.data.getVar('QA_LOG', d): return ERROR_NAMES =[ - "dev/dbg contains .so", + "non dev contains .so", "package contains RPATH", "package depends on debug package", + "non dbg contains .debug", ] @@ -80,13 +102,15 @@ def package_qa_check_devdbg(path, name,d): if path[-3:] == ".so": package_qa_write_error( 0, name, path, d ) bb.error("QA Issue: non dev package contains .so: %s path '%s'" % (name, package_qa_clean_path(path,d))) - sane = False + if package_qa_make_fatal_error( 0, name, path, d ): + sane = False if not "-dbg" in name: if '.debug' in path: - package_qa_write_error( 0, name, path, d ) + package_qa_write_error( 3, name, path, d ) bb.error("QA Issue: non debug package contains .debug directory: %s path %s" % (name, package_qa_clean_path(path,d))) - sane = False + if package_qa_make_fatal_error( 3, name, path, d ): + sane = False return sane @@ -167,7 +191,8 @@ def package_qa_check_rdepends(pkg, workdir, d): if "-dbg" in rdepend: package_qa_write_error( 2, name, rdepend, d ) bb.error("QA issue, koen give us a better msg!!!") - sane = False + if package_qa_make_fatal_error( 2, name, rdepend, d ): + sane = False return sane -- cgit v1.2.3