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(a)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(a)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
:|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|