[OE-core] Proposal: recipe feature switches
Chris Elston
celston at katalix.com
Thu Jun 30 17:10:32 UTC 2011
We're looking to base an embedded development on oe-core in the near
future, and one of the things we must have is the ability to configure
features in/out of recipes per distro.
At the moment some recipes have a configuration / set of dependencies
baked in to the recipe. For example, gstreamer has theora, ogg and
vorbis hard-coded in to it's EXTRA_OECONF and DEPENDS. Currently, you'd
have to override the DEPENDS and EXTRA_OECONF for the recipe in the
distro layer - which means moving knowledge about what EXTRA_OECONF
flags bring in which dependencies outside of the recipe. It seems that
this metadata is better contained in the recipe.
I'm proposing something along the lines of the following:
diff --git a/meta/classes/utils.bbclass b/meta/classes/utils.bbclass
index 9930a24..4f1c54f 100644
--- a/meta/classes/utils.bbclass
+++ b/meta/classes/utils.bbclass
@@ -84,6 +84,15 @@ def oe_system(d, cmd, **kwargs):
kwargs["shell"] = True
return oe_popen(d, cmd, **kwargs).wait()
+def oe_package_feature_switch(feature, switch_on, switch_off,
dependencies, d):
+ oeconf = d.getVar("EXTRA_OECONF", True)
+ if feature in d.getVar("PACKAGE_FEATURES", True).split():
+ d.setVar("EXTRA_OECONF", oeconf + " " + switch_on)
+ depends = d.getVar("DEPENDS", True)
+ d.setVar("DEPENDS", depends + " " + dependencies)
+ else:
+ d.setVar("EXTRA_OECONF", oeconf + " " + switch_off)
+
oe_soinstall() {
# Purpose: Install shared library file and
# create the necessary links
diff --git
a/meta/recipes-multimedia/gstreamer/gst-plugins-base_0.10.32.bb
b/meta/recipes-multimedia/gstreamer/gst-plugins-base_0.10.32.bb
index f81011f..6fc6405 100644
--- a/meta/recipes-multimedia/gstreamer/gst-plugins-base_0.10.32.bb
+++ b/meta/recipes-multimedia/gstreamer/gst-plugins-base_0.10.32.bb
@@ -6,10 +6,12 @@ LIC_FILES_CHKSUM =
"file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
file://gst/ffmpegcolorspace/utils.c;beginline=1;endline=20;md5=9c83a200b8e597b26ca29df20fc6ecd0"
-DEPENDS += "virtual/libx11 alsa-lib freetype gnome-vfs liboil libogg
libvorbis libxv libtheora avahi util-linux tremor"
+DEPENDS += "virtual/libx11 alsa-lib freetype gnome-vfs liboil libxv
avahi util-linux tremor"
RDEPENDS_${PN} += "gnome-vfs-plugin-file gnome-vfs-plugin-http
gnome-vfs-plugin-ftp \
gnome-vfs-plugin-sftp"
+PACKAGE_FEATURES ?= "ogg vorbis theora"
+
SRC_URI += " file://gst-plugins-base-tremor.patch"
SRC_URI[md5sum] = "2920af2b3162f3d9fbaa7fabc8ed4d38"
@@ -21,6 +23,12 @@ inherit gettext
EXTRA_OECONF += "--disable-freetypetest --disable-pango"
+python () {
+ oe_package_feature_switch("ogg", "--enable-ogg", "--disable-ogg",
"libogg", d)
+ oe_package_feature_switch("vorbis", "--enable-vorbis",
"--disable-vorbis", "libvorbis", d)
+ oe_package_feature_switch("theora", "--enable-theora",
"--disable-theora", "libtheora", d)
+}
+
do_configure_prepend() {
# This m4 file contains nastiness which conflicts with libtool 2.2.2
rm -f ${S}/m4/lib-link.m4
Then in your layer, you could configure which plugins gstreamer should
be built with like this:
PACKAGE_FEATURES_pn-gst-plugins-base = "ogg theora"
Or just filter out the package features that you don't want.
With a little extra work, it would also be possible to check the list of
package features a distro layer requests against those the recipe
actually implements. Then we could get an early warning when we pull
oe-core and a recipe has stopped implementing a feature.
Cheers,
Chris.
More information about the Openembedded-core
mailing list