mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-25 14:33:31 -04:00
The package versioning scheme does not enable smooth upgrades from "rc"
releases to the corresponding stable releases (e.g. 7.0.0-rc7 -> 7.0.0)
because pacman considers that a downgrade due to the underscore in
pkgver (e.g. 7.0.0_rc7), see e.g. vercmp(8) for an explanation of the
package version comparison used by pacman. Package versions which are
derived from said releases (e.g. built from git revisions) are
similarly affected. Fix this by modifying pkgver in order to remove the
hyphen from kernel versions containing "-rcN", where N is a
non-negative integer.
Acked-by: Thomas Weißschuh <linux@weissschuh.net>
Signed-off-by: Viktor Jägersküpper <viktor_jaegerskuepper@freenet.de>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Link: https://patch.msgid.link/20260515215913.92481-1-viktor_jaegerskuepper@freenet.de
Fixes: c8578539de ("kbuild: add script and target to generate pacman package")
Signed-off-by: Nicolas Schier <nsc@kernel.org>
132 lines
3.3 KiB
Bash
132 lines
3.3 KiB
Bash
# SPDX-License-Identifier: GPL-2.0-only
|
|
# Maintainer: Thomas Weißschuh <linux@weissschuh.net>
|
|
# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
|
|
|
|
pkgbase=${PACMAN_PKGBASE:-linux-upstream}
|
|
pkgname=("${pkgbase}")
|
|
|
|
_extrapackages=${PACMAN_EXTRAPACKAGES-headers api-headers debug}
|
|
for pkg in $_extrapackages; do
|
|
pkgname+=("${pkgbase}-${pkg}")
|
|
done
|
|
|
|
pkgver="$(echo "${KERNELRELEASE}" | sed 's/-\(rc[0-9]\+\)/\1/;s/-/_/g')"
|
|
# The PKGBUILD is evaluated multiple times.
|
|
# Running scripts/build-version from here would introduce inconsistencies.
|
|
pkgrel="${KBUILD_REVISION}"
|
|
pkgdesc='Upstream Linux'
|
|
url='https://www.kernel.org/'
|
|
# Enable flexible cross-compilation
|
|
arch=(${CARCH})
|
|
license=(GPL-2.0-only)
|
|
makedepends=(
|
|
bc
|
|
bison
|
|
flex
|
|
gettext
|
|
kmod
|
|
libelf
|
|
openssl
|
|
pahole
|
|
perl
|
|
python
|
|
rsync
|
|
tar
|
|
)
|
|
options=(!debug !strip !buildflags !makeflags)
|
|
|
|
_prologue() {
|
|
# MAKEFLAGS from makepkg.conf override the ones inherited from kbuild.
|
|
# Bypass this override with a custom variable.
|
|
export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
|
|
|
|
# Kbuild works in the output directory, where this PKGBUILD is located.
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
}
|
|
|
|
build() {
|
|
_prologue
|
|
|
|
${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}"
|
|
}
|
|
|
|
_package() {
|
|
pkgdesc="The ${pkgdesc} kernel and modules"
|
|
|
|
local modulesdir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}"
|
|
|
|
_prologue
|
|
|
|
echo "Installing boot image..."
|
|
# systemd expects to find the kernel here to allow hibernation
|
|
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
|
|
install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz"
|
|
|
|
# Used by mkinitcpio to name the kernel
|
|
echo "${pkgbase}" > "${modulesdir}/pkgbase"
|
|
|
|
echo "Installing modules..."
|
|
${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \
|
|
DEPMOD=true modules_install
|
|
|
|
if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then
|
|
echo "Installing dtbs..."
|
|
${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install
|
|
fi
|
|
|
|
# remove build link, will be part of -headers package
|
|
rm -f "${modulesdir}/build"
|
|
}
|
|
|
|
_package-headers() {
|
|
pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel"
|
|
|
|
local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
|
|
|
|
_prologue
|
|
|
|
if grep -q CONFIG_MODULES=y include/config/auto.conf; then
|
|
echo "Installing build files..."
|
|
"${srctree}/scripts/package/install-extmod-build" "${builddir}"
|
|
fi
|
|
|
|
echo "Installing System.map and config..."
|
|
mkdir -p "${builddir}"
|
|
cp System.map "${builddir}/System.map"
|
|
cp .config "${builddir}/.config"
|
|
|
|
echo "Adding symlink..."
|
|
mkdir -p "${pkgdir}/usr/src"
|
|
ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}"
|
|
}
|
|
|
|
_package-api-headers() {
|
|
pkgdesc="Kernel headers sanitized for use in userspace"
|
|
provides=(linux-api-headers="${pkgver}")
|
|
conflicts=(linux-api-headers)
|
|
|
|
_prologue
|
|
|
|
${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr"
|
|
}
|
|
|
|
_package-debug(){
|
|
pkgdesc="Non-stripped vmlinux file for the ${pkgdesc} kernel"
|
|
|
|
local debugdir="${pkgdir}/usr/src/debug/${pkgbase}"
|
|
local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
|
|
|
|
_prologue
|
|
|
|
install -Dt "${debugdir}" -m644 vmlinux
|
|
mkdir -p "${builddir}"
|
|
ln -sr "${debugdir}/vmlinux" "${builddir}/vmlinux"
|
|
}
|
|
|
|
for _p in "${pkgname[@]}"; do
|
|
eval "package_$_p() {
|
|
$(declare -f "_package${_p#$pkgbase}")
|
|
_package${_p#$pkgbase}
|
|
}"
|
|
done
|