Commit 73e5e2f8 authored by Herbert Valerio Riedel's avatar Herbert Valerio Riedel 🕺

Embed Git commit id into `ghc --info` output

Since we switched to a Git submodule based GHC Git repo, `ghc.git`'s
commit id uniquely identifies the state of the GHC source-tree. So
having that information embedded into the `ghc` executable provides
valuable information to track accurately (especially when created by
buildbots) from which source-tree-state a given `ghc` snapshot
(distribution) was generated.

So this commit adds a new field `"Project Git commit id"` to the
`ghc --info` meta-data containing the `./configure`-time Git commit id
as reported by `git rev-parse HEAD`.

This field can also be queried with `ghc --print-project-git-commit-id`.

For source distributions, the file `GIT_COMMIT_ID` is created (with some
sanity checking to detect stale commit ids, as that would render this
information rather useless)

Reviewed By: austin

Differential Revision: https://phabricator.haskell.org/D528
parent 01f03cb3
......@@ -153,3 +153,4 @@ _darcs/
.tm_properties
VERSION
GIT_COMMIT_ID
......@@ -1581,11 +1581,29 @@ if test "$RELEASE" = "NO"; then
dnl less likely to go wrong.
PACKAGE_VERSION=${PACKAGE_VERSION}.`date +%Y%m%d`
fi
AC_MSG_CHECKING([for GHC Git commit id])
if test -d .git; then
git_commit_id=`git rev-parse HEAD`
if test -n "$git_commit_id" 2>&1 >/dev/null; then true; else
AC_MSG_ERROR([failed to detect revision: check that git is in your path])
fi
PACKAGE_GIT_COMMIT_ID=$git_commit_id
AC_MSG_RESULT(inferred $PACKAGE_GIT_COMMIT_ID)
elif test -f GIT_COMMIT_ID; then
PACKAGE_GIT_COMMIT_ID=`cat GIT_COMMIT_ID`
AC_MSG_RESULT(given $PACKAGE_GIT_COMMIT_ID)
else
AC_MSG_WARN([cannot determine snapshot revision: no .git directory and no 'GIT_COMMIT_ID' file])
PACKAGE_GIT_COMMIT_ID="0000000000000000000000000000000000000000"
fi
fi
# Some renamings
AC_SUBST([ProjectName], [$PACKAGE_NAME])
AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
AC_SUBST([ProjectGitCommitId], [$PACKAGE_GIT_COMMIT_ID])
# Split PACKAGE_VERSION into (possibly empty) parts
VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
......
......@@ -67,6 +67,8 @@ compiler/stage%/build/Config.hs : mk/config.mk mk/project.mk | $$(dir $$@)/.
@echo >> $@
@echo 'cProjectName :: String' >> $@
@echo 'cProjectName = "$(ProjectName)"' >> $@
@echo 'cProjectGitCommitId :: String' >> $@
@echo 'cProjectGitCommitId = "$(ProjectGitCommitId)"' >> $@
@echo 'cProjectVersion :: String' >> $@
@echo 'cProjectVersion = "$(ProjectVersion)"' >> $@
@echo 'cProjectVersionInt :: String' >> $@
......
......@@ -3781,6 +3781,7 @@ compilerInfo dflags
-- key)
: rawSettings dflags
++ [("Project version", cProjectVersion),
("Project Git commit id", cProjectGitCommitId),
("Booter version", cBooterVersion),
("Stage", cStage),
("Build platform", cBuildPlatformString),
......
......@@ -1005,6 +1005,7 @@ echo ["
Configure completed successfully.
Building GHC version : $ProjectVersion
Git commit id : $ProjectGitCommitId
Build platform : $BuildPlatform
Host platform : $HostPlatform
......
......@@ -1109,13 +1109,27 @@ SRC_DIST_GHC_DIRS = mk rules docs distrib bindisttest libffi includes \
SRC_DIST_GHC_FILES += \
configure.ac config.guess config.sub configure \
aclocal.m4 README ANNOUNCE HACKING LICENSE Makefile install-sh \
settings.in VERSION \
settings.in VERSION GIT_COMMIT_ID \
boot packages ghc.mk
VERSION :
echo $(ProjectVersion) >VERSION
sdist : VERSION
.PHONY: GIT_COMMIT_ID
GIT_COMMIT_ID:
@if test -d .git && test "`git rev-parse HEAD`" != "$(ProjectGitCommitId)"; then \
echo "******************************************************************************"; \
echo "Stale ProjectGitCommitId (=$(ProjectGitCommitId)) detected!"; \
echo "'git rev-parse HEAD' says: `git rev-parse HEAD`"; \
echo "Please re-run './configure' before creating source-distribution"; \
echo "******************************************************************************"; \
exit 1; \
fi
@if test -f $@ && test "`cat $@`" = "$(ProjectGitCommitId)"; \
then echo "$@ needs no update"; \
else echo "update $@ ($(ProjectGitCommitId))"; echo -n "$(ProjectGitCommitId)" > $@; fi
sdist : VERSION GIT_COMMIT_ID
# Use:
# $(call sdist_ghc_file,compiler,stage2,cmm,Foo/Bar,CmmLex,x)
......
......@@ -541,6 +541,7 @@ mode_flags =
] ++
[ defFlag k' (PassFlag (setMode (printSetting k)))
| k <- ["Project version",
"Project Git commit id",
"Booter version",
"Stage",
"Build platform",
......
......@@ -31,6 +31,7 @@ ProjectVersionInt = @ProjectVersionInt@
ProjectPatchLevel = @ProjectPatchLevel@
ProjectPatchLevel1 = @ProjectPatchLevel1@
ProjectPatchLevel2 = @ProjectPatchLevel2@
ProjectGitCommitId = @ProjectGitCommitId@
################################################################################
#
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment