summaryrefslogtreecommitdiffstats
path: root/meta/classes/kernel.bbclass
diff options
context:
space:
mode:
authorChristopher Clark <christopher.w.clark@gmail.com>2020-03-08 21:48:13 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-03-10 23:20:33 +0000
commit2ac00852cdfb806d9418e03de794474a987f89f8 (patch)
treed3a6361b89d11f5c695360c5798f0d5f90b0698d /meta/classes/kernel.bbclass
parente753b71b392381315ce730186eb020c33fbf828b (diff)
downloadpoky-2ac00852cdfb806d9418e03de794474a987f89f8.tar.gz
kernel.bbclass: fix SOURCE_DATE_EPOCH for non-git kernel builds
The source directory is not always a git repository, so when querying git for data to set SOURCE_DATE_EPOCH, specify ${S}/.git as the git directory to prevent retrieving incorrect data from any parent directory. 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. (From OE-Core rev: 270ae94fe345b9ce98d822034cbfad7e24c5f393) Signed-off-by: Christopher Clark <christopher.w.clark@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/kernel.bbclass')
-rw-r--r--meta/classes/kernel.bbclass12
1 files changed, 4 insertions, 8 deletions
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 0eadd3efb8..a724645466 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -294,14 +294,10 @@ kernel_do_compile() {
294 # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not 294 # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not
295 # be set.... 295 # be set....
296 if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then 296 if [ "${SOURCE_DATE_EPOCH}" = "" -o "${SOURCE_DATE_EPOCH}" = "0" ]; then
297 olddir=`pwd` 297 # The source directory is not necessarily a git repository, so we
298 cd ${S} 298 # specify the git-dir to ensure that git does not query a
299 SOURCE_DATE_EPOCH=`git log -1 --pretty=%ct` 299 # repository in any parent directory.
300 # git repo not guaranteed, so fall back to REPRODUCIBLE_TIMESTAMP_ROOTFS 300 SOURCE_DATE_EPOCH=`git --git-dir="${S}/.git" log -1 --pretty=%ct 2>/dev/null || echo "${REPRODUCIBLE_TIMESTAMP_ROOTFS}"`
301 if [ $? -ne 0 ]; then
302 SOURCE_DATE_EPOCH=${REPRODUCIBLE_TIMESTAMP_ROOTFS}
303 fi
304 cd $olddir
305 fi 301 fi
306 302
307 ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH` 303 ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH`