./bootstrap required [Re: [libvirt] fix two "make syntax-check" failures

Daniel P. Berrange berrange at redhat.com
Fri Jul 10 14:36:18 UTC 2009


On Fri, Jul 10, 2009 at 12:45:03PM +0200, Jim Meyering wrote:
> Daniel P. Berrange wrote:
> 
> So how about this alternative?
> With it, you don't need to run ./bootstrap manually any more,
> and "make" will fail with a message telling you to run ./autogen.sh
> whenever the gnulib submodule is out of date wrt your current checkout.
> (not wrt upstream, of course).
> 
> The first patch isn't technically necessary,
> but can save unnecessary invocation of some of those programs.
> 
> From abc4812c4752bb63cefd1f73d8136903e694034a Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering at redhat.com>
> Date: Fri, 10 Jul 2009 12:06:36 +0200
> Subject: [PATCH 1/2] build: make autogen.sh use autoreconf -if
> 
> * autogen.sh: Use "autoreconf -if" instead of open-coding it with
> manual and unconditional invocation of each separate tool.
> ---
>  autogen.sh |    8 +-------
>  1 files changed, 1 insertions(+), 7 deletions(-)
> 
> diff --git a/autogen.sh b/autogen.sh
> index c026112..e6bde33 100755
> --- a/autogen.sh
> +++ b/autogen.sh
> @@ -57,13 +57,7 @@ fi
>  # Automake requires that ChangeLog exist.
>  touch ChangeLog
> 
> -autopoint --force
> -#rm -rf m4
> -libtoolize --copy --force
> -aclocal -I m4 -I gnulib/m4
> -autoheader
> -automake --add-missing
> -autoconf
> +autoreconf -if
> 
>  cd $THEDIR
> 
> --
> 1.6.3.3.524.g8586b
> 
> 
> From 6870a8cf78cc3216bd38cb997cc27e1eabccc601 Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering at redhat.com>
> Date: Fri, 10 Jul 2009 10:01:04 +0200
> Subject: [PATCH 2/2] build: automatically rerun ./bootstrap when needed
> 
> When "git pull" (or any other operation) brings in a new version of the
> gnulib git submodule, you must rerun the autogen.sh script.  With this
> change, "make" now fails and tells you to run ./autogen.sh, when needed.
> * autogen.sh: Maintain a new file, .git-module-status, containing
> the current submodule status.  If it doesn't exist or its content
> is different from what "git submodule status" prints, then run
> ./bootstrap
> * .gitignore: Add .git-module-status
> * cfg.mk: Diagnose out of date submodule and fail.
> * README-hacking: Update not to mention bootstrap.
> * Makefile.am (MAINTAINERCLEANFILES): Add .git-module-status,
> so that "make maintainerclean" will remove it.
> ---
>  .gitignore     |    1 +
>  Makefile.am    |    2 ++
>  README-hacking |    9 ++-------
>  autogen.sh     |   11 +++++++++++
>  cfg.mk         |   10 ++++++++++
>  5 files changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/.gitignore b/.gitignore
> index 54c3ba4..17c3975 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -2,6 +2,7 @@
>  *.o
>  *~
>  .git
> +.git-module-status
>  ABOUT-NLS
>  COPYING
>  INSTALL
> diff --git a/Makefile.am b/Makefile.am
> index f9efff5..beddca7 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -48,6 +48,8 @@ cov: clean-cov
>  clean-cov:
>  	rm -rf $(top_builddir)/coverage
> 
> +MAINTAINERCLEANFILES = .git-module-status
> +
>  # disable this check
>  distuninstallcheck:
> 
> diff --git a/README-hacking b/README-hacking
> index 99c68fe..4105a3e 100644
> --- a/README-hacking
> +++ b/README-hacking
> @@ -28,13 +28,8 @@ You can get a copy of the source repository like this:
>          $ git clone git://libvirt.org/libvirt
>          $ cd libvirt
> 
> -The next step is to get and check other files needed to build,
> -which are extracted from other source packages:
> -
> -        $ ./bootstrap
> -
> -Then run this to create e.g., Makefiles and ./configure,
> -and to invoke ./configure:
> +The next step is to get all required pieces from gnulib,
> +to run autoreconf, and to invoke ./configure:
> 
>          $ ./autogen.sh
> 
> diff --git a/autogen.sh b/autogen.sh
> index e6bde33..415f3ec 100755
> --- a/autogen.sh
> +++ b/autogen.sh
> @@ -54,6 +54,17 @@ if test -z "$*"; then
>          echo "to pass any to it, please specify them on the $0 command line."
>  fi
> 
> +# Ensure that whenever we pull in a gnulib update or otherwise change to a
> +# different version (i.e., when switching branches), we also rerun ./bootstrap.
> +curr_status=.git-module-status
> +t=$(git submodule status)
> +if test "$t" = "$(cat $curr_status 2>/dev/null)"; then
> +    : # good, it's up to date
> +else
> +  echo running bootstrap...
> +  ./bootstrap && echo "$t" > $curr_status
> +fi
> +
>  # Automake requires that ChangeLog exist.
>  touch ChangeLog
> 
> diff --git a/cfg.mk b/cfg.mk
> index 736f7c0..3b3d57f 100644
> --- a/cfg.mk
> +++ b/cfg.mk
> @@ -230,3 +230,13 @@ sc_libvirt_unmarked_diagnostics:
> 
>  # We don't use this feature of maint.mk.
>  prev_version_file = /dev/null
> +
> +ifeq (0,$(MAKELEVEL))
> +  _curr_status = .git-module-status
> +  _update_required :=							\
> +    $(shell t=$$(git submodule status);					\
> +      test "$$t" = "$$(cat $(_curr_status) 2>/dev/null)"; echo $$?)
> +  ifeq (1,$(_update_required))
> +    $(error gnulib update required; run ./autogen.sh first)
> +  endif
> +endif


ACK

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list