series looks good to me, ack all 5 On Wed, Oct 31, 2012 at 10:36 AM, Christophe Fergeau <cfergeau@xxxxxxxxxx> wrote: > This gives much better version numbers when using git snapshots. > --- > Makefile.am | 10 +++ > build-aux/git-version-gen | 220 ++++++++++++++++++++++++++++++++++++++++++++++ > configure.ac | 8 +- > 3 files changed, 232 insertions(+), 6 deletions(-) > create mode 100755 build-aux/git-version-gen > > diff --git a/Makefile.am b/Makefile.am > index fcfe3af..b050aff 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -61,6 +61,7 @@ MAINTAINERCLEANFILES += vdservice_rc.$(OBJEXT) > > > EXTRA_DIST = \ > + $(top_srcdir)/.version \ > tests/clipboard.py \ > vdagent.sln \ > vdagent/resource.h \ > @@ -70,5 +71,14 @@ EXTRA_DIST = \ > vdservice/vdservice.rc \ > vdservice/vdservice.vcproj > > +# see git-version-gen > +dist-hook: > + echo $(VERSION) > $(distdir)/.tarball-version > + > +BUILT_SOURCES = $(top_srcdir)/.version > +$(top_srcdir)/.version: > + echo $(VERSION) > $@-t && mv $@-t $@ > + > + > > -include $(top_srcdir)/git.mk > diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen > new file mode 100755 > index 0000000..0fa9063 > --- /dev/null > +++ b/build-aux/git-version-gen > @@ -0,0 +1,220 @@ > +#!/bin/sh > +# Print a version string. > +scriptversion=2012-03-18.17; # UTC > + > +# Copyright (C) 2007-2012 Free Software Foundation, Inc. > +# > +# 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 of the License, 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. > +# > +# As with any generated file in a VC'd directory, you should add > +# /.version to .gitignore, so that you don't accidentally commit it. > +# .tarball-version is never generated in a VC'd directory, so needn't > +# be listed there. > +# > +# 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@example]) > +# > +# Then use the following lines in your Makefile.am, so that .version > +# will be present for dependencies, and so that .version and > +# .tarball-version will exist in distribution tarballs. > +# > +# EXTRA_DIST = $(top_srcdir)/.version > +# BUILT_SOURCES = $(top_srcdir)/.version > +# $(top_srcdir)/.version: > +# echo $(VERSION) > $@-t && mv $@-t $@ > +# dist-hook: > +# echo $(VERSION) > $(distdir)/.tarball-version > + > + > +me=$0 > + > +version="git-version-gen $scriptversion > + > +Copyright 2011 Free Software Foundation, Inc. > +There is NO warranty. You may redistribute this software > +under the terms of the GNU General Public License. > +For more information about these matters, see the files named COPYING." > + > +usage="\ > +Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] > +Print a version string. > + > +Options: > + > + --prefix prefix of git tags (default 'v') > + > + --help display this help and exit > + --version output version information and exit > + > +Running without arguments will suffice in most cases." > + > +prefix=v > + > +while test $# -gt 0; do > + case $1 in > + --help) echo "$usage"; exit 0;; > + --version) echo "$version"; exit 0;; > + --prefix) shift; prefix="$1";; > + -*) > + echo "$0: Unknown option '$1'." >&2 > + echo "$0: Try '--help' for more information." >&2 > + exit 1;; > + *) > + if test -z "$tarball_version_file"; then > + tarball_version_file="$1" > + elif test -z "$tag_sed_script"; then > + tag_sed_script="$1" > + else > + echo "$0: extra non-option argument '$1'." >&2 > + exit 1 > + fi;; > + esac > + shift > +done > + > +if test -z "$tarball_version_file"; then > + echo "$usage" > + exit 1 > +fi > + > +tag_sed_script="${tag_sed_script:-s/x/x/}" > + > +nl=' > +' > + > +# Avoid meddling by environment variable of the same name. > +v= > +v_from_git= > + > +# 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` || v= > + case $v in > + *$nl*) v= ;; # reject multi-line output > + [0-9]*) ;; > + *) v= ;; > + esac > + test -z "$v" \ > + && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 > +fi > + > +if test -n "$v" > +then > + : # use $v > +# Otherwise, if there is at least one git commit involving the working > +# directory, and "git describe" output looks sensible, use that to > +# derive a version string. > +elif test "`git log -1 --pretty=format:x . 2>&1`" = x \ > + && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \ > + || git describe --abbrev=4 HEAD 2>/dev/null` \ > + && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ > + && case $v in > + $prefix[0-9]*) ;; > + *) (exit 1) ;; > + esac > +then > + # 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/-.*//'` > + commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \ > + || { commit_list=failed; > + echo "$0: WARNING: git rev-list failed" 1>&2; } > + numcommits=`echo "$commit_list" | wc -l` > + v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; > + test "$commit_list" = failed && v=UNKNOWN > + ;; > + 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-/'`; > + v_from_git=1 > +else > + v=UNKNOWN > +fi > + > +v=`echo "$v" |sed "s/^$prefix//"` > + > +# Test whether to append the "-dirty" suffix only if the version > +# string we're using came from git. I.e., skip the test if it's "UNKNOWN" > +# or if it came from .tarball-version. > +if test -n "$v_from_git"; then > + # Don't declare a version "dirty" merely because a time stamp has changed. > + git update-index --refresh > /dev/null 2>&1 > + > + dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= > + case "$dirty" in > + '') ;; > + *) # Append the suffix only if there isn't one already. > + case $v in > + *-dirty) ;; > + *) v="$v-dirty" ;; > + esac ;; > + esac > +fi > + > +# Omit the trailing newline, so that m4_esyscmd can use the result directly. > +echo "$v" | tr -d "$nl" > + > +# Local variables: > +# eval: (add-hook 'write-file-hooks 'time-stamp) > +# time-stamp-start: "scriptversion=" > +# time-stamp-format: "%:y-%02m-%02d.%02H" > +# time-stamp-time-zone: "UTC" > +# time-stamp-end: "; # UTC" > +# End: > diff --git a/configure.ac b/configure.ac > index 5cb4f6c..3fb17ee 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -2,13 +2,9 @@ > # Copyright (C) 2011 Christophe Fergeau <cfergeau@xxxxxxxxxx> > AC_PREREQ(2.63) > > -m4_define([vdagent_major_version], [0]) > -m4_define([vdagent_minor_version], [7]) > -m4_define([vdagent_micro_version], [0]) > -m4_define([vdagent_version], > - [vdagent_major_version.vdagent_minor_version.vdagent_micro_version]) > +AC_INIT([vdagent-win], > + m4_esyscmd([build-aux/git-version-gen .tarball-version])) > > -AC_INIT([vdagent-win],[vdagent_version]) > AC_CONFIG_SRCDIR([vdagent]) > AC_CONFIG_HEADERS([config.h]) > AC_CONFIG_MACRO_DIR([m4]) > -- > 1.7.12.1 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel -- Marc-André Lureau _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel