generic-poky/meta/classes/pixbufcache.bbclass
Richard Purdie e384d9ba0c pixbufcache: Use sceneQueueComplete event to simplify usage
Ensuring the native pixbuf cache is correct after new loaders have
been installed is tricky. This needs to be done without races
and work regardless of whether the build is from sstate or freshly
built for one or more modules.

This adds a hook into base.bbclass which is then triggered by the
code from pixbufcache. This patch is an improved version which
means base.bbclass has no pixbuf knowledge and the mechanism can
be reused in other cases.

(From OE-Core rev: b411085fefc8582d24c172db5f6610705eb44c2f)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2015-07-31 10:32:45 +01:00

68 lines
2.1 KiB
Text

#
# This class will generate the proper postinst/postrm scriptlets for pixbuf
# packages.
#
DEPENDS += "qemu-native"
inherit qemu
PIXBUF_PACKAGES ??= "${PN}"
pixbufcache_common() {
if [ "x$D" != "x" ]; then
$INTERCEPT_DIR/postinst_intercept update_pixbuf_cache ${PKG} mlprefix=${MLPREFIX} libdir=${libdir} \
bindir=${bindir} base_libdir=${base_libdir}
else
# Update the pixbuf loaders in case they haven't been registered yet
GDK_PIXBUF_MODULEDIR=${libdir}/gdk-pixbuf-2.0/2.10.0/loaders gdk-pixbuf-query-loaders --update-cache
if [ -x ${bindir}/gtk-update-icon-cache ] && [ -d ${datadir}/icons ]; then
for icondir in /usr/share/icons/*; do
if [ -d ${icondir} ]; then
gtk-update-icon-cache -t -q ${icondir}
fi
done
fi
fi
}
python populate_packages_append() {
pixbuf_pkgs = d.getVar('PIXBUF_PACKAGES', True).split()
for pkg in pixbuf_pkgs:
bb.note("adding pixbuf postinst and postrm scripts to %s" % pkg)
postinst = d.getVar('pkg_postinst_%s' % pkg, True) or d.getVar('pkg_postinst', True)
if not postinst:
postinst = '#!/bin/sh\n'
postinst += d.getVar('pixbufcache_common', True)
d.setVar('pkg_postinst_%s' % pkg, postinst)
postrm = d.getVar('pkg_postrm_%s' % pkg, True) or d.getVar('pkg_postrm', True)
if not postrm:
postrm = '#!/bin/sh\n'
postrm += d.getVar('pixbufcache_common', True)
d.setVar('pkg_postrm_%s' % pkg, postrm)
}
gdkpixbuf_complete() {
GDK_PIXBUF_FATAL_LOADER=1 ${STAGING_BINDIR_NATIVE}/gdk-pixbuf-query-loaders --update-cache || exit 1
}
#
# Add an sstate postinst hook to update the cache for native packages.
# An error exit during populate_sysroot_setscene allows bitbake to
# try to recover by re-building the package.
#
SSTATEPOSTINSTFUNCS_append_class-native = " pixbufcache_sstate_postinst"
# See base.bbclass for the other half of this
pixbufcache_sstate_postinst() {
if [ "${BB_CURRENTTASK}" = "populate_sysroot" ]; then
${gdkpixbuf_complete}
elif [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]; then
echo "${gdkpixbuf_complete}" >> ${STAGING_DIR}/sstatecompletions
fi
}