My testing for recursive help back then wasn't enough. With multiple
config subdirs in one configure script, only the first would be searched
for the in the correct (source) directory. This should fix it.
OK?
Cheers,
Ralf
Fix --help=recursive with multiple AC_CONFIG_SUBDIRS.
* lib/autoconf/general.m4 (_AC_INIT_HELP): If, for recursive help
mode, we change to the source directory, also set $ac_pwd so we
do not go back to the build tree for the next config subdir.
* tests/torture.at (Deep Package): Extend test to contain two
config subdirs on the top level.
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index 69b4371..3a6a602 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -1103,7 +1103,7 @@ if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
test -d "$ac_dir" ||
- { cd "$srcdir" && srcdir=. && test -d "$ac_dir"; } ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
continue
_AC_SRCDIRS(["$ac_dir"])
cd "$ac_dir" || { ac_status=$?; continue; }
diff --git a/tests/torture.at b/tests/torture.at
index 6a7b962..d35d752 100644
--- a/tests/torture.at
+++ b/tests/torture.at
@@ -1212,12 +1212,13 @@ AT_DATA([install-sh], [])
AT_DATA([configure.in],
[[AC_INIT(GNU Outer, 1.0)
AC_ARG_VAR([OUTER], [an outer variable])
-AC_CONFIG_SUBDIRS([inner])
+AC_CONFIG_SUBDIRS([inner inner2])
AC_OUTPUT
]])
# The contents of `inner/', and `inner/innermost/'.
AS_MKDIR_P([inner/innermost])
+AS_MKDIR_P([inner2])
AT_DATA([inner/configure.in],
[[AC_INIT(GNU Inner, 1.0)
@@ -1234,10 +1235,17 @@ AC_DEFINE_UNQUOTED([INNERMOST], [$INNERMOST], [an
innermost variable])
AC_OUTPUT
]])
+AT_DATA([inner2/configure.in],
+[[AC_INIT(GNU Inner 2, 1.0)
+AC_ARG_VAR([INNER2], [an inner2 variable])
+AC_OUTPUT
+]])
+
AT_CHECK([autoreconf -Wall -v], [0], [ignore], [ignore])
AT_CHECK([test -f inner/configure])
AT_CHECK([test -f inner/innermost/configure])
AT_CHECK([test -f inner/innermost/config.hin])
+AT_CHECK([test -f inner2/configure])
# Running the outer configure recursively should provide the innermost
# help strings.
@@ -1246,6 +1254,10 @@ AT_CHECK([{ ./configure --help=recursive; chmod u+w .; }
| grep " INNER "],
0, [ignore], [stderr],
[AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
chmod a-w .
+AT_CHECK([{ ./configure --help=recursive; chmod u+w .; } | grep " INNER2 "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w .
AT_CHECK([{ ./configure --help=recursive; chmod u+w .; } | grep " INNERMOST "],
0, [ignore], [stderr],
[AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
@@ -1276,6 +1288,10 @@ AT_CHECK([cd builddir && { ../configure
--help=recursive; chmod u+w .; } | grep
0, [ignore], [stderr],
[AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
chmod a-w builddir
+AT_CHECK([cd builddir && { ../configure --help=recursive; chmod u+w .; } |
grep " INNER2 "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w builddir
AT_CHECK([cd builddir && { ../configure --help=recursive; chmod u+w .; } |
grep " INNERMOST "],
0, [ignore], [stderr],
[AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])