2 # Not a shell script, but something intended to be sourced from shell scripts
4 # Check that (1) we have git (2) this is a git tree.
5 if ( which git
>/dev
/null
2>/dev
/null
&& git describe
>/dev
/null
2>/dev
/null
)
14 AVAILABLE
=`git_available_p`
15 if [ -f version.lisp-expr
-a -z "$AVAILABLE" ]
17 # Relase tarball, leave version.lisp-expr alone.
19 elif [ -z "$AVAILABLE" ]
21 echo "Can't run 'git describe' and version.lisp-expr is missing." >&2
22 echo "To fix this, either install git or create a fake version.lisp-expr file." >&2
23 echo "You can create a fake version.lisp-expr file like this:" >&2
24 echo " \$ echo '\"1.0.99.999\"' > version.lisp-expr" >&2
28 version_head
=`git rev-parse HEAD`
29 if grep -q "ref: refs/heads/.*" .git
/HEAD
> /dev
/null
2>&1
31 version_branchname
=`cut -d / -f 3- < .git/HEAD`
34 version_branchname
="HEAD"
36 if [ -z "$SBCL_BUILDING_RELEASE_FROM" ]
38 if [ "`git rev-list HEAD --not origin/master`" = '' ]
40 # If origin/master contains all the commits on current
41 # branch, use current head as the root instead.
42 version_root
="$version_branchname"
44 version_root
="origin/master"
47 version_root
="$SBCL_BUILDING_RELEASE_FROM"
49 version_base
=`git rev-parse "$version_root"`
50 version_tag
=`git describe --tags --match="sbcl*" --abbrev=0 $version_base`
51 version_release
=`echo $version_tag | sed -e 's/sbcl[_-]//' | sed -e 's/_/\./g'`
52 # Using wc -l instead of --count argument to rev-list because
53 # pre-1.7.2 Gits are still common out in the wilderness.
54 version_n_root
=`git rev-list $version_base --not $version_tag | wc -l`
55 version_n_branch
=`git rev-list HEAD --not $version_base | wc -l`
56 if [ -z "$NO_GIT_HASH_IN_VERSION" ]
58 version_hash
="-`git rev-parse --short $version_head`"
62 if git
diff HEAD
--no-ext-diff --quiet --exit-code
66 version_dirty
="-dirty"
68 # Now that we have all the pieces, put them together.
69 cat >version.lisp-expr
<<EOF
70 ;;; This file is auto-generated using generate-version.sh. Every time
71 ;;; you re-run make.sh, this file will be overwritten if you are
72 ;;; working from a Git checkout.
74 if [ "$version_base" = "$version_head" ]
76 if [ "0" = "$version_n_root" ]
79 $version_release $version_dirty >>version.lisp-expr
81 printf "\"%s.%s%s%s\"\n" \
82 $version_release $version_n_root \
83 $version_hash $version_dirty >>version.lisp-expr
86 echo "base=$version_base"
87 echo "head=$version_head"
88 printf "\"%s.%s.%s.%s%s%s\"\n" \
89 $version_release $version_n_root \
90 $version_branchname $version_n_branch \
91 $version_hash $version_dirty >>version.lisp-expr