From: "Paul Burton" <paulburton@google.com>
To: openembedded-core@lists.openembedded.org
Cc: Paul Burton <paulburton@google.com>,
Bruce Ashfield <bruce.ashfield@gmail.com>,
Martin Jansa <martin.jansa@gmail.com>,
Trevor Woerner <twoerner@gmail.com>
Subject: [PATCH v2] kernel.bbclass: Stop creating empty .scmversion files
Date: Wed, 1 Apr 2020 12:41:02 -0700 [thread overview]
Message-ID: <20200401194102.161130-1-paulburton@google.com> (raw)
In-Reply-To: <20200331235607.93023-1-paulburton@google.com>
The kernel_do_configure() task creates empty .scmversion files within
both the source & build directories. The presence of these files causes
the scm_version function within the kernel's scripts/setlocalversion to
always output the empty string, breaking the kernel's
CONFIG_LOCALVERSION_AUTO=y functionality which appends that string to
the kernel version. Rather than appending the git commit hash or another
SCM revision to the kernel version, the empty string is appended causing
CONFIG_LOCALVERSION_AUTO to do nothing.
Remove the creation of the empty .scmversion files in order to restore
the kernel's CONFIG_LOCALVERSION_AUTO functionality. This allows users
of kernels built from non-tagged source & configured with
CONFIG_LOCALVERSION_AUTO=y to better determine what kernel they're
actually running.
The .scmversion behavior was introduced for the build directory by
commit 56fe5300ab5a ("kernel.bbclass: fix extra + in kernelrelease") and
extended to the source directory by commit e3bf54731973
("kernel.bbclass: touch .scmversion also in ${S}"). The '+' character
referenced would be appended if the kernel believed it were being built
from a dirty working tree. If that is genuinely the case then this in
itself is useful information; hiding that fact can only serve to muddy a
user's understanding of what kernel they're actually running.
One case that Martin suggests may have been the original motivation for
these commits is building a kernel whose source is not coming from git,
but is a subdirectory of a larger git working tree. In that case git
will ascend through the parent directories of the kernel source until it
finds the .git directory of that larger repository & report version
information that is nonsensical with regards to the kernel. As such,
prevent this from happening by setting the GIT_CEILING_DIRECTORIES
environment variable such that git will not ascend outside of the kernel
source directory and therefore won't pick up on version information that
doesn't relate to the kernel.
Signed-off-by: Paul Burton <paulburton@google.com>
Cc: Bruce Ashfield <bruce.ashfield@gmail.com>
Cc: Martin Jansa <martin.jansa@gmail.com>
Cc: Trevor Woerner <twoerner@gmail.com>
---
meta/classes/kernel.bbclass | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index a724645466..bf0b14285e 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -171,6 +171,17 @@ KERNEL_RELEASE ?= "${KERNEL_VERSION}"
KERNEL_OUTPUT_DIR ?= "arch/${ARCH}/boot"
KERNEL_IMAGEDEST ?= "boot"
+# The kernel's scripts/setlocalversion invokes git to determine whether we're
+# building from source that isn't clean or isn't tagged, and append that
+# information to the kernel version if CONFIG_LOCALVERSION_AUTO is enabled. If
+# we're building kernel source that isn't directly from git, but is a
+# subdirectory of a larger git repository, then we need to ensure the kernel's
+# script doesn't pick up on the state of that larger git repository to prevent
+# it reporting incorrect version information. We do that by ensuring git won't
+# ascend above the kernel source directory whilst searching for a .git
+# directory.
+export GIT_CEILING_DIRECTORIES = "${@os.path.dirname('${S}')}"
+
#
# configuration
#
@@ -521,12 +532,6 @@ check_oldest_kernel[vardepsexclude] += "OLDEST_KERNEL KERNEL_VERSION"
do_configure[prefuncs] += "check_oldest_kernel"
kernel_do_configure() {
- # fixes extra + in /lib/modules/2.6.37+
- # $ scripts/setlocalversion . => +
- # $ make kernelversion => 2.6.37
- # $ make kernelrelease => 2.6.37+
- touch ${B}/.scmversion ${S}/.scmversion
-
if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then
mv "${S}/.config" "${B}/.config"
fi
--
2.26.0.rc2.310.g2932bb562d-goog
next prev parent reply other threads:[~2020-04-01 19:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-31 23:56 [PATCH] kernel.bbclass: Stop creating empty .scmversion files paulburton
2020-04-01 1:29 ` [OE-core] " Bruce Ashfield
2020-04-01 1:32 ` Bruce Ashfield
2020-04-01 1:03 ` Martin Jansa
2020-04-01 18:34 ` Paul Burton
2020-04-01 19:41 ` Paul Burton [this message]
2020-04-01 23:54 ` [OE-core] [PATCH v2] " Richard Purdie
2020-04-02 6:21 ` Paul Burton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200401194102.161130-1-paulburton@google.com \
--to=paulburton@google.com \
--cc=bruce.ashfield@gmail.com \
--cc=martin.jansa@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=twoerner@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox