core: split generated kconfig file

Currently, the kconfig part contains two things: the kconfig option
with the paths to br2-external trees, and the kconfig menus for the
br2-external trees.

When we want to include more kconfig files from the br2-external tree
(e.g. to get definitions for pre-built toolchains), we will need to
have the paths defined earlier, so they can be used from the br2-external
tree to include files earlier than the existing menus.

Split the generated kconfig file in two: one to define the paths, which
gets included early in our main Config.in, and one to actually define
the existing menus, which still gets included at the same place they
currently are.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
Yann E. MORIN 2019-07-29 22:19:59 +02:00 committed by Peter Korsgaard
parent 814f6e19e7
commit edf32b021c
2 changed files with 40 additions and 21 deletions

View File

@ -18,6 +18,9 @@ config BR2_BASE_DIR
string
option env="BASE_DIR"
# br2-external paths definitions
source "$BR2_BASE_DIR/.br2-external.in.paths"
# Hidden config symbols for packages to check system gcc version
config BR2_HOST_GCC_VERSION
string
@ -873,4 +876,5 @@ source "package/Config.in.host"
source "Config.in.legacy"
source "$BR2_BASE_DIR/.br2-external.in"
# br2-external menus definitions
source "$BR2_BASE_DIR/.br2-external.in.menus"

View File

@ -148,42 +148,57 @@ do_mk() {
} >"${outputdir}/.br2-external.mk"
}
# Generate the kconfig snippet for the br2-external tree.
# Generate the kconfig snippets for the br2-external tree.
do_kconfig() {
local outputdir="${1}"
local br2_name br2_desc br2_ext
local br2_name br2_desc br2_ext br2
local -a items
{
printf '#\n# Automatically generated file; DO NOT EDIT.\n#\n'
printf '\n'
items=(
paths
menus
)
if [ ${#BR2_EXT_NAMES[@]} -eq 0 ]; then
printf '# No br2-external tree defined.\n'
return
fi
for br2 in "${items[@]}"; do
{
printf '#\n# Automatically generated file; DO NOT EDIT.\n#\n'
printf '\n'
if [ ${#BR2_EXT_NAMES[@]} -eq 0 ]; then
printf '# No br2-external tree defined.\n'
fi
} >"${outputdir}/.br2-external.in.${br2}"
done
if [ ${#BR2_EXT_NAMES[@]} -eq 0 ]; then
return
fi
printf 'menu "External options"\n'
printf '\n'
printf 'menu "External options"\n\n' >>"${outputdir}/.br2-external.in.menus"
for br2_name in "${BR2_EXT_NAMES[@]}"; do
eval br2_desc="\"\${BR2_EXT_DESCS_${br2_name}}\""
eval br2_ext="\"\${BR2_EXT_PATHS_${br2_name}}\""
for br2_name in "${BR2_EXT_NAMES[@]}"; do
eval br2_desc="\"\${BR2_EXT_DESCS_${br2_name}}\""
eval br2_ext="\"\${BR2_EXT_PATHS_${br2_name}}\""
{
printf 'config BR2_EXTERNAL_%s_PATH\n' "${br2_name}"
printf '\tstring\n'
printf '\tdefault "%s"\n' "${br2_ext}"
printf '\n'
} >>"${outputdir}/.br2-external.in.paths"
{
if [ ${#BR2_EXT_NAMES[@]} -gt 1 ]; then
printf 'menu "%s"\n' "${br2_desc}"
fi
printf 'comment "%s (in %s)"\n' "${br2_desc}" "${br2_ext}"
printf 'config BR2_EXTERNAL_%s_PATH\n' "${br2_name}"
printf '\tstring\n'
printf '\tdefault "%s"\n' "${br2_ext}"
printf 'source "%s/Config.in"\n' "${br2_ext}"
if [ ${#BR2_EXT_NAMES[@]} -gt 1 ]; then
printf 'endmenu # %s\n' "${br2_name}"
fi
printf '\n'
done
} >>"${outputdir}/.br2-external.in.menus"
done
printf "endmenu # User-provided options\n"
} >"${outputdir}/.br2-external.in"
printf 'endmenu\n' >>"${outputdir}/.br2-external.in.menus"
}
error() { local fmt="${1}"; shift; printf "BR2_EXTERNAL_ERROR = ${fmt}" "${@}"; exit 1; }