Make GIT_REV logic work in release tarballs
authorDaniel Gröber <dxld@darkboxed.org>
Thu, 30 Dec 2021 17:45:15 +0000 (18:45 +0100)
committerDaniel Gröber <dxld@darkboxed.org>
Wed, 25 May 2022 09:20:09 +0000 (11:20 +0200)
Currently GIT_REV doesn't get set properly when building a release
tarball. To fix this we arrange for .gitcommit to contain the (short)
commit hash in tarballs generated with git-archive(1) using export-subst in
gitattributes. This way the correct commit hash is (reproducibly) included
in the release tarballs while not burdening the maintainers with updating
it in the git repo.

Please note this even works on Github and similar forges as they use
git-archive for generating tarballs so this works out quite nicely.

.gitattributes
.gitcommit [new file with mode: 0644]
Makefile

index f85ae06c930cb830bca232c5b1e83317f59dc1d5..5e568606e6e29d390658b143d9abe912bd7bc8fd 100644 (file)
@@ -1 +1,2 @@
 *.v linguist-language=Verilog
+/.gitcommit export-subst
diff --git a/.gitcommit b/.gitcommit
new file mode 100644 (file)
index 0000000..46b7856
--- /dev/null
@@ -0,0 +1 @@
+$Format:%h$
index 34aeb9dc4aa4a04ec32c2338772fc4c21ea276a9..d081161be8bd4a7cf8546a243b3b3bdc403b7fcc 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -130,7 +130,18 @@ LDLIBS += -lrt
 endif
 
 YOSYS_VER := 0.17+41
+
+# Note: We arrange for .gitcommit to contain the (short) commit hash in
+# tarballs generated with git-archive(1) using .gitattributes. The git repo
+# will have this file in its unexpanded form tough, in which case we fall
+# back to calling git directly.
+TARBALL_GIT_REV := $(shell cat $(YOSYS_SRC)/.gitcommit)
+ifeq ($(TARBALL_GIT_REV),$$Format:%h$$)
 GIT_REV := $(shell git ls-remote $(YOSYS_SRC) HEAD -q | $(AWK) 'BEGIN {R = "UNKNOWN"}; ($$2 == "HEAD") {R = substr($$1, 1, 9); exit} END {print R}')
+else
+GIT_REV := $(TARBALL_GIT_REV)
+endif
+
 OBJS = kernel/version_$(GIT_REV).o
 
 bumpversion: