Use git describe to determine build version

This patch makes the configure and build system use the output
from 'git describe' to determine the version of the software being
built. This means that all that is necessary to create a new release
is to tag the repository - removing the double sources of version
information.

There are a couple of fallbacks for systems which do not have git
available for builds. Firstly, if a file called '.version' exists
in the top level of the repository, then the version information is
pulled from this file. The intention is that those packaging up
git checkouts for onwards distribution will use
'git describe > .version' before producing their tarballs.

Secondly, if we cannot find any version information then the version
will default to 'UNKNOWN'

This all mirrors the way that many others have integrated git with
automake and friends - although the implementation is independent.

Change-Id: I7fa4605e52181d60657ad794ca8efdb5a9fb1449
Reviewed-on: http://gerrit.openafs.org/1824
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Russ Allbery <rra@stanford.edu>
This commit is contained in:
Simon Wilkinson 2010-06-26 19:35:18 +01:00 committed by Russ Allbery
parent 020c228425
commit 5158766dce
7 changed files with 34 additions and 8 deletions

1
.gitignore vendored
View File

@ -52,6 +52,7 @@ rs_state.ini
/TAGS
/NTLang.bat
/golast.bat
/.version
# Destination build directories
/alpha_nbsd*

21
build-tools/git-version Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
version_file=$1
if [ -f $version_file ] ; then
git_version=`cat $version_file`
else
if which git > /dev/null; then
git_version=`git describe --abbrev=4 HEAD 2>/dev/null`
# Is the working tree dirty?
if ! git diff-index --quiet --cached HEAD --ignore-submodules || \
! git diff-files --quiet --ignore-submodules ; then
git_version="$git_version-dirty"
fi
else
git_version=UNKNOWN
fi
fi
echo "$git_version" | sed -e 's/openafs-[^-]*-//' -e 's/_/./g' | tr -d '\012'

1
build-tools/libafsdep Normal file
View File

@ -0,0 +1 @@
git-version

View File

@ -1,5 +1,5 @@
AC_PRERQ([2.60])
AC_INIT([OpenAFS], [1.5.74.1])
AC_INIT([OpenAFS], m4_esyscmd([build-tools/git-version .version]))
AC_CONFIG_SRCDIR(src/libafs/Makefile.common.in)
AM_INIT_AUTOMAKE

View File

@ -1,5 +1,5 @@
AC_PREREQ([2.60])
AC_INIT([OpenAFS], [1.5.74.1])
AC_INIT([OpenAFS], m4_esyscmd([build-tools/git-version .version]))
AC_CONFIG_SRCDIR([src/config/stds.h])
AM_INIT_AUTOMAKE

View File

@ -6,18 +6,19 @@
# directory or online at http://www.openafs.org/dl/license10.html
PACKAGE=@PACKAGE@
VERSION=@VERSION@
AFS_component_version_number.o: AFS_component_version_number.c
AFS_component_version_number.c: @TOP_OBJDIR@/src/config/Makefile.version
echo 'char cml_version_number[]="@(#) OpenAFS ${VERSION} built ' `date +"%Y-%m-%d"` '";' >AFS_component_version_number.c
echo 'char* AFSVersion = "${PACKAGE} ${VERSION}"; ' >>AFS_component_version_number.c
VERSION=`@abs_top_srcdir@/build-tools/git-version @abs_top_srcdir@/.version` && \
echo 'char cml_version_number[]="@(#) OpenAFS '$$VERSION' built ' `date +"%Y-%m-%d"` '";' >AFS_component_version_number.c && \
echo 'char* AFSVersion = "${PACKAGE} '$$VERSION'";' >>AFS_component_version_number.c
version.xml:
echo '<?xml version="1.0" encoding="UTF-8"?>' >version.xml
echo '<revision>' >>version.xml
echo '<revnumber>${VERSION}</revnumber>' >>version.xml
VERSION=`@abs_top_srcdir@/build-tools/git-version @abs_top_srcdir/.version` && \
echo '<?xml version="1.0" encoding="UTF-8"?>' >version.xml && \
echo '<revision>' >>version.xml && \
echo '<revnumber>'$$VERSION'</revnumber>' >>version.xml && \
echo '</revision>' >>version.xml
version.txt:

View File

@ -76,6 +76,8 @@ finddepth(\&find_libafsdep, $projdir);
&copyit("$projdir/src/libafs/MakefileProto.$ostype.in",
"$treedir/src/libafs/MakefileProto.in");
$showonly || system("$projdir/build-tools/git-version $projdir/.version > $treedir/.version");
# We need to regenerate this to support building amd64 kernels from a
# libafs_tree built on i386.
unlink("$treedir/include/afs/param.h");