On Tue, Nov 08, 2011 at 05:37:19PM -0700, Eric Blake wrote: > Commit f7bd00c12 pulled in a gnulib module that fails to compile > on mingw. While it would be nice to pull in a newer version of > .gnulib that fixes this, it is difficult to backport any .gnulib > update to older releases. So, it makes sense to take advantage > of gnulib-tool's ability to support local diffs, where we can > apply specific diffs in our use of gnulib without waiting for > upstream gnulib to pick up those changes, as well as avoiding > a wholesale .gnulib update. The existence of local diffs will > also make it easier to backport fixes against a tarball (as long > as a tarball and libvirt.git share the same .gnulib commit, then > the tarball can be patched by applying the same local diffs as > a post-release libvirt.git commit, without having to rerun an > entire gnulib-tool bootstrap). > > This patch introduces the framework for supporting local diffs, > without actually introducing any. > > * bootstrap.conf (local_gl_dir): New variable. > * autogen.sh (bootstrap_hash): Hash any local diffs, to force a > re-bootstrap if just diffs change. > * cfg.mk (_update_required): Likewise. > --- > autogen.sh | 3 +++ > bootstrap.conf | 6 ++++-- > cfg.mk | 1 + > 3 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/autogen.sh b/autogen.sh > index b64521e..f1591d8 100755 > --- a/autogen.sh > +++ b/autogen.sh > @@ -41,10 +41,13 @@ fi > # is required. The first is just the SHA1 that selects a gnulib snapshot. > # The second ensures that whenever we change the set of gnulib modules used > # by this package, we rerun bootstrap to pull in the matching set of files. > +# The third ensures that whenever we change the set of local gnulib diffs, > +# we rerun bootstrap to pull in those diffs. > bootstrap_hash() > { > git submodule status | sed 's/^[ +-]//;s/ .*//' > git hash-object bootstrap.conf > + git ls-tree -d HEAD gnulib/local | awk '{print $3}' > } > > # Ensure that whenever we pull in a gnulib update or otherwise change to a > diff --git a/bootstrap.conf b/bootstrap.conf > index 4557d2d..6498aba 100644 > --- a/bootstrap.conf > +++ b/bootstrap.conf > @@ -160,9 +160,10 @@ fi > > # Tell gnulib to: > # require LGPLv2+ > +# apply any local diffs in gnulib/local/ dir > # put *.m4 files in new gnulib/m4/ dir > -# put *.[ch] files in new gnulib/lib/ dir. > -# import gnulib tests in new gnulib/tests/ dir. > +# put *.[ch] files in new gnulib/lib/ dir > +# import gnulib tests in new gnulib/tests/ dir > gnulib_name=libgnu > m4_base=gnulib/m4 > source_base=gnulib/lib > @@ -172,6 +173,7 @@ gnulib_tool_option_extras="\ > --with-tests\ > --avoid=pt_chown\ > " > +local_gl_dir=gnulib/local > > # Convince bootstrap to use multiple m4 directories. > : ${ACLOCAL=aclocal} > diff --git a/cfg.mk b/cfg.mk > index 463ce0c..574c7a4 100644 > --- a/cfg.mk > +++ b/cfg.mk > @@ -627,6 +627,7 @@ ifeq (0,$(MAKELEVEL)) > test -f po/Makevars || { echo 1; exit; }; \ > actual=$$(git submodule status | $(_submodule_hash); \ > git hash-object bootstrap.conf; \ > + git ls-tree -d HEAD gnulib/local | awk '{print $$3}'; \ > git diff .gnulib); \ > stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \ > test "$$stamp" = "$$actual"; echo $$?) ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list