diff --git a/contrib/guix/libexec/make_release_tarball.sh b/contrib/guix/libexec/make_release_tarball.sh index af518b1542..f2e8449933 100755 --- a/contrib/guix/libexec/make_release_tarball.sh +++ b/contrib/guix/libexec/make_release_tarball.sh @@ -15,6 +15,11 @@ GIT_ARCHIVE="$1" DISTNAME="$2" git archive --prefix="${DISTNAME}/" HEAD | tar -xp + +# Generate correct build info file from git, before we lose git +GIT_BUILD_INFO="$(share/genbuild.sh /dev/stdout)" +sed 's/\/\/ No build information available/'"${GIT_BUILD_INFO}"'/' -i "${DISTNAME}/share/genbuild.sh" + cd "${DISTNAME}" ./autogen.sh diff --git a/share/genbuild.sh b/share/genbuild.sh index ecc96160e6..963113ae2c 100755 --- a/share/genbuild.sh +++ b/share/genbuild.sh @@ -18,9 +18,14 @@ else exit 1 fi +# This checks that we are actually part of the intended git repository, and not just getting info about some unrelated git repository that the code happens to be in a directory under +git_check_in_repo() { + ! { git status --porcelain -uall --ignored "$@" 2>/dev/null || echo '??'; } | grep -q '?' +} + GIT_TAG="" GIT_COMMIT="" -if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" ] && [ -e "$(command -v git)" ] && [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then +if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" ] && [ -e "$(command -v git)" ] && [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ] && git_check_in_repo share/genbuild.sh; then # clean 'dirty' status of touched files that haven't been modified git diff >/dev/null 2>/dev/null @@ -40,7 +45,9 @@ if [ -n "$GIT_TAG" ]; then elif [ -n "$GIT_COMMIT" ]; then NEWINFO="#define BUILD_GIT_COMMIT \"$GIT_COMMIT\"" else - NEWINFO="// No build information available" + # NOTE: The NEWINFO line below this comment gets replaced by a string-match in contrib/guix/libexec/make_release_tarball.sh + # If changing it, update the script too! + NEWINFO='// No build information available' fi # only update build.h if necessary