diff options
Diffstat (limited to 'common/classes/cml1-config.bbclass')
-rw-r--r-- | common/classes/cml1-config.bbclass | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/common/classes/cml1-config.bbclass b/common/classes/cml1-config.bbclass new file mode 100644 index 00000000..ca3de7cc --- /dev/null +++ b/common/classes/cml1-config.bbclass @@ -0,0 +1,51 @@ +# Consistent handling of the defconfig -> .config, with merge of config +# fragments using the same mechanism as busybox and linux-yocto. +# +# The functionality is split into a number of small functions to easier +# facilitate recipe alteration of the process, or filtering of the fragments +# to be merged. To filter the fragments in use, append to the pipeline (after +# the inherit of this class): +# +# merge_fragment_pipeline .= "| my_filter" +# +# Note: due to bitbake's use of set -e, the filter must return success (0). + + +DEFCONFIG ?= "${WORKDIR}/defconfig" +merge_fragment_pipeline = "cat" + +do_prepare_config () { + if [ ! -e "${DEFCONFIG}" ]; then + bbfatal "Configuration file '${DEFCONFIG}' does not exist" + fi + + install_config + merge_fragments ${B}/.config + + # Sanity check in case do_configure wants to overwrite this + chmod -w ${B}/.config +} + +do_prepare_config[dirs] = "${S}" +do_prepare_config[depends] += "kern-tools-native:do_populate_sysroot" + +addtask prepare_config before do_configure after do_patch + +install_config () { + cp -f ${DEFCONFIG} ${B}/.config +} + +merge_fragments () { + list_fragments | ${merge_fragment_pipeline} >"${B}/fragments" + merge_config.sh -m "$1" $(cat "${B}/fragments") +} + +list_fragments () { + cat <<END + ${@"\n".join(src_config_fragments(d))} +END +} + +def src_config_fragments(d): + sources = src_patches(d, True) + return [s for s in sources if s.endswith('.cfg')] |