Jim, thanks for the super-quick feedback! On Friday 09 December 2011, Jim Meyering wrote: > Stefano Lattarini wrote: > > I went for a middle-ground solution (sorta), by having the differences > > generated on-the-fly. This entails a decise slowdown, which is > > however absolutely bearable even on my slow desktop. See the attached > > patch. > > > > The code is a little more complicated than I'd like, but since this > > is an optional, maintainer-only hack, with no impact on the build > > system proper, that's not a big deal IMHO. > > Hi Stefano, > > That looks like a fine solution, though I haven't tried it yet. > I did for a few simple cases (on Linux), it seems to work fine. Before committing I'll try it out on Solaris and a BSD system as well.
> > What I'm not satisfied with is the explanation of the change I've given > > in the ChangeLog entry, which seems cumbersome and confusing. But I > > haven't been able to come up with anything better so far :-( > > > > Comments and suggestions would be appreciated. > ... > > Subject: [PATCH] devel: help in comparing Makefile.in from different commits > > [SNIP] lots of suggestions I've followed. > And all of that is duplicated in the ChangeLog file diffs below. > > Are you interested in generating ChangeLog from git logs? > Absolutely, but that's for a later change. Also, before going down that road, I'd like to have a vim syntax file able to highlight GNU-like ChangeLog syntax in git messages (so, without "date + author" lines and without leading tabs). I might hack one up myself as a "last resort", but I'd rather steal something pre-existing :-) > > diff --git a/Makefile.am b/Makefile.am > > index 51eeb23..4e8d13e 100644 > > --- a/Makefile.am > > +++ b/Makefile.am [SNIP] more suggestions I've followed. > > +## times in the past, when we used to keep the generated Makefile.in > > +## committed into the automake's git repository. > > s/the.*repository/version-control Makefile.in/ > You mean "version-controlled Makefile.in"? The updated patch is attached; note that I've also added a new small explicative comment in the recipe of `autodiffs'. Regards, Stefano
From bcfcc8a4589182367b24f40fe14df281807edb1f Mon Sep 17 00:00:00 2001 Message-Id: <bcfcc8a4589182367b24f40fe14df281807edb1f.1323464938.git.stefano.lattar...@gmail.com> From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Fri, 9 Dec 2011 18:46:54 +0100 Subject: [PATCH] devel: help in comparing Makefile.in from different commits Now that the generated Makefile.in, configure and aclocal.m4 files are no longer committed in Automake's git repository, a simple "git diff" or "git log" no longer shows if and how a change in Automake results in changes to the Makefile.in files and/or configure script of its own build system. Still, the ability to peek so easily at such differences had proved itself quite useful in the past, often revealing inconsistencies and blunders, and sometimes even bugs; so it would be a pity to lose that altogether. With this change, we add a new maintainer recipe that re-introduces much of that capability, by generating and comparing on the fly the Makefile.in, configure and aclocal.m4 derived from two arbitrary commits of the Automake repository. * Makefile.am (autodiffs, compare-autodiffs): New phony targets. --- ChangeLog | 17 ++++++++++++++ Makefile.am | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 0 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c07354..99b1248 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,22 @@ 2011-12-09 Stefano Lattarini <stefano.lattar...@gmail.com> + devel: help in comparing Makefile.in from different commits + Now that the generated Makefile.in, configure and aclocal.m4 files + are no longer committed in Automake's git repository, a simple + "git diff" or "git log" no longer shows if and how a change in + Automake results in changes to the Makefile.in files and/or + configure script of its own build system. Still, the ability to + peek so easily at such differences had proved itself quite useful + in the past, often revealing inconsistencies and blunders, and + sometimes even bugs; so it would be a pity to lose that altogether. + With this change, we add a new maintainer recipe that re-introduces + much of that capability, by generating and comparing on the fly the + Makefile.in, configure and aclocal.m4 derived from two arbitrary + commits of the Automake repository. + * Makefile.am (autodiffs, compare-autodiffs): New phony targets. + +2011-12-09 Stefano Lattarini <stefano.lattar...@gmail.com> + repo: don't commit generated files in the git repository anymore It has been quite some time since autoconf and libtool have stopped committing the generated autotools files in their git repositories, diff --git a/Makefile.am b/Makefile.am index 51eeb23..b7fa29a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -604,6 +604,75 @@ path-check: distdir rm -rf $(distdir); \ exit $$estatus +## Visually comparing differences between the Makefile.in files in the +## automake's own build system as generated in two different branches might +## help to catch bugs and blunders. This has already happened a few times +## in the past, when we used to keep version-control Makefile.in. +autodiffs: + @set -u; \ + NEW_COMMIT=$${NEW_COMMIT-"HEAD"}; \ + OLD_COMMIT=$${OLD_COMMIT-"HEAD~1"}; \ + am_gitdir='$(abs_top_srcdir)/.git'; \ + get_autofiles_from_rev () \ + { \ + rev=$$1 dir=$$2 \ + && echo "$@: will get files from revision $$rev" \ + && git clone -q --depth 1 "$$am_gitdir" tmp \ + && cd tmp \ + && git checkout -q "$$rev" \ + && echo "$@: bootstrapping $$rev" \ + && $(SHELL) ./bootstrap \ + && echo "$@: copying files from $$rev" \ + && makefile_ins=`find . -name Makefile.in` \ + && (tar cf - configure aclocal.m4 $$makefile_ins) | \ + (cd .. && cd "$$dir" && tar xf -) \ + && cd .. \ + && rm -rf tmp; \ + }; \ + outdir=$@.dir \ +## Before proceeding, ensure the specified revisions truly exist. + && git --git-dir="$$am_gitdir" describe $$OLD_COMMIT >/dev/null \ + && git --git-dir="$$am_gitdir" describe $$NEW_COMMIT >/dev/null \ + && rm -rf $$outdir \ + && mkdir $$outdir \ + && cd $$outdir \ + && mkdir new old \ + && get_autofiles_from_rev $$OLD_COMMIT old \ + && get_autofiles_from_rev $$NEW_COMMIT new \ + && exit 0 +## With lots of eye candy; we like out developers pampered and spoiled :-) +compare-autodiffs: autodiffs + @set -u; \ + : $${COLORDIFF=colordiff} $${DIFF=diff}; \ + dir=autodiffs.dir; \ + if test ! -d "$$dir"; then \ + echo "$@: $$dir: Not a directory" >&2; \ + exit 1; \ + fi; \ + mydiff=false mypager=false; \ + if test -t 1; then \ + if ($$COLORDIFF -r . .) </dev/null >/dev/null 2>&1; then \ + mydiff=$$COLORDIFF; \ + mypager="less -R"; \ + else \ + mypager=less; \ + fi; \ + else \ + mypager=cat; \ + fi; \ + if test "$$mydiff" = false; then \ + if ($$DIFF -r -u . .); then \ + mydiff=$$DIFF; \ + else \ + echo "$@: no good-enough diff program specified" >&2; \ + exit 1; \ + fi; \ + fi; \ + st=0; $$mydiff -r -u $$dir/old $$dir/new | $$mypager || st=$$?; \ + rm -rf $$dir; \ + exit $$st +.PHONY: autodiffs compare-autodiffs + ## Program to use to fetch files. WGET = wget WGET_SV_CVS = $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/ -- 1.7.2.3