commit: a8ef5e91d91ca5292bc7381db11ab1153cb73ffc
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 23 19:08:21 2019 +0000
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Tue Jul 23 19:08:21 2019 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=a8ef5e91
gen_configkernel.sh: Refactor kernel config handling in config_kernel()
Make sure that we always end up with set kernel config when no
kernel config exists in kernel outputdir.
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
gen_configkernel.sh | 44 +++++++++++++++++++++++++++++---------------
1 file changed, 29 insertions(+), 15 deletions(-)
diff --git a/gen_configkernel.sh b/gen_configkernel.sh
index a5ad953..9a4812f 100755
--- a/gen_configkernel.sh
+++ b/gen_configkernel.sh
@@ -72,9 +72,17 @@ determine_kernel_config_file() {
}
config_kernel() {
+ local diff_cmd="$(which zdiff 2>/dev/null)"
+ if [ -z "${diff_cmd}" ]
+ then
+ print_warning 5 "zdiff is not available."
+ diff_cmd="diff"
+ fi
+
cd "${KERNEL_DIR}" || gen_die "Failed to chdir to '${KERNEL_DIR}'!"
print_info 1 "kernel: >> Initializing ..."
+
if isTrue "${CLEAN}" && isTrue "${MRPROPER}"
then
print_info 2 "$(get_indent 1)>> --mrproper is set; Skipping
'make clean' ..."
@@ -92,16 +100,20 @@ config_kernel() {
if [ -f "${KERNEL_OUTPUTDIR}/.config" ]
then
# Current .config is different then one we are going to
use
- if [ -n "${CMD_KERNEL_CONFIG}" -a
"${CMD_KERNEL_CONFIG}" = "default" ] || \
- ! diff -q "${KERNEL_OUTPUTDIR}"/.config
"${KERNEL_CONFIG}" >/dev/null
+ if [ -n "${CMD_KERNEL_CONFIG}" -a
"${CMD_KERNEL_CONFIG}" = "default" ] \
+ || ! "${diff_cmd}" -q
"${KERNEL_OUTPUTDIR}"/.config "${KERNEL_CONFIG}" >/dev/null
then
NOW=$(date +--%Y-%m-%d--%H-%M-%S)
cp "${KERNEL_OUTPUTDIR}/.config"
"${KERNEL_OUTPUTDIR}/.config${NOW}.bak" \
|| gen_die "Could not backup kernel
config (${KERNEL_OUTPUTDIR}/.config)"
print_info 1 "$(get_indent 1)>> Previous config
backed up to .config${NOW}.bak"
- [ -n "${CMD_KERNEL_CONFIG}" -a
"${CMD_KERNEL_CONFIG}" = "default" ] &&
- rm "${KERNEL_OUTPUTDIR}/.config"
>/dev/null
+ if [ -n "${CMD_KERNEL_CONFIG}" -a
"${CMD_KERNEL_CONFIG}" = "default" ]
+ then
+ print_info 3 "$(get_indent 1)>> Default
kernel config was forced; Deleting existing kernel config
'${KERNEL_OUTPUTDIR}/.config' ..."
+ rm "${KERNEL_OUTPUTDIR}/.config"
>/dev/null \
+ || gen_die "Failed to delete
'${KERNEL_OUTPUTDIR}/.config'!"
+ fi
fi
fi
fi
@@ -111,22 +123,15 @@ config_kernel() {
print_info 1 "$(get_indent 1)>> Running 'make mrproper' ..."
compile_generic mrproper kernel
else
- if [ -f "${KERNEL_OUTPUTDIR}/.config" ]
- then
- print_info 1 "$(get_indent 1)>> Using config from
'${KERNEL_OUTPUTDIR}/.config' ..."
- else
- print_info 1 "$(get_indent 1)>> Using config from
'${KERNEL_CONFIG}' ..."
- fi
print_info 1 "$(get_indent 1)>> --no-mrproper is set; Skipping
'make mrproper' ..."
fi
- # If we're not cleaning a la mrproper, then we don't want to try to
overwrite the configs
- # or we might remove configurations someone is trying to test.
- if isTrue "${MRPROPER}" || [ ! -f "${KERNEL_OUTPUTDIR}/.config" ]
+ if [ ! -f "${KERNEL_OUTPUTDIR}/.config" ]
then
- print_info 1 "$(get_indent 1)>> Using config from
'${KERNEL_CONFIG}' ..."
+ # We always need a kernel config file...
+ print_info 3 "$(get_indent 1)>> Copying '${KERNEL_CONFIG}' to
'${KERNEL_OUTPUTDIR}/.config' ..."
- local message="Could not copy configuration file
'${KERNEL_CONFIG}'!"
+ local message="Failed to copy kernel config file
'${KERNEL_CONFIG}' to '${KERNEL_OUTPUTDIR}/.config'!"
if [[ "$(file --brief --mime-type "${KERNEL_CONFIG}"
2>/dev/null)" == application/x-gzip ]]
then
# Support --kernel-config=/proc/config.gz, mainly
@@ -134,6 +139,15 @@ config_kernel() {
else
cp -aL "${KERNEL_CONFIG}" "${KERNEL_OUTPUTDIR}/.config"
|| gen_die "${message}"
fi
+ else
+ if ! "${diff_cmd}" -q "${KERNEL_OUTPUTDIR}"/.config
"${KERNEL_CONFIG}" >/dev/null
+ then
+ print_warning 2 "$(get_indent 1)>> Will ignore kernel
config from '${KERNEL_CONFIG}'"
+ print_warning 2 "$(get_indent 1) in favor of already
existing but different kernel config"
+ print_warning 2 "$(get_indent 1) found in
'${KERNEL_OUTPUTDIR}/.config' ..."
+ else
+ print_info 3 "$(get_indent 1)>> Can keep using already
existing '${KERNEL_OUTPUTDIR}/.config' which is identical to --kernel-config
file ..."
+ fi
fi
if isTrue "${OLDCONFIG}"