From 208ff62db4cf977828f16a906429f857e025a789 Mon Sep 17 00:00:00 2001 From: Robert Yang Date: Sun, 2 Sep 2012 12:15:47 +0800 Subject: [PATCH] bin_package.bbclass: binary package recipe class This is used for the binary package recipe, it's been suggested that it would be a useful feature to be able to easily take an RPM or similar containing a software binary from a 3rd party software vendor and integrate it into an image created by the build system. * Brief introduction - The binary pkg can be .rpm, .deb, .ipk and other formats which can be unpacked by bitbake fetcher. - Let bitbake unpack the bianry package, just like unpack the source package. - Skip the do_configure and do_compile. - Install the files to ${D} - Other steps are similar to the source package's recipe. * Note: - The "subdir" parameter in the SRC_URI is useful for the binary package recipe, so I added an example in the comment. - I have sent a patch to bitbake-devel mailing list to support unpack the .rpm, .ipk, and .deb files. [YOCTO #1592] (From OE-Core rev: 7037f52909b8226d2afed4ac73c902d410afc112) Signed-off-by: Robert Yang Signed-off-by: Saul Wold Signed-off-by: Richard Purdie --- meta/classes/bin_package.bbclass | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 meta/classes/bin_package.bbclass diff --git a/meta/classes/bin_package.bbclass b/meta/classes/bin_package.bbclass new file mode 100644 index 0000000000..a52b75be5c --- /dev/null +++ b/meta/classes/bin_package.bbclass @@ -0,0 +1,36 @@ +# +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# Common variable and task for the binary package recipe. +# Basic principle: +# * The files have been unpacked to ${S} by base.bbclass +# * Skip do_configure and do_compile +# * Use do_install to install the files to ${D} +# +# Note: +# The "subdir" parameter in the SRC_URI is useful when the input package +# is rpm, ipk, deb and so on, for example: +# +# SRC_URI = "http://foo.com/foo-1.0-r1.i586.rpm;subdir=foo-1.0" +# +# Then the files would be unpacked to ${WORKDIR}/foo-1.0, otherwise +# they would be in ${WORKDIR}. +# + +# Skip the unwanted steps +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +# Install the files to ${D} +bin_package_do_install () { + # Do it carefully + [ -d "${S}" ] || exit 1 + cd ${S} || exit 1 + tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - . \ + | tar --no-same-owner -xpf - -C ${D} +} + +FILES_${PN} = "/" + +EXPORT_FUNCTIONS do_install