busybox: configure according to {MACHINE, DISTRO}_FEATURES
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Tue, 6 Jul 2010 09:32:20 +0000 (09:32 +0000)
committerKhem Raj <raj.khem@gmail.com>
Fri, 9 Jul 2010 00:23:55 +0000 (17:23 -0700)
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
recipes/busybox/busybox-config.inc [new file with mode: 0644]
recipes/busybox/busybox.inc

diff --git a/recipes/busybox/busybox-config.inc b/recipes/busybox/busybox-config.inc
new file mode 100644 (file)
index 0000000..26ccec4
--- /dev/null
@@ -0,0 +1,28 @@
+# internal helper
+def busybox_cfg(feature, features, tokens, cnf, rem):
+       if type(tokens) == type(""):
+               tokens = [tokens]
+       rem.extend(['/^[# ]*' + token + '[ =]/d' for token in tokens])
+       if type(features) == type([]) and feature in features:
+               cnf.extend([token + '=y' for token in tokens])
+       else:
+               cnf.extend(['# ' + token + ' is not set' for token in tokens])
+# Map distro and machine features to config settings
+def features_to_busybox_settings(d):
+       cnf, rem = ([], [])
+       distro_features = bb.data.getVar('DISTRO_FEATURES', d).split()
+       machine_features = bb.data.getVar('MACHINE_FEATURES', d).split()
+       busybox_cfg('ipv6', distro_features, 'CONFIG_FEATURE_IPV6', cnf, rem)
+       busybox_cfg('largefile', distro_features, 'CONFIG_LFS', cnf, rem)
+       busybox_cfg('nls',  distro_features, 'CONFIG_LOCALE_SUPPORT', cnf, rem)
+       busybox_cfg('ipv4', distro_features, 'CONFIG_FEATURE_IFUPDOWN_IPV4', cnf, rem)
+       busybox_cfg('ipv6', distro_features, 'CONFIG_FEATURE_IFUPDOWN_IPV6', cnf, rem)
+       return "\n".join(cnf), "\n".join(rem)
+# X, Y = ${@features_to_uclibc_settings(d)}
+# unfortunately doesn't seem to work with bitbake, workaround:
+def features_to_busybox_conf(d):
+       cnf, rem = features_to_busybox_settings(d)
+       return cnf
+def features_to_busybox_del(d):
+       cnf, rem = features_to_busybox_settings(d)
+       return rem
index a5346bd..827e917 100644 (file)
@@ -70,10 +70,47 @@ RDEPENDS_${PN}-udhcpd += "${PN}"
 LD = "${CC} -nostdlib"
 
 inherit cml1 update-rc.d
+require busybox-config.inc
+
+configmangle = '/CROSS_COMPILER_PREFIX/d; \
+               /CONFIG_EXTRA_CFLAGS/d; \
+               '
+OE_FEATURES := "${@features_to_busybox_conf(d)}"
+OE_DEL      := "${@features_to_busybox_del(d)}"
+DO_IPv4 := ${@base_contains('DISTRO_FEATURES', 'ipv4', 1, 0, d)}
+DO_IPv6 := ${@base_contains('DISTRO_FEATURES', 'ipv6', 1, 0, d)}
+python () {
+  if "${OE_DEL}":
+    bb.data.setVar('configmangle_append', "${OE_DEL}" + "\n", d)
+  if "${OE_FEATURES}":
+    bb.data.setVar('configmangle_append',
+                   "/^### DISTRO FEATURES$/a\\\n%s\n\n" %
+                   ("\\n".join((bb.data.expand("${OE_FEATURES}", d).split("\n")))),
+                   d)
+  bb.data.setVar('configmangle_append',
+                 "/^### CROSS$/a\\\n%s\n" %
+                  ("\\n".join(["CONFIG_CROSS_COMPILER_PREFIX=\"${TARGET_PREFIX}\"",
+                              "CONFIG_EXTRA_CFLAGS=\"${CFLAGS}\""
+                        ])
+                  ),
+                 d)
+}
 
 do_configure () {
        sed -e 's#@DATADIR@#${datadir}#g' \
                < ${WORKDIR}/defconfig > ${S}/.config
+       for i in 'CROSS' 'DISTRO FEATURES'; do echo "### $i"; done >> \
+               ${S}/.config
+       sed -i -e '${configmangle}' ${S}/.config
+       if test ${DO_IPv4} -eq 0 && test ${DO_IPv6} -eq 0; then
+         # disable networking applets
+         mv ${S}/.config ${S}/.config.oe-tmp
+         awk 'BEGIN{net=0}
+         /^# Networking Utilities/{net=1}
+         /^#$/{if(net){net=net+1}}
+         {if(net==2&&$0 !~ /^#/&&$1){print("# "$1" is not set")}else{print}}' \
+                 ${S}/.config.oe-tmp > ${S}/.config
+       fi
        cml1_do_configure
 }