[libvirt] [PATCH 1/2] build: allow for local gnulib diffs

Daniel P. Berrange berrange at redhat.com
Wed Nov 9 13:47:11 UTC 2011


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 :|




More information about the libvir-list mailing list