diff options
Diffstat (limited to 'classes/insane.bbclass')
-rw-r--r-- | classes/insane.bbclass | 70 |
1 files changed, 62 insertions, 8 deletions
diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 395f124572..ead718db7f 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -1,4 +1,3 @@ -# # BB Class inspired by ebuild.sh # # This class will test files after installation for certain @@ -23,18 +22,73 @@ inherit package PACKAGE_DEPENDS += "pax-utils-native" PACKAGEFUNCS += " do_package_qa " -def package_qa_check_rpath(path): +def package_qa_check_rpath(file,name,d): + """ + Check for dangerous RPATHs + """ + import bb, os + scanelf = os.path.join(bb.data.getVar('STAGING_BINDIR',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") + if not bad_dir in bb.data.getVar('WORKDIR', d, True): + bb.error("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.error("QA Issue package %s contains bad RPATH %s in file %s" % (name, txt, file)) + pass -def package_qa_check_devdbg(path, name): +def package_qa_check_devdbg(path, name,d): + """ + Check for debug remains inside the binary or + non dev packages containing + """ + + import bb + if not "-dev" in name: + if path[-3:] == ".so": + bb.error("QA Issue: non dev package contains .so") + + if not "-dbg" in name: + if path[-4:] == ".dbg": + bb.error("QA Issue: non debug package contains .dbg file") + +def package_qa_check_perm(path,name,d): + """ + Check the permission of files + """ pass -def package_qa_check_perm(path): +def package_qa_check_arch(path,name,d): + """ + Check if archs are compatible + """ pass -def package_qa_check_staged(path): +def package_qa_check_pcla(path,name,d): + """ + .pc and .la files should not point + """ + +def package_qa_check_staged(path,d): + """ + Check staged la and pc files for sanity + -e.g. installed being false + """ pass +# Walk over all files in a directory and call func +def package_qa_walk(path, funcs, package,d): + import os + 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) + # The PACKAGE FUNC to scan each package python do_package_qa () { @@ -49,9 +103,7 @@ python do_package_qa () { for package in packages.split(): bb.note("Package: %s" % package) path = "%s/install/%s" % (workdir, package) - package_qa_check_rpath(path) - package_qa_check_devdbg(path,package) - package_qa_check_perm(path) + package_qa_walk(path, [package_qa_check_rpath, package_qa_check_devdbg, package_qa_check_perm, package_qa_check_arch], package, d) } @@ -59,4 +111,6 @@ python do_package_qa () { addtask qa_staging after do_populate_staging before do_build python do_qa_staging() { bb.note("Staged!") + + package_qa_check_staged(bb.data.getVar('STAGING_DIR',d,True), d) } |