summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2012-02-23 19:30:32 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-02-24 17:01:44 +0000
commitdfd6c546c4770350608e9a5313183d18f8119677 (patch)
tree437636b72eb03d1bfbe0f9c3c03498b5ed76661d /meta/recipes-core
parent5dc51532b6f6788fff1efed4c21252511620bd95 (diff)
downloadpoky-dfd6c546c4770350608e9a5313183d18f8119677.tar.gz
psplash: allow building multiple splash executables
Adds a SPLASH_IMAGES variable which you can set to include one or more images (listed in URI form as they would appear in SRC_URI), and an executable will be built for each one, with each executable packaged separately and managed at runtime using the alternatives system. An optional "outsuffix" parameter can be used to specify the suffix for the executable/package name. The images themselves can either be pre-processed image header files (produced using the make-image-header.sh script that comes with psplash), or alternatively you can provide a .png and it will be converted using the aforementioned script on the fly (at the expense of requiring gdk-pixbuf-native at build time). This has been implemented in such a way that you can still just provide your own psplash-poky-img.h in a bbappend and it will work as it did before; the only change being that the psplash executable is provided in a "psplash-default" package rather than in the main psplash package, and an RRECOMMENDS is set up to ensure psplash-default gets pulled in (if you specify your own file or change the outsuffix you will need to either install it separately yourself or add your own RRECOMMENDS relationship.) Implements [YOCTO #1947] (From OE-Core rev: d3de5f7308b4a42b809884119a670af5bedde38f) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core')
-rw-r--r--meta/recipes-core/psplash/psplash_git.bb93
1 files changed, 87 insertions, 6 deletions
diff --git a/meta/recipes-core/psplash/psplash_git.bb b/meta/recipes-core/psplash/psplash_git.bb
index 9112aa9168..42ea6151e5 100644
--- a/meta/recipes-core/psplash/psplash_git.bb
+++ b/meta/recipes-core/psplash/psplash_git.bb
@@ -7,27 +7,108 @@ LIC_FILES_CHKSUM = "file://psplash.h;md5=a87c39812c1e37f3451567cc29a29c8f"
7 7
8SRCREV = "e05374aae945bcfc6d962ed0d7b2774b77987e1d" 8SRCREV = "e05374aae945bcfc6d962ed0d7b2774b77987e1d"
9PV = "0.1+git${SRCPV}" 9PV = "0.1+git${SRCPV}"
10PR = "r0" 10PR = "r1"
11 11
12SRC_URI = "git://git.yoctoproject.org/${BPN};protocol=git \ 12SRC_URI = "git://git.yoctoproject.org/${BPN};protocol=git \
13 file://psplash-init \ 13 file://psplash-init \
14 file://psplash-poky-img.h" 14 ${SPLASH_IMAGES}"
15
16SPLASH_IMAGES = "file://psplash-poky-img.h;outsuffix=default"
17
18python __anonymous() {
19 oldpkgs = d.getVar("PACKAGES", True).split()
20 splashfiles = d.getVar('SPLASH_IMAGES', True).split()
21 pkgs = []
22 localpaths = []
23 haspng = False
24 for uri in splashfiles:
25 fetcher = bb.fetch2.Fetch([uri], d)
26 flocal = fetcher.localpath(uri)
27 fbase = os.path.splitext(os.path.basename(flocal))[0]
28 outsuffix = fetcher.ud[uri].parm.get("outsuffix")
29 if not outsuffix:
30 if fbase.startswith("psplash-"):
31 outsuffix = fbase[8:]
32 else:
33 outsuffix = fbase
34 if outsuffix.endswith('-img'):
35 outsuffix = outsuffix[:-4]
36 outname = "psplash-%s" % outsuffix
37 if outname == '' or outname in oldpkgs:
38 bb.fatal("The output name '%s' derived from the URI %s is not valid, please specify the outsuffix parameter" % (outname, uri))
39 else:
40 pkgs.append(outname)
41 if flocal.endswith(".png"):
42 haspng = True
43 localpaths.append(flocal)
44
45 # Set these so that we have less work to do in do_compile and do_install_append
46 d.setVar("SPLASH_INSTALL", " ".join(pkgs))
47 d.setVar("SPLASH_LOCALPATHS", " ".join(localpaths))
48
49 if haspng:
50 d.appendVar("DEPENDS", " gdk-pixbuf-native")
51
52 d.prependVar("PACKAGES", "%s " % (" ".join(pkgs)))
53 for p in pkgs:
54 d.setVar("FILES_%s" % p, "${bindir}/%s" % p)
55 d.setVar("ALTERNATIVE_PATH", "${bindir}/%s" % p)
56 d.setVar("ALTERNATIVE_PRIORITY", "100")
57 postinst = d.getVar("psplash_alternatives_postinst", True)
58 d.setVar('pkg_postinst_%s' % p, postinst)
59 postrm = d.getVar("psplash_alternatives_postrm", True)
60 d.setVar('pkg_postrm_%s' % p, postrm)
61 d.appendVar("RDEPENDS_%s" % p, " ${PN}")
62 if p == "psplash-default":
63 d.appendVar("RRECOMMENDS_${PN}", " %s" % p)
64}
15 65
16S = "${WORKDIR}/git" 66S = "${WORKDIR}/git"
17 67
18inherit autotools pkgconfig update-rc.d 68inherit autotools pkgconfig update-rc.d
19 69
20FILES_${PN} += "/mnt/.psplash" 70python do_compile () {
71 import shutil
21 72
22do_configure_prepend () { 73 # Build a separate executable for each splash image
23 cp -f ${WORKDIR}/psplash-poky-img.h ${S}/ 74 destfile = "%s/psplash-poky-img.h" % d.getVar('S', True)
75 localfiles = d.getVar('SPLASH_LOCALPATHS', True).split()
76 outputfiles = d.getVar('SPLASH_INSTALL', True).split()
77 for localfile, outputfile in zip(localfiles, outputfiles):
78 if localfile.endswith(".png"):
79 outp = commands.getstatusoutput('./make-image-header.sh %s POKY' % localfile)
80 print(outp[1])
81 fbase = os.path.splitext(os.path.basename(localfile))[0]
82 shutil.copyfile("%s-img.h" % fbase, destfile)
83 else:
84 shutil.copyfile(localfile, destfile)
85 # For some reason just updating the header is not enough, we have to touch the .c
86 # file in order to get it to rebuild
87 os.utime("psplash.c", None)
88 bb.build.exec_func("oe_runmake", d)
89 shutil.copyfile("psplash", outputfile)
24} 90}
25 91
26do_install_prepend() { 92do_install_append() {
27 install -d ${D}/mnt/.psplash/ 93 install -d ${D}/mnt/.psplash/
28 install -d ${D}${sysconfdir}/init.d/ 94 install -d ${D}${sysconfdir}/init.d/
29 install -m 0755 ${WORKDIR}/psplash-init ${D}${sysconfdir}/init.d/psplash.sh 95 install -m 0755 ${WORKDIR}/psplash-init ${D}${sysconfdir}/init.d/psplash.sh
96 install -d ${D}${bindir}
97 for i in ${SPLASH_INSTALL} ; do
98 install -m 0755 $i ${D}${bindir}/$i
99 done
100 rm -f ${D}${bindir}/psplash
30} 101}
31 102
103psplash_alternatives_postinst() {
104update-alternatives --install ${bindir}/psplash psplash ${ALTERNATIVE_PATH} ${ALTERNATIVE_PRIORITY}
105}
106
107psplash_alternatives_postrm() {
108update-alternatives --remove psplash ${ALTERNATIVE_PATH}
109}
110
111FILES_${PN} += "/mnt/.psplash"
112
32INITSCRIPT_NAME = "psplash.sh" 113INITSCRIPT_NAME = "psplash.sh"
33INITSCRIPT_PARAMS = "start 0 S . stop 20 0 1 6 ." 114INITSCRIPT_PARAMS = "start 0 S . stop 20 0 1 6 ."