Projects
Mega:23.09
openEuler-rpm-config
_service:tar_scm:backport-kmp-feature.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-kmp-feature.patch of Package openEuler-rpm-config
From 3e65c85831be0b8f8e1cd43869b4991a76e14d9b Mon Sep 17 00:00:00 2001 From: Yang Yanchao <yangyanchao6@huawei.com> Date: Fri, 17 Mar 2023 01:09:09 +0000 Subject: [PATCH] backport kmp feature Signed-off-by: Yang Yanchao <yangyanchao6@huawei.com> Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org> --- kmodtool | 287 ++++++++++++++++++++++++++++++++++++++++++++++++++++ kmodtool.py | 83 --------------- macros.kmp | 85 ++++++++++++---- 3 files changed, 350 insertions(+), 105 deletions(-) create mode 100644 kmodtool delete mode 100644 kmodtool.py diff --git a/kmodtool b/kmodtool new file mode 100644 index 0000000..427d1df --- /dev/null +++ b/kmodtool @@ -0,0 +1,287 @@ +#!/usr/bin/bash + +# kmodtool - Helper script for building kernel module RPMs +# Copyright (c) 2003-2006 Ville Skyttä <ville.skytta@iki.fi>, +# Thorsten Leemhuis <fedora@leemhuis.info> +# Jon Masters <jcm@redhat.com> +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +shopt -s extglob + +myprog="kmodtool" +myver="0.10.10_kmp2" +knownvariants=@(BOOT|PAE|@(big|huge)mem|debug|enterprise|kdump|?(large)smp|uml|xen[0U]?(-PAE)|xen) +kmod_name= +kver= +verrel= +variant= +kmp= + +get_verrel () +{ + verrel=${1:-$(uname -r)} + verrel=${verrel%%$knownvariants} +} + +print_verrel () +{ + get_verrel $@ + echo "${verrel}" +} + +get_variant () +{ + get_verrel $@ + variant=${1:-$(uname -r)} + variant=${variant##$verrel} + variant=${variant:-'""'} +} + +print_variant () +{ + get_variant $@ + echo "${variant}" +} + +get_filelist() { + local IFS=$'\n' + filelist=($(cat)) + + if [ ${#filelist[@]} -gt 0 ]; + then + for ((n = 0; n < ${#filelist[@]}; n++)); + do + line="${filelist[n]}" + line=$(echo "$line" \ + | sed -e "s/%verrel/$verrel/g" \ + | 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/%2/$verrel/g") + echo "$line" + done + else + echo "%defattr(644,root,root,755)" + echo "/lib/modules/${verrel}${dotvariant}" + fi +} + +get_rpmtemplate () +{ + local variant="${1}" + local dashvariant="${variant:+-${variant}}" + case "$verrel" in + *.el*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;; + *.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;; + *) kdep="kernel-%{_target_cpu} = ${verrel}${variant}" ;; + esac + + echo "%package -n kmod-${kmod_name}${dashvariant}" + + if [ -z "$kmp_provides_summary" ]; then + echo "Summary: ${kmod_name} kernel module(s)" + fi + + if [ -z "$kmp_provides_group" ]; then + echo "Group: System Environment/Kernel" + fi + + if [ ! -z "$kmp_version" ]; then + echo "Version: %{kmp_version}" + fi + + if [ ! -z "$kmp_release" ]; then + echo "Release: %{kmp_release}" + fi + + cat <<EOF +Provides: kernel-modules = ${verrel}${variant} +Provides: ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} +EOF + + if [ -z "$kmp" ]; then + echo "Requires: ${kdep}" + fi + +# +# RHEL5 - Remove common package requirement on general kmod packages. +# Requires: ${kmod_name}-kmod-common >= %{?epoch:%{epoch}:}%{version} +# + + cat <<EOF +Requires(post): /usr/sbin/depmod +Requires(postun): /usr/sbin/depmod +EOF + +#if [ "no" != "$kmp_nobuildreqs" ] +#then + # echo "BuildRequires: kernel${dashvariant}-devel-%{_target_cpu} = ${verrel}" +#fi + +if [ "" != "$kmp_override_preamble" ] +then + cat "$kmp_override_preamble" +fi + +cat <<EOF +%description -n kmod-${kmod_name}${dashvariant} +This package provides the ${kmod_name} kernel modules built for the Linux +kernel ${verrel}${variant} for the %{_target_cpu} family of processors. +%post -n kmod-${kmod_name}${dashvariant} +if [ -e "/boot/System.map-${verrel}${variant}" ]; then + /sbin/depmod -aeF "/boot/System.map-${verrel}${variant}" "${verrel}${variant}" > /dev/null || : +fi +EOF + + if [ ! -z "$kmp" ]; then + cat <<EOF + +modules=( \$(find /lib/modules/${verrel}${variant}/extra/${kmod_name} | grep '\.ko$') ) +if [ -x "/sbin/weak-modules" ]; then + printf '%s\n' "\${modules[@]}" \ + | /sbin/weak-modules --add-modules +fi +%preun -n kmod-${kmod_name}${dashvariant} +rpm -ql kmod-${kmod_name}${dashvariant} | grep '\.ko$' \ + > /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules +EOF + + fi + + cat <<EOF +%postun -n kmod-${kmod_name}${dashvariant} +/sbin/depmod -aF /boot/System.map-${verrel}${variant} ${verrel}${variant} &> /dev/null || : +EOF + + if [ ! -z "$kmp" ]; then + cat <<EOF +modules=( \$(cat /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules) ) +#rm /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules +if [ -x "/sbin/weak-modules" ]; then + printf '%s\n' "\${modules[@]}" \ + | /sbin/weak-modules --remove-modules +fi +EOF + fi + +echo "%files -n kmod-${kmod_name}${dashvariant}" +if [ "" == "$kmp_override_filelist" ]; +then + echo "%defattr(644,root,root,755)" + echo "/lib/modules/${verrel}${variant}/" +else + cat "$kmp_override_filelist" | get_filelist +fi +} + +print_rpmtemplate () +{ + kmod_name="${1}" + shift + kver="${1}" + get_verrel "${1}" + shift + if [ -z "${kmod_name}" ] ; then + echo "Please provide the kmodule-name as first parameter." >&2 + exit 2 + elif [ -z "${kver}" ] ; then + echo "Please provide the kver as second parameter." >&2 + exit 2 + elif [ -z "${verrel}" ] ; then + echo "Couldn't find out the verrel." >&2 + exit 2 + fi + + for variant in "$@" ; do + if [ "default" == "$variant" ]; + then + get_rpmtemplate "" + else + get_rpmtemplate "${variant}" + fi + done +} + +usage () +{ + cat <<EOF +You called: ${invocation} + +Usage: ${myprog} <command> <option>+ + Commands: + verrel <uname> + - Get "base" version-release. + variant <uname> + - Get variant from uname. + rpmtemplate <mainpgkname> <uname> <variants> + - Return a template for use in a source RPM + rpmtemplate_kmp <mainpgkname> <uname> <variants> + - Return a template for use in a source RPM with KMP dependencies + version + - Output version number and exit. +EOF +} + +invocation="$(basename ${0}) $@" +while [ "${1}" ] ; do + case "${1}" in + verrel) + shift + print_verrel $@ + exit $? + ;; + variant) + shift + print_variant $@ + exit $? + ;; + rpmtemplate) + shift + print_rpmtemplate "$@" + exit $? + ;; + rpmtemplate_kmp) + shift + kmp=1 + print_rpmtemplate "$@" + exit $? + ;; + version) + echo "${myprog} ${myver}" + exit 0 + ;; + *) + echo "Error: Unknown option '${1}'." >&2 + usage >&2 + exit 2 + ;; + esac +done + +# Local variables: +# mode: sh +# sh-indentation: 2 +# indent-tabs-mode: nil +# End: +# ex: ts=2 sw=2 et + diff --git a/kmodtool.py b/kmodtool.py deleted file mode 100644 index 75492b9..0000000 --- a/kmodtool.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: UTF-8 -*- -#!/usr/bin/python3 - -# kmodtool - Helper script for building kernel module RPMs - -import os,subprocess,sys - -def print_verrel (): - #verrel=subprocess.getoutput("(rpm -q --qf '%{VERSION}-%{RELEASE}' `rpm -q kernel-devel` | head -n 1)") - # if (len(verrel)== 0): - verrel=subprocess.getoutput("uname -r") - return verrel - -def print_rpmtemplate(): - kmod_name = sys.argv[2] - # verrel=subprocess.getoutput("(rpm -q --qf '%{VERSION}-%{RELEASE}' `rpm -q kernel-devel` | head -n 1)") - # if (len(verrel)== 0): - verrel=subprocess.getoutput("uname -r") - - if not kmod_name: - print("Please provide the kmodule-name as first parameter.") - exit() - get_rpmtemplate(kmod_name,verrel) - - -def get_rpmtemplate(kmod_name,verrel): - print("%package -n kmod-" + kmod_name) - print("Summary: " + kmod_name + " " + "kernel module(s)") - print("Group: System Environment/Kernel") - if "%{version}": - print("Version: %{version}") - if "%{release}": - print("Release: %{release}") - print("Provides: kernel-modules =" + " " + verrel) - print("Provides: "+ kmod_name + "-kmod = %{?epoch:%{epoch}:}%{version}-%{release}") - print("Requires(post): /usr/sbin/depmod") - print("Requires(postun): /usr/sbin/depmod") - print("%description -n kmod-" + kmod_name) - print("This package provides the " + kmod_name + " kernel modules built for the Linux") - print("kernel "+ verrel + " for the %{_target_cpu} family of processors.") - print("%post -n kmod-" + kmod_name) - print("if [ -e /boot/System.map-" + verrel + " ]; then") - print(" /sbin/depmod -aeF /boot/System.map-" + verrel +" " + verrel +"> /dev/null || :") - print("fi") - if (kmp !=""): - print("modules=( $(find /lib/modules/" + verrel + "/extra/" + kmod_name + ") )") - print("""if [ -x "/sbin/weak-modules" ]; then - printf '%s\\n' "${modules[@]}" | /sbin/weak-modules --add-modules -fi""") - print("%preun -n kmod-" + kmod_name) - print("rpm -ql kmod-" + kmod_name + "| grep '\.ko$' > /var/run/rpm-kmod-" + kmod_name +"-modules") - - print("%postun -n kmod-" + kmod_name) - print("/sbin/depmod -aF /boot/System.map-" + verrel+" " + verrel + " &> /dev/null || :") - - if (kmp !=""): - print("modules=( $(cat /var/run/rpm-kmod-" + kmod_name + "-modules) )") - print("#rm /var/run/rpm-kmod-" + kmod_name + "-modules") - print("""if [ -x "/sbin/weak-modules" ]; then - printf '%s\\n' "${modules[@]}" | /sbin/weak-modules --remove-modules -fi""") - - print("%files -n kmod-" + kmod_name) - kmp_override_filelist= sys.argv[3] - if kmp_override_filelist == '%filelist': - print("%defattr(644,root,root,755)") - print("/lib/modules/" + verrel) - print("/lib/firmware/") - else: - with open(kmp_override_filelist) as f: - for line in f: - print(line, end = '') - -#for i in range(len(sys.argv)): -if (sys.argv[1] == "verrel"): - print_verrel() -if (sys.argv[1] == "rpmtemplate_kmp"): - kmp=1 - print_rpmtemplate() -else: - print("Error: Unknown option 'sys.argv[i]'.") - exit() - diff --git a/macros.kmp b/macros.kmp index d46aa04..8440e26 100644 --- a/macros.kmp +++ b/macros.kmp @@ -1,22 +1,64 @@ -# Use these macros to differentiate between __vendor and other KMP implementation(s). - -kernel_module_package_release 1 - -__find_requires /usr/lib/rpm/__vendor/find-requires - - -#kernel_module_package [ -n name ] [ -v version ] [ -r release ] -# [ -f filelist][-p preamble] -# - -%kernel_module_package_buildreqs %global kmodtool_generate_buildreqs 1 \ - kernel-devel - -%kernel_module_package(n:v:r:f:p) %{expand:%( \ - %define kmodtool /usr/lib/rpm/__vendor/kmodtool.py\ - %define latest_kernel $(rpm -q --qf '%{VERSION}-%{RELEASE}\\\\n' `rpm -q kernel-devel` | head -n 1) \ - %{!?kernel_version:%{expand:%%global kernel_version %{latest_kernel}}} \ - %global kverrel %(%{kmodtool} verrel %{?kernel_version} 2>/dev/null) \ - python3 %{kmodtool} rpmtemplate_kmp %{-n*}%{!-n:%name} %{kverrel} %{-f*}%{!-f:%filelist} %{-p*}%{!-p:%preamble} \ -)} - +# Use these macros to differentiate between __vendor and other KMP implementation(s). + +kernel_module_package_release 1 + +%__find_provides /usr/lib/rpm/find-provides +%__find_requires /usr/lib/rpm/__vendor/find-requires + +#kernel_module_package [ -n name ] [ -v version ] [ -r release ] [ -s script ] +# [ -f filelist] [ -x ] [ -p preamble ] flavor flavor ... + +%kernel_module_package_buildreqs %global kmodtool_generate_buildreqs 1 \ + kernel-devel + +%kernel_module_package(n:v:r:s:f:xp:) %{expand:%( \ + %define kmodtool %{-s*}%{!-s:/usr/lib/rpm/__vendor/kmodtool} \ + %define kmp_version %{-v*}%{!-v:%{version}} \ + %define kmp_release %{-r*}%{!-r:%{release}} \ + %define latest_kernel %(rpm -q --qf '%%{VERSION}-%%{RELEASE}.%%{ARCH}\\\\n' `rpm -q kernel-devel | head -n 1` | head -n 1) \ + %{!?kernel_version:%{expand:%%global kernel_version %{latest_kernel}}} \ + %global kverrel %(%kmodtool verrel %{?kernel_version} 2>/dev/null) \ + flavors="default" \ + if [ "i686" == "%{_target_cpu}" ] || [ "x86_64" == "%{_target_cpu}" ] \ + then \ + xenver=$(rpm -q kernel-xen-devel-%{kverrel}|head -n 1)\ + kdver=$(rpm -q kernel-kdump-devel-%{kverrel}|head -n 1)\ + if [ "kernel-xen-devel-%{kverrel}" == "$xenver" ] \ + then \ + flavors="$flavors xen" \ + fi \ + if [ "kernel-kdump-devel-%{kverrel}" == "$kdver" ] \ + then \ + flavors="$flavors kdump" \ + fi \ + fi \ + if [ -z "%*" ]; then \ + flavors_to_build=$flavors \ + elif [ -z "%{-x}" ]; then \ + flavors_to_build="%*" \ + else \ + flavors_to_build=" $flavors "\ + rm -rf /tmp/tmp.$$ \ + echo "[$flavors_to_build]" >/tmp/tmp.$$ \ + for i in %* \ + do \ + flavors_to_build=${flavors_to_build//$i /} + done \ + fi \ + echo "%%global flavors_to_build ${flavors_to_build:-%%nil}" \ + echo "%%global kernel_source() /usr/src/kernels/%kverrel\\\$([ %%%%{1} = default ] || echo "%%%%{1}.")" \ + if [ ! -z "%{-f*}" ] \ + then \ + filelist="%{-f*}" \ + fi \ + if [ ! -z "%{-p*}" ] \ + then \ + preamble="%{-p*}" \ + fi \ + nobuildreqs="yes" \ + if [ "x%{kmodtool_generate_buildreqs}" != "x1" ] \ + then \ + nobuildreqs="no" \ + fi \ + kmp_override_filelist="$filelist" kmp_override_preamble="$preamble" kmp_nobuildreqs="$nobuildreqs" %{kmodtool} rpmtemplate_kmp %{-n*}%{!-n:%name} %{kverrel} $flavors_to_build 2>/dev/null \ +)} -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2