[Sound-open-firmware] [PATCH] version: improve git version for build and IPC

Liam Girdwood liam.r.girdwood at linux.intel.com
Thu Dec 22 17:26:25 CET 2016


Improve the git version and include last commit for IPC version message.

Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
 .gitignore          |   3 +
 Makefile.am         |  13 ++--
 configure.ac        |   6 +-
 git-version-gen     | 170 ----------------------------------------------------
 git-version.sh      |  10 ++++
 src/ipc/intel-ipc.c |   3 +-
 6 files changed, 26 insertions(+), 179 deletions(-)
 delete mode 100755 git-version-gen
 create mode 100755 git-version.sh

diff --git a/.gitignore b/.gitignore
index 5cb1d71..9223f60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
 *.rom
 *.man
 .version
+.tarball-version
 
 Makefile
 Makefile.in
@@ -27,9 +28,11 @@ CHANGELOG
 ltmain.sh
 m4/*
 libtool
+src/include/version.h
 
 autom4te*
 config.*
 *.gz
 *.xz
 src/arch/xtensa/reef
+reef-v*
diff --git a/Makefile.am b/Makefile.am
index b3dcce6..c47580e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,9 +15,12 @@ export ARCH_INCDIR = \
 export PLATFORM_INCDIR = \
 	-I $(SRC_DIR)/platform/$(PLATFORM)/include
 
-BUILT_SOURCES = $(top_srcdir)/.version
-$(top_srcdir)/.version:
-	echo $(VERSION) > $@-t && mv $@-t $@
+BUILT_SOURCES = $(top_srcdir)/src/include/version.h
+
+$(top_srcdir)/src/include/version.h:
+	./git-version.sh
+
 dist-hook:
-	echo $(VERSION) > $(distdir)/.tarball-version
-	echo $(VERSION) > $(distdir)/.version
+	./git-version.sh
+	cat .version > $(distdir)/.tarball-version
+	cat .version > $(distdir)/.version
diff --git a/configure.ac b/configure.ac
index 71e7795..7c1acf4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 
 AC_PREREQ([2.69])
-AC_INIT([Reef],[m4_esyscmd(./git-version-gen .tarball-version)],[sound-open-firmware at alsa-project.org])
+AC_INIT([Reef],[m4_esyscmd(./git-version.sh)],[sound-open-firmware at alsa-project.org])
 AC_CONFIG_SRCDIR([src/init/init.c])
 AC_CONFIG_HEADERS([src/include/config.h])
 AC_CONFIG_MACRO_DIRS([m4])
@@ -10,8 +10,8 @@ AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability subdir-objects silent-rule
 AM_MAINTAINER_MODE([enable])
 
 # get version info from git
-m4_define(reef_major, `echo $VERSION | cut -d. -f1 | cut -d- -f1`)
-m4_define(reef_minor, `echo $VERSION | cut -d. -f2 | cut -d- -f1`)
+m4_define(reef_major, `cat .version | cut -dv -f2 | cut -d. -f1`)
+m4_define(reef_minor, `cat .version | cut -d. -f2 | cut -d- -f1`)
 AC_DEFINE_UNQUOTED([REEF_MAJOR], reef_major, [Reef major version])
 AC_DEFINE_UNQUOTED([REEF_MINOR], reef_minor, [Reef minor version])
 
diff --git a/git-version-gen b/git-version-gen
deleted file mode 100755
index 7546884..0000000
--- a/git-version-gen
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/bin/sh
-# Print a version string.
-scriptversion=2012-09-25.20
-
-# Copyright (C) 2007-2008 Free Software Foundation
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-
-# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
-# It may be run two ways:
-# - from a git repository in which the "git describe" command below
-#   produces useful output (thus requiring at least one signed tag)
-# - from a non-git-repo directory containing a .tarball-version file, which
-#   presumes this script is invoked like "./git-version-gen .tarball-version".
-
-# In order to use intra-version strings in your project, you will need two
-# separate generated version string files:
-#
-# .tarball-version - present only in a distribution tarball, and not in
-#   a checked-out repository.  Created with contents that were learned at
-#   the last time autoconf was run, and used by git-version-gen.  Must not
-#   be present in either $(srcdir) or $(builddir) for git-version-gen to
-#   give accurate answers during normal development with a checked out tree,
-#   but must be present in a tarball when there is no version control system.
-#   Therefore, it cannot be used in any dependencies.  GNUmakefile has
-#   hooks to force a reconfigure at distribution time to get the value
-#   correct, without penalizing normal development with extra reconfigures.
-#
-# .version - present in a checked-out repository and in a distribution
-#   tarball.  Usable in dependencies, particularly for files that don't
-#   want to depend on config.h but do want to track version changes.
-#   Delete this file prior to any autoconf run where you want to rebuild
-#   files to pick up a version string change; and leave it stale to
-#   minimize rebuild time after unrelated changes to configure sources.
-#
-# It is probably wise to add these two files to .gitignore, so that you
-# don't accidentally commit either generated file.
-#
-# Use the following line in your configure.ac, so that $(VERSION) will
-# automatically be up-to-date each time configure is run (and note that
-# since configure.ac no longer includes a version string, Makefile rules
-# should not depend on configure.ac for version updates).
-#
-# AC_INIT([GNU project],
-#         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
-#         [bug-project at example])
-#
-# Then use the following lines in your Makefile.am, so that .version
-# will be present for dependencies, and so that .tarball-version will
-# exist in distribution tarballs.
-#
-# BUILT_SOURCES = $(top_srcdir)/.version
-# $(top_srcdir)/.version:
-#	echo $(VERSION) > $@-t && mv $@-t $@
-# dist-hook:
-#	echo $(VERSION) > $(distdir)/.tarball-version
-#	echo $(VERSION) > $(distdir)/.version
-
-case $# in
-    1) ;;
-    *) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version"; exit 1;;
-esac
-
-tarball_version_file=$1
-nl='
-'
-v=
-
-# First see if there is a tarball-only version file.
-# then try "git describe", then default.
-if test -f $tarball_version_file
-then
-    v=`cat $tarball_version_file` || exit 1
-    case $v in
-	*$nl*) v= ;; # reject multi-line output
-	[0-9]*) ;;
-	*) v= ;;
-    esac
-    test -z "$v" \
-	&& echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2
-fi
-
-# This is presently used by the GNOME-OSTree build system; it
-# helps support the case where the meta-build system has already
-# determined the git revision, but we may not be able to run "git describe"
-# because we're inside a chroot.
-if test -n "$GIT_DESCRIBE_FOR_BUILD";
-then
-    v=$GIT_DESCRIBE_FOR_BUILD
-fi
-
-if test -n "$v"
-then
-    : # use $v
-elif test -e .git \
-    && v=`git describe --abbrev=4 --match='v[0-9]*' HEAD 2>/dev/null` \
-    && [ -n "$v" ]
-then
-    # If we are on a "dev" tag, we need to check that it is not the same
-    # reference as the a previous version tag (this only happens when we are
-    # working with a release tag).
-    # NB The below trick relies on the $v being an exact tag to work which
-    # will only work when HEAD == tag. When further commits have been made on top
-    # of the tag, the $v will be supplimented with the number of commits since
-    # that tag and the commit ref of the most recent commit and thus will
-    # fail the test below (as intended)
-    v2=`git describe --abbrev=4 --match='v[0-9]\.[0-9]' --contains $v 2>/dev/null | cut -d'^' -f1`
-    [ -n "$v2" ] && v=$v2
-
-    # Is this a new git that lists number of commits since the last
-    # tag or the previous older version that did not?
-    #   Newer: v6.10-77-g0f8faeb
-    #   Older: v6.10-g0f8faeb
-#    case $v in
-#	*-*-*) : git describe is okay three part flavor ;;
-#	*-*)
-#	    : git describe is older two part flavor
-#	    # Recreate the number of commits and rewrite such that the
-#	    # result is the same as if we were using the newer version
-#	    # of git describe.
-#	    vtag=`echo "$v" | sed 's/-.*//'`
-#	    numcommits=`git rev-list "$vtag"..HEAD | wc -l`
-#	    v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
-#	    ;;
-#    esac
-
-    # Change the first '-' to a '.', so version-comparing tools work properly.
-    # Remove the "g" in git describe's output string, to save a byte.
-#    v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
-    :
-else
-    echo 1>&2 "$0: Failed to determine git revision"
-    exit 1
-fi
-
-v=`echo "$v" |sed 's/^v//'`
-
-# Don't declare a version "dirty" merely because a time stamp has changed.
-git status > /dev/null 2>&1
-
-dirty=`sh -c 'git diff-index --name-only HEAD' 2>/dev/null` || dirty=
-case "$dirty" in
-    '') ;;
-    *) # Append the suffix only if there isn't one already.
-	case $v in
-	  *-dirty) ;;
-	  *) v="$v-dirty" ;;
-	esac ;;
-esac
-
-# Omit the trailing newline, so that m4_esyscmd can use the result directly.
-echo "$v" | tr -d '\012'
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/git-version.sh b/git-version.sh
new file mode 100755
index 0000000..f8f1e58
--- /dev/null
+++ b/git-version.sh
@@ -0,0 +1,10 @@
+
+# version for configure
+echo -n `git describe --abbrev=4`
+
+# version for make dist
+git describe --abbrev=4 > .version
+git describe --abbrev=4 > .tarball-version
+
+# git commit for IPC
+echo "#define REEF_BUILD \"`git describe --abbrev=4 | cut -d- -f3`\"" > src/include/version.h
diff --git a/src/ipc/intel-ipc.c b/src/ipc/intel-ipc.c
index b7ecbba..6f5c54f 100644
--- a/src/ipc/intel-ipc.c
+++ b/src/ipc/intel-ipc.c
@@ -59,6 +59,7 @@
 #include <uapi/intel-ipc.h>
 #include <reef/intel-ipc.h>
 #include <config.h>
+#include <version.h>
 
 /* convert DSP mailbox address to host offset */
 #define to_host_offset(_s) \
@@ -123,7 +124,7 @@ static const struct ipc_intel_ipc_fw_version fw_version = {
 	.minor = REEF_MINOR,
 	.major = REEF_MAJOR,
 	.type = 0,
-	.fw_build_hash = VERSION,
+	.fw_build_hash = REEF_BUILD,
 	.fw_log_providers_hash = 0,
 };
 
-- 
2.9.3



More information about the Sound-open-firmware mailing list