Reviewed and committed Regards -steve
On 11/10/2010 07:36 AM, Fabio M. Di Nitto wrote: > Signed-off-by: Fabio M. Di Nitto <[email protected]> > --- > Makefile.am | 40 ++++++++- > build-aux/git-version-gen | 161 ++++++++++++++++++++++++++++++++++ > build-aux/gitlog-to-changelog | 191 > +++++++++++++++++++++++++++++++++++++++++ > build-aux/release.mk | 75 ++++++++++++++++ > configure.ac | 10 +-- > corosync.spec.in | 11 ++- > exec/main.c | 2 +- > 7 files changed, 474 insertions(+), 16 deletions(-) > create mode 100755 build-aux/git-version-gen > create mode 100755 build-aux/gitlog-to-changelog > create mode 100644 build-aux/release.mk > > diff --git a/Makefile.am b/Makefile.am > index c944d8e..6d9e009 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -34,7 +34,12 @@ SPEC = $(PACKAGE_NAME).spec > TARFILE = $(PACKAGE_NAME)-$(VERSION).tar.gz > > EXTRA_DIST = autogen.sh conf/corosync.conf.example $(SPEC).in \ > - conf/lenses/tests/test_corosync.aug > conf/lenses/corosync.aug > + build-aux/git-version-gen \ > + build-aux/gitlog-to-changelog \ > + build-aux/release.mk \ > + conf/lenses/tests/test_corosync.aug \ > + conf/lenses/corosync.aug \ > + .version > > AUTOMAKE_OPTIONS = foreign > > @@ -101,10 +106,19 @@ clean-generic: > $(SPEC): $(SPEC).in > rm -f $...@-t $@ > LC_ALL=C date="$(shell date "+%a %b %d %Y")" && \ > - alphatag="$(shell svnversion | sed -e "s#.*:##g" -e "s#[MS]##g")" && \ > + gitver="$(shell git describe --abbrev=4 --match='v*' HEAD 2>/dev/null)" > && \ > + rpmver=`echo $$gitver | sed -e "s/^v//" -e "s/-.*//g"` && \ > + alphatag=`echo $$gitver | sed -e "s/.*-//" -e "s/^g//"` && \ > + vtag=`echo $$gitver | sed -e "s/-.*//g"` && \ > + numcomm=`git rev-list $$vtag..HEAD | wc -l` && \ > + git update-index --refresh > /dev/null 2>&1 || true && \ > + dirty=`git diff-index --name-only HEAD 2>/dev/null` && \ > + if [ -n "$$dirty" ]; then dirty="dirty"; else dirty=""; fi && \ > sed \ > - -e "s...@alphatag@#r$$alphatag#g" \ > - -e "s...@version@#$(VERSION)#g" \ > + -e "s...@version@#$$rpmver#g" \ > + -e "s...@alphatag@#$$alphatag#g" \ > + -e "s...@numcomm@#$$numcomm#g" \ > + -e "s...@dirty@#$$dirty#g" \ > -e "s...@date@#$$date#g" \ > $< > $...@-t > chmod a-w $...@-t > @@ -126,3 +140,21 @@ srpm: clean > rpm: clean > $(MAKE) $(SPEC) $(TARFILE) > rpmbuild $(RPMBUILDOPTS) -ba $(SPEC) > + > +# release/versioning > +BUILT_SOURCES = .version > +.version: > + echo $(VERSION) > $...@-t && mv $...@-t $@ > + > +dist-hook: gen-ChangeLog > + echo $(VERSION) > $(distdir)/.tarball-version > + > +gen_start_date = 2000-01-01 > +.PHONY: gen-ChangeLog > +gen-ChangeLog: > + if test -d .git; then \ > + $(top_srcdir)/build-aux/gitlog-to-changelog \ > + --since=$(gen_start_date) > $(distdir)/cl-t; \ > + rm -f $(distdir)/ChangeLog; \ > + mv $(distdir)/cl-t $(distdir)/ChangeLog; \ > + fi > diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen > new file mode 100755 > index 0000000..795a98b > --- /dev/null > +++ b/build-aux/git-version-gen > @@ -0,0 +1,161 @@ > +#!/bin/sh > +# Print a version string. > +scriptversion=2010-10-13.20; # UTC > + > +# Copyright (C) 2007-2010 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. > +# > +# 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-proj...@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 > + > +case $# in > + 1|2) ;; > + *) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version" \ > + '[TAG-NORMALIZATION-SED-SCRIPT]' > + exit 1;; > +esac > + > +tarball_version_file=$1 > +tag_sed_script="${2:-s/x/x/}" > +nl=' > +' > + > +# Avoid meddling by environment variable of the same name. > +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 > + > +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='v*' HEAD 2>/dev/null \ > + || git describe --abbrev=4 HEAD 2>/dev/null` \ > + && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ > + && case $v in > + v[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/-.*//'` > + 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 > + v=UNKNOWN > +fi > + > +v=`echo "$v" |sed 's/^v//'` > + > +# Don't declare a version "dirty" merely because a time stamp has changed. > +git update-index --refresh > /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 "$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/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog > new file mode 100755 > index 0000000..7660af5 > --- /dev/null > +++ b/build-aux/gitlog-to-changelog > @@ -0,0 +1,191 @@ > +eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' > + & eval 'exec perl -wS "$0" $argv:q' > + if 0; > +# Convert git log output to ChangeLog format. > + > +my $VERSION = '2009-10-30 13:46'; # UTC > +# The definition above must lie within the first 8 lines in order > +# for the Emacs time-stamp write hook (at end) to update it. > +# If you change this file with Emacs, please let the write hook > +# do its job. Otherwise, update this string manually. > + > +# Copyright (C) 2008-2010 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/>. > + > +# Written by Jim Meyering > + > +use strict; > +use warnings; > +use Getopt::Long; > +use POSIX qw(strftime); > + > +(my $ME = $0) =~ s|.*/||; > + > +# use File::Coda; # http://meyering.net/code/Coda/ > +END { > + defined fileno STDOUT or return; > + close STDOUT and return; > + warn "$ME: failed to close standard output: $!\n"; > + $? ||= 1; > +} > + > +sub usage ($) > +{ > + my ($exit_code) = @_; > + my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); > + if ($exit_code != 0) > + { > + print $STREAM "Try `$ME --help' for more information.\n"; > + } > + else > + { > + print $STREAM <<EOF; > +Usage: $ME [OPTIONS] [ARGS] > + > +Convert git log output to ChangeLog format. If present, any ARGS > +are passed to "git log". To avoid ARGS being parsed as options to > +$ME, they may be preceded by '--'. > + > +OPTIONS: > + > + --since=DATE convert only the logs since DATE; > + the default is to convert all log entries. > + --format=FMT set format string for commit subject and body; > + see 'man git-log' for the list of format metacharacters; > + the default is '%s%n%b%n' > + > + --help display this help and exit > + --version output version information and exit > + > +EXAMPLE: > + > + $ME --since=2008-01-01 > ChangeLog > + $ME -- -n 5 foo > last-5-commits-to-branch-foo > + > +EOF > + } > + exit $exit_code; > +} > + > +# If the string $S is a well-behaved file name, simply return it. > +# If it contains white space, quotes, etc., quote it, and return the new > string. > +sub shell_quote($) > +{ > + my ($s) = @_; > + if ($s =~ m![^\w+/.,-]!) > + { > + # Convert each single quote to '\'' > + $s =~ s/\'/\'\\\'\'/g; > + # Then single quote the string. > + $s = "'$s'"; > + } > + return $s; > +} > + > +sub quoted_cmd(@) > +{ > + return join (' ', map {shell_quote $_} @_); > +} > + > +{ > + my $since_date = '1970-01-01 UTC'; > + my $format_string = '%s%n%b%n'; > + GetOptions > + ( > + help => sub { usage 0 }, > + version => sub { print "$ME version $VERSION\n"; exit }, > + 'since=s' => \$since_date, > + 'format=s' => \$format_string, > + ) or usage 1; > + > + my @cmd = (qw (git log --log-size), "--since=$since_date", > + '--pretty=format:%ct %an <%ae>%n%n'.$format_string, @ARGV); > + open PIPE, '-|', @cmd > + or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n" > + . "(Is your Git too old? Version 1.5.1 or later is > required.)\n"); > + > + my $prev_date_line = ''; > + while (1) > + { > + defined (my $in = <PIPE>) > + or last; > + $in =~ /^log size (\d+)$/ > + or die "$ME:$.: Invalid line (expected log size):\n$in"; > + my $log_nbytes = $1; > + > + my $log; > + my $n_read = read PIPE, $log, $log_nbytes; > + $n_read == $log_nbytes > + or die "$ME:$.: unexpected EOF\n"; > + > + my @line = split "\n", $log; > + my $author_line = shift @line; > + defined $author_line > + or die "$ME:$.: unexpected EOF\n"; > + $author_line =~ /^(\d+) (.*>)$/ > + or die "$ME:$.: Invalid line " > + . "(expected date/author/email):\n$author_line\n"; > + > + my $date_line = sprintf "%s $2\n", strftime ("%F", localtime ($1)); > + # If this line would be the same as the previous date/name/email > + # line, then arrange not to print it. > + if ($date_line ne $prev_date_line) > + { > + $prev_date_line eq '' > + or print "\n"; > + print $date_line; > + } > + $prev_date_line = $date_line; > + > + # Omit "Signed-off-by..." lines. > + @line = grep !/^Signed-off-by: .*>$/, @line; > + > + # If there were any lines > + if (@line == 0) > + { > + warn "$ME: warning: empty commit message:\n $date_line\n"; > + } > + else > + { > + # Remove leading and trailing blank lines. > + while ($line[0] =~ /^\s*$/) { shift @line; } > + while ($line[$#line] =~ /^\s*$/) { pop @line; } > + > + # Prefix each non-empty line with a TAB. > + @line = map { length $_ ? "\t$_" : '' } @line; > + > + print "\n", join ("\n", @line), "\n"; > + } > + > + defined ($in = <PIPE>) > + or last; > + $in ne "\n" > + and die "$ME:$.: unexpected line:\n$in"; > + } > + > + close PIPE > + or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n"; > + # FIXME-someday: include $PROCESS_STATUS in the diagnostic > +} > + > +# Local Variables: > +# mode: perl > +# indent-tabs-mode: nil > +# eval: (add-hook 'write-file-hooks 'time-stamp) > +# time-stamp-start: "my $VERSION = '" > +# time-stamp-format: "%:y-%02m-%02d %02H:%02M" > +# time-stamp-time-zone: "UTC" > +# time-stamp-end: "'; # UTC" > +# End: > diff --git a/build-aux/release.mk b/build-aux/release.mk > new file mode 100644 > index 0000000..6837d8d > --- /dev/null > +++ b/build-aux/release.mk > @@ -0,0 +1,75 @@ > +# to build official release tarballs, handle tagging and publish. > + > +# signing key > +gpgsignkey= > + > +project=corosync > + > +all: checks setup tag tarballs sha256 sign > + > +checks: > +ifeq (,$(version)) > + @echo ERROR: need to define version= > + @exit 1 > +endif > + @if [ ! -d .git ]; then \ > + echo This script needs to be executed from top level cluster > git tree; \ > + exit 1; \ > + fi > + > +setup: checks > + ./autogen.sh > + ./configure > + make maintainer-clean > + > +tag: setup ./tag-$(version) > + > +tag-$(version): > +ifeq (,$(release)) > + @echo Building test release $(version), no tagging > +else > + git tag -a -m "v$(version) release" v$(version) HEAD > + @touch $@ > +endif > + > +tarballs: tag > + ./autogen.sh > + ./configure > + make distcheck > + > +sha256: tarballs $(project)-$(version).sha256 > + > +$(project)-$(version).sha256: > +ifeq (,$(release)) > + @echo Building test release $(version), no sha256 > +else > + sha256sum $(project)-$(version)*tar* | sort -k2 > $@ > +endif > + > +sign: sha256 $(project)-$(version).sha256.asc > + > +$(project)-$(version).sha256.asc: $(project)-$(version).sha256 > +ifeq (,$(gpgsignkey)) > + @echo No GPG signing key defined > +else > +ifeq (,$(release)) > + @echo Building test release $(version), no sign > +else > + gpg --default-key $(gpgsignkey) \ > + --detach-sign \ > + --armor \ > + $< > +endif > +endif > + > +publish: > +ifeq (,$(release)) > + @echo Building test release $(version), no publishing! > +else > + @echo CHANGEME git push --tags origin > + @echo CHANGEME scp $(project)-$(version).* \ > + fedorahosted.org:$(project) > +endif > + > +clean: > + rm -rf $(project)-* tag-* > diff --git a/configure.ac b/configure.ac > index ad4b6c1..0a26adf 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -4,7 +4,10 @@ > # bootstrap / init > AC_PREREQ([2.61]) > > -AC_INIT([corosync], [1.2.8], [[email protected]]) > +AC_INIT([corosync], > + m4_esyscmd([build-aux/git-version-gen .tarball-version]), > + [[email protected]]) > + > AM_INIT_AUTOMAKE([-Wno-portability]) > > AC_CONFIG_SRCDIR([lib/coroipcc.c]) > @@ -14,11 +17,6 @@ AC_CANONICAL_HOST > > AC_LANG([C]) > > -# Define SVN revision > -AC_DEFINE([SVN_REVISION],["m4_esyscmd([svnversion >/dev/null 2>&1 && \ > - svnversion -n || \ > - echo -n exported])"], [SVN revision]) > - > dnl Fix default variables - "prefix" variable if not specified > if test "$prefix" = "NONE"; then > prefix="/usr" > diff --git a/corosync.spec.in b/corosync.spec.in > index ed531c3..ea46f7b 100644 > --- a/corosync.spec.in > +++ b/corosync.spec.in > @@ -1,5 +1,6 @@ > %global alphatag @alphatag@ > - > +%global numcomm @numcomm@ > +%global dirty @dirty@ > > # Conditionals > # Invoke "rpmbuild --without <feature>" or "rpmbuild --with <feature>" > @@ -11,11 +12,11 @@ > Name: corosync > Summary: The Corosync Cluster Engine and Application Programming Interfaces > Version: @version@ > -Release: 1%{?alphatag:.%{alphatag}}%{?dist} > +Release: > 1%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} > License: BSD > Group: System Environment/Base > URL: http://www.openais.org > -Source0: > http://developer.osdl.org/dev/openais/downloads/%{name}-%{version}/%{name}-%{version}.tar.gz > +Source0: > http://developer.osdl.org/dev/openais/downloads/%{name}-%{version}/%{name}-%{version}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}}.tar.gz > > # Runtime bits > Requires: corosynclib = %{version}-%{release} > @@ -38,7 +39,7 @@ BuildRequires: libibverbs-devel librdmacm-devel > BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) > > %prep > -%setup -q -n %{name}-%{version} > +%setup -q -n > %{name}-%{version}%{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}} > > %build > %if %{buildtrunk} > @@ -273,5 +274,5 @@ The Corosync Cluster Engine APIs. > %{_mandir}/man8/sam_overview.8* > > %changelog > -* @date@ Autotools generated version <[email protected]> - > @vers...@-1.@alphatag@ > +* @date@ Autotools generated version <[email protected]> - > @vers...@-1-@numc...@.@alpha...@.@dirty@ > - Autotools generated version > diff --git a/exec/main.c b/exec/main.c > index b994648..cd6cb83 100644 > --- a/exec/main.c > +++ b/exec/main.c > @@ -1523,7 +1523,7 @@ int main (int argc, char **argv, char **envp) > setprio = 0; > break; > case 'v': > - printf ("Corosync Cluster Engine, version '%s' > SVN revision '%s'\n", VERSION, SVN_REVISION); > + printf ("Corosync Cluster Engine, version > '%s'\n", VERSION); > printf ("Copyright (c) 2006-2009 Red Hat, > Inc.\n"); > return EXIT_SUCCESS; > _______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
