diff options
Diffstat (limited to 'classes')
-rw-r--r-- | classes/base.bbclass | 2 | ||||
-rw-r--r-- | classes/insane.bbclass | 11 | ||||
-rw-r--r-- | classes/native.bbclass | 47 | ||||
-rw-r--r-- | classes/packaged-staging.bbclass | 2 | ||||
-rw-r--r-- | classes/pkgconfig.bbclass | 30 | ||||
-rw-r--r-- | classes/sdk.bbclass | 12 | ||||
-rw-r--r-- | classes/testlab.bbclass | 65 |
7 files changed, 104 insertions, 65 deletions
diff --git a/classes/base.bbclass b/classes/base.bbclass index 7609c05851..615d02d07e 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1,4 +1,4 @@ -BB_DEFAULT_TASK = "build" +BB_DEFAULT_TASK ?= "build" # like os.path.join but doesn't treat absolute RHS specially def base_path_join(a, *p): diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 97cf036dd9..5ff49cd65e 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -333,12 +333,15 @@ def package_qa_check_staged(path,d): import os, bb sane = True - workdir = os.path.join(bb.data.getVar('TMPDIR', d, True), "work") + tmpdir = bb.data.getVar('TMPDIR', d, True) + workdir = os.path.join(tmpdir, "work") - if bb.data.inherits_class("native", d): + if bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d): installed = "installed=no" + pkgconfigcheck = workdir else: installed = "installed=yes" + pkgconfigcheck = tmpdir # find all .la and .pc files # read the content @@ -356,8 +359,8 @@ def package_qa_check_staged(path,d): sane = package_qa_handle_error(8, error_msg, "staging", path, d) elif file[-2:] == "pc": file_content = open(path).read() - if workdir in file_content: - error_msg = "%s failed sanity test (workdir) in path %s" % (file,root) + if pkgconfigcheck in file_content: + error_msg = "%s failed sanity test (tmpdir) in path %s" % (file,root) sane = package_qa_handle_error(6, error_msg, "staging", path, d) return sane diff --git a/classes/native.bbclass b/classes/native.bbclass index 934303cc0c..8f2b6f3fec 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -47,39 +47,33 @@ export AS = "${HOST_PREFIX}as" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" - # Path prefixes -base_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}" -prefix = "${base_prefix}" -exec_prefix = "${base_prefix}" +export base_prefix = "${STAGING_DIR_NATIVE}" +export prefix = "${STAGING_DIR_NATIVE}${layout_prefix}" +export exec_prefix = "${STAGING_DIR_NATIVE}${layout_exec_prefix}" # Base paths -base_bindir = "${base_prefix}/bin" -base_sbindir = "${base_prefix}/bin" -base_libdir = "${base_prefix}/lib" +export base_bindir = "${STAGING_DIR_NATIVE}${layout_base_bindir}" +export base_sbindir = "${STAGING_DIR_NATIVE}${layout_base_sbindir}" +export base_libdir = "${STAGING_DIR_NATIVE}${layout_base_libdir}" # Architecture independent paths -sysconfdir = "${prefix}/etc" -sharedstatedir = "${prefix}/com" -localstatedir = "${prefix}/var" -infodir = "${datadir}/info" -mandir = "${datadir}/man" -docdir = "${datadir}/doc" -servicedir = "${prefix}/srv" +export datadir = "${STAGING_DIR_NATIVE}${layout_datadir}" +export sysconfdir = "${STAGING_DIR_NATIVE}${layout_sysconfdir}" +export sharedstatedir = "${STAGING_DIR_NATIVE}${layout_sharedstatedir}" +export localstatedir = "${STAGING_DIR_NATIVE}${layout_localstatedir}" +export infodir = "${STAGING_DIR_NATIVE}${layout_infodir}" +export mandir = "${STAGING_DIR_NATIVE}${layout_mandir}" +export docdir = "${STAGING_DIR_NATIVE}${layout_docdir}" +export servicedir = "${STAGING_DIR_NATIVE}${layout_servicedir}" # Architecture dependent paths -bindir = "${exec_prefix}/bin" -sbindir = "${exec_prefix}/bin" -libexecdir = "${exec_prefix}/libexec" -libdir = "${exec_prefix}/lib" -includedir = "${exec_prefix}/include" -oldincludedir = "${exec_prefix}/include" - -# Datadir is made arch dependent here, primarily -# for autoconf macros, and other things that -# may be manipulated to handle crosscompilation -# issues. -datadir = "${exec_prefix}/share" +export bindir = "${STAGING_DIR_NATIVE}${layout_bindir}" +export sbindir = "${STAGING_DIR_NATIVE}${layout_sbindir}" +export libexecdir = "${STAGING_DIR_NATIVE}${layout_libexecdir}" +export libdir = "${STAGING_DIR_NATIVE}${layout_libdir}" +export includedir = "${STAGING_DIR_NATIVE}${layout_includedir}" +export oldincludedir = "${STAGING_DIR_NATIVE}${layout_includedir}" do_stage () { if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ] @@ -93,3 +87,4 @@ do_install () { } PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}" +PKG_CONFIG_SYSROOT_DIR = "" diff --git a/classes/packaged-staging.bbclass b/classes/packaged-staging.bbclass index 29ce72d65c..d822a86820 100644 --- a/classes/packaged-staging.bbclass +++ b/classes/packaged-staging.bbclass @@ -225,5 +225,5 @@ python do_package_stage () { bb.utils.unlockfile(lf) } -addtask package_stage after do_package_write_ipk do_package_write_deb do_package_write do_populate_staging before do_build +addtask package_stage after do_package_write do_populate_staging before do_build diff --git a/classes/pkgconfig.bbclass b/classes/pkgconfig.bbclass index d2176d8b39..d65f8a6253 100644 --- a/classes/pkgconfig.bbclass +++ b/classes/pkgconfig.bbclass @@ -2,36 +2,10 @@ inherit base DEPENDS_prepend = "pkgconfig-native " -# The namespaces can clash here hence the two step replace -def get_pkgconfig_mangle(d): - import bb.data - s = "-e ''" - if not bb.data.inherits_class('native', d): - s += " -e 's:=${libdir}:=OELIBDIR:;'" - s += " -e 's:=${includedir}:=OEINCDIR:;'" - s += " -e 's:=${datadir}:=OEDATADIR:'" - s += " -e 's:=${prefix}:=OEPREFIX:'" - s += " -e 's:=${exec_prefix}:=OEEXECPREFIX:'" - s += " -e 's:OELIBDIR:${STAGING_LIBDIR}:;'" - s += " -e 's:OEINCDIR:${STAGING_INCDIR}:;'" - s += " -e 's:OEDATADIR:${STAGING_DATADIR}:'" - s += " -e 's:OEPREFIX:${STAGING_DIR_HOST}${layout_prefix}:'" - s += " -e 's:OEEXECPREFIX:${STAGING_DIR_HOST}${layout_exec_prefix}:'" - s += " -e 's:-L${WORKDIR}\S*: :g'" - s += " -e 's:-I${WORKDIR}\S*: :g'" - - return s - -do_install_append () { - for pc in `find ${D} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do - sed -i ${@get_pkgconfig_mangle(d)} -e 's:${D}::g' -e 's:${STAGING_LIBDIR}:${libdir}:g' -e 's:${STAGING_INCDIR}:${includedir}:g' -e 's:${STAGING_DIR_TARGET}:${prefix}:g' ${pc} - done -} - do_stage_append () { + install -d ${PKG_CONFIG_DIR} for pc in `find ${S} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do pcname=`basename $pc` - install -d ${PKG_CONFIG_DIR} - cat $pc | sed ${@get_pkgconfig_mangle(d)} -e 's:${D}${libdir}\S*:${STAGING_LIBDIR}:g' -e 's:${D}${prefix}/include\S*:${STAGING_INCDIR}:g' > ${PKG_CONFIG_DIR}/$pcname + cat $pc > ${PKG_CONFIG_DIR}/$pcname done } diff --git a/classes/sdk.bbclass b/classes/sdk.bbclass index 63f12117eb..71c65a1629 100644 --- a/classes/sdk.bbclass +++ b/classes/sdk.bbclass @@ -6,15 +6,16 @@ OLD_PACKAGE_ARCH := ${PACKAGE_ARCH} PACKAGE_ARCH = "${BUILD_ARCH}-${OLD_PACKAGE_ARCH}-sdk" HOST_ARCH = "${BUILD_ARCH}" -HOST_VENDOR = "${BUILD_VENDOR}" +# This isn't BUILD_VENDOR since we don't want to clash with native staging +HOST_VENDOR = "${TARGET_VENDOR}" HOST_OS = "${BUILD_OS}" HOST_PREFIX = "${BUILD_PREFIX}" HOST_CC_ARCH = "${BUILD_CC_ARCH}" -CPPFLAGS = "${BUILD_CPPFLAGS}" -CFLAGS = "${BUILD_CFLAGS}" -CXXFLAGS = "${BUILD_CFLAGS}" -LDFLAGS = "${BUILD_LDFLAGS}" +CPPFLAGS = "${BUILDSDK_CPPFLAGS}" +CFLAGS = "${BUILDSDK_CFLAGS}" +CXXFLAGS = "${BUILDSDK_CFLAGS}" +LDFLAGS = "${BUILDSDK_LDFLAGS}" # Path prefixes prefix = "${SDK_PREFIX}" @@ -49,3 +50,4 @@ FILES_${PN}-dbg += "${prefix}/.debug \ ${prefix}/bin/.debug \ " +export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${HOST_SYS}" diff --git a/classes/testlab.bbclass b/classes/testlab.bbclass new file mode 100644 index 0000000000..5a88f3de62 --- /dev/null +++ b/classes/testlab.bbclass @@ -0,0 +1,65 @@ +# +# Performs various tests and analysises on images +# +# Copyright (C) 2007, 2008 Koen Kooi <koen@openembedded.org> + +# The current features are: +# 1) dump a list of installed packages +# 2) dump a list of sizes of installed packages +# 3) dependency graphs of installed packages + +# See +# * http://dominion.thruhere.net/koen/cms/the-testlab-strikes-again +# * http://dominion.thruhere.net/koen/cms/package-relations-inside-images +# for use cases + +# TODO: +# * log information to a server for safekeeping +# * use mtn certs to record this info into the scm +# * add test suite to run on the target device + + +# Needs 'dot', 'ipkg-cl' + +do_testlab() { +if [ -e ${IMAGE_ROOTFS}/etc/ipkg ] ; then + + TESTLAB_DIR="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-testlab" + mkdir -p ${TESTLAB_DIR}/ + ls -laR ${IMAGE_ROOTFS} >& ${TESTLAB_DIR}/files-in-image.txt + + echo > ${TESTLAB_DIR}/installed-packages.txt + echo -e "digraph depends {\n node [shape=plaintext]" > ${TESTLAB_DIR}/depends.dot + + for pkg in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} list_installed | awk '{print $1}') ; do + ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Filename | awk -F: '{print $2}' >> ${TESTLAB_DIR}/installed-packages.txt + + for depends in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Depends) ; do + echo "$pkg OPP $depends;" | grep -v "(" | grep -v ")" | grep -v Depends | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot + done + + for recommends in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Recom) ; do + echo "$pkg OPP $recommends [style=dotted];" | grep -v "(" | grep -v ")" | grep -v Recom | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot + done + done + + echo "}" >> ${TESTLAB_DIR}/depends.dot + + grep -v kernel_2 ${TESTLAB_DIR}/depends.dot | grep -v kernel_image > ${TESTLAB_DIR}/depends-nokernel.dot + grep -v libc6 ${TESTLAB_DIR}/depends-nokernel.dot | grep -v libgcc > ${TESTLAB_DIR}/depends-nokernel-nolibc.dot + grep -v update_ ${TESTLAB_DIR}/depends-nokernel-nolibc.dot > ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot + grep -v kernel_module ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot > ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate-nomodules.dot + + #dot has some library troubles when run under fakeroot, uncomment at your own risk + #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies.png ${TESTLAB_DIR}/depends.dot + #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc.png ${TESTLAB_DIR}/depends-nokernel-nolibc.dot + #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc-noupdate.png ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot + #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc-noupdate-nomodules.png ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate-nomodules.dot + + for file in $(cat ${TESTLAB_DIR}/installed-packages.txt) ; do + du -k $(find ${DEPLOY_DIR_IPK} -name "$file") + done | grep "\.ipk" | sed -e s:${DEPLOY_DIR_IPK}::g | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${TESTLAB_DIR}/installed-package-sizes.txt +fi +} + +IMAGE_POSTPROCESS_COMMAND += " do_testlab ;" |