Skip to content

Commit

Permalink
build: automatically rerun ./bootstrap when needed
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Jim Meyering committed Jul 10, 2009
1 parent e335b2c commit f272378
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 7 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
*.o
*~
.git
.git-module-status
ABOUT-NLS
COPYING
INSTALL
Expand Down
2 changes: 2 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ cov: clean-cov
clean-cov:
rm -rf $(top_builddir)/coverage

MAINTAINERCLEANFILES = .git-module-status

# disable this check
distuninstallcheck:

Expand Down
9 changes: 2 additions & 7 deletions README-hacking
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
11 changes: 11 additions & 0 deletions autogen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
10 changes: 10 additions & 0 deletions cfg.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit f272378

Please sign in to comment.