summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-23 08:50:25 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-23 08:50:25 +0000
commit8287de106c1c627906a2794637090e90d088c5cc (patch)
tree5f4f9ed56e151fa122fef773f15b0eaa93ad2ab9
parentf9d8d75824b707d146315257f611d876d38234f2 (diff)
automatic import of openEuler-rpm-configopeneuler24.03_LTS
-rw-r--r--.gitignore1
-rw-r--r--0001-1-Add-riscv64-to-golang_arches.patch27
-rw-r--r--0001-add-loongarch64-for-golang_arches.patch25
-rw-r--r--Add-support-for-selecting-clang-as-a-toolchain.patch113
-rw-r--r--Call-set_build_flags-cc-before-build-check-and-insta.patch49
-rw-r--r--Delete-the-commented-code.patch24
-rw-r--r--Feature-support-EBS-sign-for-IMA-digest-list.patch326
-rw-r--r--Fix-a-typo-in-brp-digest-list.patch26
-rw-r--r--Fix-python3_version-macros-for-Python-3.10.patch30
-rw-r--r--Give-a-warning-when-using-kabi-outside-our-stablelis.patch240
-rw-r--r--add-brp-scripts-to-delete-rpath.patch145
-rw-r--r--add-common-script.patch313
-rw-r--r--add-loongarch64-support-for-config.guess-and-config.sub.patch26
-rw-r--r--add-loongarch64-to-generic_arches.patch13
-rw-r--r--add-powerpc64le-and-ppc64le-support.patch39
-rw-r--r--add-pyproject-macros.patch42
-rw-r--r--add-pytest-and-tox-macros.patch42
-rw-r--r--add-riscv64-to-some-arches-macro.patch41
-rw-r--r--backport-Enable-as-needed-by-default.patch31
-rw-r--r--backport-kmp-feature.patch485
-rw-r--r--change-the-vendor-to-generic-for-common-use.patch109
-rw-r--r--check-if-the-file-is-a-symbolic-link-in-brp-digest-list.patch25
-rw-r--r--exclude-kernel-source-and-EFI-files-in-digest-list-building.patch74
-rw-r--r--fix-brp-ldconfig-riscv-default-library-directory.patch15
-rw-r--r--fix-config-error-for-loongarch64.patch25
-rw-r--r--fix-error-message-for-kmodtool.patch25
-rw-r--r--fix-the-ELF-file-cannot-be-found-due-to-escape-of.patch25
-rw-r--r--fixed-a-bug-that-missing_-p-in-macros.kmp.patch37
-rw-r--r--openEuler-rpm-config-add-optflags-for-loongarch64-and-sw_64.patch26
-rw-r--r--openEuler-rpm-config.spec401
-rw-r--r--remove-fexceptions.patch36
-rw-r--r--sources1
-rw-r--r--update-config.guess-and-config.sub-for-loongarch64.patch39
33 files changed, 2876 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..b3547b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/30.tar.gz
diff --git a/0001-1-Add-riscv64-to-golang_arches.patch b/0001-1-Add-riscv64-to-golang_arches.patch
new file mode 100644
index 0000000..e52a168
--- /dev/null
+++ b/0001-1-Add-riscv64-to-golang_arches.patch
@@ -0,0 +1,27 @@
+From c1b9fdaa93bfe0b2c70be4a851500d15f891d2f8 Mon Sep 17 00:00:00 2001
+From: whoisxxx <whoisxxx@126.com>
+Date: Sat, 28 Nov 2020 11:02:21 +0800
+Subject: [PATCH] !1 Add "riscv64" to golang_arches The golang version 1.14 has
+ support riscv64, so add "riscv64" to golang_arches to enable rpmbuild for
+ golang.
+
+---
+ macros.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/macros.go b/macros.go
+index c1e6e75..cd493e7 100644
+--- a/macros.go
++++ b/macros.go
+@@ -12,7 +12,7 @@
+ # redhat-rpm-macros.
+
+ # Define arches for PA and SA
+-%golang_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
++%golang_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x riscv64
+ %gccgo_arches %{mips}
+ %go_arches %{golang_arches} %{gccgo_arches}
+
+--
+1.8.3.1
+
diff --git a/0001-add-loongarch64-for-golang_arches.patch b/0001-add-loongarch64-for-golang_arches.patch
new file mode 100644
index 0000000..4623504
--- /dev/null
+++ b/0001-add-loongarch64-for-golang_arches.patch
@@ -0,0 +1,25 @@
+From 28921237101c986eeee13808a1167db13dc788ce Mon Sep 17 00:00:00 2001
+From: Wenlong Zhang <zhangwenlong@loongson.cn>
+Date: Tue, 13 Dec 2022 12:07:10 +0000
+Subject: [PATCH] add loongarch64 for golang_arches
+
+---
+ macros.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/macros.go b/macros.go
+index cd493e7..f20f6a1 100644
+--- a/macros.go
++++ b/macros.go
+@@ -12,7 +12,7 @@
+ # redhat-rpm-macros.
+
+ # Define arches for PA and SA
+-%golang_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x riscv64
++%golang_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x riscv64 loongarch64
+ %gccgo_arches %{mips}
+ %go_arches %{golang_arches} %{gccgo_arches}
+
+--
+2.33.0
+
diff --git a/Add-support-for-selecting-clang-as-a-toolchain.patch b/Add-support-for-selecting-clang-as-a-toolchain.patch
new file mode 100644
index 0000000..c38c7cb
--- /dev/null
+++ b/Add-support-for-selecting-clang-as-a-toolchain.patch
@@ -0,0 +1,113 @@
+From f2a6af2ce79e26bf47604b610056d8c524b647f2 Mon Sep 17 00:00:00 2001
+From: liyunfei <liyunfei33@huawei.com>
+Date: Tue, 9 Jan 2024 20:39:10 +0800
+Subject: [PATCH 1/2] Add support for selecting clang as a toolchain
+
+---
+ generic-hardened-clang.cfg | 1 +
+ macros | 56 ++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 57 insertions(+), 3 deletions(-)
+ create mode 100644 generic-hardened-clang.cfg
+
+diff --git a/generic-hardened-clang.cfg b/generic-hardened-clang.cfg
+new file mode 100644
+index 0000000..ac596df
+--- /dev/null
++++ b/generic-hardened-clang.cfg
+@@ -0,0 +1 @@
++-fPIE
+\ No newline at end of file
+diff --git a/macros b/macros
+index 5fdaf0a..0062126 100755
+--- a/macros
++++ b/macros
+@@ -23,6 +23,46 @@
+
+ %_build_id_links none
+
++# GCC toolchain
++%__cc_gcc gcc
++%__cxx_gcc g++
++%__cpp_gcc gcc -E
++
++# Clang toolchain
++%__cc_clang clang
++%__cxx_clang clang++
++%__cpp_clang clang-cpp
++
++# Default to the GCC toolchain
++#
++# It is enough to override `toolchain` macro and all relevant macro for C/C++
++# compilers will be switched. Either in the spec or in the command-line.
++#
++# %global toolchain clang
++#
++# or:
++#
++# rpmbuild -D "toolchain clang" …
++#
++# Inside a spec file it is also possible to determine which toolchain is in use
++# by testing the same macro. For example:
++#
++# %if "%{toolchain}" == "gcc"
++# BuildRequires: gcc
++# %endif
++#
++# or:
++#
++# %if "%{toolchain}" == "clang"
++# BuildRequires: clang compiler-rt
++# %endif
++#
++%toolchain gcc
++
++%__cc %{expand:%%{__cc_%{toolchain}}}
++%__cxx %{expand:%%{__cxx_%{toolchain}}}
++%__cpp %{expand:%%{__cpp_%{toolchain}}}
++
+ #==============================================================================
+ # ---- compiler flags.
+
+@@ -31,7 +71,13 @@
+ %build_fflags %{optflags} -fexceptions -I%{_fmoddir}
+ %build_ldflags -Wl,-z,relro %{_ld_as_needed_flags} %{_ld_symbols_flags} %{_hardened_ldflags}
+
++%set_build_cc \
++ CC=%{__cc}; export CC ; \
++ CXX=%{__cxx}; export CXX ; \
++ CCC="${CCC:-%{__cxx}}" ; export CCC
++
+ %set_build_flags \
++ %[ "%{toolchain}" == "gcc" ? "" : "%{set_build_cc};" ] \
+ CFLAGS="${CFLAGS:-%{build_cflags}}" ; export CFLAGS ; \
+ CXXFLAGS="${CXXFLAGS:-%{build_cxxflags}}" ; export CXXFLAGS ; \
+ FFLAGS="${FFLAGS:-%{build_fflags}}" ; export FFLAGS ; \
+@@ -162,8 +208,10 @@
+ # secure options for rpmbuild
+ #
+ # #hardened options
+-%_hardening_cflags -specs=/usr/lib/rpm/generic-hardened-cc1
+-%_hardening_ldflags -Wl,-z,now -specs=/usr/lib/rpm/generic-hardened-ld
++%_hardening_gcc_cflags -specs=/usr/lib/rpm/generic-hardened-cc1
++%_hardening_clang_cflags --config /usr/lib/rpm/generic-hardened-clang.cfg
++%_hardening_cflags %{expand:%%{_hardening_%{toolchain}_cflags}}
++%_hardening_ldflags -Wl,-z,now %[ "%{toolchain}" == "gcc" ? "-specs=/usr/lib/rpm/generic-hardened-ld" : "" ]
+ # Use "%undefine _hardened_build" to disable.
+ %_hardened_build 1
+ %_hardened_cflags %{?_hardened_build:%{_hardening_cflags}}
+@@ -195,7 +243,11 @@
+ #%_ld_as_needed 1
+ %_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed}
+
+-%__global_compiler_flags -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -grecord-gcc-switches %{_hardened_cflags}
++%_general_options -O2 -g -grecord-gcc-switches -pipe -fstack-protector-strong %[ "%{toolchain}" == "clang" ? "-fgcc-compatible" : "" ]
++%_warning_options -Wall -Werror=format-security
++%_preprocessor_defines -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
++
++%__global_compiler_flags %{_general_options} %{_warning_options} %{_preprocessor_defines} %{_hardened_cflags}
+
+ # Automatically trim changelog entries after 2 years
+ %_changelog_trimtime %{lua:print(os.time() - 2 * 365 * 86400)}
+--
+2.27.0
+
diff --git a/Call-set_build_flags-cc-before-build-check-and-insta.patch b/Call-set_build_flags-cc-before-build-check-and-insta.patch
new file mode 100644
index 0000000..8f69298
--- /dev/null
+++ b/Call-set_build_flags-cc-before-build-check-and-insta.patch
@@ -0,0 +1,49 @@
+From c6b15b8c17f957d736dd975d106b10d419070ebd Mon Sep 17 00:00:00 2001
+From: liyunfei <liyunfei33@huawei.com>
+Date: Tue, 9 Jan 2024 20:50:34 +0800
+Subject: [PATCH 2/2] Call %set_build_flags&cc before %build, %check, and
+ %install stages
+
+---
+ macros | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/macros b/macros
+index 0062126..8c16706 100755
+--- a/macros
++++ b/macros
+@@ -83,6 +83,22 @@
+ FCFLAGS="${FCFLAGS:-%{build_fflags}}" ; export FCFLAGS ; \
+ LDFLAGS="${LDFLAGS:-%{build_ldflags}}" ; export LDFLAGS
+
++# Automatically use set_build_flags macro for build, check, and
++# install phases.
++# Use "%undefine _auto_set_build_flags" to disable"
++# Automatically use set_build_cc macro for build, check, and
++# install phases.
++# Use "%undefine _auto_set_build_cc" to disable"
++%_auto_set_build_cc %["%{toolchain}" == "gcc" ? 0 : 1]
++%_auto_set_build_flags 0
++
++%__spec_build_pre %{___build_pre} \
++ %[0%{?_auto_set_build_cc} ? "%{set_build_cc}" : ""] \
++ %[0%{?_auto_set_build_flags} ? "%{set_build_flags}" : ""]
++%__spec_check_pre %{___build_pre} \
++ %[0%{?_auto_set_build_cc} ? "%{set_build_cc}" : ""] \
++ %[0%{?_auto_set_build_flags} ? "%{set_build_flags}" : ""]
++
+ #For backwards compatibility only.
+ %__global_cflags %{build_cflags}
+ %__global_cxxflags %{build_cxxflags}
+@@ -144,6 +158,8 @@
+ [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\
+ mkdir -p `dirname "$RPM_BUILD_ROOT"`\
+ mkdir "$RPM_BUILD_ROOT"\
++ %[0%{?_auto_set_build_cc} ? "%{set_build_cc}" : ""]\
++ %[0%{?_auto_set_build_flags} ? "%{set_build_flags}" : ""]\
+ %{nil}
+
+ # ---- Expanded at end of %install scriptlet.
+--
+2.27.0
+
diff --git a/Delete-the-commented-code.patch b/Delete-the-commented-code.patch
new file mode 100644
index 0000000..b9f0469
--- /dev/null
+++ b/Delete-the-commented-code.patch
@@ -0,0 +1,24 @@
+From c7605385b9d838be78a87de02a48eaaa6e69b4b2 Mon Sep 17 00:00:00 2001
+From: hongjinghao <hongjinghao@huawei.com>
+Date: Tue, 5 Mar 2024 20:22:59 +0800
+Subject: [PATCH] Delete the commented code
+
+---
+ brp-digest-list | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/brp-digest-list b/brp-digest-list
+index 77248c9..7de42b7 100644
+--- a/brp-digest-list
++++ b/brp-digest-list
+@@ -9,7 +9,6 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
+ fi
+
+ # Create temporary file listing files in the manifest
+-#[ -n "$TMPDIR" ] || TMPDIR="/tmp"
+ TMPDIR="/tmp"
+ BIN_PKG_FILES=${TMPDIR}/${3%%.rpm}
+ cat - > $BIN_PKG_FILES
+--
+2.33.0
+
diff --git a/Feature-support-EBS-sign-for-IMA-digest-list.patch b/Feature-support-EBS-sign-for-IMA-digest-list.patch
new file mode 100644
index 0000000..bd0fed0
--- /dev/null
+++ b/Feature-support-EBS-sign-for-IMA-digest-list.patch
@@ -0,0 +1,326 @@
+From 0449160c84daff8c557dee47a970e4f4837ff81d Mon Sep 17 00:00:00 2001
+From: Huaxin Lu <luhuaxin1@huawei.com>
+Date: Mon, 12 Dec 2022 00:16:01 +0800
+Subject: [PATCH] support EBS sign for IMA digest list
+
+Signed-off-by: Huaxin Lu <luhuaxin1@huawei.com>
+Signed-off-by: zhangguangzhi <zhangguangzhi3@huawei.com>
+
+---
+ brp-digest-list | 46 +++++-----
+ brp-ebs-sign | 238 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 262 insertions(+), 22 deletions(-)
+ create mode 100644 brp-ebs-sign
+
+diff --git a/brp-digest-list b/brp-digest-list
+index e698b7a..d1e2600 100644
+--- a/brp-digest-list
++++ b/brp-digest-list
+@@ -26,7 +26,6 @@ fi
+ DIGEST_LIST_DIR=$RPM_BUILD_ROOT/$2/etc/ima/digest_lists
+ mkdir -p $DIGEST_LIST_DIR
+ mkdir -p $DIGEST_LIST_DIR.tlv
+-mkdir -p $DIGEST_LIST_DIR.sig
+
+ # Generate digest list for the kernel
+ gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR -i l:policy \
+@@ -70,28 +69,31 @@ DIGEST_LIST_TLV_PATH="$DIGEST_LIST_DIR.tlv/0-metadata_list-compact_tlv-$(basenam
+ chmod 644 $DIGEST_LIST_TLV_PATH
+ echo $DIGEST_LIST_TLV_PATH
+
+-if [[ "$(basename $BIN_PKG_FILES)" =~ "digest-list-tools" && \
+- ! $(basename $BIN_PKG_FILES) =~ "debug" ]]; then
+- # Generate digest list for the user space parsers
+- LD_LIBRARY_PATH=$RPM_BUILD_ROOT/usr/lib64 \
+- $RPM_BUILD_ROOT/usr/bin/gen_digest_lists \
+- -d $DIGEST_LIST_DIR -t parser -f compact -m immutable \
+- -i I:$RPM_BUILD_ROOT/usr/libexec -o add -p -1 -i i:
+-
+- f="$DIGEST_LIST_DIR/0-parser_list-compact-libexec"
+- [ -f $f ] || exit 0
+-
+- chmod 644 $f
+- echo $f
++#if [[ "$(basename $BIN_PKG_FILES)" =~ "digest-list-tools" && \
++# ! $(basename $BIN_PKG_FILES) =~ "debug" ]]; then
++# Generate digest list for the user space parsers
++
++# do EBS sign
++export PUBLISHER_HOST=$(grep PUBLISHER_HOST /lkp/scheduled/job.yaml | awk '{print $2}')
++export PUBLISHER_PORT=$(grep PUBLISHER_PORT /lkp/scheduled/job.yaml | awk '{print $2}')
++if [[ -n "$PUBLISHER_HOST" && -n "$PUBLISHER_PORT" ]]; then
++ [ -f /usr/lib/rpm/brp-ebs-sign ] || exit 0
++ sh /usr/lib/rpm/brp-ebs-sign --ima-digestlist $DIGEST_LIST_PATH 1>&2
++ [ -f $DIGEST_LIST_PATH.sig ] || exit 0
++ chmod 644 $DIGEST_LIST_PATH.sig
++ mv $DIGEST_LIST_PATH.sig $DIGEST_LIST_PATH
++ exit 0
++fi
+
+- [ -f /usr/lib/rpm/brp-suse.d/brp-99-pesign ] || exit 0
++# do OBS sign
++[ -f /usr/lib/rpm/brp-suse.d/brp-99-pesign ] || exit 0
+
+- export BRP_PESIGN_FILES="$2/etc/ima/digest_lists/*"
+- export RPM_BUILD_ROOT
+- export RPM_PACKAGE_NAME="digest-list-tools"
+- export RPM_SOURCE_DIR="$(rpm --eval %_topdir)/SOURCES"
++export BRP_PESIGN_FILES="$2/etc/ima/digest_lists/*"
++export RPM_BUILD_ROOT
++export RPM_PACKAGE_NAME="digest-list-tools"
++export RPM_SOURCE_DIR="$(rpm --eval %_topdir)/SOURCES"
+
+- if [ -f "/usr/lib/rpm/brp-suse.d/brp-99-pesign" ]; then
+- /usr/lib/rpm/brp-suse.d/brp-99-pesign &> /dev/null
+- fi
++if [ -f "/usr/lib/rpm/brp-suse.d/brp-99-pesign" ]; then
++ /usr/lib/rpm/brp-suse.d/brp-99-pesign &> /dev/null
+ fi
++#fi
+diff --git a/brp-ebs-sign b/brp-ebs-sign
+new file mode 100644
+index 0000000..a7a83e5
+--- /dev/null
++++ b/brp-ebs-sign
+@@ -0,0 +1,238 @@
++#!/bin/bash
++
++INPUT_TYPE=$1
++INPUT_FILE=$2
++SIGN_FILE=$INPUT_FILE
++PROJECT_CONF="/lkp/scheduled/job.yaml"
++POST_ADDR=""
++POST_FILE_SHA256=""
++POST_KEY_NAME=""
++POST_KEY_TYPE=""
++POST_FILE_TYPE=""
++POST_SIGN_TYPE=""
++POST_JOB_ID=""
++POST_OS_ORIJECT=""
++CONFIG_RETEST_COUNT=5
++SIGN_RESULT=0
++FAILED_SIGN_PERMISSION_DENIED=2
++
++# Tool functions for JSON
++get_json_value(){
++ echo "$1" | \
++ awk -F "[{,:}]" '{for(i=1;i<NF;i++){if($i~"'$2'"){print $(i+1)}}}' | \
++ sed 's/\"//g'
++}
++
++get_post_json() {
++ printf '{'
++ printf '"file_sha256":"%s",' $POST_FILE_SHA256
++ printf '"key_name":"%s",' $POST_KEY_NAME
++ printf '"key_type":"%s",' $POST_KEY_TYPE
++ printf '"file_type":"%s",' $POST_FILE_TYPE
++ printf '"sign_type":"%s",' $POST_SIGN_TYPE
++ printf '"job_id":"%s",' $POST_JOB_ID
++ printf '"os_project":"%s"' $POST_OS_ORIJECT
++ printf '}'
++}
++
++# Prepare sign functions for each sign type
++module_sign_pre() {
++ if [[ "$INPUT_FILE" != *.ko ]]; then
++ echo "The module file must has the .ko extension"
++ return 1
++ fi
++
++ SIGN_FILE="$INPUT_FILE"
++ POST_KEY_NAME="openeuler-kernel-module-ee"
++ POST_KEY_TYPE="x509ee"
++ POST_FILE_TYPE="kernel-module"
++ POST_SIGN_TYPE="cms"
++}
++
++ima_digestlist_sign_pre() {
++ cp -f $INPUT_FILE $INPUT_FILE.ko
++ SIGN_FILE="$INPUT_FILE.ko"
++ POST_KEY_NAME="openeuler-ima-ee"
++ POST_KEY_TYPE="x509ee"
++ POST_FILE_TYPE="kernel-module"
++ POST_SIGN_TYPE="cms"
++}
++
++efi_sign_pre() {
++ SIGN_FILE="$INPUT_FILE"
++ POST_KEY_NAME="default-x509ee"
++ POST_KEY_TYPE="x509ee"
++ POST_FILE_TYPE="efi-image"
++ POST_SIGN_TYPE="authenticode"
++}
++
++kernel_sign_pre() {
++ SIGN_FILE="$INPUT_FILE"
++ POST_KEY_NAME="default-x509ee"
++ POST_KEY_TYPE="x509ee"
++ POST_FILE_TYPE="efi-image"
++ POST_SIGN_TYPE="authenticode"
++}
++
++# Post sign functions for each sign type
++module_sign_post() {
++ :
++}
++
++ima_digestlist_sign_post() {
++ rm -f $INPUT_FILE.ko
++}
++
++efi_sign_post() {
++ :
++}
++
++kernel_sign_post() {
++ :
++}
++
++# Global configuration
++sign_config() {
++ if [ -z "$INPUT_TYPE" ] || [ -z "$INPUT_FILE" ]; then
++ echo "Please input the sign type and file"
++ exit 1
++ fi
++
++ if [ ! -f "$INPUT_FILE" ]; then
++ echo "The input file is invalid"
++ exit 1
++ fi
++
++ POST_FILE_SHA256=$(sha256sum "$INPUT_FILE" | awk '{ print $1 }')
++ if [ $? -ne 0 ]; then
++ echo "Failed to calculate file hash"
++ fi
++
++ PUBLISHER_HOST=$(grep PUBLISHER_HOST $PROJECT_CONF | awk '{print $2}')
++ PUBLISHER_PORT=$(grep PUBLISHER_PORT $PROJECT_CONF | awk '{print $2}')
++ if [ -z "$PUBLISHER_HOST" ] || [ -z "$PUBLISHER_PORT" ]; then
++ echo "Please set PUBLISHER_HOST and PUBLISHER_PORT"
++ exit 1
++ fi
++
++ POST_ADDR="http://${PUBLISHER_HOST}:${PUBLISHER_PORT}/code-sign"
++
++ POST_JOB_ID="$(grep -rwn 'id\:' $PROJECT_CONF | awk '{print $2}')"
++ POST_OS_ORIJECT="$(grep -rwn 'os_project\:' $PROJECT_CONF | awk '{print $2}')"
++ if [ -z "$POST_JOB_ID" ] || [ -z "$POST_OS_ORIJECT" ]; then
++ echo "Failed to get POST_JOB_ID and POST_OS_ORIJECT"
++ exit 1
++ fi
++}
++
++sign_pre() {
++ sign_config
++
++ case $INPUT_TYPE in
++ --efi)
++ efi_sign_pre
++ ;;
++ --module)
++ module_sign_pre
++ ;;
++ --ima-digestlist)
++ ima_digestlist_sign_pre
++ ;;
++ --kernel)
++ kernel_sign_pre
++ ;;
++ *)
++ echo "Unsupported sign type: $INPUT_TYPE"
++ exit 1
++ ;;
++ esac
++}
++
++sign() {
++ # 1. send the request to the sign service
++ # echo "curl "$POST_ADDR" \
++ # -F "file=@$SIGN_FILE" \
++ # -F "data=$(get_post_json);type=application/json""
++ req="$(curl "$POST_ADDR" \
++ -F "file=@$SIGN_FILE" \
++ -F "data=$(get_post_json);type=application/json")"
++ if [ $? -ne 0 ]; then
++ echo "Failed to post the sign service"
++ return 1
++ fi
++
++ req_err_msg=$(get_json_value "$req" "err_msg")
++ if [ -n "$req_err_msg" ]; then
++ echo "Failed, err_msg: [$req_err_msg]"
++ if [ "$req_err_msg" == "SIGN_PERMISSION_DENIED" ]; then
++ return $FAILED_SIGN_PERMISSION_DENIED
++ fi
++ return 1
++ fi
++
++ # 2. write the file content
++ encoded_file_content=$(get_json_value "$req" "encoded_file_content")
++ if [ $? -ne 0 ]; then
++ echo "Failed to get encoded file content"
++ return 1
++ fi
++
++ echo -ne "$encoded_file_content" | base64 -d > $INPUT_FILE.sig
++ if [ $? -ne 0 ]; then
++ echo "Failed to write the signed file"
++ return 1
++ fi
++
++ # for test
++ # cp -f $INPUT_FILE $INPUT_FILE.sig
++ # req="{file_sha256:41c68fca7b3870cc9ef13a828a74af933bd8e4ff345fcfa316}"
++
++ # 3. check the hash
++ sha256_cal=$(sha256sum $INPUT_FILE.sig | awk '{print $1}')
++ sha256_get=$(get_json_value "$req" "file_sha256" | tr '[:upper:]' '[:lower:]')
++ if [ "$sha256_cal" != "$sha256_get" ]; then
++ echo "Failed to verify the hash value"
++ return 1
++ fi
++}
++
++sign_post() {
++ case $INPUT_TYPE in
++ --efi)
++ efi_sign_post
++ ;;
++ --module)
++ module_sign_post
++ ;;
++ --ima-digestlist)
++ ima_digestlist_sign_post
++ ;;
++ --kernel)
++ kernel_sign_post
++ ;;
++ esac
++}
++
++# Main function
++sign_pre
++
++for ((i=1; i<=$CONFIG_RETEST_COUNT; i++)); do
++ sign
++ ret_sign=$?
++ if [ $ret_sign -eq 0 ]; then
++ echo "Succeed to sign file"
++ break;
++ elif [ $ret_sign -eq $FAILED_SIGN_PERMISSION_DENIED ]; then
++ echo "Failed to sign file, permission denied"
++ SIGN_RESULT=$FAILED_SIGN_PERMISSION_DENIED
++ break;
++ elif [ $i -ne $CONFIG_RETEST_COUNT ]; then
++ echo "Failed to sign file, try again"
++ elif [ $i -eq $CONFIG_RETEST_COUNT ]; then
++ echo "Failed to sign file"
++ SIGN_RESULT=1
++ fi
++done
++
++sign_post
++exit $SIGN_RESULT
+--
+2.33.0
+
diff --git a/Fix-a-typo-in-brp-digest-list.patch b/Fix-a-typo-in-brp-digest-list.patch
new file mode 100644
index 0000000..305237d
--- /dev/null
+++ b/Fix-a-typo-in-brp-digest-list.patch
@@ -0,0 +1,26 @@
+From a82057c590f958d10898c2e5f7211241be3dfd7a Mon Sep 17 00:00:00 2001
+From: Roberto Sassu <roberto.sassu@huawei.com>
+Date: Fri, 26 Feb 2021 09:00:06 +0100
+Subject: [PATCH] Fix a typo in brp-digest-list
+
+Rename RPM_PACKAGE_NAM to RPM_PACKAGE_NAME.
+---
+ brp-digest-list | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/brp-digest-list b/brp-digest-list
+index 435b962..c3b2156 100644
+--- a/brp-digest-list
++++ b/brp-digest-list
+@@ -86,7 +86,7 @@ if [[ "$(basename $BIN_PKG_FILES)" =~ "digest-list-tools" && \
+
+ export BRP_PESIGN_FILES="$2/etc/ima/digest_lists/*"
+ export RPM_BUILD_ROOT
+- export RPM_PACKAGE_NAM="digest-list-tools"
++ export RPM_PACKAGE_NAME="digest-list-tools"
+ export RPM_SOURCE_DIR="$(rpm --eval %_topdir)/SOURCES"
+
+ if [ -f "/usr/lib/rpm/brp-suse.d/brp-99-pesign" ]; then
+--
+2.26.2
+
diff --git a/Fix-python3_version-macros-for-Python-3.10.patch b/Fix-python3_version-macros-for-Python-3.10.patch
new file mode 100644
index 0000000..fc76959
--- /dev/null
+++ b/Fix-python3_version-macros-for-Python-3.10.patch
@@ -0,0 +1,30 @@
+From 84ed1ab69d4b1e0aea452350d9f2865e8f7c28e7 Mon Sep 17 00:00:00 2001
+From: Miro Hrončok <miro@hroncok.cz>
+Date: Aug 26 2019 13:24:23 +0000
+Subject: Fix %python3_version macros for Python 3.10
+
+
+No need to bump the release, 3.10 is far from now.
+
+Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1745601
+
+---
+
+diff --git a/macros.python b/macros.python
+index 1952aed..a170c4b 100644
+--- a/macros.python
++++ b/macros.python
+@@ -139,8 +139,8 @@ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $pyth
+ %__python3 /usr/bin/python3
+ %python3_sitelib %(%{__python3} -Ic "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+ %python3_sitearch %(%{__python3} -Ic "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+-%python3_version %(%{__python3} -Ic "import sys; sys.stdout.write(sys.version[:3])")
+-%python3_version_nodots %(%{__python3} -Ic "import sys; sys.stdout.write(sys.version[:3].replace('.',''))")
++%python3_version %(%{__python3} -Ic "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")
++%python3_version_nodots %(%{__python3} -Ic "import sys; sys.stdout.write('{0.major}{0.minor}'.format(sys.version_info))")
+ %python3_platform %(%{__python3} -Ic "import sysconfig; print(sysconfig.get_platform())")
+ %py3dir %{_builddir}/python3-%{name}-%{version}-%{release}
+
+--
+2.27.0
+
diff --git a/Give-a-warning-when-using-kabi-outside-our-stablelis.patch b/Give-a-warning-when-using-kabi-outside-our-stablelis.patch
new file mode 100644
index 0000000..d2cba8e
--- /dev/null
+++ b/Give-a-warning-when-using-kabi-outside-our-stablelis.patch
@@ -0,0 +1,240 @@
+From 895c930b1418798509a1f19706b6a1be188ad303 Mon Sep 17 00:00:00 2001
+From: Liu Yuntao <liuyuntao10@huawei.com>
+Date: Sat, 2 Jul 2022 13:59:25 +0800
+Subject: [PATCH] Give a warning when using kabi outside our stablelists.
+
+Add a script that will find requirements for your package. It can make an
+additional kabi whitelist check for you, compared with rpmbuild's builtin
+requirement scanner. You may add "%define _use_internal_dependency_generator 0"
+in your .spec file to enable this feature.
+synced from CentOS's implementation.
+---
+ find-requires | 38 +++++++++++
+ find-requires.ksyms | 155 ++++++++++++++++++++++++++++++++++++++++++++
+ macros.kmp | 3 +-
+ 3 files changed, 195 insertions(+), 1 deletion(-)
+ create mode 100644 find-requires
+ create mode 100644 find-requires.ksyms
+
+diff --git a/find-requires b/find-requires
+new file mode 100644
+index 0000000..b7cd825
+--- /dev/null
++++ b/find-requires
+@@ -0,0 +1,38 @@
++#!/bin/bash
++
++#
++# Auto-generate requirements for executables (both ELF and a.out) and library
++# sonames, script interpreters, and perl modules.
++#
++
++ulimit -c 0
++
++filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"`
++
++[ -x /usr/lib/rpm/rpmdeps -a -n "$filelist" ] && \
++ echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/rpmdeps --requires
++
++#
++# --- Kernel module imported symbols
++#
++# Since we don't (yet) get passed the name of the package being built, we
++# cheat a little here by looking first for a kernel, then for a kmod.
++#
++
++unset is_kmod
++
++for f in $filelist; do
++ if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*)\.ko(\.gz|\.bz2|\.xz)?$:\2:p') ]
++ then
++ is_kmod=1;
++ elif [ $(echo "$f" | sed -r -ne 's:^.*/boot/(.*):\1:p') ]
++ then
++ unset is_kmod;
++ break;
++ fi
++done
++
++[ -x /usr/lib/rpm/__vendor/find-requires.ksyms ] && [ "$is_kmod" ] &&
++ printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/__vendor/find-requires.ksyms
++
++exit 0
+diff --git a/find-requires.ksyms b/find-requires.ksyms
+new file mode 100644
+index 0000000..15cc729
+--- /dev/null
++++ b/find-requires.ksyms
+@@ -0,0 +1,155 @@
++#! /bin/bash
++#
++# This script is called during external module building to create dependencies
++# both upon the linux kernel, and on additional external modules. Symbols that
++# cannot be reconciled against those provided by the kernel are assumed to be
++# provided by an external module and "ksym" replaces th regular "kernel" dep.
++
++IFS=$'\n'
++
++# Extract all of the symbols provided by this module.
++all_provides() {
++ for module in "$@"; do
++ tmpfile=""
++ if [ "x${module%.ko}" = "x${module}" ]; then
++ tmpfile=$(mktemp -t ${0##*/}.XXXXXX.ko)
++ proc_bin=
++ case "${module##*.}" in
++ xz)
++ proc_bin=xz
++ ;;
++ bz2)
++ proc_bin=bzip2
++ ;;
++ gz)
++ proc_bin=gzip
++ ;;
++ esac
++
++ [ -n "$proc_bin" ] || continue
++
++ "$proc_bin" -d -c - < "$module" > "$tmpfile" || continue
++ module="$tmpfile"
++ fi
++
++ if [[ -n $(nm "$module" | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):0x\1 \2:p') ]]; then
++ nm "$module" \
++ | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):0x\1 \2:p' \
++ | awk --non-decimal-data '{printf("%s:0x%08x\n", $2, $1)}'
++ else
++ ELFRODATA=$(readelf -R .rodata "$module" | awk '/0x/{printf $2$3$4$5}')
++ if [[ -n $(readelf -h "$module" | grep "little endian") ]]; then
++ RODATA=$(echo $ELFRODATA | sed 's/\(..\)\(..\)\(..\)\(..\)/\4\3\2\1/g')
++ else
++ RODATA=$ELFRODATA
++ fi
++ for sym in $(nm "$module" | sed -r -ne 's:^0*([0-9a-f]+) R __crc_(.+):0x\1 \2:p'); do
++ echo $sym $RODATA
++ done \
++ | awk --non-decimal-data '{printf("%s:0x%08s\n", $2, substr($3,($1*2)+1,8))}'
++ fi
++
++ [ -z "$tmpfile" ] || rm -f -- "$tmpfile"
++ done \
++ | LC_ALL=C sort -k1,1 -u
++}
++
++# Extract all of the requirements of this module.
++all_requires() {
++ for module in "$@"; do
++ set -- $(/sbin/modinfo -F vermagic "$module" | sed -e 's: .*::' -e q)
++ /sbin/modprobe --dump-modversions "$module" \
++ | awk --non-decimal-data '
++ BEGIN { FS = "\t" ; OFS = "\t" }
++ {printf("%s:0x%08x\n", $2, $1)}' \
++ | sed -r -e 's:$:\t'"$1"':'
++ done \
++ | LC_ALL=C sort -k1,1 -u
++}
++
++# Filter out requirements fulfilled by the module itself.
++mod_requires() {
++ LC_ALL=C join -t $'\t' -j 1 -v 1 \
++ <(all_requires "$@") \
++ <(all_provides "$@") \
++ | LC_ALL=C sort -k1,1 -u
++}
++
++if ! [ -e /sbin/modinfo -a -e /sbin/modprobe ]; then
++ cat > /dev/null
++ exit 0
++fi
++
++check_kabi() {
++ arch=$(uname -m)
++ kabi_file="/lib/modules/kabi-current/kabi_stablelist_$arch"
++
++ # If not installed, output a warning and return (continue)
++ if [ ! -f "$kabi_file" ]; then
++ echo "" >&2
++ echo "********************************************************************************" >&2
++ echo "*********************** KERNEL ABI COMPATIBILITY WARNING ***********************" >&2
++ echo "********************************************************************************" >&2
++ echo "The kernel ABI reference files (provided by "kernel-abi-stablelists") were not found." >&2
++ echo "No compatibility check was performed. Please install the kABI reference files" >&2
++ echo "and rebuild if you would like to verify compatibility with kernel ABI." >&2
++ echo "" >&2
++ return
++ fi
++
++ unset non_kabi
++ for symbol in "$@"; do
++ if ! egrep "^$symbol\$" $kabi_file >/dev/null; then
++ non_kabi=("${non_kabi[@]}" "$symbol")
++ fi
++ done
++
++ if [ ${#non_kabi[@]} -gt 0 ]; then
++ echo "" >&2
++ echo "********************************************************************************" >&2
++ echo "*********************** KERNEL ABI COMPATIBILITY WARNING ***********************" >&2
++ echo "********************************************************************************" >&2
++ echo "The following kernel symbols are not guaranteed to remain compatible with" >&2
++ echo "future kernel updates to this RHEL release:" >&2
++ echo "" >&2
++ for symbol in "${non_kabi[@]}"; do
++ printf "\t$symbol\n" >&2
++ done
++ echo "" >&2
++ echo "__vendor recommends that you consider using only official kernel ABI symbols" >&2
++ echo "where possible. Requests for additions to the kernel ABI can be filed with" >&2
++ echo "your partner or customer representative (component: driver-update-program)." >&2
++ echo "" >&2
++ fi
++}
++
++modules=($(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz)?$'))
++if [ ${#modules[@]} -gt 0 ]; then
++ kernel=$(/sbin/modinfo -F vermagic "${modules[0]}" | sed -e 's: .*::' -e q)
++
++ # get all that kernel provides
++ symvers=$(mktemp -t ${0##*/}.XXXXX)
++
++ cat /usr/src/kernels/$kernel/Module.symvers | awk '
++ BEGIN { FS = "\t" ; OFS = "\t" }
++ { print $2 ":" $1 }
++ ' \
++ | sed -r -e 's:$:\t'"$kernel"':' \
++ | LC_ALL=C sort -k1,1 -u > $symvers
++
++ # Symbols matching with the kernel get a "kernel" dependency
++ mod_req=$(mktemp -t mod_req.XXXXX)
++ mod_requires "${modules[@]}" > "$mod_req"
++ LC_ALL=C join -t $'\t' -j 1 $symvers "$mod_req" | LC_ALL=C sort -u \
++ | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print "kernel(" $1 ") = " $2 }'
++
++ # Symbols from elsewhere get a "ksym" dependency
++ LC_ALL=C join -t $'\t' -j 1 -v 2 $symvers "$mod_req" | LC_ALL=C sort -u \
++ | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print "ksym(" $1 ") = " $2 }'
++
++ # Check kABI if the kernel-abi-stablelists package is installed
++ # Do this last so we can try to output this error at the end
++ kabi_check_symbols=($(LC_ALL=C join -t $'\t' -j 1 $symvers "$mod_req" | LC_ALL=C sort -u \
++ | awk 'BEGIN { FS = "[\t:]" ; OFS = "\t" } { print $1 }'))
++ check_kabi "${kabi_check_symbols[@]}"
++fi
+diff --git a/macros.kmp b/macros.kmp
+index 5207045..df7e41e 100644
+--- a/macros.kmp
++++ b/macros.kmp
+@@ -1,7 +1,8 @@
+-# Use these macros to differentiate between RH and other KMP implementation(s).
++# 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 ]
+--
+2.27.0
+
diff --git a/add-brp-scripts-to-delete-rpath.patch b/add-brp-scripts-to-delete-rpath.patch
new file mode 100644
index 0000000..8677bd5
--- /dev/null
+++ b/add-brp-scripts-to-delete-rpath.patch
@@ -0,0 +1,145 @@
+From 9648228a3f64de46dd7fbb26e2df429352de17e1 Mon Sep 17 00:00:00 2001
+From: yangmingtaip <yangmingtai@huawei.com>
+Date: Sat, 4 Sep 2021 14:14:54 +0800
+Subject: [PATCH] add brp scripts to delete rpath
+
+Signed-off-by: xujing <xujing125@huawei.com>
+---
+ brp-chrpath | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ macros | 2 +
+ 2 files changed, 106 insertions(+)
+ create mode 100755 brp-chrpath
+
+diff --git a/brp-chrpath b/brp-chrpath
+new file mode 100755
+index 0000000..dc48351
+--- /dev/null
++++ b/brp-chrpath
+@@ -0,0 +1,104 @@
++#!/usr/bin/sh
++# remove rpath specified
++
++rpathSuffix=(
++ "/home/abuild/rpmbuild/BUILD",
++ "/home/lkp/rpmbuild/BUILD"
++)
++
++rpath=(
++ "/usr/lib64",
++ "/lib64",
++ "/usr/lib",
++ "/lib",
++ "/usr/lib/../lib64"
++)
++
++buildroot=$1
++
++function rpathChange()
++{
++ localSrcPath=$1
++ localDstPath=""
++
++ rpathArr=(`echo $localSrcPath | tr ':' ' '`)
++
++ for path in ${rpathArr[*]}
++ do
++ localflag=0
++ for suffix in ${rpathSuffix[*]}
++ do
++ if echo "$path" | grep $suffix &> /dev/null; then
++ localflag=1
++ break
++ fi
++ done
++
++ # Is the suffix path, delete
++ if [ $localflag -eq 1 ]; then
++ continue;
++ fi
++
++ #Is the standard path, delete
++ if echo "${rpath[@]}" | grep -w $path &> /dev/null; then
++ continue
++ fi
++
++ if [ x"$localDstPath" == x"" ]; then
++ localDstPath=$path
++ else
++ localDstPath=$localDstPath:$path
++ fi
++ done
++
++ echo $localDstPath
++}
++
++function removeRpathOrRunpath()
++{
++ localfile=$1
++
++ rpathInfo=$(chrpath -l $localfile | grep "RPATH=")
++ runpathInfo=$(chrpath -l $localfile | grep "RUNPATH=")
++
++ currPath=""
++ realPath=""
++ needCh=0
++ if [ x"$rpathInfo" != x"" ]; then
++ needCh=1
++ currPath=$(echo $rpathInfo | awk -F "RPATH=" '{print $2}')
++ realPath=$(rpathChange $currPath)
++ fi
++
++ if [ x"$runpathInfo" != x"" ]; then
++ needCh=1
++ currPath=$(echo $runpathInfo | awk -F "RUNPATH=" '{print $2}')
++ realPath=$(rpathChange $currPath)
++ fi
++
++ if [ $needCh -eq 0 ]; then
++ return 0
++ fi
++
++ if [ x"$realPath" == x"" ]; then
++ chrpath -d $localfile
++ else
++ chrpath -r $realPath $localfile
++ fi
++
++ return 0
++}
++
++for file in $(find $buildroot/ -executable -type f -exec file {} ';' | grep "\<ELF\>" | awk -F ':' '{print $1}')
++do
++ test -u $file
++ if [ $? -eq 0 ]; then
++ continue
++ fi
++
++ if [ -w "$file" ]; then
++ removeRpathOrRunpath $file
++ fi
++done
++
++exit 0
+diff --git a/macros b/macros
+index 36621df..a316be9 100644
+--- a/macros
++++ b/macros
+@@ -89,6 +89,7 @@
+
+ # Build root policy macros. Standard naming:
+ # convert all '-' in basename to '_', add two leading underscores.
++%__brp_chrpath /usr/lib/rpm/brp-chrpath %{buildroot}
+ %__brp_ldconfig /usr/lib/rpm/brp-ldconfig
+ %__brp_compress /usr/lib/rpm/brp-compress
+ %__brp_strip /usr/lib/rpm/brp-strip %{__strip}
+@@ -111,6 +112,7 @@
+
+ %__spec_install_post\
+ %{?__debug_package:%{__debug_install_post}}\
++ %{?__vendor_delete_rpath:%{?__brp_chrpath}} \
+ %{__arch_install_post}\
+ %{__os_install_post}\
+ %{nil}
+--
+2.33.0
+
diff --git a/add-common-script.patch b/add-common-script.patch
new file mode 100644
index 0000000..bb7892e
--- /dev/null
+++ b/add-common-script.patch
@@ -0,0 +1,313 @@
+From 4db504b19f6dd04a44e46b43b3aff4e6cab9214d Mon Sep 17 00:00:00 2001
+From: wangkerong <wangkerong@huawei.com>
+Date: Wed, 13 Oct 2021 10:04:33 +0800
+Subject: [PATCH] add_commom_script
+
+---
+ common.lua | 294 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 294 insertions(+)
+ create mode 100644 common.lua
+
+diff --git a/common.lua b/common.lua
+new file mode 100644
+index 0000000..884ee4d
+--- /dev/null
++++ b/common.lua
+@@ -0,0 +1,294 @@
++-- Convenience Lua functions that can be used within rpm macros
++
++-- Reads an rpm variable. Unlike a basic rpm.expand("{?foo}"), returns nil if
++-- the variable is unset, which is convenient in lua tests and enables
++-- differentiating unset variables from variables set to ""
++local function read(rpmvar)
++ if not rpmvar or
++ (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then
++ return nil
++ else
++ return rpm.expand("%{?" .. rpmvar .. "}")
++ end
++end
++
++-- Returns true if the macro that called this function had flag set
++-- – for example, hasflag("z") would give the following results:
++-- %foo -z bar → true
++-- %foo -z → true
++-- %foo → false
++local function hasflag(flag)
++ return (rpm.expand("%{-" .. flag .. "}") ~= "")
++end
++
++-- Returns the argument passed to flag in the macro that called this function
++-- – for example, readflag("z") would give the following results:
++-- %foo -z bar → bar
++-- %foo → nil
++-- %foo -z "" → empty string
++-- %foo -z '' → empty string
++local function readflag(flag)
++ if not hasflag(flag) then
++ return nil
++ else
++ local a = rpm.expand("%{-" .. flag .. "*}")
++ -- Handle "" and '' as empty strings
++ if (a == '""') or (a == "''") then
++ a = ''
++ end
++ return a
++ end
++end
++
++-- Sets a spec variable; echoes the result if verbose
++local function explicitset(rpmvar, value, verbose)
++ local value = value
++ if (value == nil) or (value == "") then
++ value = "%{nil}"
++ end
++ rpm.define(rpmvar .. " " .. value)
++ if verbose then
++ rpm.expand("%{warn:Setting %%{" .. rpmvar .. "} = " .. value .. "}")
++ end
++end
++
++-- Unsets a spec variable if it is defined; echoes the result if verbose
++local function explicitunset(rpmvar, verbose)
++ if (rpm.expand("%{" .. rpmvar .. "}") ~= "%{" .. rpmvar .. "}") then
++ rpm.define(rpmvar .. " %{nil}")
++ if verbose then
++ rpm.expand("%{warn:Unsetting %%{" .. rpmvar .. "}}")
++ end
++ end
++end
++
++-- Sets a spec variable, if not already set; echoes the result if verbose
++local function safeset(rpmvar, value, verbose)
++ if (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then
++ explicitset(rpmvar,value,verbose)
++ end
++end
++
++-- Aliases a list of rpm variables to the same variables suffixed with 0 (and
++-- vice versa); echoes the result if verbose
++local function zalias(rpmvars, verbose)
++ for _, sfx in ipairs({{"","0"},{"0",""}}) do
++ for _, rpmvar in ipairs(rpmvars) do
++ local toalias = "%{?" .. rpmvar .. sfx[1] .. "}"
++ if (rpm.expand(toalias) ~= "") then
++ safeset(rpmvar .. sfx[2], toalias, verbose)
++ end
++ end
++ end
++end
++
++-- Takes a list of rpm variable roots and a suffix and alias current<root> to
++-- <root><suffix> if it resolves to something not empty
++local function setcurrent(rpmvars, suffix, verbose)
++ for _, rpmvar in ipairs(rpmvars) do
++ if (rpm.expand("%{?" .. rpmvar .. suffix .. "}") ~= "") then
++ explicitset( "current" .. rpmvar, "%{" .. rpmvar .. suffix .. "}", verbose)
++ else
++ explicitunset("current" .. rpmvar, verbose)
++ end
++ end
++end
++
++-- Echo the list of rpm variables, with suffix, if set
++local function echovars(rpmvars, suffix)
++ for _, rpmvar in ipairs(rpmvars) do
++ rpmvar = rpmvar .. suffix
++ local header = string.sub(" " .. rpmvar .. ": ",1,21)
++ rpm.expand("%{?" .. rpmvar .. ":%{echo:" .. header .. "%{?" .. rpmvar .. "}}}")
++ end
++end
++
++-- Returns an array, indexed by suffix, containing the non-empy values of
++-- <rpmvar><suffix>, with suffix an integer string or the empty string
++local function getsuffixed(rpmvar)
++ local suffixes = {}
++ zalias({rpmvar})
++ for suffix=0,9999 do
++ local value = rpm.expand("%{?" .. rpmvar .. suffix .. "}")
++ if (value ~= "") then
++ suffixes[tostring(suffix)] = value
++ end
++ end
++ -- rpm convention is to alias no suffix to zero suffix
++ -- only add no suffix if zero suffix is different
++ local value = rpm.expand("%{?" .. rpmvar .. "}")
++ if (value ~= "") and (value ~= suffixes["0"]) then
++ suffixes[""] = value
++ end
++ return suffixes
++end
++
++-- Returns the list of suffixes, including the empty string, for which
++-- <rpmvar><suffix> is set to a non empty value
++local function getsuffixes(rpmvar)
++ suffixes = {}
++ for suffix in pairs(getsuffixed(rpmvar)) do
++ table.insert(suffixes,suffix)
++ end
++ table.sort(suffixes,
++ function(a,b) return (tonumber(a) or 0) < (tonumber(b) or 0) end)
++ return suffixes
++end
++
++-- Returns the suffix for which <rpmvar><suffix> has a non-empty value that
++-- matches best the beginning of the value string
++local function getbestsuffix(rpmvar, value)
++ local best = nil
++ local currentmatch = ""
++ for suffix, setvalue in pairs(getsuffixed(rpmvar)) do
++ if (string.len(setvalue) > string.len(currentmatch)) and
++ (string.find(value, "^" .. setvalue)) then
++ currentmatch = setvalue
++ best = suffix
++ end
++ end
++ return best
++end
++
++-- %writevars core
++local function writevars(macrofile, rpmvars)
++ for _, rpmvar in ipairs(rpmvars) do
++ print("sed -i 's\029" .. string.upper("@@" .. rpmvar .. "@@") ..
++ "\029" .. rpm.expand( "%{" .. rpmvar .. "}" ) ..
++ "\029g' " .. macrofile .. "\n")
++ end
++end
++
++-- https://github.com/rpm-software-management/rpm/issues/566
++-- Reformat a text intended to be used used in a package description, removing
++-- rpm macro generation artefacts.
++-- – remove leading and ending empty lines
++-- – trim intermediary empty lines to a single line
++-- – fold on spaces
++-- Should really be a %%{wordwrap:…} verb
++local function wordwrap(text)
++ text = rpm.expand(text .. "\n")
++ text = string.gsub(text, "\t", " ")
++ text = string.gsub(text, "\r", "\n")
++ text = string.gsub(text, " +\n", "\n")
++ text = string.gsub(text, "\n+\n", "\n\n")
++ text = string.gsub(text, "^\n", "")
++ text = string.gsub(text, "\n( *)[-*—][ ]+", "\n%1– ")
++ output = ""
++ for line in string.gmatch(text, "[^\n]*\n") do
++ local pos = 0
++ local advance = ""
++ for word in string.gmatch(line, "%s*[^%s]*\n?") do
++ local wl, bad = utf8.len(word)
++ if not wl then
++ print("%{warn:Invalid UTF-8 sequence detected in:}" ..
++ "%{warn:" .. word .. "}" ..
++ "%{warn:It may produce unexpected results.}")
++ wl = bad
++ end
++ if (pos == 0) then
++ advance, n = string.gsub(word, "^(%s*– ).*", "%1")
++ if (n == 0) then
++ advance = string.gsub(word, "^(%s*).*", "%1")
++ end
++ advance = string.gsub(advance, "– ", " ")
++ pos = pos + wl
++ elseif (pos + wl < 81) or
++ ((pos + wl == 81) and string.match(word, "\n$")) then
++ pos = pos + wl
++ else
++ word = advance .. string.gsub(word, "^%s*", "")
++ output = output .. "\n"
++ pos = utf8.len(word)
++ end
++ output = output .. word
++ if pos > 80 then
++ pos = 0
++ if not string.match(word, "\n$") then
++ output = output .. "\n"
++ end
++ end
++ end
++ end
++ output = string.gsub(output, "\n*$", "\n")
++ return output
++end
++
++-- Because rpmbuild will fail if a subpackage is declared before the source
++-- package itself, provide a source package declaration shell as fallback.
++local function srcpkg(verbose)
++ if verbose then
++ rpm.expand([[
++%{echo:Creating a header for the SRPM from %%{source_name}, %%{source_summary} and}
++%{echo:%%{source_description}. If that is not the intended result, please declare the}
++%{echo:SRPM header and set %%{source_name} in your spec file before calling a macro}
++%{echo:that creates other package headers.}
++]])
++ end
++ print(rpm.expand([[
++Name: %{source_name}
++Summary: %{source_summary}
++%description
++%wordwrap -v source_description
++]]))
++ explicitset("currentname", "%{source_name}", verbose)
++end
++
++-- %new_package core
++local function new_package(source_name, pkg_name, name_suffix, first, verbose)
++ -- Safety net when the wrapper is used in conjunction with traditional syntax
++ if (not first) and (not source_name) then
++ rpm.expand([[
++%{warn:Something already set a package name. However, %%{source_name} is not set.}
++%{warn:Please set %%{source_name} to the SRPM name to ensure reliable processing.}
++]])
++ if name_suffix then
++ print(rpm.expand("%package " .. name_suffix))
++ else
++ print(rpm.expand("%package -n " .. pkg_name))
++ end
++ return
++ end
++ -- New processing
++ if not (pkg_name or name_suffix or source_name) then
++ rpm.expand([[
++%{error:You need to set %%{source_name} or provide explicit package naming!}
++]])
++ end
++ if name_suffix then
++ print(rpm.expand("%package " .. name_suffix))
++ explicitset("currentname", "%{source_name}-" .. name_suffix, verbose)
++ else
++ if not source_name then
++ source_name = pkg_name
++ end
++ if (pkg_name == source_name) then
++ safeset("source_name", source_name, verbose)
++ print(rpm.expand("Name: %{source_name}"))
++ else
++ if source_name and first then
++ srcpkg(verbose)
++ end
++ print(rpm.expand("%package -n " .. pkg_name))
++ end
++ explicitset("currentname", pkg_name, verbose)
++ end
++end
++
++return {
++ read = read,
++ hasflag = hasflag,
++ readflag = readflag,
++ explicitset = explicitset,
++ explicitunset = explicitunset,
++ safeset = safeset,
++ zalias = zalias,
++ setcurrent = setcurrent,
++ echovars = echovars,
++ getsuffixed = getsuffixed,
++ getsuffixes = getsuffixes,
++ getbestsuffix = getbestsuffix,
++ writevars = writevars,
++ wordwrap = wordwrap,
++ new_package = new_package,
++}
+--
+2.27.0
+
diff --git a/add-loongarch64-support-for-config.guess-and-config.sub.patch b/add-loongarch64-support-for-config.guess-and-config.sub.patch
new file mode 100644
index 0000000..acc2f83
--- /dev/null
+++ b/add-loongarch64-support-for-config.guess-and-config.sub.patch
@@ -0,0 +1,26 @@
+diff --git a/config.guess b/config.guess
+index 463631a..2985f85 100644
+--- a/config.guess
++++ b/config.guess
+@@ -975,6 +975,9 @@ EOF
+ k1om:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
++ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+diff --git a/config.sub b/config.sub
+index 39dbf60..39870d3 100644
+--- a/config.sub
++++ b/config.sub
+@@ -268,6 +268,7 @@ case $basic_machine in
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
++ | loongarch32 | loongarch64 | loongarchx32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
diff --git a/add-loongarch64-to-generic_arches.patch b/add-loongarch64-to-generic_arches.patch
new file mode 100644
index 0000000..cf3dc63
--- /dev/null
+++ b/add-loongarch64-to-generic_arches.patch
@@ -0,0 +1,13 @@
+diff --git a/macros b/macros
+index d6b2c80..a66eb2e 100644
+--- a/macros
++++ b/macros
+@@ -241,7 +241,7 @@
+ %pkg_vcmp() (%{expand:%%{pkg_version_cmp %1 %3}} %2 0)
+
+ #arches macros
+-%generic_arches %{ix86} x86_64 %{arm} aarch64
++%generic_arches %{ix86} x86_64 %{arm} aarch64 loongarch64
+ %ldc_arches %{generic_arches}
+ %valgrind_arches %{generic_arches}
+ %nodejs_arches %{generic_arches}
diff --git a/add-powerpc64le-and-ppc64le-support.patch b/add-powerpc64le-and-ppc64le-support.patch
new file mode 100644
index 0000000..8840182
--- /dev/null
+++ b/add-powerpc64le-and-ppc64le-support.patch
@@ -0,0 +1,39 @@
+From c6d355a6997ac10403181015b5ca9d17dcf8d1a7 Mon Sep 17 00:00:00 2001
+From: JianChunfu <chunfu.jian@shingroup.cn>
+Date: Tue, 24 Oct 2023 18:38:38 +0800
+Subject: [PATCH] add powerpc64le and ppc64le support
+
+---
+ macros | 2 +-
+ rpmrc | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/macros b/macros
+index 5c7447b..38dc694 100644
+--- a/macros
++++ b/macros
+@@ -225,7 +225,7 @@
+ %pkg_vcmp() (%{expand:%%{pkg_version_cmp %1 %3}} %2 0)
+
+ #arches macros
+-%generic_arches %{ix86} x86_64 %{arm} aarch64 loongarch64
++%generic_arches %{ix86} x86_64 %{arm} aarch64 loongarch64 powerpc64le ppc64le
+ %ldc_arches %{generic_arches}
+ %valgrind_arches %{generic_arches}
+ %nodejs_arches %{generic_arches}
+diff --git a/rpmrc b/rpmrc
+in
+dex 8ba756d..10d7c86 100644
+--- a/rpmrc
++++ b/rpmrc
+@@ -8,6 +8,8 @@ optflags: x86_64 %{__global_compiler_flags} -m64 -mtune=generic -fasynchronous-u
+ optflags: aarch64 %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
+ optflags: riscv64 %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
+
++optflags: ppc64le %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
++
+ buildarchtranslate: athlon: i686
+ buildarchtranslate: geode: i686
+ buildarchtranslate: pentium4: i686
+--
+2.33.0
diff --git a/add-pyproject-macros.patch b/add-pyproject-macros.patch
new file mode 100644
index 0000000..c6664c9
--- /dev/null
+++ b/add-pyproject-macros.patch
@@ -0,0 +1,42 @@
+From b16ce81ae43c1e702beb1351ee9891e3e3f697e6 Mon Sep 17 00:00:00 2001
+From: caodongxia <315816521@qq.com>
+Date: Thu, 13 Apr 2023 17:11:53 +0800
+Subject: [PATCH] add pyproject macros
+
+---
+ macros.python | 12 +++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/macros.python b/macros.python
+index d504d3f..d5a7a86 100644
+--- a/macros.python
++++ b/macros.python
+@@ -28,6 +28,12 @@ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $pyth
+ sleep 1
+ }
+
++%pyproject_build() %{expand:\\\
++ CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
++ %{__python3} -mpip wheel --verbose --progress-bar off --disable-pip-version-check --use-pep517 --no-build-isolation --no-deps --wheel-dir ./build . %{?*}
++ sleep 1
++}
++
+ %py_build_egg() %{expand:\\\
+ CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
+ %{__python} %{py_setup} %{?py_setup_args} bdist_egg %{?*}
+@@ -45,6 +51,12 @@ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $pyth
+ %{__python} %{py_setup} %{?py_setup_args} install -O1 --skip-build --root %{buildroot} %{?*}
+ }
+
++%pyproject_install() %{expand:\\\
++ specifier=$(ls ./build/*.whl | xargs basename --multiple | sed -E 's/([^-]+)-([^-]+)-.+\\\.whl/\\\1==\\\2/')
++ CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}"\\\
++ %{__python3} -mpip install --verbose --progress-bar off --disable-pip-version-check --root %{buildroot} --no-compile --ignore-installed --no-deps --no-index --find-links ./build $specifier %{?*}
++}
++
+ %py_install_egg() %{expand:\\\
+ mkdir -p %{buildroot}%{python_sitelib}
+ easy_install -m --prefix %{buildroot}%{_prefix} -Z dist/*-py%{python_version}.egg %{?*}
+--
+2.23.0
+
diff --git a/add-pytest-and-tox-macros.patch b/add-pytest-and-tox-macros.patch
new file mode 100644
index 0000000..b76444e
--- /dev/null
+++ b/add-pytest-and-tox-macros.patch
@@ -0,0 +1,42 @@
+From 2f7b74e83fc52d326d5db7de2bcfab2c8d921f29 Mon Sep 17 00:00:00 2001
+From: desert-sailor <dxwangk@isoftstone.com>
+Date: Mon, 24 Jul 2023 11:36:52 +0800
+Subject: [PATCH] add pytest and tox macros
+
+---
+ macros.python | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/macros.python b/macros.python
+index 1cc6e70..334c0ab 100644
+--- a/macros.python
++++ b/macros.python
+@@ -304,3 +304,25 @@ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $pyth
+ %python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib())")
+ %python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))")
+ %python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")
++
++# New python test macros
++%pytest() %{expand:\\\
++CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" \\
++PATH="%{buildroot}%{_bindir}:$PATH" \\
++PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \\
++PYTHONDONTWRITEBYTECODE=1 \\
++%{?__pytest_addopts:PYTEST_ADDOPTS="${PYTEST_ADDOPTS:-} %{__pytest_addopts}"} \\
++PYTEST_XDIST_AUTO_NUM_WORKERS=%{_smp_build_ncpus} \\
++%{_bindir}/pytest %{?*}
++}
++
++%tox() %{expand:\\\
++TOX_TESTENV_PASSENV="${TOX_TESTENV_PASSENV:-*}" \\
++CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" \\
++PATH="%{buildroot}%{_bindir}:$PATH" \\
++PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \\
++PYTHONDONTWRITEBYTECODE=1 \\
++%{?__pytest_addopts:PYTEST_ADDOPTS="${PYTEST_ADDOPTS:-} %{__pytest_addopts}"} \\
++PYTEST_XDIST_AUTO_NUM_WORKERS=%{_smp_build_ncpus} \\
++%{__python3} -m tox -e py%{python3_version_nodots} --current-env %{?*}
++}
+--
+2.33.0
+
diff --git a/add-riscv64-to-some-arches-macro.patch b/add-riscv64-to-some-arches-macro.patch
new file mode 100644
index 0000000..987acea
--- /dev/null
+++ b/add-riscv64-to-some-arches-macro.patch
@@ -0,0 +1,41 @@
+From 09e746df9d0c333fef9aabcec3047f68c9d1fc60 Mon Sep 17 00:00:00 2001
+From: laokz <zhangkai@iscas.ac.cn>
+Date: Sat, 27 Apr 2024 15:09:30 +0800
+Subject: [PATCH] add riscv64 to some arches macro
+
+---
+ macros | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/macros b/macros
+index 218cd23..c609e85 100644
+--- a/macros
++++ b/macros
+@@ -310,7 +310,7 @@
+ %generic_arches %{ix86} x86_64 %{arm} aarch64 loongarch64 powerpc64le ppc64le
+ %ldc_arches %{generic_arches}
+ %valgrind_arches %{generic_arches}
+-%nodejs_arches %{generic_arches}
++%nodejs_arches %{generic_arches} riscv64
+ %ldc_arches %{generic_arches}
+ %mono_arches %{generic_arches}
+ %fpc_arches %{generic_arches}
+@@ -319,11 +319,10 @@
+ %GNAT_arches %{GPRbuild_arches} %{generic_arches}
+ %GPRbuild_arches %{generic_arches}
+ %nim_arches %{generic_arches}
+-%nodejs_arches %{generic_arches}
+-%ocaml_native_compiler %{generic_arches}
+-%ocaml_natdynlink %{generic_arches}
+-%ocaml_native_profiling %{generic_arches}
+-%openblas_arches %{generic_arches}
++%ocaml_native_compiler %{generic_arches} riscv64
++%ocaml_natdynlink %{generic_arches} riscv64
++%ocaml_native_profiling %{generic_arches} riscv64
++%openblas_arches %{generic_arches} riscv64
+
+ #%ldconfig /sbin/ldconfig
+ %ldconfig_post(n:) %{?ldconfig:%post -p %ldconfig %{?*} %{-n:-n %{-n*}}\
+--
+2.39.2
+
diff --git a/backport-Enable-as-needed-by-default.patch b/backport-Enable-as-needed-by-default.patch
new file mode 100644
index 0000000..182e388
--- /dev/null
+++ b/backport-Enable-as-needed-by-default.patch
@@ -0,0 +1,31 @@
+From 210649d3a50eb862eb95caec54c52cd1513a1dda Mon Sep 17 00:00:00 2001
+From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
+Date: Wed, 15 Aug 2018 07:00:14 +0200
+Subject: [PATCH] Enable --as-needed by default
+
+Conflict:adapt context
+Reference:https://src.fedoraproject.org/rpms/redhat-rpm-config/c/357550f7ba4495b01399c904d389369eb0666837
+
+Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
+---
+ macros | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/macros b/macros
+index cb96614..0d54994 100644
+--- a/macros
++++ b/macros
+@@ -257,8 +257,8 @@
+ #%_ld_strict_symbol_defs 1
+ %_ld_symbols_flags %{?_ld_strict_symbol_defs:-Wl,-z,defs}
+
+-# use "%define _ld_as_needed 1" to enable.
+-#%_ld_as_needed 1
++# use "%undefine _ld_as_needed" to disable.
++%_ld_as_needed 1
+ %_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed}
+
+ %_general_options -O2 -g -grecord-gcc-switches -pipe -fstack-protector-strong %[ "%{toolchain}" == "clang" ? "-fgcc-compatible" : "" ]
+--
+2.33.0
+
diff --git a/backport-kmp-feature.patch b/backport-kmp-feature.patch
new file mode 100644
index 0000000..6525efb
--- /dev/null
+++ b/backport-kmp-feature.patch
@@ -0,0 +1,485 @@
+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 | 281 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 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,281 @@
++#!/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 [ "" != "$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) )
++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
+
diff --git a/change-the-vendor-to-generic-for-common-use.patch b/change-the-vendor-to-generic-for-common-use.patch
new file mode 100644
index 0000000..6da802d
--- /dev/null
+++ b/change-the-vendor-to-generic-for-common-use.patch
@@ -0,0 +1,109 @@
+From e9f486a8d9af5b01dcadf8432a449e434cd6886b Mon Sep 17 00:00:00 2001
+From: Yangyang Shen <shenyangyang4@huawei.com>
+Date: Sat, 27 Mar 2021 14:18:56 +0800
+Subject: [PATCH] change the vendor to generic for common use
+
+---
+ openEuler-hardened-cc1 => generic-hardened-cc1 | 0
+ openEuler-hardened-ld => generic-hardened-ld | 0
+ openEuler-pie-cc1 => generic-pie-cc1 | 0
+ openEuler-pie-ld => generic-pie-ld | 0
+ macros | 16 ++++++++--------
+ macros.kmp | 2 +-
+ 6 files changed, 9 insertions(+), 9 deletions(-)
+ rename openEuler-hardened-cc1 => generic-hardened-cc1 (100%)
+ rename openEuler-hardened-ld => generic-hardened-ld (100%)
+ rename openEuler-pie-cc1 => generic-pie-cc1 (100%)
+ rename openEuler-pie-ld => generic-pie-ld (100%)
+
+diff --git a/openEuler-hardened-cc1 b/generic-hardened-cc1
+similarity index 100%
+rename from openEuler-hardened-cc1
+rename to generic-hardened-cc1
+diff --git a/openEuler-hardened-ld b/generic-hardened-ld
+similarity index 100%
+rename from openEuler-hardened-ld
+rename to generic-hardened-ld
+diff --git a/openEuler-pie-cc1 b/generic-pie-cc1
+similarity index 100%
+rename from openEuler-pie-cc1
+rename to generic-pie-cc1
+diff --git a/openEuler-pie-ld b/generic-pie-ld
+similarity index 100%
+rename from openEuler-pie-ld
+rename to generic-pie-ld
+diff --git a/macros b/macros
+index b06faea..def87a7 100644
+--- a/macros
++++ b/macros
+@@ -1,6 +1,6 @@
+ # Per-platform rpm configuration file.
+
+-%_vendor openEuler
++%_vendor __vendor
+ %_os linux
+ %_target_platform %{_target_cpu}-%{_vendor}-%{_target_os}%{?_gnu}
+
+@@ -52,7 +52,7 @@
+ %configure \
+ %{set_build_flags}; \
+ [ "%_configure_gnuconfig_hack" = 1 ] && for i in $(find $(dirname %{_configure}) -name config.guess -o -name config.sub) ; do \
+- [ -f /usr/lib/rpm/openEuler/$(basename $i) ] && %{__rm} -f $i && %{__cp} -fv /usr/lib/rpm/openEuler/$(basename $i) $i ; \
++ [ -f /usr/lib/rpm/%{_vendor}/$(basename $i) ] && %{__rm} -f $i && %{__cp} -fv /usr/lib/rpm/%{_vendor}/$(basename $i) $i ; \
+ done ; \
+ [ "%_configure_libtool_hardening_hack" = 1 ] && [ x != "x%{_hardened_ldflags}" ] && \
+ for i in $(find . -name ltmain.sh) ; do \
+@@ -89,7 +89,7 @@
+
+ # Build root policy macros. Standard naming:
+ # convert all '-' in basename to '_', add two leading underscores.
+-%__brp_ldconfig /usr/lib/rpm/openEuler/brp-ldconfig
++%__brp_ldconfig /usr/lib/rpm/brp-ldconfig
+ %__brp_compress /usr/lib/rpm/brp-compress
+ %__brp_strip /usr/lib/rpm/brp-strip %{__strip}
+ %__brp_strip_comment_note /usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump}
+@@ -144,8 +144,8 @@
+ # secure options for rpmbuild
+ #
+ # #hardened options
+-%_hardening_cflags -specs=/usr/lib/rpm/%{_vendor}/openEuler-hardened-cc1
+-%_hardening_ldflags -Wl,-z,now -specs=/usr/lib/rpm/%{_vendor}/openEuler-hardened-ld
++%_hardening_cflags -specs=/usr/lib/rpm/generic-hardened-cc1
++%_hardening_ldflags -Wl,-z,now -specs=/usr/lib/rpm/generic-hardened-ld
+ # Use "%undefine _hardened_build" to disable.
+ %_hardened_build 1
+ %_hardened_cflags %{?_hardened_build:%{_hardening_cflags}}
+@@ -156,14 +156,14 @@
+ #Use "%undefine _sec_opt_build" to disable.
+ #Use "%undefine _pie_build" to disable.
+ %_pie_build 1
+-%_pie_pre_cflags -specs=/usr/lib/rpm/%{_vendor}/openEuler-pie-cc1
+-%_pie_pre_ldflags -Wl,-z,now -specs=/usr/lib/rpm/%{_vendor}/openEuler-pie-ld
++%_pie_pre_cflags -specs=/usr/lib/rpm/generic-pie-cc1
++%_pie_pre_ldflags -Wl,-z,now -specs=/usr/lib/rpm/generic-pie-ld
+ %_pie_cflags %{?_sec_opt_build:?_pie_build:%{_pie_pre_cflags}}
+ %_pie_ldflags %{?_sec_opt_build:?_pie_build:%{_pie_pre_ldflags}}
+
+ #Use "%undefine _fs_build" to disable.
+ %_fs_build 1
+-%_fs_pre_cflags -specs=/usr/lib/rpm/%{_vendor}/openEuler-fs-cc1
++%_fs_pre_cflags -specs=/usr/lib/rpm/generic-fs-cc1
+ %_fs_cflags %{?_fs_build:%{_fs_pre_cflags}}
+
+
+diff --git a/macros.kmp b/macros.kmp
+index be66e64..b9ebbe8 100644
+--- a/macros.kmp
++++ b/macros.kmp
+@@ -12,7 +12,7 @@ kernel_module_package_release 1
+ kernel-devel
+
+ %kernel_module_package(n:v:r:f:) %{expand:%( \
+- %define kmodtool /usr/lib/rpm/openEuler/kmodtool.py\
++ %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) \
+--
+2.33.0
+
diff --git a/check-if-the-file-is-a-symbolic-link-in-brp-digest-list.patch b/check-if-the-file-is-a-symbolic-link-in-brp-digest-list.patch
new file mode 100644
index 0000000..853ec38
--- /dev/null
+++ b/check-if-the-file-is-a-symbolic-link-in-brp-digest-list.patch
@@ -0,0 +1,25 @@
+From 0eea7318489474d20e391cc55eb81f2a642e36f8 Mon Sep 17 00:00:00 2001
+From: gaoyusong <gaoyusong2@huawei.com>
+Date: Fri, 3 Nov 2023 10:55:26 +0800
+Subject: [PATCH] check if the file is a symbolic link in brp-digest-list
+
+---
+ brp-digest-list | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/brp-digest-list b/brp-digest-list
+index 9ec50a2..77248c9 100644
+--- a/brp-digest-list
++++ b/brp-digest-list
+@@ -18,7 +18,7 @@ cat - > $BIN_PKG_FILES
+ trap "rm -f \"${BIN_PKG_FILES}\"" 0 2 3 5 10 13 15
+
+ # File empty, exit
+-if [ -z $(head -c 1 $BIN_PKG_FILES) ]; then
++if [ -L $BIN_PKG_FILES ] || [ -z $(head -c 1 $BIN_PKG_FILES) ]; then
+ exit 0
+ fi
+
+--
+2.27.0
+
diff --git a/exclude-kernel-source-and-EFI-files-in-digest-list-building.patch b/exclude-kernel-source-and-EFI-files-in-digest-list-building.patch
new file mode 100644
index 0000000..a86b7b7
--- /dev/null
+++ b/exclude-kernel-source-and-EFI-files-in-digest-list-building.patch
@@ -0,0 +1,74 @@
+From 85e9f95d163eb3daa75add855be3208472c51850 Mon Sep 17 00:00:00 2001
+From: Anakin Zhang <benjamin93@163.com>
+Date: Thu, 8 Apr 2021 19:09:00 +0800
+Subject: [PATCH] exclude kernel source and EFI files in digest list building
+
+Signed-off-by: Anakin Zhang <benjamin93@163.com>
+---
+ brp-digest-list | 22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/brp-digest-list b/brp-digest-list
+index c3b2156..e698b7a 100644
+--- a/brp-digest-list
++++ b/brp-digest-list
+@@ -8,8 +8,6 @@ if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
+ exit 0
+ fi
+
+-
+-
+ # Create temporary file listing files in the manifest
+ #[ -n "$TMPDIR" ] || TMPDIR="/tmp"
+ TMPDIR="/tmp"
+@@ -34,6 +32,8 @@ mkdir -p $DIGEST_LIST_DIR.sig
+ gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR -i l:policy \
+ -i i: -o add -p -1 -m immutable -i L:$BIN_PKG_FILES -i u: \
+ -A $RPM_BUILD_ROOT -i e: \
++ -i E:/usr/src \
++ -i E:/boot/efi \
+ -i F:/lib \
+ -i F:/usr/lib \
+ -i F:/lib64 \
+@@ -43,16 +43,18 @@ gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR -i l:policy \
+ -i F:/lib/firmware \
+ -i F:/usr/lib/firmware
+
+-f="$DIGEST_LIST_DIR/0-metadata_list-compact-$(basename $BIN_PKG_FILES)"
+-[ -f $f ] || exit 0
++DIGEST_LIST_PATH="$DIGEST_LIST_DIR/0-metadata_list-compact-$(basename $BIN_PKG_FILES)"
++[ -f $DIGEST_LIST_PATH ] || exit 0
+
+-chmod 644 $f
+-echo $f
++chmod 644 $DIGEST_LIST_PATH
++echo $DIGEST_LIST_PATH
+
+ # Generate TLV digest list to check metadata
+ gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR.tlv \
+ -i l:policy -i i: -o add -p -1 -m immutable -i L:$BIN_PKG_FILES -i u: \
+ -T -A $RPM_BUILD_ROOT -i e: \
++ -i E:/usr/src \
++ -i E:/boot/efi \
+ -i F:/lib \
+ -i F:/usr/lib \
+ -i F:/lib64 \
+@@ -62,11 +64,11 @@ gen_digest_lists -i M: -t metadata -f compact -d $DIGEST_LIST_DIR.tlv \
+ -i F:/lib/firmware \
+ -i F:/usr/lib/firmware
+
+-f="$DIGEST_LIST_DIR.tlv/0-metadata_list-compact_tlv-$(basename $BIN_PKG_FILES)"
+-[ -f $f ] || exit 0
++DIGEST_LIST_TLV_PATH="$DIGEST_LIST_DIR.tlv/0-metadata_list-compact_tlv-$(basename $BIN_PKG_FILES)"
++[ -f $DIGEST_LIST_TLV_PATH ] || exit 0
+
+-chmod 644 $f
+-echo $f
++chmod 644 $DIGEST_LIST_TLV_PATH
++echo $DIGEST_LIST_TLV_PATH
+
+ if [[ "$(basename $BIN_PKG_FILES)" =~ "digest-list-tools" && \
+ ! $(basename $BIN_PKG_FILES) =~ "debug" ]]; then
+--
+1.8.3.1
+
diff --git a/fix-brp-ldconfig-riscv-default-library-directory.patch b/fix-brp-ldconfig-riscv-default-library-directory.patch
new file mode 100644
index 0000000..5a448b7
--- /dev/null
+++ b/fix-brp-ldconfig-riscv-default-library-directory.patch
@@ -0,0 +1,15 @@
+--- openEuler-rpm-config/brp-ldconfig 2020-08-20 17:13:06.000000000 +0800
++++ openEuler-rpm-config/brp-ldconfig.new 2023-03-08 19:45:58.241036244 +0800
+@@ -5,4 +5,12 @@
+ exit 0
+ fi
+
++riscv64_lp64d=0
++if [ "$HOSTTYPE" = "riscv64" -a -e $RPM_BUILD_ROOT/usr/lib64 -a ! -e $RPM_BUILD_ROOT/usr/lib64/lp64d ]; then
++ ln -s . $RPM_BUILD_ROOT/usr/lib64/lp64d
++ riscv64_lp64d=1
++fi
+ /sbin/ldconfig -N -r "$RPM_BUILD_ROOT"
++if [ $riscv64_lp64d = 1 ]; then
++ rm -f $RPM_BUILD_ROOT/usr/lib64/lp64d
++fi
diff --git a/fix-config-error-for-loongarch64.patch b/fix-config-error-for-loongarch64.patch
new file mode 100644
index 0000000..d85a031
--- /dev/null
+++ b/fix-config-error-for-loongarch64.patch
@@ -0,0 +1,25 @@
+From 749215e0573475d3f8085c5976ec0a82b703ccae Mon Sep 17 00:00:00 2001
+From: Jingyun Hua <huajingyun@loongson.cn>
+Date: Wed, 14 Dec 2022 07:00:44 +0000
+Subject: [PATCH] fix config error for loongarch64
+
+Signed-off-by: Jingyun Hua <huajingyun@loongson.cn>
+---
+ config.sub | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/config.sub b/config.sub
+index aca1d40..4d60f77 100644
+--- a/config.sub
++++ b/config.sub
+@@ -395,6 +395,7 @@ case $basic_machine in
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
++ | loongarch32-* | loongarch64-* | loongarchx32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+--
+2.33.0
+
diff --git a/fix-error-message-for-kmodtool.patch b/fix-error-message-for-kmodtool.patch
new file mode 100644
index 0000000..ef323f0
--- /dev/null
+++ b/fix-error-message-for-kmodtool.patch
@@ -0,0 +1,25 @@
+From 177688aa4c6888a693da0ee7a06e01066cde4c54 Mon Sep 17 00:00:00 2001
+From: Yangyang Shen <shenyangyang4@huawei.com>
+Date: Wed, 30 Sep 2020 14:45:14 +0800
+Subject: [PATCH] fix error message for kmodtool
+
+---
+ kmodtool.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kmodtool.py b/kmodtool.py
+index 724f481..75492b9 100644
+--- a/kmodtool.py
++++ b/kmodtool.py
+@@ -39,7 +39,7 @@ def get_rpmtemplate(kmod_name,verrel):
+ 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("if [ -e /boot/System.map-" + verrel + " ]; then")
+ print(" /sbin/depmod -aeF /boot/System.map-" + verrel +" " + verrel +"> /dev/null || :")
+ print("fi")
+ if (kmp !=""):
+--
+2.23.0
+
diff --git a/fix-the-ELF-file-cannot-be-found-due-to-escape-of.patch b/fix-the-ELF-file-cannot-be-found-due-to-escape-of.patch
new file mode 100644
index 0000000..ae85c22
--- /dev/null
+++ b/fix-the-ELF-file-cannot-be-found-due-to-escape-of.patch
@@ -0,0 +1,25 @@
+From 4e1adcc36b0c2e379d6080ceb874f2413644c535 Mon Sep 17 00:00:00 2001
+From: xujing <xujing125@huawei.com>
+Date: Wed, 15 Nov 2023 17:16:22 +0800
+Subject: [PATCH] fix the ELF file cannot be found due to escape of '\'
+
+---
+ macros | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/macros b/macros
+index 7cde63f..36621df 100644
+--- a/macros
++++ b/macros
+@@ -275,7 +275,7 @@ find $RPM_BUILD_ROOT -type f -name "*.a" -delete
+
+ %delete_la find $RPM_BUILD_ROOT -type f -name "*.la" -delete
+
+-%chrpath_delete find $RPM_BUILD_ROOT/ -type f -exec file {} ';' | grep "\<ELF\>" | awk -F ':' '{print $1}' | xargs -i chrpath --delete {}
++%chrpath_delete find $RPM_BUILD_ROOT/ -type f -exec file {} ';' | grep "\\<ELF\\>" | awk -F ':' '{print $1}' | xargs -i chrpath --delete {}
+
+ %package_help \
+ %package help \
+--
+2.33.0
+
diff --git a/fixed-a-bug-that-missing_-p-in-macros.kmp.patch b/fixed-a-bug-that-missing_-p-in-macros.kmp.patch
new file mode 100644
index 0000000..457597b
--- /dev/null
+++ b/fixed-a-bug-that-missing_-p-in-macros.kmp.patch
@@ -0,0 +1,37 @@
+From 7629ad0c54cc3970e49b2f78043e0fe1b1c6474d Mon Sep 17 00:00:00 2001
+From: liujing <liujing_yewu@cmss.chinamobile.com>
+Date: Wed, 1 Dec 2021 00:46:20 -0500
+Subject: [PATCH] fixed a bug that missing -p in macros.kmp
+
+---
+ macros.kmp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/macros.kmp b/macros.kmp
+index be66e64..5207045 100644
+--- a/macros.kmp
++++ b/macros.kmp
+@@ -5,17 +5,17 @@ kernel_module_package_release 1
+
+
+ #kernel_module_package [ -n name ] [ -v version ] [ -r release ]
+-# [ -f filelist]
++# [ -f filelist][-p preamble]
+ #
+
+ %kernel_module_package_buildreqs %global kmodtool_generate_buildreqs 1 \
+ kernel-devel
+
+-%kernel_module_package(n:v:r:f:) %{expand:%( \
++%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} \
++ python3 %{kmodtool} rpmtemplate_kmp %{-n*}%{!-n:%name} %{kverrel} %{-f*}%{!-f:%filelist} %{-p*}%{!-p:%preamble} \
+ )}
+
+--
+2.27.0
+
diff --git a/openEuler-rpm-config-add-optflags-for-loongarch64-and-sw_64.patch b/openEuler-rpm-config-add-optflags-for-loongarch64-and-sw_64.patch
new file mode 100644
index 0000000..a50dd54
--- /dev/null
+++ b/openEuler-rpm-config-add-optflags-for-loongarch64-and-sw_64.patch
@@ -0,0 +1,26 @@
+From ed8b90665c3bda8ca6bea1bf541e0232f03fb371 Mon Sep 17 00:00:00 2001
+From: yueyuankun <yueyuankun@kylinos.cn>
+Date: Fri, 15 Mar 2024 11:17:38 +0800
+Subject: [PATCH] add optflags for loongarch64 and sw_64
+
+---
+ rpmrc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/rpmrc b/rpmrc
+index 10d7c86..45840e6 100644
+--- a/rpmrc
++++ b/rpmrc
+@@ -8,6 +8,9 @@ optflags: x86_64 %{__global_compiler_flags} -m64 -mtune=generic -fasynchronous-u
+ optflags: aarch64 %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
+ optflags: riscv64 %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
+
++optflags: loongarch64 %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
++optflags: sw_64 %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
++
+ optflags: ppc64le %{__global_compiler_flags} -fasynchronous-unwind-tables -fstack-clash-protection
+
+ buildarchtranslate: athlon: i686
+--
+2.43.0
+
diff --git a/openEuler-rpm-config.spec b/openEuler-rpm-config.spec
new file mode 100644
index 0000000..b6d62ff
--- /dev/null
+++ b/openEuler-rpm-config.spec
@@ -0,0 +1,401 @@
+%global vendor %{?_vendor:%{_vendor}}%{!?_vendor:openEuler}
+%global rpmvdir /usr/lib/rpm/%{vendor}
+
+Name: %{vendor}-rpm-config
+Version: 30
+Release: 58
+License: GPL+
+Summary: specific rpm configuration files
+URL: https://gitee.com/openeuler/openEuler-rpm-config
+
+Source0: https://gitee.com/openeuler/openEuler-rpm-config/repository/archive/%{version}.tar.gz
+
+Patch0: fix-error-message-for-kmodtool.patch
+Patch1: 0001-1-Add-riscv64-to-golang_arches.patch
+Patch2: Fix-a-typo-in-brp-digest-list.patch
+Patch3: change-the-vendor-to-generic-for-common-use.patch
+Patch4: remove-fexceptions.patch
+Patch5: exclude-kernel-source-and-EFI-files-in-digest-list-building.patch
+Patch6: add-brp-scripts-to-delete-rpath.patch
+Patch7: add-common-script.patch
+Patch8: Fix-python3_version-macros-for-Python-3.10.patch
+Patch9: Give-a-warning-when-using-kabi-outside-our-stablelis.patch
+Patch10: fixed-a-bug-that-missing_-p-in-macros.kmp.patch
+Patch11: update-config.guess-and-config.sub-for-loongarch64.patch
+Patch12: add-loongarch64-to-generic_arches.patch
+Patch13: add-loongarch64-support-for-config.guess-and-config.sub.patch
+Patch14: backport-kmp-feature.patch
+Patch15: 0001-add-loongarch64-for-golang_arches.patch
+Patch16: fix-config-error-for-loongarch64.patch
+Patch17: Feature-support-EBS-sign-for-IMA-digest-list.patch
+Patch18: fix-brp-ldconfig-riscv-default-library-directory.patch
+Patch19: add-pyproject-macros.patch
+Patch20: add-pytest-and-tox-macros.patch
+Patch21: check-if-the-file-is-a-symbolic-link-in-brp-digest-list.patch
+Patch22: fix-the-ELF-file-cannot-be-found-due-to-escape-of.patch
+Patch23: add-powerpc64le-and-ppc64le-support.patch
+Patch24: Delete-the-commented-code.patch
+Patch25: Add-support-for-selecting-clang-as-a-toolchain.patch
+Patch26: Call-set_build_flags-cc-before-build-check-and-insta.patch
+Patch27: openEuler-rpm-config-add-optflags-for-loongarch64-and-sw_64.patch
+Patch28: add-riscv64-to-some-arches-macro.patch
+Patch29: backport-Enable-as-needed-by-default.patch
+
+Provides: python-rpm-macros = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides: python2-rpm-macros = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides: python3-rpm-macros = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides: python-srpm-macros = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides: fpc-srpm-macros = 1.1-6
+Provides: ghc-srpm-macros = 1.4.2-8
+Provides: gnat-srpm-macros = 4-6
+Provides: nim-srpm-macros = 1-3
+Provides: ocaml-srpm-macros = 5-4
+Provides: openblas-srpm-macros = 2-4
+Provides: perl-srpm-macros = 1-28
+Provides: rust-srpm-macros = 10-1
+Provides: go-srpm-macros = 2-18
+Provides: perl-macros = 4:5.32.0-1
+Obsoletes: perl-macros <= 4:5.32.0-1
+Obsoletes: python-rpm-macros <= %{?epoch:%{epoch}:}%{version}-%{release}
+Obsoletes: python2-rpm-macros <= %{?epoch:%{epoch}:}%{version}-%{release}
+Obsoletes: python3-rpm-macros <= %{?epoch:%{epoch}:}%{version}-%{release}
+Obsoletes: python-srpm-macros <= %{?epoch:%{epoch}:}%{version}-%{release}
+Obsoletes: fpc-srpm-macros <= 1.1-6
+Obsoletes: ghc-srpm-macros <= 1.4.2-8
+Obsoletes: gnat-srpm-macros <= 4-6
+Obsoletes: nim-srpm-macros <= 1-3
+Obsoletes: ocaml-srpm-macros <= 5-4
+Obsoletes: openblas-srpm-macros <= 2-4
+Obsoletes: perl-srpm-macros <= 1-28
+Obsoletes: rust-srpm-macros <= 10-1
+Obsoletes: go-srpm-macros <= 2-18
+
+%if "%{vendor}" != "openEuler"
+Provides: openEuler-rpm-config = %{?epoch:%{epoch}:}%{version}-%{release}
+Obsoletes: openEuler-rpm-config <= %{?epoch:%{epoch}:}%{version}-%{release}
+%endif
+
+Requires: efi-srpm-macros
+Requires: qt5-srpm-macros
+
+Requires: rpm >= 4.11.0
+Requires: zip
+Requires: curl
+#Requires: (annobin if gcc)
+
+# for brp-mangle-shebangs
+Requires: %{_bindir}/find
+Requires: %{_bindir}/file
+Requires: %{_bindir}/grep
+Requires: %{_bindir}/sed
+Requires: %{_bindir}/xargs
+
+%if "%{_arch}" == "riscv64"
+Requires: coreutils
+%endif
+
+# -fstack-clash-protection and -fcf-protection require GCC 8.
+Conflicts: gcc < 7
+
+Provides: system-rpm-config = %{version}-%{release}
+
+%description
+specific rpm configuration files for %{vendor}.
+
+%package -n kernel-rpm-macros
+Summary: Macros and scripts for building kernel module packages
+
+%description -n kernel-rpm-macros
+Macros and scripts for building kernel module packages.
+
+%prep
+%autosetup -n openEuler-rpm-config -p1
+
+%install
+mkdir -p %{buildroot}%{rpmvdir}
+install -p -m 644 -t %{buildroot}%{rpmvdir} macros rpmrc
+install -p -m 755 -t %{buildroot}%{rpmvdir} config.*
+install -p -m 755 -t %{buildroot}%{_rpmconfigdir} brp-*
+install -p -m 644 -t %{buildroot}%{_rpmconfigdir} generic-*
+install -p -m 755 -t %{buildroot}%{rpmvdir} kmodtool
+install -p -m 755 -t %{buildroot}%{rpmvdir} find-requires*
+
+mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d
+install -p -m 644 -t %{buildroot}%{_rpmconfigdir}/macros.d/ macros.perl macros.python macros.go macros.forge macros.kmp
+
+mkdir -p %{buildroot}%{_fileattrsdir}
+
+mkdir -p %{buildroot}%{_rpmluadir}/%{_vendor}/{rpm,srpm}
+install -p -m 644 -t %{buildroot}%{_rpmluadir}/%{_vendor} common.lua
+
+# Adaptive according to vendor
+sed -i "s/__vendor/%{vendor}/g" `grep "__vendor" -rl %{buildroot}%{_rpmconfigdir}`
+
+%files
+%dir %{rpmvdir}
+%{rpmvdir}/macros
+%{rpmvdir}/rpmrc
+%{_rpmconfigdir}/brp-*
+%{rpmvdir}/config.*
+%{_rpmconfigdir}/generic-*
+%{_fileattrsdir}/
+%{_rpmconfigdir}/macros.d/
+%{_rpmluadir}/%{_vendor}/*.lua
+%exclude %{_rpmconfigdir}/macros.d/macros.kmp
+
+%files -n kernel-rpm-macros
+%exclude %{_prefix}/lib/rpm/*/__pycache__/*
+%{rpmvdir}/kmodtool
+%{_rpmconfigdir}/macros.d/macros.kmp
+%{rpmvdir}/find-requires
+%{rpmvdir}/find-requires.ksyms
+
+%changelog
+* Tue Aug 6 2024 liyunfei <liyunfei33@huawei.com> - 30-58
+- Fix for "%undefine _auto_set_build_XX" usage
+
+* Wed Jul 10 2024 xujing <xujing125@huawei.com> - 30-57
+- enable --as-needed by default
+
+* Mon Apr 29 2024 xujing <xujing125@huawei.com> - 30-56
+- don't delete the commented code in macros
+
+* Sun Apr 28 2024 laokz <zhangkai@iscas.ac.cn> - 30-55
+- add riscv64 to some arches macro
+
+* Sun Apr 7 2024 zhangguangzhi <zhangguangzhi3@huawei.com> - 30-54
+- ima digest list ebs sign ret 2 when errmsg is SIGN_PERMISSION_DENIED
+
+* Fri Mar 29 2024 zhangguangzhi <zhangguangzhi3@huawei.com> - 30-53
+- ima digest list ebs sign use file path and check errmsg
+
+* Fri Mar 22 2024 zhangguangzhi <zhangguangzhi3@huawei.com> - 30-52
+- ima digest list ebs sign support modsig
+
+* Fri Mar 15 2024 yueyuankun <yueyuankun@kylinos.cn> - 30-51
+- Add optflags for loongarch64 and sw_64
+
+* Tue Mar 12 2024 liyunfei <liyunfei33@huawei.com> - 30-50
+- Add clang toolchain support
+
+* Tue Mar 5 2024 hongjinghao <hongjinghao@huawei.com> - 30-49
+- Delete the commented code
+
+* Tue Feb 20 2024 peng.zou <peng.zou@shingroup.cn> - 30-48
+- add powerpc64le to generic_arches
+
+* Mon Dec 11 2023 jiahua.yu <jiahua.yu@shingroup.cn> - 30-47
+- Init support for arch ppc64le
+
+* Wed Nov 22 2023 xujing <xujing125@huawei.com> - 30-46
+- add the scanning path of the rpath
+ fix the ELF file cannot be found due to escape of '\'
+ excute brp_chrpath before arch_install_post
+
+* Fri Nov 03 2023 fuanan <fuanan3@h-partners.com> - 30-45
+- check if the file is a symbolic link in brp-digest-list
+
+* Thu Nov 2 2023 Yang Yanchao <yangyanchao6@huawei.com> - 30-44
+- kmodtool: use tmp.$$ instand of tmp.txt
+
+* Mon Aug 28 2023 liyunfei <liyunfei33@huawei.com> - 30-43
+- Revert backport toolchain selecting and %%auto_set_build_flags patches
+
+* Thu Aug 17 2023 liyunfei <liyunfei33@huawei.com> - 30-42
+- Backport Call %%set_build_flags before %%build, %%check, and %%install stages
+
+* Thu Aug 17 2023 liyunfei <liyunfei33@huawei.com> - 30-41
+- Backport Add support for selecting a clang as a tool
+
+* Mon Jul 24 2023 Dongxing Wang <dxwangk@isoftstone.com> - 30-40
+- add pytest and tox macros
+
+* Thu May 11 2023 caodongxia <caodongxia@h-partners.com> - 30-39
+- improve pyproject_install macro
+
+* Thu Apr 20 2023 caodongxia <caodongxia@h-partners.com> - 30-38
+- support pyproject compilation
+
+* Fri Mar 24 2023 laokz <zhangkai@iscas.ac.cn> - 30-37
+- fix riscv64 default library directory of brp-ldconfig
+
+* Fri Mar 17 2023 Xinliang Liu <xinliang.liu@linaro.org> - 30-36
+- Fix kmod rpm install failed.
+
+* Sat Jan 14 2023 luhuaxin <luhuaxin1@huawei.com> - 30-35
+- support EBS sign
+
+* Wed Dec 14 2022 huajingyun <huajingyun@loongson.cn> - 30-34
+- fix config error for loongarch64
+
+* Tue Dec 13 2022 Wenlong Zhang <zhangwenlong@loongson.cn> - 30-33
+- add loongarch64 for golang_arches
+
+* Wed Dec 7 2022 yangmingtai <yangmingtai@huawei.com> - 30-32
+- fix latest_kernel macro
+
+* Wed Dec 7 2022 Yang Yanchao <yangyanchao6@huawei.com> - 30-31
+- backport kmp feature
+
+* Wed Nov 30 2022 yangmingtai <yangmingtai@huawei.com> - 30-30
+- support Adaptive according to vendor
+
+* Mon Nov 21 2022 huajingyun <huajingyun@loongson.cn> - 30-29
+- add loongarch64 support
+
+* Wed Oct 12 2022 yangmingtai <yangmingtai@huawei.com> - 30-28
+- macro.kmp support -p preamble
+
+* Thu Sep 8 2022 yangmingtai <yangmingtai@huawei.com> - 30-27
+- add find-requires and find-requires.ksyms
+
+* Mon Jun 13 2022 yangmingtai <yangmingtai@huawei.com> - 30-26
+- fix build failed, bare words are no longer supported
+
+* Mon Dec 13 2021 Liu Zixian <liuzixian4@huawei.com> - 30-25
+- fix python macros
+
+* Fri Nov 26 2021 shixuantong <shixuantong@huawei.com> - 30-24
+- update the definition of python3_version
+
+* Wed Oct 13 2021 wangkerong <wangkerong@huawei.com> - 30-23
+- add common lua scripts resolve "%fontpkg" macro translation failure
+
+* Sat Sep 4 2021 yangmingtai <yangmingtai@huawei.com> - 30-22
+- add brp scripts to delete rpath
+
+* Thu Apr 8 2021 Anakin Zhang <benjamin93@163.com> - 30-21
+- exclude kernel source and EFI files in digest list building
+
+* Mon Mar 29 2021 shenyangyang <shenyangyang4@huawei.com> - 30-20
+- Patched missing patch that remove fexceptions
+
+* Thu Mar 25 2021 shenyangyang <shenyangyang4@huawei.com> - 30-19
+- Modify support for change vendor with better method
+
+* Thu Mar 18 2021 shenyangyang <shenyangyang4@huawei.com> - 30-18
+- Change the name of spec to openEuler-rpm-spec and fix few bugs
+
+* Thu Mar 11 2021 shenyangyang <shenyangyang4@huawei.com> - 30-17
+- Add for support for change vendor
+
+* Tue Dec 1 2020 whoisxxx <zhangxuzhou4@huawei.com> - 30-16
+- Add riscv64 in macros.go
+
+* Wed Sep 30 2020 shenyangyang <shenyangyang4@huawei.com> - 30-15
+- Change the source code to tar
+
+* Fri Aug 21 2020 Wang Shuo <wangshuo_1994@foxmail.com> - 30-14
+- fix error message for kmodtool
+
+* Thu Aug 13 2020 shenyangyang <shenyangyang4@huawei.com> - 30-13
+- Add provides of perl-macros
+
+* Thu Aug 6 2020 tianwei <tianwei12@huawei.com> - 30-12
+- delete strip-file-prefix
+
+* Mon Aug 3 2020 Anakin Zhang <benjamin93@163.com> - 30-12
+- add brp-digest-list
+
+* Fri Jun 19 2020 zhangliuyan <zhangliuyan@huawei.com> - 30-11
+- add kmodtool.py macros.kmp
+
+* Wed May 6 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-10
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC: disable buildid link macro
+
+* Tue Feb 11 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-9
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:modify python_provide macro from python2 to python3
+
+* Sun Jan 19 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-8
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:revise vendor in macro
+
+* Sun Jan 19 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-7
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:revise macro file
+
+* Tue Jan 14 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-6
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:update macros file
+
+* Tue Jan 14 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-5
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:add macros to macros.python
+
+* Mon Jan 13 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-4
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:update macros.python
+
+* Mon Jan 13 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-3
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:change type of files
+
+* Mon Jan 13 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-2
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:add source10 to package
+
+* Mon Jan 13 2020 openEuler Buildteam <buildteam@openeuler.org> - 30-1
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:rebuild
+
+* Thu Dec 26 2019 openEuler Buildteam <buildteam@openeuler.org> - 29-20
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:delete unneeded provides
+
+* Wed Nov 27 2019 fanghuiyu<fanghuiyu@huwei.com> - 29-19
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC:change to generic-rpm-config
+
+* Fri Nov 15 2019 jiangchuangang<jiangchuangang@huwei.com> - 29-18
+- Type:enhancement
+- ID:NA
+- SUG:NA
+- DESC: remove fcf-protection for x86_64 from rpmrc
+
+* Wed Oct 30 2019 hexiaowen <hexiaowen@huawei.com> - 29-17
+- add custom macros
+
+* Wed Sep 25 2019 hexiaowen <hexiaowen@huawei.com> - 29-16
+- add rust-srpm-macros and go-srpm-macros
+
+* Fri Sep 20 2019 hexiaowen <hexiaowen@huawei.com> - 29-15
+- add version-release for python-rpm-macros
+
+* Fri Sep 20 2019 hexiaowen <hexiaowen@huawei.com> - 29-14
+- add python-rpm-macros fpc-srpm-macros ghc-srpm-macros gnat-srpm-macros
+- nim-srpm-macros ocaml-srpm-macros openblas-srpm-macros perl-srpm-macros
+
+* Thu Aug 29 2019 hexiaowen <hexiaowen@huawei.com> - 29-13
+- fix typo
+
+* Tue Aug 27 2019 hexiaowen <hexiaowen@huawei.com> - 29-2
+- delete annobin
+
+* Wed Jul 18 2018 openEuler Buildteam <buildteam@openeuler.org> - 29-1
+- Package init
diff --git a/remove-fexceptions.patch b/remove-fexceptions.patch
new file mode 100644
index 0000000..d198123
--- /dev/null
+++ b/remove-fexceptions.patch
@@ -0,0 +1,36 @@
+From 783b74a4778101223da41c8d3eb0457a1f9938f2 Mon Sep 17 00:00:00 2001
+From: Yangyang Shen <shenyangyang4@huawei.com>
+Date: Thu, 18 Mar 2021 16:00:27 +0800
+Subject: [PATCH] openEuler remove fexceptions
+
+---
+ macros | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/macros b/macros
+index b06faea..118614d 100644
+--- a/macros
++++ b/macros
+@@ -27,8 +27,8 @@
+ # ---- compiler flags.
+
+ %build_cflags %{optflags}
+-%build_cxxflags %{optflags}
+-%build_fflags %{optflags} -I%{_fmoddir}
++%build_cxxflags %{optflags} -fexceptions
++%build_fflags %{optflags} -fexceptions -I%{_fmoddir}
+ %build_ldflags -Wl,-z,relro %{_ld_as_needed_flags} %{_ld_symbols_flags} %{_hardened_ldflags}
+
+ %set_build_flags \
+@@ -177,7 +177,7 @@
+ #%_ld_as_needed 1
+ %_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed}
+
+-%__global_compiler_flags -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches %{_hardened_cflags}
++%__global_compiler_flags -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -grecord-gcc-switches %{_hardened_cflags}
+
+ # Automatically trim changelog entries after 2 years
+ %_changelog_trimtime %{lua:print(os.time() - 2 * 365 * 86400)}
+--
+2.23.0
+
diff --git a/sources b/sources
new file mode 100644
index 0000000..7d6bc77
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+51eb1809aa9bc05c281ad801f61b7f42 30.tar.gz
diff --git a/update-config.guess-and-config.sub-for-loongarch64.patch b/update-config.guess-and-config.sub-for-loongarch64.patch
new file mode 100644
index 0000000..4e4b88a
--- /dev/null
+++ b/update-config.guess-and-config.sub-for-loongarch64.patch
@@ -0,0 +1,39 @@
+From fe6cff21eb18cc05704db85520db57c0d58bd2d3 Mon Sep 17 00:00:00 2001
+From: Wenlong Zhang <zhangwenlong@loongson.cn>
+Date: Tue, 12 Apr 2022 22:31:41 +0800
+Subject: [PATCH] update config.guess and config.sub for loongarch64
+
+---
+ macros | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/macros b/macros
+index 5c7447b..dc8c749 100644
+--- a/macros
++++ b/macros
+@@ -49,6 +49,22 @@
+ # ---- configure and makeinstall.
+ %_configure_gnuconfig_hack 1
+ %_configure_libtool_hardening_hack 1
++
++#update config.guess and config.sub
++%_update_config_guess \
++ [ "%_configure_gnuconfig_hack" = 1 ] && for i in $(find . -name config.guess) ; do \
++ [ -f /usr/lib/rpm/%{_vendor}/$(basename $i) ] && \
++ %{__rm} -f $i && \
++ %{__cp} -fv /usr/lib/rpm/%{_vendor}/$(basename $i) $i ; \
++ done ;
++
++%_update_config_sub \
++ [ "%_configure_gnuconfig_hack" = 1 ] && for i in $(find . -name config.sub) ; do \
++ [ -f /usr/lib/rpm/%{_vendor}/$(basename $i) ] && \
++ %{__rm} -f $i && \
++ %{__cp} -fv /usr/lib/rpm/%{_vendor}/$(basename $i) $i ; \
++ done ;
++
+ %configure \
+ %{set_build_flags}; \
+ [ "%_configure_gnuconfig_hack" = 1 ] && for i in $(find $(dirname %{_configure}) -name config.guess -o -name config.sub) ; do \
+--
+2.27.0
+