From: Christopher Clark <[email protected]> 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 <[email protected]> --- 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 -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
