commit: d21683ba377a5b2e5bc253e2f825ca7083c5188e Author: James Le Cuirot <chewi <AT> gentoo <DOT> org> AuthorDate: Thu May 22 17:34:25 2025 +0000 Commit: James Le Cuirot <chewi <AT> gentoo <DOT> org> CommitDate: Thu Jun 5 10:55:08 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d21683ba
linux-info.eclass: Rework get_version and fix output directory detection get_version used to detect the output directory under /lib/modules if KBUILD_OUTPUT wasn't explicitly set, but this broke when bug #662772 was fixed. The code is still there but effectively does nothing as OUTPUT_DIR is already used to set KV_OUT_DIR above. Bug: https://bugs.gentoo.org/662772 Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org> eclass/linux-info.eclass | 59 ++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/eclass/linux-info.eclass b/eclass/linux-info.eclass index 067c94ccdc1f..a2b38d604b21 100644 --- a/eclass/linux-info.eclass +++ b/eclass/linux-info.eclass @@ -485,8 +485,6 @@ get_version() { die "${FUNCNAME}() called on non-Linux system, please fix the ebuild" fi - local tmplocal - [[ -n ${SKIP_KERNEL_CHECK} ]] && return # No need to execute this twice assuming KV_FULL is populated. @@ -541,13 +539,6 @@ get_version() { return 1 fi - # OK so now we know our sources directory, but they might be using - # KBUILD_OUTPUT, and we need this for .config and localversions-* - # so we better find it, eh? - # - # Do we pass KBUILD_OUTPUT on the CLI? - local OUTPUT_DIR=${KBUILD_OUTPUT} - # And contrary to existing functions, I feel we shouldn't trust the # directory name to find version information as this seems insane. # So we parse ${KERNEL_MAKEFILE}. @@ -565,13 +556,35 @@ get_version() { return 1 fi - [[ -d "${OUTPUT_DIR}" ]] && KV_OUT_DIR="${OUTPUT_DIR}" - if [[ -n "${KV_OUT_DIR}" ]]; then + # Assume there is no local version to begin with. + KV_FULL=${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA} + + # There may be separate source and output directories. Has the user set + # KBUILD_OUTPUT? If not, automatically fall back to finding the most + # relevant output directory. If so, but it doesn't exist, don't fall back as + # that's probably undesirable. + if [[ -n ${KBUILD_OUTPUT} ]]; then + if [[ -d ${KBUILD_OUTPUT} ]]; then + KV_OUT_DIR=${KBUILD_OUTPUT} + else + die "KBUILD_OUTPUT is set to ${KBUILD_OUTPUT} but it doesn't exist" + fi + else + for KV_OUT_DIR in "${SYSROOT}" "${ROOT}" ""; do + # We cannot use the local version to find the output directory + # because that is where it is written to. + KV_OUT_DIR+="/lib/modules/${KV_FULL}/build" + [[ -d ${KV_OUT_DIR} ]] && break + done + fi + + if [[ -d ${KV_OUT_DIR} ]]; then qeinfo "Found kernel object directory:" qeinfo " ${KV_OUT_DIR}" + else + # Just use KV_DIR as a last resort. + KV_OUT_DIR=${KV_DIR} fi - # and if we STILL have not got it, then we better just set it to KV_DIR - KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}" # Grab the kernel release from the output directory. # TODO: we MUST detect kernel.release being out of date, and 'return 1' from @@ -585,7 +598,7 @@ get_version() { fi # KV_LOCAL currently contains the full release; discard the first bits. - tmplocal=${KV_LOCAL#${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}} + local tmplocal=${KV_LOCAL#"${KV_FULL}"} # If the updated local version was not changed, the tree is not prepared. # Clear out KV_LOCAL in that case. @@ -597,22 +610,8 @@ get_version() { KV_LOCAL=${tmplocal} fi - # and in newer versions, we can also pull LOCALVERSION if it is set. - # but before we do this, we need to find if we use a different object directory. - # This *WILL* break if the user is using localversions, but we assume it was - # caught before this if they are. - if [[ -z ${OUTPUT_DIR} ]] ; then - # Try to locate a kernel that is most relevant for us. - for OUTPUT_DIR in "${SYSROOT}" "${ROOT}" "" ; do - OUTPUT_DIR+="/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}/build" - if [[ -e ${OUTPUT_DIR} ]] ; then - break - fi - done - fi - - # And we should set KV_FULL to the full expanded version - KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}" + # Append the local version now that we (maybe) have it. + KV_FULL+=${KV_LOCAL} qeinfo "Found sources for kernel version:" qeinfo " ${KV_FULL}"
