From fc8ffa826b374085c1a4235799bd3acb378b0a28 Mon Sep 17 00:00:00 2001 From: Eugene Syromiatnikov Date: Fri, 25 Jan 2019 14:34:52 +0100 Subject: [PATCH] kmodtool, macros.kmp: support "+" for the kernel variant in uname A patch[1] to the kernel spec file changed the separator that is used for kernel flavor designation from "." to "+", which broke kmodtool and %kernel_module_package in multiple places. Try to accomodate it by accepting both "+" and "." during parsing, and guessing which one should be used for kernel osurce path generation. PS. It looks like the analogous breakage was before, when it was changed from "-" to ".". May be we should start support it back again as well. [1] https://lists.fedoraproject.org/pipermail/kernel/2013-June/004262.html * kmodtool (get_verrel, get_variant): Accept both "." and "+" as separators. (get_variant_char, print_variant_char, print_kernel_source): New functions. (get_filelist): Convert "+%1" in file list to $dotvariant, in addition to ".%1" and "-%1". (get_rpmtemplate): Determine a char that is used as a variant separator. Use it in $dotvariant. (usage): Mention "veriant_char" and "kernel_source" commands. * macros.kmp (%kernel_module_package): Use "kernel_source" command in "%kernel_source" definition when non-default variant is used; fall back to ls-based heuristics when it is not available (for example, when a version of kmodtool that doesn't support this command is used). Resolves: #2002887 Signed-off-by: Eugene Syromiatnikov --- kmodtool | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++--- macros.kmp | 2 +- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/kmodtool b/kmodtool index 24257c8..a3cf04a 100755 --- a/kmodtool +++ b/kmodtool @@ -52,7 +52,7 @@ variant= get_verrel () { verrel=${1:-$(uname -r)} - verrel=${verrel/%.$knownvariants/} + verrel=${verrel/%[.+]$knownvariants/} } print_verrel () @@ -65,7 +65,7 @@ get_variant () { get_verrel "$@" variant=${1:-$(uname -r)} - variant=${variant/#$verrel?(.)/} + variant=${variant/#$verrel?(.+)/} variant=${variant:-'""'} } @@ -75,6 +75,45 @@ print_variant () echo "${variant}" } +# Detect flavor separator character. We have to do that due to +# a systemd-tailored patch for kernel spec[1][2] introduced in Fedora and then +# imported in RHEL 8 that broke all OOT kmod infrastructure for the flavored +# kernels. +# +# [1] https://lists.fedoraproject.org/pipermail/kernel/2013-June/004262.html +# [2] https://src.fedoraproject.org/rpms/kernel/c/faf25207dc86666a611c45ae3ffaf385c170bd2a +# +# $1 - kver +# $2 - variant +get_variant_char () +{ + variant="$2" + [ "$variant" != "default" ] || variant="" + + get_verrel "$1" + + variant_char="" + [ -n "$variant" ] || return 0 + + # We expect that the flavored kernel is already installed in the buildroot + variant_char="+" + [ -e "/usr/src/kernels/${verrel}+${variant}" ] && return 0 + + variant_char="." +} + +print_variant_char () +{ + get_variant_char "$@" + echo "${variant_char}" +} + +print_kernel_source () +{ + get_variant_char "$@" + echo "/usr/src/kernels/${verrel}${variant_char}${variant}" +} + get_filelist() { local IFS=$'\n' filelist=($(cat)) @@ -89,6 +128,7 @@ get_filelist() { | sed -e "s/%variant/$variant/g" \ | sed -e "s/%dashvariant/$dashvariant/g" \ | sed -e "s/%dotvariant/$dotvariant/g" \ + | sed -e "s/\+%1/$dotvariant/g" \ | sed -e "s/\.%1/$dotvariant/g" \ | sed -e "s/\-%1/$dotvariant/g" \ | sed -e "s/%2/$verrel/g") @@ -104,8 +144,11 @@ get_filelist() { get_rpmtemplate () { local variant="${1}" + + get_variant_char "${verrel}" "${variant}" + local dashvariant="${variant:+-${variant}}" - local dotvariant="${variant:+.${variant}}" + local dotvariant="${variant:+${variant_char}${variant}}" echo "%package -n kmod-${kmod_name}${dashvariant}" @@ -246,6 +289,10 @@ Usage: ${myprog}