Patchwork [1/8] add fontcache.bbclass

login
register
mail settings
Submitter Laurentiu Palcu
Date Feb. 5, 2013, 9:34 a.m.
Message ID <a306516e1af55efcd93563779e389448e16c97d3.1360055640.git.laurentiu.palcu@intel.com>
Download mbox | patch
Permalink /patch/44061/
State Accepted
Commit c31bf6514bdda951b315f16aa640f9d46232c060
Headers show

Comments

Laurentiu Palcu - Feb. 5, 2013, 9:34 a.m.
All font packages should inherit this class in order to generate the
proper postinst/postrm scriptlets.

The scriptlets will actually create a host intercept hook that will be
executed at the end, at do_rootfs time, after all packages have been
installed. This is good when there are many font packages.

[YOCTO #2923]

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
---
 meta/classes/fontcache.bbclass |   47 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
 create mode 100644 meta/classes/fontcache.bbclass
Richard Purdie - Feb. 7, 2013, 10:43 p.m.
On Thu, 2013-02-07 at 16:38 +0100, Marcin Juszkiewicz wrote:
> W dniu 05.02.2013 10:34, Laurentiu Palcu pisze:
> > All font packages should inherit this class in order to generate the
> > proper postinst/postrm scriptlets.
> > 
> > The scriptlets will actually create a host intercept hook that will be
> > executed at the end, at do_rootfs time, after all packages have been
> > installed. This is good when there are many font packages.
> > 
> > [YOCTO #2923]
> > 
> > Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
> > ---
> >  meta/classes/fontcache.bbclass |   47 ++++++++++++++++++++++++++++++++++++++++
> 
> > +${@qemu_run_binary(d, '$D', '/usr/bin/fc-cache')} --sysroot=$D >/dev/null 2>&1
> 
> What about platform which do not have qemu support? Like AArch64...
> 
> | Configuring libpcre-staticdev.
> | Building from feeds activated!
> | Running intercept scripts:
> | > Executing update_font_cache
> | ERROR: Function failed: do_rootfs (see
> /home/hrw/HDD/devel/canonical/aarch64/openembedded/build/tmp-eglibc/work/genericarmv8-oe-linux/linaro-image-sdk/1.0-r2/temp/log.do_rootfs.23211
> for further information)

Ideally the intercept code should fall back to running the postinst on
the target if qemu isn't available. Patches welcome to make that happen.

The hard part is this is an "allarch" recipe so we can't disable this
conditionally on aarch64. We can disable all intercept scripts I guess.

Or we make these packages arch specific on aarch64 I guess. 

Cheers,

Richard
Phil Blundell - Feb. 7, 2013, 11:18 p.m.
On Thu, 2013-02-07 at 16:38 +0100, Marcin Juszkiewicz wrote:
>> +${@qemu_run_binary(d, '$D', '/usr/bin/fc-cache')} --sysroot=$D
>/dev/null 2>&1
> What about platform which do not have qemu support? Like AArch64...

There are other places in the oe-core tree that already require working
qemu support so I don't think this is a qualitatively new issue.  I
suspect that in the long term, qemu is going to become another tool that
needs targetting to any new architecture, just like gcc, binutils,
glibc, linux, javascriptcore and so on.  

On the other hand, that "/usr/bin" looks a bit unwholesome to me. :-}

p.

Patch

diff --git a/meta/classes/fontcache.bbclass b/meta/classes/fontcache.bbclass
new file mode 100644
index 0000000..8381735
--- /dev/null
+++ b/meta/classes/fontcache.bbclass
@@ -0,0 +1,47 @@ 
+#
+# This class will generate the proper postinst/postrm scriptlets for font
+# packages.
+#
+
+DEPENDS += "qemu-native"
+inherit qemu
+
+FONT_PACKAGES ??= "${PN}"
+
+fontcache_common() {
+if [ "x$D" != "x" ] ; then
+	if [ ! -f $INTERCEPT_DIR/update_font_cache ]; then
+		cat << "EOF" > $INTERCEPT_DIR/update_font_cache
+#!/bin/sh
+
+${@qemu_run_binary(d, '$D', '/usr/bin/fc-cache')} --sysroot=$D >/dev/null 2>&1
+
+if [ $? -ne 0 ]; then
+    exit 1
+fi
+
+EOF
+	fi
+	exit 0
+fi
+
+fc-cache
+}
+
+python populate_packages_append() {
+    font_pkgs = d.getVar('FONT_PACKAGES', True).split()
+
+    for pkg in font_pkgs:
+        bb.note("adding fonts 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('fontcache_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('fontcache_common', True)
+        d.setVar('pkg_postrm_%s' % pkg, postrm)
+}