summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eclass/kernel-build.eclass46
-rw-r--r--eclass/kernel-install.eclass59
2 files changed, 60 insertions, 45 deletions
diff --git a/eclass/kernel-build.eclass b/eclass/kernel-build.eclass
index 1f0b07fdc3f9..89167124802b 100644
--- a/eclass/kernel-build.eclass
+++ b/eclass/kernel-build.eclass
@@ -20,6 +20,14 @@
# the kernel and installing it along with its modules and subset
# of sources needed to build external modules.
+# @ECLASS_VARIABLE: KV_FULL
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# A string containing the full kernel release version, e.g.
+# '6.9.6-gentoo-dist'. This is used to ensure consistency between the
+# kernel's release version and Gentoo's tooling. This is set by
+# kernel-build_src_configure() once we have a kernel.release file.
+
case ${EAPI} in
8) ;;
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
@@ -225,6 +233,12 @@ kernel-build_src_configure() {
emake O="${WORKDIR}"/modprep "${MAKEARGS[@]}" olddefconfig
emake O="${WORKDIR}"/modprep "${MAKEARGS[@]}" modules_prepare
cp -pR "${WORKDIR}"/modprep "${WORKDIR}"/build || die
+
+ # Now that we have a release file, set KV_FULL
+ if [[ -z ${KV_FULL} ]]; then
+ local relfile=${WORKDIR}/build/include/config/kernel.release
+ KV_FULL=$(<"${relfile}") || die
+ fi
}
# @FUNCTION: kernel-build_src_compile
@@ -254,20 +268,15 @@ kernel-build_src_test() {
INSTALL_MOD_PATH="${T}" INSTALL_MOD_STRIP="${strip_args}" \
modules_install
- local dir_ver=${PV}${KV_LOCALVERSION}
- local relfile=${WORKDIR}/build/include/config/kernel.release
- local module_ver
- module_ver=$(<"${relfile}") || die
-
- kernel-install_test "${module_ver}" \
+ kernel-install_test "${KV_FULL}" \
"${WORKDIR}/build/$(dist-kernel_get_image_path)" \
- "${T}/lib/modules/${module_ver}"
+ "${T}/lib/modules/${KV_FULL}"
}
# @FUNCTION: kernel-build_src_install
# @DESCRIPTION:
# Install the built kernel along with subset of sources
-# into /usr/src/linux-${PV}. Install the modules. Save the config.
+# into /usr/src/linux-${KV_FULL}. Install the modules. Save the config.
kernel-build_src_install() {
debug-print-function ${FUNCNAME} "${@}"
@@ -304,8 +313,7 @@ kernel-build_src_install() {
# note: we're using mv rather than doins to save space and time
# install main and arch-specific headers first, and scripts
local kern_arch=$(tc-arch-kernel)
- local dir_ver=${PV}${KV_LOCALVERSION}
- local kernel_dir=/usr/src/linux-${dir_ver}
+ local kernel_dir=/usr/src/linux-${KV_FULL}
if use sparc ; then
# We don't want tc-arch-kernel's sparc64, even though we do
@@ -378,10 +386,6 @@ kernel-build_src_install() {
# strip empty directories
find "${D}" -type d -empty -exec rmdir {} + || die
- local relfile=${ED}${kernel_dir}/include/config/kernel.release
- local module_ver
- module_ver=$(<"${relfile}") || die
-
# warn when trying to "make" a dist-kernel
cat <<-EOF >> "${ED}${kernel_dir}/Makefile" || die
@@ -399,12 +403,12 @@ kernel-build_src_install() {
echo "${CATEGORY}/${PF}:${SLOT}" > "${ED}${kernel_dir}/dist-kernel" || die
# fix source tree and build dir symlinks
- dosym "../../../${kernel_dir}" "/lib/modules/${module_ver}/build"
- dosym "../../../${kernel_dir}" "/lib/modules/${module_ver}/source"
+ dosym "../../../${kernel_dir}" "/lib/modules/${KV_FULL}/build"
+ dosym "../../../${kernel_dir}" "/lib/modules/${KV_FULL}/source"
if [[ "${image_path}" == *vmlinux* ]]; then
- dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${module_ver}/vmlinux"
+ dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${KV_FULL}/vmlinux"
else
- dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${module_ver}/vmlinuz"
+ dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${KV_FULL}/vmlinuz"
fi
if [[ ${KERNEL_IUSE_MODULES_SIGN} ]]; then
@@ -435,7 +439,7 @@ kernel-build_src_install() {
--conf "${T}/empty-file"
--confdir "${T}/empty-directory"
--kernel-image "${image}"
- --kmoddir "${ED}/lib/modules/${dir_ver}"
+ --kmoddir "${ED}/lib/modules/${KV_FULL}"
--kver "${dir_ver}"
--verbose
--compress="xz -9e --check=crc32"
@@ -462,7 +466,7 @@ kernel-build_src_install() {
--linux="${image}"
--initrd="${image%/*}/initrd"
--cmdline="${KERNEL_GENERIC_UKI_CMDLINE}"
- --uname="${dir_ver}"
+ --uname="${KV_FULL}"
--output="${image%/*}/uki.efi"
)
@@ -520,7 +524,7 @@ kernel-build_pkg_postinst() {
ewarn
ewarn "MODULES_SIGN_KEY was not set, this means the kernel build system"
ewarn "automatically generated the signing key. This key was installed"
- ewarn "in ${EROOT}/usr/src/linux-${PV}${KV_LOCALVERSION}/certs"
+ ewarn "in ${EROOT}/usr/src/linux-${KV_FULL}/certs"
ewarn "and will also be included in any binary packages."
ewarn "Please take appropriate action to protect the key!"
ewarn
diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
index 9698b6be3562..a90eae86123c 100644
--- a/eclass/kernel-install.eclass
+++ b/eclass/kernel-install.eclass
@@ -26,6 +26,15 @@
# If set to a non-null value, adds IUSE=generic-uki and required
# logic to install a generic unified kernel image.
+# @ECLASS_VARIABLE: KV_FULL
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# A string containing the full kernel release version, e.g.
+# '6.9.6-gentoo-dist'. Defaults to ${PV}${KV_LOCALVERSION},
+# but can be set by the ebuild when this default value does
+# not match the kernel release. kernel-build.eclass sets this
+# to whatever is in the built kernel's kernel.release file.
+
# @ECLASS_VARIABLE: KV_LOCALVERSION
# @DEFAULT_UNSET
# @DESCRIPTION:
@@ -584,40 +593,40 @@ kernel-install_src_test() {
kernel-install_pkg_preinst() {
debug-print-function ${FUNCNAME} "${@}"
- local dir_ver=${PV}${KV_LOCALVERSION}
- local kernel_dir=${ED}/usr/src/linux-${dir_ver}
- local relfile=${kernel_dir}/include/config/kernel.release
+ # Set KV_FULL to ${PV}${KV_LOCALVERSION} if it hasn't
+ # been set elsewhere for backward compatibility with existing
+ # bin-kernel packages
+ if [[ -z ${KV_FULL} ]]; then
+ KV_FULL=${PV}${KV_LOCALVERSION}
+ fi
+
+ local kernel_dir=${ED}/usr/src/linux-${KV_FULL}
local image_path=$(dist-kernel_get_image_path)
[[ ! -d ${kernel_dir} ]] &&
die "Kernel directory ${kernel_dir} not installed!"
- [[ ! -f ${relfile} ]] &&
- die "Release file ${relfile} not installed!"
- local release
- release="$(<"${relfile}")" || die
- DIST_KERNEL_RELEASE="${release}"
# perform the version check for release ebuilds only
if [[ ${PV} != *9999 ]]; then
local expected_ver=$(dist-kernel_PV_to_KV "${PV}")
- if [[ ${release} != ${expected_ver}* ]]; then
+ if [[ ${KV_FULL} != ${expected_ver}* ]]; then
eerror "Kernel release mismatch!"
eerror " expected (PV): ${expected_ver}*"
- eerror " found: ${release}"
+ eerror " found: ${KV_FULL}"
eerror "Please verify that you are applying the correct patches."
- die "Kernel release mismatch (${release} instead of ${expected_ver}*)"
+ die "Kernel release mismatch (${KV_FULL} instead of ${expected_ver}*)"
fi
fi
if [[ -L ${EROOT}/lib && ${EROOT}/lib -ef ${EROOT}/usr/lib ]]; then
# Adjust symlinks for merged-usr.
- rm "${ED}/lib/modules/${release}"/{build,source} || die
- dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/build"
- dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/source"
+ rm "${ED}/lib/modules/${KV_FULL}"/{build,source} || die
+ dosym "../../../src/linux-${KV_FULL}" "/usr/lib/modules/${KV_FULL}/build"
+ dosym "../../../src/linux-${KV_FULL}" "/usr/lib/modules/${KV_FULL}/source"
for file in vmlinux vmlinuz; do
- if [[ -L "${ED}/lib/modules/${release}/${file}" ]]; then
- rm "${ED}/lib/modules/${release}/${file}" || die
- dosym "../../../src/linux-${dir_ver}/${image_path}" "/usr/lib/modules/${release}/${file}"
+ if [[ -L "${ED}/lib/modules/${KV_FULL}/${file}" ]]; then
+ rm "${ED}/lib/modules/${KV_FULL}/${file}" || die
+ dosym "../../../src/linux-${KV_FULL}/${image_path}" "/usr/lib/modules/${KV_FULL}/${file}"
fi
done
fi
@@ -691,13 +700,12 @@ kernel-install_install_all() {
kernel-install_pkg_postinst() {
debug-print-function ${FUNCNAME} "${@}"
- local dir_ver=${PV}${KV_LOCALVERSION}
- kernel-install_update_symlink "${EROOT}/usr/src/linux" "${dir_ver}"
+ kernel-install_update_symlink "${EROOT}/usr/src/linux" "${KV_FULL}"
dist-kernel_compressed_module_cleanup \
- "${EROOT}/lib/modules/${DIST_KERNEL_RELEASE}"
+ "${EROOT}/lib/modules/${KV_FULL}"
if [[ -z ${ROOT} ]]; then
- kernel-install_install_all "${dir_ver}"
+ kernel-install_install_all "${KV_FULL}"
fi
if [[ ${KERNEL_IUSE_GENERIC_UKI} ]] && use generic-uki; then
@@ -721,8 +729,7 @@ kernel-install_pkg_postrm() {
debug-print-function ${FUNCNAME} "${@}"
if [[ -z ${ROOT} && ! ${KERNEL_IUSE_GENERIC_UKI} ]]; then
- local dir_ver=${PV}${KV_LOCALVERSION}
- local kernel_dir=${EROOT}/usr/src/linux-${dir_ver}
+ local kernel_dir=${EROOT}/usr/src/linux-${KV_FULL}
local image_path=$(dist-kernel_get_image_path)
ebegin "Removing initramfs"
rm -f "${kernel_dir}/${image_path%/*}"/{initrd,uki.efi} &&
@@ -737,7 +744,11 @@ kernel-install_pkg_postrm() {
kernel-install_pkg_config() {
[[ -z ${ROOT} ]] || die "ROOT!=/ not supported currently"
- kernel-install_install_all "${PV}${KV_LOCALVERSION}"
+ if [[ -z ${KV_FULL} ]]; then
+ KV_FULL=${PV}${KV_LOCALVERSION}
+ fi
+
+ kernel-install_install_all "${KV_FULL}"
}
# @FUNCTION: kernel-install_compress_modules