Several people have reported that if the .gnulib submodule is dirty,
then 'make' will go into an infinite loop attempting to rerun bootstrap,
because that never cleans up the dirty submodule. By default, we
should halt and make the user investigate, but if the user doesn't
know why or care that the submodule is dirty, I also added the ability
to 'make CLEAN_SUBMODULE=1' to get things going again.
Also, while testing this, I noticed that when a submodule update was
needed, 'make' would first run autoreconf, then bootstrap (which
reruns autoreconf); adding a strategic dependency allows for less work.
* .gnulib: Update to latest, for maint.mk improvements.
* cfg.mk (_autogen): Also hook maint.mk, to run before autoreconf.
* autogen.sh (bootstrap): Refuse to run if gnulib is dirty, unless
user requests discarding gnulib changes.
---
* .gnulib 440a1db...b493832 (39):
sockets, sys_stat: restore AC_C_INLINE
localeconv tests: Avoid test failure on OpenIndiana.
havelib: Follow libtool developments.
ChangeLog: mention who reported the problem.
fstatat.c: fix a compile-impeding typo
extern-inline: provide a -Wundef safe config.h
hash-pjw: relax license to LGPLv2+
autoupdate
maint.mk: fix strict vs. lazy variable issues with RELEASE
maint.mk: formatting changes
maint.mk: provide "make upload" to ease uploading
maint.mk: factor the validation of RELEASE_TYPE
maint.mk: silent rules
localename: port gl_locale_name_thread_unsafe to FreeBSD
binary-io, eealloc, mbfile, mbiter, mbutil, xsize: better 'inline'
pipe-filter-gi, pipe-filter-ii: better use of 'inline'
fdutimensat: omit unnecessary AC_C_INLINE
fchmodat, fchownat, fstatat: use extern-inline
acl, mbchar, priv-set: use extern-inline
sockets, sys_stat: remove AC_C_INLINE in MSVC-only cases
tls-tests: omit unnecessary 'inline'
utimens-tests: avoid unnecessary 'inline'
misc: don't limit commentary to inline functions
non-recursive-gnulib-prefix-hack: new module
ChangeLog: fix indentation
maint.mk: generalize _gl_tight_scope for non-recursive make
maint.mk: exempt trailing blanks found in "binary" files
maint.mk: sc_prohibit_path_max_allocation: don't FP for UNIX_PATH_MAX
maint.mk: teach sc_prohibit_magic_number_exit to accept 77
maint.mk: relax sc_prohibit_strcmp, to avoid a false positive
localcharset: work around Mac OS X bug with UTF-8 and MB_CUR_MAX
doc: document sticky-EOF issue
poll: fix poll(0, NULL, msec)
poll: fix for systems that can't recv() on a non-socket
poll/select: document portability problems not fixed by Gnulib.
update from texinfo
Fix typo in previous patch: 1 -> 4.
fcntl-h: check for AIX 7.1 bug with O_NOFOLLOW and O_CREAT
net_if: give more details about the bug being fixed
.gnulib | 2 +-
autogen.sh | 11 +++++++++++
cfg.mk | 16 ++++++++--------
3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/.gnulib b/.gnulib
index 440a1db..b493832 160000
--- a/.gnulib
+++ b/.gnulib
@@ -1 +1 @@
-Subproject commit 440a1dbe523e37f206252cb034c3a62f26867e42
+Subproject commit b4938324b7113c9d73f8390d21f3ecbd842e74b9
diff --git a/autogen.sh b/autogen.sh
index 72f1e7a..d183397 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -63,11 +63,22 @@ bootstrap_hash()
if test -d .git; then
curr_status=.git-module-status
t=$(bootstrap_hash; git diff .gnulib)
+ case $t:${CLEAN_SUBMODULE+set} in
+ *:set) ;;
+ *-dirty*)
+ echo "error: gnulib submodule is dirty, please investigate"
2>&1
+ echo "set env-var CLEAN_SUBMODULE to discard gnulib changes"
2>&1
+ exit 1 ;;
+ esac
if test "$t" = "$(cat $curr_status 2>/dev/null)" \
&& test -f "po/Makevars"; then
# good, it's up to date, all we need is autoreconf
autoreconf -if
else
+ if test ${CLEAN_SUBMODULE+set}; then
+ echo cleaning up submodules...
+ git submodule foreach 'git clean -dfqx && git reset --hard'
+ fi
echo running bootstrap$no_git...
./bootstrap$no_git --bootstrap-sync && bootstrap_hash > $curr_status
\
|| { echo "Failed to bootstrap, please investigate."; exit 1; }
diff --git a/cfg.mk b/cfg.mk
index bbfd4a2..e1fbf4f 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -700,10 +700,17 @@ ifeq (0,$(MAKELEVEL))
_clean_requested = $(filter %clean,$(MAKECMDGOALS))
ifeq (1,$(_update_required)$(_clean_requested))
$(info INFO: gnulib update required; running ./autogen.sh first)
-Makefile: _autogen
+maint.mk Makefile: _autogen
endif
endif
+# It is necessary to call autogen any time gnulib changes. Autogen
+# reruns configure, then we regenerate all Makefiles at once.
+.PHONY: _autogen
+_autogen:
+ $(srcdir)/autogen.sh
+ ./config.status
+
# Give credit where due:
# Ensure that each commit author email address (possibly mapped via
# git log's .mailmap) appears in our AUTHORS file.
@@ -718,13 +725,6 @@ sc_check_author_list:
&& echo '$(ME): committer(s) not listed in AUTHORS' >&2; \
test $$fail = 0
-# It is necessary to call autogen any time gnulib changes. Autogen
-# reruns configure, then we regenerate all Makefiles at once.
-.PHONY: _autogen
-_autogen:
- $(srcdir)/autogen.sh
- ./config.status
-
# regenerate HACKING as part of the syntax-check
syntax-check: $(top_srcdir)/HACKING
--
1.7.1