From 8dc182e9960996f5010edcc598fbfaa8a12faceb Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 14 Feb 2007 00:42:44 +0000 Subject: kernel.bbclass: Remove PARALLEL_INSTALL_MODULES. If we want to do this we should rethink and have something that works for multiple kernel versions generically not just a 2.4/2.6 split. There are certainly better ways to do it than this. --- classes/kernel.bbclass | 36 ------------------------------------ classes/linux-kernel-base.bbclass | 4 ---- classes/module.bbclass | 17 ----------------- 3 files changed, 57 deletions(-) (limited to 'classes') diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index 21f441e3d0..2434ca1f0a 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -307,10 +307,6 @@ python populate_packages_prepend () { continue on = legitimize_package_name(m.group(1)) dependency_pkg = format % on - v = bb.data.getVar("PARALLEL_INSTALL_MODULES", d, 1) or "0" - if v == "1": - kv = bb.data.getVar("KERNEL_MAJOR_VERSION", d, 1) - dependency_pkg = "%s-%s" % (dependency_pkg, kv) dependencies.append(dependency_pkg) return dependencies return [] @@ -386,36 +382,4 @@ python populate_packages_prepend () { bb.data.setVar('DESCRIPTION_' + metapkg, 'Kernel modules meta package', d) packages.append(metapkg) bb.data.setVar('PACKAGES', ' '.join(packages), d) - - v = bb.data.getVar("PARALLEL_INSTALL_MODULES", d, 1) or "0" - if v == "1": - kv = bb.data.getVar("KERNEL_MAJOR_VERSION", d, 1) - packages = bb.data.getVar("PACKAGES", d, 1).split() - module_re = re.compile("^kernel-module-") - - newmetapkg = "kernel-modules-%s" % kv - bb.data.setVar('ALLOW_EMPTY_' + newmetapkg, "1", d) - bb.data.setVar('FILES_' + newmetapkg, "", d) - - newmetapkg_rdepends = [] - - for p in packages: - if not module_re.match(p): - continue - pkg = bb.data.getVar("PKG_%s" % p, d, 1) or p - newpkg = "%s-%s" % (pkg, kv) - bb.data.setVar("PKG_%s" % p, newpkg, d) - rprovides = bb.data.getVar("RPROVIDES_%s" % p, d, 1) - if rprovides: - rprovides = "%s %s" % (rprovides, pkg) - else: - rprovides = pkg - bb.data.setVar("RPROVIDES_%s" % p, rprovides, d) - newmetapkg_rdepends.append(newpkg) - - bb.data.setVar('RDEPENDS_' + newmetapkg, ' '.join(newmetapkg_rdepends), d) - bb.data.setVar('DESCRIPTION_' + newmetapkg, 'Kernel modules meta package', d) - packages.append(newmetapkg) - bb.data.setVar('PACKAGES', ' '.join(packages), d) - } diff --git a/classes/linux-kernel-base.bbclass b/classes/linux-kernel-base.bbclass index e58c228080..4e2e2da373 100644 --- a/classes/linux-kernel-base.bbclass +++ b/classes/linux-kernel-base.bbclass @@ -32,10 +32,6 @@ def get_kernelmajorversion(p): def linux_module_packages(s, d): import bb, os.path suffix = "" - if (bb.data.getVar("PARALLEL_INSTALL_MODULES", d, 1) == "1"): - file = bb.data.expand('${STAGING_KERNEL_DIR}/kernel-abiversion', d) - if (os.path.exists(file)): - suffix = "-%s" % (get_kernelmajorversion(base_read_file(file))) return " ".join(map(lambda s: "kernel-module-%s%s" % (s.lower().replace('_', '-').replace('@', '+'), suffix), s.split())) # that's all diff --git a/classes/module.bbclass b/classes/module.bbclass index 6089f90462..7eac001ec4 100644 --- a/classes/module.bbclass +++ b/classes/module.bbclass @@ -3,23 +3,6 @@ DEPENDS += "virtual/kernel" inherit module-base -python populate_packages_prepend() { - v = bb.data.getVar("PARALLEL_INSTALL_MODULES", d, 1) or "0" - if v == "1": - kv = bb.data.getVar("KERNEL_VERSION", d, 1) - packages = bb.data.getVar("PACKAGES", d, 1) - for p in packages.split(): - pkg = bb.data.getVar("PKG_%s" % p, d, 1) or p - newpkg = "%s-%s" % (pkg, kv) - bb.data.setVar("PKG_%s" % p, newpkg, d) - rprovides = bb.data.getVar("RPROVIDES_%s" % p, d, 1) - if rprovides: - rprovides = "%s %s" % (rprovides, pkg) - else: - rprovides = pkg - bb.data.setVar("RPROVIDES_%s" % p, rprovides, d) -} - module_do_compile() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \ -- cgit v1.2.3 From 7f6c2cb77774eda984c1ec8517bd56e04a62239e Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 14 Feb 2007 17:06:09 +0000 Subject: openmoko*.bbclass: add classes from openmoko svn * I'm not sure if I like distro revisions in bbclasses --- classes/openmoko-base.bbclass | 19 +++++++++++++++++++ classes/openmoko-panel-plugin.bbclass | 6 ++++++ classes/openmoko.bbclass | 3 +++ 3 files changed, 28 insertions(+) create mode 100644 classes/openmoko-base.bbclass create mode 100644 classes/openmoko-panel-plugin.bbclass create mode 100644 classes/openmoko.bbclass (limited to 'classes') diff --git a/classes/openmoko-base.bbclass b/classes/openmoko-base.bbclass new file mode 100644 index 0000000000..7a274b0d2c --- /dev/null +++ b/classes/openmoko-base.bbclass @@ -0,0 +1,19 @@ +HOMEPAGE = "http://www.openmoko.org" +LICENSE ?= "GPL" +OPENMOKO_RELEASE ?= "OM-2007" +OPENMOKO_MIRROR ?= "svn://svn.openmoko.org/trunk" + +def openmoko_base_get_subdir(d): + import bb + openmoko, section = bb.data.getVar('SECTION', d, 1).split("/") + if section == 'base' or section == 'libs': return "" + elif section in 'apps tools pim'.split(): return "applications" + elif section == "panel-plugin": return "panel-plugins" + else: return section + +SUBDIR = "${@openmoko_base_get_subdir(d)}" + +SRC_URI := "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/${SUBDIR};module=${PN};proto=https" +S = "${WORKDIR}/${PN}" + +FILES_${PN} += "${datadir}/icons" diff --git a/classes/openmoko-panel-plugin.bbclass b/classes/openmoko-panel-plugin.bbclass new file mode 100644 index 0000000000..0494b412c6 --- /dev/null +++ b/classes/openmoko-panel-plugin.bbclass @@ -0,0 +1,6 @@ +SECTION = "openmoko/panel-plugin" +DEPENDS += "matchbox-panel-2" + +inherit openmoko + +FILES_${PN} = "${libdir}/matchbox-panel/lib*.so* ${datadir}" diff --git a/classes/openmoko.bbclass b/classes/openmoko.bbclass new file mode 100644 index 0000000000..808ab8fcb6 --- /dev/null +++ b/classes/openmoko.bbclass @@ -0,0 +1,3 @@ +inherit openmoko-base autotools pkgconfig + +DEPENDS_prepend = "${@["openmoko-libs ", ""][(bb.data.getVar('PN', d, 1) == 'openmoko-libs')]}" -- cgit v1.2.3 From 81b217518bd5049e4c6697d47f1600aab8639e56 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Thu, 15 Feb 2007 04:38:52 +0000 Subject: slugos, unslung: Moved unslung image building into unslung-image, and split nslu2, nas100d and dsmg600 image building out into classes so they can be reused with multiple distros (like SlugOS and Angstrom) --- classes/dsmg600-image.bbclass | 19 +++++++++++++++++++ classes/nas100d-image.bbclass | 19 +++++++++++++++++++ classes/nslu2-image.bbclass | 20 ++++++++++++++++++++ classes/nslu2-jffs2-image.bbclass | 18 ------------------ classes/nslu2-ramdisk-image.bbclass | 18 ------------------ 5 files changed, 58 insertions(+), 36 deletions(-) create mode 100644 classes/dsmg600-image.bbclass create mode 100644 classes/nas100d-image.bbclass create mode 100644 classes/nslu2-image.bbclass delete mode 100644 classes/nslu2-jffs2-image.bbclass delete mode 100644 classes/nslu2-ramdisk-image.bbclass (limited to 'classes') diff --git a/classes/dsmg600-image.bbclass b/classes/dsmg600-image.bbclass new file mode 100644 index 0000000000..6920fe5dbd --- /dev/null +++ b/classes/dsmg600-image.bbclass @@ -0,0 +1,19 @@ +dsmg600_pack_image () { + install -d ${DEPLOY_DIR_IMAGE}/firmupgrade + install -m 0755 ${DEPLOY_DIR_IMAGE}/zImage-dsmg600${SITEINFO_ENDIANESS} \ + ${DEPLOY_DIR_IMAGE}/firmupgrade/ip-ramdisk + install -m 0644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ + ${DEPLOY_DIR_IMAGE}/firmupgrade/rootfs.gz + touch ${DEPLOY_DIR_IMAGE}/firmupgrade/usr.cramfs + chmod 0644 ${DEPLOY_DIR_IMAGE}/firmupgrade/usr.cramfs + echo "hwid=1.0.1" >${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + echo "model=dsm-g600" >>${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + echo "vendor=dlink" >>${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + echo "" >>${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + chmod 0744 ${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + tar -c -f ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-dsmg600.bin \ + -C ${DEPLOY_DIR_IMAGE} firmupgrade + rm -rf ${DEPLOY_DIR_IMAGE}/firmupgrade +} + +IMAGE_POSTPROCESS_COMMAND += "dsmg600_pack_image; " diff --git a/classes/nas100d-image.bbclass b/classes/nas100d-image.bbclass new file mode 100644 index 0000000000..0d48ebd476 --- /dev/null +++ b/classes/nas100d-image.bbclass @@ -0,0 +1,19 @@ +nas100d_pack_image () { + install -d ${DEPLOY_DIR_IMAGE}/firmupgrade + install -m 0755 ${DEPLOY_DIR_IMAGE}/zImage-nas100d${SITEINFO_ENDIANESS} \ + ${DEPLOY_DIR_IMAGE}/firmupgrade/ip-ramdisk + install -m 0644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ + ${DEPLOY_DIR_IMAGE}/firmupgrade/rootfs.gz + touch ${DEPLOY_DIR_IMAGE}/firmupgrade/usr.cramfs + chmod 0644 ${DEPLOY_DIR_IMAGE}/firmupgrade/usr.cramfs + echo "hwid=1.0.1" >${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + echo "model=koala" >>${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + echo "vendor=iomega" >>${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + echo "" >>${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + chmod 0744 ${DEPLOY_DIR_IMAGE}/firmupgrade/version.msg + tar -c -f ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-nas100d.bin \ + -C ${DEPLOY_DIR_IMAGE} firmupgrade + rm -rf ${DEPLOY_DIR_IMAGE}/firmupgrade +} + +IMAGE_POSTPROCESS_COMMAND += "nas100d_pack_image; " diff --git a/classes/nslu2-image.bbclass b/classes/nslu2-image.bbclass new file mode 100644 index 0000000000..e1af34fa57 --- /dev/null +++ b/classes/nslu2-image.bbclass @@ -0,0 +1,20 @@ +nslu2_pack_image () { + install -d ${DEPLOY_DIR_IMAGE}/slug + install -m 0644 ${STAGING_LIBDIR}/nslu2-binaries/RedBoot \ + ${STAGING_LIBDIR}/nslu2-binaries/Trailer \ + ${STAGING_LIBDIR}/nslu2-binaries/SysConf \ + ${DEPLOY_DIR_IMAGE}/slug/ + install -m 0644 ${DEPLOY_DIR_IMAGE}/zImage-nslu2${SITEINFO_ENDIANESS} \ + ${DEPLOY_DIR_IMAGE}/slug/vmlinuz + install -m 0644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ + ${DEPLOY_DIR_IMAGE}/slug/flashdisk.jffs2 + install -m 0644 ${STAGING_FIRMWARE_DIR}/NPE-B ${DEPLOY_DIR_IMAGE}/slug/ + cd ${DEPLOY_DIR_IMAGE}/slug + slugimage -p -b RedBoot -s SysConf -k vmlinuz \ + -r Ramdisk:1,Flashdisk:flashdisk.jffs2 -m NPE-B -t Trailer \ + -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-nslu2.bin + rm -rf ${DEPLOY_DIR_IMAGE}/slug +} + +EXTRA_IMAGEDEPENDS += 'slugimage-native nslu2-linksys-firmware ixp4xx-npe upslug2-native' +IMAGE_POSTPROCESS_COMMAND += "nslu2_pack_image; " diff --git a/classes/nslu2-jffs2-image.bbclass b/classes/nslu2-jffs2-image.bbclass deleted file mode 100644 index 56ad0f0659..0000000000 --- a/classes/nslu2-jffs2-image.bbclass +++ /dev/null @@ -1,18 +0,0 @@ -NSLU2_SLUGIMAGE_ARGS ?= "" - -nslu2_pack_image () { - install -d ${DEPLOY_DIR_IMAGE}/slug - install -m 0644 ${STAGING_LIBDIR}/nslu2-binaries/RedBoot \ - ${STAGING_LIBDIR}/nslu2-binaries/Trailer \ - ${STAGING_LIBDIR}/nslu2-binaries/SysConf \ - ${DEPLOY_DIR_IMAGE}/slug/ - install -m 0644 ${DEPLOY_DIR_IMAGE}/zImage-${IMAGE_BASENAME} ${DEPLOY_DIR_IMAGE}/slug/vmlinuz - install -m 0644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/slug/flashdisk.jffs2 - cd ${DEPLOY_DIR_IMAGE}/slug - slugimage -p -b RedBoot -s SysConf -r Ramdisk:1,Flashdisk:flashdisk.jffs2 -t Trailer \ - -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flashdisk.img ${NSLU2_SLUGIMAGE_ARGS} - rm -rf ${DEPLOY_DIR_IMAGE}/slug -} - -EXTRA_IMAGEDEPENDS += 'slugimage-native nslu2-linksys-firmware' -IMAGE_POSTPROCESS_COMMAND += "nslu2_pack_image; " diff --git a/classes/nslu2-ramdisk-image.bbclass b/classes/nslu2-ramdisk-image.bbclass deleted file mode 100644 index 0b545854fd..0000000000 --- a/classes/nslu2-ramdisk-image.bbclass +++ /dev/null @@ -1,18 +0,0 @@ -NSLU2_SLUGIMAGE_ARGS ?= "" - -nslu2_pack_image () { - install -d ${DEPLOY_DIR_IMAGE}/slug - install -m 0644 ${STAGING_LIBDIR}/nslu2-binaries/RedBoot \ - ${STAGING_LIBDIR}/nslu2-binaries/Trailer \ - ${STAGING_LIBDIR}/nslu2-binaries/SysConf \ - ${DEPLOY_DIR_IMAGE}/slug/ - install -m 0644 ${DEPLOY_DIR_IMAGE}/zImage-${IMAGE_BASENAME} ${DEPLOY_DIR_IMAGE}/slug/vmlinuz - install -m 0644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext2.gz ${DEPLOY_DIR_IMAGE}/slug/ramdisk.ext2.gz - cd ${DEPLOY_DIR_IMAGE}/slug - slugimage -p -b RedBoot -s SysConf -r Ramdisk:ramdisk.ext2.gz -t Trailer \ - -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.ramdisk.img ${NSLU2_SLUGIMAGE_ARGS} - rm -rf ${DEPLOY_DIR_IMAGE}/slug -} - -EXTRA_IMAGEDEPENDS += 'slugimage-native nslu2-linksys-firmware' -IMAGE_POSTPROCESS_COMMAND += "nslu2_pack_image; " -- cgit v1.2.3 From 2555e03ec4371f13f8d8101934d17696bc91027a Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 15 Feb 2007 06:35:58 +0000 Subject: openmoko-base.bbclass: switch to svn http transport, as requested by Harald Welte --- classes/openmoko-base.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/openmoko-base.bbclass b/classes/openmoko-base.bbclass index 7a274b0d2c..35243c9752 100644 --- a/classes/openmoko-base.bbclass +++ b/classes/openmoko-base.bbclass @@ -13,7 +13,7 @@ def openmoko_base_get_subdir(d): SUBDIR = "${@openmoko_base_get_subdir(d)}" -SRC_URI := "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/${SUBDIR};module=${PN};proto=https" +SRC_URI := "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/${SUBDIR};module=${PN};proto=http" S = "${WORKDIR}/${PN}" FILES_${PN} += "${datadir}/icons" -- cgit v1.2.3 From edc36b768e7ebba8f379eb0ede51a35712601b22 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Thu, 15 Feb 2007 20:12:02 +0000 Subject: autotools.bbclass: merge in patch from openmoko to get intltool working for some packages --- classes/autotools.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index 927e3432b7..33546e0eb6 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -115,7 +115,7 @@ autotools_do_configure() { echo "no" | glib-gettextize --force --copy fi fi - if grep "^AC_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then + if grep "^[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then oenote Executing intltoolize --copy --force --automake intltoolize --copy --force --automake fi -- cgit v1.2.3 From 4d1da7a5ba85a15e1ea6f483a85026f56841f1ac Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Fri, 16 Feb 2007 15:45:38 +0000 Subject: classes/insane.bbclass: Grep through config.log to check for CROSS Compile errors -Inspired by doku's work on mpd's buildsystem grep through the config.log and find broken autotools tests -Make errors fatal so we will notice these things more quickly. --- classes/insane.bbclass | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index e30375288d..2599348351 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -9,6 +9,7 @@ # -Check if .la files wrongly point to workdir # -Check if .pc files wrongly point to workdir # -Check if packages contains .debug directories or .so files where they should be in -dev or -dbg +# -Check if config.log contains traces to broken autoconf tests # @@ -33,12 +34,12 @@ def package_qa_check_rpath(file,name,d): 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") + 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.error("QA Issue package %s contains bad RPATH %s in file %s" % (name, txt, file)) + bb.fatal("QA Issue package %s contains bad RPATH %s in file %s" % (name, txt, file)) pass @@ -51,11 +52,11 @@ def package_qa_check_devdbg(path, name,d): import bb if not "-dev" in name: if path[-3:] == ".so": - bb.error("QA Issue: non dev package contains .so: %s" % name) + bb.fatal("QA Issue: non dev package contains .so: %s" % name) if not "-dbg" in name: if '.debug' in path: - bb.error("QA Issue: non debug package contains .debug directory: %s" % name) + bb.fatal("QA Issue: non debug package contains .debug directory: %s" % name) def package_qa_check_perm(path,name,d): """ @@ -121,7 +122,7 @@ def package_qa_check_rdepends(pkg, workdir, d): # Now do the sanity check!!! for rdepend in rdepends: if "-dbg" in rdepend: - bb.error("QA issue, koen give us a better msg!!!") + bb.fatal("QA issue, koen give us a better msg!!!") # The PACKAGE FUNC to scan each package python do_package_qa () { @@ -149,3 +150,14 @@ python do_qa_staging() { package_qa_check_staged(bb.data.getVar('STAGING_DIR',d,True), d) } + +# Check broken config.log files +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)): + 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") +} -- cgit v1.2.3 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 From 4f9f17b0409566ed1f09f95341442d8554449c21 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 18 Feb 2007 23:12:19 +0000 Subject: classes/insane.bbclass: Add a small elf reader and check ABI,ARCH and Endian Add a small ELF parser and read OSABI, ABIVERSION, ENDIAN and MACHINE. This code compares TARGET_OS and TARGET_ARCH to a list of known versions. Currently we have values for linux and linux-uclibc for arm, armeb and powerpc. mips, i386, amd64, ia64 are missing. ABI wise ARM EABI is missing as well, but koen is likely to enter the values into the documented dict --- classes/insane.bbclass | 130 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index d11d8ddd7e..54b6b3b2dc 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -24,6 +24,107 @@ inherit package PACKAGE_DEPENDS += "pax-utils-native" PACKAGEFUNCS += " do_package_qa " + +# +# dictionary for elf headers +# +# feel free to add and correct. the ARM EABI needs another column and we +# need mips, i386 and amd64 input (abi versions) +# +# TARGET_OS TARGET_ARCH MACHINE, OSABI, ABIVERSION, Little Endian +def package_qa_get_machine_dict(): + return { + "linux" : { "arm" : (40, 97, 0, True), + "armeb": (40, 97, 0, False), + "powerpc": (20, 0, 0, False), + }, + "linux-uclibc" : { "arm" : (40, 97, 0, True), + "armeb": (40, 97, 0, False), + "powerpc": (20, 0, 0, False), + }, + } + +# factory for a class, embedded in a method +def package_qa_get_elf(path): + class ELFFile: + EI_NIDENT = 16 + + EI_CLASS = 4 + EI_DATA = 5 + EI_VERSION = 6 + EI_OSABI = 7 + EI_ABIVERSION = 8 + + # possible values for EI_CLASS + ELFCLASSNONE = 0 + ELFCLASS32 = 1 + ELFCLASS64 = 2 + + # possible value for EI_VERSION + EV_CURRENT = 1 + + # possible values for EI_DATA + ELFDATANONE = 0 + ELFDATA2LSB = 1 + ELFDATA2MSB = 2 + + def my_assert(expectation, result): + if not expectation == result: + print "'%x','%x'" % (ord(expectation), ord(result)) + raise "This does not work as expected" + my_assert = staticmethod(my_assert) + + def __init__(self, name): + self.name = name + + def open(self): + self.file = file(self.name, "r") + self.data = self.file.read(ELFFile.EI_NIDENT+4) + + ELFFile.my_assert(len(self.data), ELFFile.EI_NIDENT+4) + ELFFile.my_assert(self.data[0], chr(0x7f) ) + ELFFile.my_assert(self.data[1], 'E') + ELFFile.my_assert(self.data[2], 'L') + ELFFile.my_assert(self.data[3], 'F') + ELFFile.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32)) # only 32 bits + ELFFile.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) ) + + self.sex = self.data[ELFFile.EI_DATA] + if self.sex == chr(ELFFile.ELFDATANONE): + raise "Can't be" + elif self.sex == chr(ELFFile.ELFDATA2LSB): + print "little" + self.sex = "<" + elif self.sex == chr(ELFFile.ELFDATA2MSB): + print "big" + self.sex = ">" + else: + raise "Even more worse" + + def osAbi(self): + return ord(self.data[ELFFile.EI_OSABI]) + + def abiVersion(self): + return ord(self.data[ELFFile.EI_ABIVERSION]) + + def isLittleEndian(self): + return self.sex == "<" + + def isBigEngian(self): + return self.sex == ">" + + def machine(self): + """ + We know the sex stored in self.sex and we + know the position + """ + import struct + (a,) = struct.unpack(self.sex+"H", self.data[18:20]) + return a + + return ELFFile(path) + + # # # Known Error classes @@ -31,6 +132,7 @@ PACKAGEFUNCS += " do_package_qa " # 1 - package contains a dangerous RPATH # 2 - package depends on debug package # 3 - non dbg contains .so +# 4 - wrong architecture # # @@ -59,6 +161,7 @@ def package_qa_write_error(error_class, name, path, d): "package contains RPATH", "package depends on debug package", "non dbg contains .debug", + "wrong archutecture", ] @@ -125,7 +228,34 @@ def package_qa_check_arch(path,name,d): """ Check if archs are compatible """ + import bb + target_os = bb.data.getVar('TARGET_OS', d, True) + target_arch = bb.data.getVar('TARGET_ARCH', d, True) + + #this will throw an exception, then fix the dict above + (machine, osabi, abiversion, littleendian) = package_qa_get_machine_dict()[target_os][target_arch] + elf = package_qa_get_elf(path) + try: + elf.open() + except: + # just for debbugging to check the parser, remove once convinced... + bb.note("ELF reading failed on '%s'" % path) + return True + sane = True + if not machine == elf.machine(): + bb.error("Architecture did not match (%d to %d) on %s", (machine, elf.machine(), package_qa_clean_path(path,d))) + sane = package_qa_make_fatal_error( 4, name, path, d ) + elif not osabi == elf.osAbi(): + bb.error("OSABI did not match (%d to %d) on %s", (osabi, elf.osAbi(), package_qa_clean_path(path,d))) + sane = package_qa_make_fatal_error( 4, name, path, d ) + elif not abiversion == elf.abiVersion(): + bb.error("ABI version did not match (%d to %d) on %s", (abiversion, elf.abiVersion(), package_qa_clean_path(path,d))) + sane = package_qa_make_fatal_error( 4, name, path, d ) + elif not littleendian == elf.isLittleEndian(): + bb.error("Endiannes did not match (%d to %d) on %s", (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d))) + sane = package_qa_make_fatal_error( 4, name, path, d ) + return sane def package_qa_check_pcla(path,name,d): -- cgit v1.2.3 From a4cef58d43b3733a4a513e550b94d8713ee56401 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Sun, 18 Feb 2007 23:14:06 +0000 Subject: classes/insane.bbclass: Be less verbose --- classes/insane.bbclass | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 54b6b3b2dc..cda2ebc917 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -70,7 +70,7 @@ def package_qa_get_elf(path): def my_assert(expectation, result): if not expectation == result: - print "'%x','%x'" % (ord(expectation), ord(result)) + #print "'%x','%x'" % (ord(expectation), ord(result)) raise "This does not work as expected" my_assert = staticmethod(my_assert) @@ -93,10 +93,8 @@ def package_qa_get_elf(path): if self.sex == chr(ELFFile.ELFDATANONE): raise "Can't be" elif self.sex == chr(ELFFile.ELFDATA2LSB): - print "little" self.sex = "<" elif self.sex == chr(ELFFile.ELFDATA2MSB): - print "big" self.sex = ">" else: raise "Even more worse" @@ -239,7 +237,6 @@ def package_qa_check_arch(path,name,d): elf.open() except: # just for debbugging to check the parser, remove once convinced... - bb.note("ELF reading failed on '%s'" % path) return True sane = True -- cgit v1.2.3 From a290eafb5fe4cc033597745271adf06c31420e8c Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Mon, 19 Feb 2007 08:13:56 +0000 Subject: insane.bbclass: added dict entries for mipsel, i386, x86_64 x86_64 can not be detected properly with this code - needed change: - ELFFile.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32)) # only 32 bits + ELFFile.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64)) --- classes/insane.bbclass | 3 +++ 1 file changed, 3 insertions(+) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index cda2ebc917..c0c1516838 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -37,10 +37,13 @@ def package_qa_get_machine_dict(): "linux" : { "arm" : (40, 97, 0, True), "armeb": (40, 97, 0, False), "powerpc": (20, 0, 0, False), + "i386": ( 3, 0, 0, True), + "x64_64": (62, 0, 0, True), }, "linux-uclibc" : { "arm" : (40, 97, 0, True), "armeb": (40, 97, 0, False), "powerpc": (20, 0, 0, False), + "mipsel": ( 8, 0, 0, True), }, } -- cgit v1.2.3 From f618c8db1217ae016bdba9a644fa9250514097a2 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Mon, 19 Feb 2007 08:29:34 +0000 Subject: insane.bbclass: added ia64, alpha, hppa, m68k, mips, s390, sparc based on Debian packages --- classes/insane.bbclass | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index c0c1516838..e8f7dfc5ec 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -39,6 +39,13 @@ def package_qa_get_machine_dict(): "powerpc": (20, 0, 0, False), "i386": ( 3, 0, 0, True), "x64_64": (62, 0, 0, True), + "ia64": (50, 0, 0, True), + "alpha": (36902, 0, 0, True), + "hppa": (15, 3, 0, False), + "m68k": ( 4, 0, 0, False), + "mips": ( 8, 0, 0, False), + "s390": (22, 0, 0, False), + "sparc": ( 2, 0, 0, False), }, "linux-uclibc" : { "arm" : (40, 97, 0, True), "armeb": (40, 97, 0, False), -- cgit v1.2.3 From 46c66787955ae8a27e34556232804d0a2b01a2c1 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 19 Feb 2007 10:28:48 +0000 Subject: insane.bbclass: fixes * change "," to "%" so python doesn't die if an error occurs * spell architecture correctly * add arm/eabi tupple that works for stripped binaries, but fails for -dbg binaries (abiversion 0 vs 97) --- classes/insane.bbclass | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index e8f7dfc5ec..f4e426b17e 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -28,8 +28,7 @@ PACKAGEFUNCS += " do_package_qa " # # dictionary for elf headers # -# feel free to add and correct. the ARM EABI needs another column and we -# need mips, i386 and amd64 input (abi versions) +# feel free to add and correct. # # TARGET_OS TARGET_ARCH MACHINE, OSABI, ABIVERSION, Little Endian def package_qa_get_machine_dict(): @@ -52,6 +51,9 @@ def package_qa_get_machine_dict(): "powerpc": (20, 0, 0, False), "mipsel": ( 8, 0, 0, True), }, + "linux-gnueabi" : { + "arm" : (40, 0, 0, True), + }, } # factory for a class, embedded in a method @@ -169,7 +171,7 @@ def package_qa_write_error(error_class, name, path, d): "package contains RPATH", "package depends on debug package", "non dbg contains .debug", - "wrong archutecture", + "wrong architecture", ] @@ -251,16 +253,16 @@ def package_qa_check_arch(path,name,d): sane = True if not machine == elf.machine(): - bb.error("Architecture did not match (%d to %d) on %s", (machine, elf.machine(), package_qa_clean_path(path,d))) + bb.error("Architecture did not match (%d to %d) on %s" %(machine, elf.machine(), package_qa_clean_path(path,d))) sane = package_qa_make_fatal_error( 4, name, path, d ) elif not osabi == elf.osAbi(): - bb.error("OSABI did not match (%d to %d) on %s", (osabi, elf.osAbi(), package_qa_clean_path(path,d))) + bb.error("OSABI did not match (%d to %d) on %s" % (osabi, elf.osAbi(), package_qa_clean_path(path,d))) sane = package_qa_make_fatal_error( 4, name, path, d ) elif not abiversion == elf.abiVersion(): - bb.error("ABI version did not match (%d to %d) on %s", (abiversion, elf.abiVersion(), package_qa_clean_path(path,d))) + bb.error("ABI version did not match (%d to %d) on %s" % (abiversion, elf.abiVersion(), package_qa_clean_path(path,d))) sane = package_qa_make_fatal_error( 4, name, path, d ) elif not littleendian == elf.isLittleEndian(): - bb.error("Endiannes did not match (%d to %d) on %s", (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d))) + bb.error("Endiannes did not match (%d to %d) on %s" % (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d))) sane = package_qa_make_fatal_error( 4, name, path, d ) return sane -- cgit v1.2.3 From e3b13afcbb22a3c1200e79e8da2384871a872679 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Mon, 19 Feb 2007 13:00:07 +0000 Subject: insane.bbclass: fix some more ',' vs '%' issues --- classes/insane.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index f4e426b17e..0b2f8ee06c 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -377,5 +377,5 @@ python do_qa_configure() { 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. Rerun configure task after fixing this. Path was '%s'", root) + 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 51d83b9d3ea133cf3563e28f2037f399676fb333 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Mon, 19 Feb 2007 14:50:47 +0000 Subject: classes/insane.bbclass: Remove whitespace --- classes/insane.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 0b2f8ee06c..8a16922145 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -52,8 +52,8 @@ def package_qa_get_machine_dict(): "mipsel": ( 8, 0, 0, True), }, "linux-gnueabi" : { - "arm" : (40, 0, 0, True), - }, + "arm" : (40, 0, 0, True), + }, } # factory for a class, embedded in a method -- cgit v1.2.3 From d285900f1c5967c1312541979f3fb89e621d00b6 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Mon, 19 Feb 2007 14:56:20 +0000 Subject: classes/insane.bbclass: Make the .so-check check for symlinks (merge poky r1258,r1195) The .so check now looks for symlinks ending with .so. These are a typical trait of -dev packages and kills a lot of false positives. This was authored by ross and was taken from the poky svn repository. --- classes/insane.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 8a16922145..ad95603554 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -212,9 +212,9 @@ def package_qa_check_devdbg(path, name,d): sane = True if not "-dev" in name: - if path[-3:] == ".so": + if path[-3:] == ".so" and os.path.islink(path): 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))) + bb.error("QA Issue: non -dev package %s contains symlink .so: %s path '%s'" % (name, package_qa_clean_path(path,d))) if package_qa_make_fatal_error( 0, name, path, d ): sane = False -- cgit v1.2.3 From a6bf9a11ca4488cbe5f3e7e75f68c7346603252b Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Mon, 19 Feb 2007 16:57:13 +0000 Subject: classes/insane.bbclass: check stages .pc and .la for sanity native ones: .la files should have installed=yes (at least I believe this). And somehow some believe this as well, some don't though... some like fakeroot love to install two .la files... non-native: .la should have installed=no both: should not point to tmp/work. libgettext and libltdl(libtool) fails this... happy fixing and arguing --- classes/insane.bbclass | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index ad95603554..166493691b 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -143,6 +143,8 @@ def package_qa_get_elf(path): # 2 - package depends on debug package # 3 - non dbg contains .so # 4 - wrong architecture +# 5 - .la contains installed=yes or reference to the workdir +# 6 - .pc contains reference to /usr/include or workdir # # @@ -172,6 +174,8 @@ def package_qa_write_error(error_class, name, path, d): "package depends on debug package", "non dbg contains .debug", "wrong architecture", + "evil hides inside the .la", + "evil hides inside the .pc", ] @@ -278,8 +282,40 @@ def package_qa_check_staged(path,d): """ Check staged la and pc files for sanity -e.g. installed being false + + As this is run after every stage we should be able + to find the one responsible for the errors easily even + if we look at every .pc and .la file """ + import os, bb + sane = True + workdir = os.path.join(bb.data.getVar('TMPDIR', d, True), "work") + + if bb.data.inherits_class("native", d): + installed = "installed=no" + else: + installed = "installed=yes" + + # find all .la and .pc files + # read the content + # and check for stuff that looks wrong + for root, dirs, files in os.walk(path): + for file in files: + path = os.path.join(root,file) + if file[-2:] == "la": + file_content = open(path).read() + if installed in file_content or workdir in file_content: + bb.error("QA issue: %s failed sanity test (reference to workdir or installed)" % file ) + if package_qa_make_fatal_error( 5, "staging", path, d): + sane = False + elif file[-2:] == "pc": + file_content = open(path).read() + if "/usr/include" in file_content or workdir in file_content: + bb.error("QA issue: %s failed sanity test (reference to /usr/include or workdir)" % file ) + if package_qa_make_fatal_error( 6, "staging", path, d): + sane = False + return sane # Walk over all files in a directory and call func @@ -364,9 +400,10 @@ python do_package_qa () { # The Staging Func, to check all staging addtask qa_staging after do_populate_staging before do_build python do_qa_staging() { - bb.note("Staged!") + bb.note("QA checking staging") - package_qa_check_staged(bb.data.getVar('STAGING_DIR',d,True), d) + if not package_qa_check_staged(bb.data.getVar('STAGING_LIBDIR',d,True), d): + bb.fatal("QA staging was broken by the package built above") } # Check broken config.log files -- cgit v1.2.3 From f1b098d1a9bf05fbe9d6aa6e51c739f43eca3a12 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Mon, 19 Feb 2007 17:14:03 +0000 Subject: classes/insane.bbclass: missing import os was added in the .so check --- classes/insane.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 166493691b..9a046cb32f 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -212,7 +212,7 @@ def package_qa_check_devdbg(path, name,d): non dev packages containing """ - import bb + import bb, os sane = True if not "-dev" in name: -- cgit v1.2.3