From patchwork Thu Mar 22 19:15:01 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: gtk-icon-cache.bbclass: Fix multiple rebuilds of the icon cache on first boot Date: Thu, 22 Mar 2012 19:15:01 -0000 From: =?utf-8?q?Andreas_M=C3=BCller_=3Cschnitzeltony=40googlemail=2Ecom=3E?= X-Patchwork-Id: 24179 Message-Id: <1332443701-24282-1-git-send-email-schnitzeltony@googlemail.com> To: openembedded-core@lists.openembedded.org * Before this patch every inheritance of this class rebuilt the full icon cache at the first boot. * With this patch the icon cache will only be build once at the first boot and on pkg installations that require it. * This patch reduces the time needed for the first boot from 96 minutes to 5 minutes on the test machine. * Build-tested incremental (BB_SIGNATURE_HANDLER = "OEBasicHash") & from scratch * Run-tested with systemd and opkg Signed-off-by: Samuel Stirtzel Signed-off-by: Andreas Müller --- meta/classes/gtk-icon-cache.bbclass | 19 +++++++++------- .../gtk+/gtk-update-icon-cache-runonce.bb | 23 ++++++++++++++++++++ .../gtk-update-icon-cache-runonce.in | 16 +++++++++++++ 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb create mode 100644 meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in diff --git a/meta/classes/gtk-icon-cache.bbclass b/meta/classes/gtk-icon-cache.bbclass index 60e3401..b48aabe 100644 --- a/meta/classes/gtk-icon-cache.bbclass +++ b/meta/classes/gtk-icon-cache.bbclass @@ -9,14 +9,16 @@ if [ "x$D" != "x" ]; then exit 1 fi -# 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 - -for icondir in /usr/share/icons/* ; do - if [ -d $icondir ] ; then - gtk-update-icon-cache -fqt $icondir - fi -done +# do not execute in case a final run-once is waiting +if [ ! -e ${sysconfdir}/init.d/gtk-update-icon-cache-runonce ]; then + # 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 + for icondir in /usr/share/icons/* ; do + if [ -d $icondir ] ; then + gtk-update-icon-cache -fqt $icondir + fi + done +fi } gtk_icon_cache_postrm() { @@ -56,3 +58,4 @@ python populate_packages_append () { d.setVar('pkg_postrm_%s' % pkg, postrm) } +RDEPENDS += "gtk-update-icon-cache-runonce" diff --git a/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb new file mode 100644 index 0000000..55bec67 --- /dev/null +++ b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "Init script calling gtk-update-icon-cache once" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58" + +SRC_URI = "file://gtk-update-icon-cache-runonce.in" + +INIT_SEQ_NUM = "99" + +inherit update-rc.d + +do_install() { + install -d ${D}${sysconfdir}/init.d + sed -e 's,@libdir@,${libdir},g' \ + -e 's,@datadir@,${datadir},g' \ + -e 's,@sysconfdir@,${sysconfdir},g' \ + -e 's,@INIT_SEQ_NUM@,${INIT_SEQ_NUM},g' \ + < ${WORKDIR}/gtk-update-icon-cache-runonce.in \ + > ${D}${sysconfdir}/init.d/gtk-update-icon-cache-runonce + chmod 755 ${D}${sysconfdir}/init.d/gtk-update-icon-cache-runonce +} + +INITSCRIPT_NAME = "gtk-update-icon-cache-runonce" +INITSCRIPT_PARAMS = "start ${INIT_SEQ_NUM} S ." diff --git a/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in new file mode 100644 index 0000000..8952e1a --- /dev/null +++ b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in @@ -0,0 +1,16 @@ +#!/bin/sh + +echo 'Updating the GTK icon cache...' + +# 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 + +for icondir in @datadir@/icons/* ; do + if [ -d $icondir ] ; then + gtk-update-icon-cache -fqt $icondir + fi +done + +# This script should only run once at the first boot of the machine +rm -f @sysconfdir@/rcS.d/S@INIT_SEQ_NUM@gtk-update-icon-cache-runonce +rm -f @sysconfdir@/init.d/gtk-update-icon-cache-runonce