diff options
author | Christopher Clark <christopher.w.clark@gmail.com> | 2020-03-08 21:48:13 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-03-10 23:20:33 +0000 |
commit | 2ac00852cdfb806d9418e03de794474a987f89f8 (patch) | |
tree | d3a6361b89d11f5c695360c5798f0d5f90b0698d /meta/classes | |
parent | e753b71b392381315ce730186eb020c33fbf828b (diff) | |
download | poky-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')
-rw-r--r-- | meta/classes/kernel.bbclass | 12 |
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` |