[PATCH 1/1] busybox: add config fragments

Qi.Chen
2013-02-01T09:15:51Z

From: Chen Qi <Qi.Chen@windriver.com>

Add config fragments to busybox.

Both the implementation and the use case are similar to yocto kernel's
configuration fragments.

[YOCTO #3379]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
meta/recipes-core/busybox/busybox.inc | 45 +++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)

diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index 972e7d0..66044f8 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -112,8 +112,53 @@ do_prepare_config () {
fi
}

+# returns all the elements from the src uri that are .cfg files
+def find_cfgs(d):
+ sources=src_patches(d, True)
+ sources_list=[]
+ for s in sources:
+ if s.endswith('.cfg'):
+ sources_list.append(s)
+
+ return sources_list
+
+# Merge config fragments
+# All config fragments for busybox should end with .cfg
+do_merge_config() {
+ SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
+ MERGE_LIST="${@" ".join(find_cfgs(d))}"
+ if [ -n "$MERGE_LIST" ]; then
+ # Make a temp file, merge .config and .cfg files into it
+ TMP_FILE=`mktemp .tmp.config.XXXXXXXX`
+ cp .config $TMP_FILE
+ for MERGE_FILE in $MERGE_LIST; do
+ CFG_LIST=`sed -n "${SED_CONFIG_EXP}" $MERGE_FILE`
+ for CFG in $CFG_LIST ; do
+ grep -q -w $CFG $TMP_FILE
+ if [ $? -eq 0 ] ; then
+ PREV_VAL=`grep -w $CFG $TMP_FILE`
+ NEW_VAL=`grep -w $CFG $MERGE_FILE`
+ if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
+ echo Value of $CFG is redefined by fragment $MERGE_FILE:
+ echo Previous value: $PREV_VAL
+ echo New value: $NEW_VAL
+ echo
+ fi
+ sed -i "/$CFG[ =]/d" $TMP_FILE
+ fi
+ done
+ echo >> $TMP_FILE
+ cat $MERGE_FILE >> $TMP_FILE
+ done
+ # Copy the temp file to .config, do some cleanup
+ cp $TMP_FILE .config
+ rm $TMP_FILE
+ fi
+}
+
do_configure () {
do_prepare_config
+ do_merge_config
cml1_do_configure
}

--
1.7.9.5