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@xxxxxxxxxx> > 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@xxxxxxxxxx> > 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 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list