Since responses to my previous mail were generally positive, I've
reworked the package feature switches so that the interface is as RP
suggested.

In the recipe for foo you would have a set of features defined like
this:

PACKAGE_CONFIG[bar] = "--enable-bar, --disable-bar, libbar"
PACKAGE_CONFIG[baz] = "--enable-baz, --disable-baz, libbaz"

The default set of features for the package would be defined with:

PACKAGE_FEATURES ?= "bar baz" 

Perhaps this set of features could go into a metadata field in the .ipk
- would this be helpful for feed users?

The package features can then be tailored in a config/layer with
something like:

PACKAGE_FEATURES_pn-foo = "baz pop"

If a layer requests a feature not supported by the recipe, you get a
warning (should help distro maintainers detect bitrot in their layer):

WARNING: foo: Unknown feature 'pop' requested

The patch below uses gstreamer as an example of something which would
benefit from this:

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 8f4ef1e..ee8e914 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -396,6 +396,30 @@ python () {
             break
 
     bb.data.setVar('MULTIMACH_ARCH', multiarch, d)
+
+    features = bb.data.getVar('PACKAGE_FEATURES', d, True)
+    if features:
+        config = list(bb.data.getVarFlags('PACKAGE_CONFIG', d) or {})
+        oeconf = [ (bb.data.getVar('EXTRA_OECONF', d, True) or '') ]
+        depends = [ (bb.data.getVar('DEPENDS', d, True) or '') ]
+        for feature in features.split():
+            if feature in config:
+                settings = bb.data.getVarFlag('PACKAGE_CONFIG', feature, 
d).split(',')
+                oeconf.append(settings[0])
+                depends.append(settings[2])
+                config.remove(feature) 
+            else:
+                bb.warn("%s: Unknown feature '%s' requested" % (pn, feature))
+
+        for feature in config:
+            settings = bb.data.getVarFlag('PACKAGE_CONFIG', feature, 
d).split(',')
+            oeconf.append(settings[1])
+
+        if len(oeconf) > 1:
+            bb.data.setVar('EXTRA_OECONF', ' '.join(oeconf), d)
+
+        if len(depends) > 1:
+            bb.data.setVar('DEPENDS', ' '.join(depends), d)
 }
 
 def check_gcc3(data):
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..70f0171 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,16 @@ 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_CONFIG[ogg] = "--enable-ogg, --disable-ogg, libogg"
+PACKAGE_CONFIG[vorbis] = "--enable-vorbis, --disable-vorbis, libvorbis"
+PACKAGE_CONFIG[theora] = "--enable-theora, --disable-theora, libtheora"
+
+PACKAGE_FEATURES ?= "ogg vorbis theora" 
+
 SRC_URI += " file://gst-plugins-base-tremor.patch"
 
 SRC_URI[md5sum] = "2920af2b3162f3d9fbaa7fabc8ed4d38"
---

Cheers,

Chris.




_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to