The verbose output of autoreconf is very confusing for nested packages.

Consider this small example:

| % cat configure.ac
| AC_INIT([foo], [1.0])
| AC_CONFIG_SUBDIRS([bar])
| AC_OUTPUT
| % cat bar/configure.ac
| AC_INIT([bar], [1.0])
| AC_OUTPUT
| % autoreconf -vfi
| autoreconf: Entering directory `.'
| autoreconf: configure.ac: not using Gettext
| autoreconf: running: aclocal --force
| autoreconf: configure.ac: tracing
| autoreconf: configure.ac: adding subdirectory bar to autoreconf
| autoreconf: Entering directory `bar'
| autoreconf: configure.ac: not using Libtool
| autoreconf: running: /usr/bin/autoconf --force
| autoreconf: configure.ac: not using Autoheader
| autoreconf: configure.ac: not using Automake
| autoreconf: Leaving directory `bar'
| autoreconf: Leaving directory `.'


If you look at the output from autoreconf, it appears
that aclocal and autoconf have been run only once each:
- aclocal has been run for project foo, and
- autoconf has been run for project bar.


Of course aclocal and autoconf have been run on the two projects,
autoreconf is just hiding this information unintentionally.

If you look at the code for autoreconf, the intended output should be:

| % autoreconf -vfi
| autoreconf: Entering directory `.'
| autoreconf: configure.ac: not using Gettext
| autoreconf: running: aclocal --force
| autoreconf: configure.ac: tracing
| autoreconf: configure.ac: adding subdirectory bar to autoreconf
| autoreconf: Entering directory `bar'
| autoreconf: configure.ac: not using Gettext
| autoreconf: running: aclocal --force
| autoreconf: configure.ac: tracing
| autoreconf: configure.ac: not using Libtool
| autoreconf: running: /usr/bin/autoconf --force
| autoreconf: configure.ac: not using Autoheader
| autoreconf: configure.ac: not using Automake
| autoreconf: Leaving directory `bar'
| autoreconf: configure.ac: not using Gettext
| autoreconf: running: aclocal --force
| autoreconf: configure.ac: tracing
| autoreconf: configure.ac: not using Libtool
| autoreconf: running: /usr/bin/autoconf --force
| autoreconf: configure.ac: not using Autoheader
| autoreconf: configure.ac: not using Automake
| autoreconf: Leaving directory `.'

Unfortunately, all of these strings are printed via "verb()" which filters
out duplicate messages, hence the confusion.

Probably verb() could be taught not to filter messages.  (i.e., using

register_channel 'verb', type => 'debug', silent => 1, uniq_part => UP_NONE,
  ordered => 0

as in done automake).

Maybe these messages could be made directory dependent.  I think this
would be more helpful for debugging builds.  I'm thinking something
like this:

| % autoreconf -vfi
| autoreconf: Entering directory '.'
| autoreconf: ./configure.ac: not using Gettext
| autoreconf: running: 'aclocal --force' in '.'
| autoreconf: ./configure.ac: tracing
| autoreconf: ./configure.ac: adding subdirectory bar to autoreconf
| autoreconf: Entering directory 'bar'
| autoreconf: bar/configure.ac: not using Gettext
| autoreconf: running: 'aclocal --force' in 'bar'
| autoreconf: bar/configure.ac: tracing
| autoreconf: bar/configure.ac: not using Libtool
| autoreconf: running: '/usr/bin/autoconf --force' in 'bar'
| autoreconf: bar/configure.ac: not using Autoheader
| autoreconf: bar/configure.ac: not using Automake
| autoreconf: Leaving directory 'bar'
| autoreconf: ./configure.ac: not using Gettext
| autoreconf: running: 'aclocal --force' in '.'
| autoreconf: ./configure.ac: tracing
| autoreconf: ./configure.ac: not using Libtool
| autoreconf: running: '/usr/bin/autoconf --force' in '.'
| autoreconf: ./configure.ac: not using Autoheader
| autoreconf: ./configure.ac: not using Automake
| autoreconf: Leaving directory '.'


--
Alexandre Duret-Lutz

Reply via email to