[OE-core] [PATCH] kernel.bbclass: fix SOURCE_DATE_EPOCH for non-git kernel builds
christopher.w.clark at gmail.com
christopher.w.clark at gmail.com
Sat Mar 7 20:03:30 UTC 2020
From: Christopher Clark <christopher.w.clark at gmail.com>
Only use git to set SOURCE_DATE_EPOCH if ${S} is the top level of a git
repository.
Fixes the following errors with the prior logic when building a kernel
that is not obtained from a git repository:
1. With TMPDIR set to a directory outside any git repository on a
mounted filesystem, reproducible builds fail in do_compile with this git
error:
fatal: not a git repository (or any parent up to mount point <abspath>)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
aborting before the error handling logic.
2. With TMPDIR located within a subdirectory of a git repository, the
SOURCE_DATE_EPOCH timestamp would be that of said repository rather than
that of the kernel.
Signed-off-by: Christopher Clark <christopher.w.clark at gmail.com>
---
meta/classes/kernel.bbclass | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 0eadd3efb8..2603f24709 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -296,10 +296,14 @@ kernel_do_compile() {
if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
olddir=`pwd`
cd ${S}
- SOURCE_DATE_EPOCH=`git log -1 --pretty=%ct`
- # git repo not guaranteed, so fall back to REPRODUCIBLE_TIMESTAMP_ROOTFS
- if [ $? -ne 0 ]; then
- SOURCE_DATE_EPOCH=${REPRODUCIBLE_TIMESTAMP_ROOTFS}
+ # This kernel dir is not necessarily a git repo and we
+ # must ensure that git does not incorrectly query a
+ # repository in a parent directory.
+ GIT_TOP=`git rev-parse --show-toplevel 2>/dev/null || echo ""`
+ if [ "${S}" = "${GIT_TOP}" ]; then
+ SOURCE_DATE_EPOCH=`git log -1 --pretty=%ct`
+ else
+ SOURCE_DATE_EPOCH="${REPRODUCIBLE_TIMESTAMP_ROOTFS}"
fi
cd $olddir
fi
--
2.17.1
More information about the Openembedded-core
mailing list