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 <esyr@redhat.com>
This commit is contained in:
parent
b4645cd8aa
commit
6a73d7992a
63
kmodtool
63
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} <command> <option>+
|
||||
- Get "base" version-release.
|
||||
variant <uname>
|
||||
- Get variant from uname.
|
||||
variant_char <uname> <variant>
|
||||
- Get kernel variant separator character.
|
||||
kernel_source <uname> <variant>
|
||||
- Get path to kernel source directory.
|
||||
rpmtemplate <mainpgkname> <uname> <variants>
|
||||
- Return a template for use in a source RPM
|
||||
version
|
||||
@ -266,6 +313,16 @@ while [ "${1}" ] ; do
|
||||
print_variant "$@"
|
||||
exit $?
|
||||
;;
|
||||
variant_char)
|
||||
shift
|
||||
print_variant_char "$@"
|
||||
exit $?
|
||||
;;
|
||||
kernel_source)
|
||||
shift
|
||||
print_kernel_source "$@"
|
||||
exit $?
|
||||
;;
|
||||
rpmtemplate)
|
||||
shift
|
||||
print_rpmtemplate "$@"
|
||||
|
@ -31,7 +31,7 @@ kernel_module_package_release 1
|
||||
done \
|
||||
fi \
|
||||
echo "%%global flavors_to_build ${flavors_to_build:-%%nil}" \
|
||||
echo "%%global kernel_source() /usr/src/kernels/%kverrel\\\$([ %%%%{1} = default ] || echo ".%%%%{1}")" \
|
||||
echo "%%global kernel_source() \\\$([ default = \"%%%%{1}\" ] && echo \"/usr/src/kernels//%%%%kverrel\" || %{kmodtool} kernel_source \"%%%%{kverrel}\" \"%%%%{1}\" 2>/dev/null || { ls -Ud \"/usr/src/kernels///%%%%{kverrel}\"[.+]\"%%%%{1}\" | sort -V | tail -n 1; } || echo \"/usr/src/kernels////%%%%kverrel.%%%%1\")" \
|
||||
echo "%%global kernel_module_package_moddir() extra" \
|
||||
if [ ! -z "%{-f*}" ] \
|
||||
then \
|
||||
|
Loading…
Reference in New Issue
Block a user