diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2014-11-27 10:50:51 +0100 |
---|---|---|
committer | Herbert Valerio Riedel <hvr@gnu.org> | 2014-11-27 21:59:02 +0100 |
commit | 73e5e2f8bade2d8b2b1ecae958fe12d0b24591ef (patch) | |
tree | db399728d04c46d1e6d08c20863c9c2263c889a8 | |
parent | 01f03cb30426fad1b848051fa142c04c8816a80c (diff) | |
download | haskell-73e5e2f8bade2d8b2b1ecae958fe12d0b24591ef.tar.gz |
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
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | aclocal.m4 | 18 | ||||
-rw-r--r-- | compiler/ghc.mk | 2 | ||||
-rw-r--r-- | compiler/main/DynFlags.hs | 1 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | ghc.mk | 18 | ||||
-rw-r--r-- | ghc/Main.hs | 1 | ||||
-rw-r--r-- | mk/project.mk.in | 1 |
8 files changed, 41 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore index 5a58ed21e9..7d53060ac9 100644 --- a/.gitignore +++ b/.gitignore @@ -153,3 +153,4 @@ _darcs/ .tm_properties VERSION +GIT_COMMIT_ID diff --git a/aclocal.m4 b/aclocal.m4 index b41bf41559..2aa55d7d84 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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'/` diff --git a/compiler/ghc.mk b/compiler/ghc.mk index ffa91a574a..2912aab102 100644 --- a/compiler/ghc.mk +++ b/compiler/ghc.mk @@ -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' >> $@ diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index d6f620f6df..11e5c32a8b 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -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), diff --git a/configure.ac b/configure.ac index ca9f220d40..97fdc2f749 100644 --- a/configure.ac +++ b/configure.ac @@ -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) diff --git a/ghc/Main.hs b/ghc/Main.hs index d70691431e..f0539df6cd 100644 --- a/ghc/Main.hs +++ b/ghc/Main.hs @@ -541,6 +541,7 @@ mode_flags = ] ++ [ defFlag k' (PassFlag (setMode (printSetting k))) | k <- ["Project version", + "Project Git commit id", "Booter version", "Stage", "Build platform", diff --git a/mk/project.mk.in b/mk/project.mk.in index 129b540c88..a5fe210c12 100644 --- a/mk/project.mk.in +++ b/mk/project.mk.in @@ -31,6 +31,7 @@ ProjectVersionInt = @ProjectVersionInt@ ProjectPatchLevel = @ProjectPatchLevel@ ProjectPatchLevel1 = @ProjectPatchLevel1@ ProjectPatchLevel2 = @ProjectPatchLevel2@ +ProjectGitCommitId = @ProjectGitCommitId@ ################################################################################ # |