diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/gen-version.sh27
1 file changed, 27 insertions, 0 deletions
diff --git a/tools/gen-version.sh b/tools/gen-version.sh
new file mode 100755
index 0000000..b28e987
--- /dev/null
+++ b/tools/gen-version.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+# Writes a "CGIT_VERSION = ..." line into the output file, which the build
+# then includes. Run it from the project root, as gen-version.sh <fallback>
+# [output], so that git describe reports cgit rather than the bundled git
+# submodule. The output file defaults to VERSION.
+
+version=$1
+output=${2:-VERSION}
+
+# Prefer what git describe reports, but only at the top of the cgit working
+# tree, and keep the fallback when it has nothing to say, as in a shallow or
+# tagless clone.
+if test "$(git rev-parse --git-dir 2>/dev/null)" = '.git'
+then
+ described=$(git describe --abbrev=4 HEAD 2>/dev/null)
+ test -n "$described" && version=$described
+fi
+
+new="CGIT_VERSION = $version"
+old=$(cat "$output" 2>/dev/null)
+
+# Leaving the file untouched when nothing changed keeps make from rebuilding
+# everything that depends on it.
+test "$old" = "$new" && exit 0
+
+echo "$new" > "$output"
+cat "$output"