bug-automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#25740: Error reporting with confess mangles messages


From: Christophe de Dinechin
Subject: bug#25740: Error reporting with confess mangles messages
Date: Wed, 15 Feb 2017 10:02:03 +0100

I had the following output from running autogen.sh in the spice project on 
macOS:

Use of uninitialized value $msg in concatenation (.) or string at 
/usr/local/Cellar/autoconf/2.69/bin/autom4te line 1032.
Use of uninitialized value $stacktrace in pattern match (m//) at 
/usr/local/Cellar/autoconf/2.69/bin/autom4te line 1032.
unknown channel m4trace: -1- AS_VAR_APPEND(ac_configure_args, " '$ac_arg'")
 at /usr/local/Cellar/autoconf/2.69/share/autoconf/Autom4te/Channels.pm line 
638.
    Autom4te::Channels::msg('m4trace: -1- AS_VAR_APPEND(ac_configure_args, " 
\'$ac_arg\'")\x{a}', undef, 'warning: ', 'partial', 0) called at 
/usr/local/Cellar/autoconf/2.69/bin/autom4te line 1032

This is with automake 1.15 and autoconf 2.69, installed using Homebrew.

Google search showed that this kind of error pops up rather frequently, here 
are a few examples:
        https://github.com/jedisct1/libsodium/issues/217
        https://lists.samba.org/archive/samba/2009-November/152184.html
        https://lists.gnu.org/archive/html/autoconf/2016-12/msg00003.html
        
http://lists-archives.com/samba/49430-autogen-sh-failing-over-samba-share.html
        http://dangerousprototypes.com/forum/viewtopic.php?f=37&t=3957
        
http://samba.2283325.n4.nabble.com/autogen-sh-failing-over-samba-share-td2456468.html

Notice how in at least two cases, there is no follow up, because the message 
gives no clue at what is actually happening.

I added the following instrumentation in autom4te around line 1015:

  open (my $fh, '>', '/tmp/perldebug');
  print $fh "-- Begin warnings --\n";
  print $fh contents ("$tmp/warnings”);
  print $fh "-- End warnings --\n";
  print $fh "Separator '$separator'\n";
  close($fh);

  # Swallow excessive newlines.
  for (split (/\n*$separator\n*/o, contents ("$tmp/warnings")))

What this showed is that, at that stage, the message was apparently perfectly 
legitimate, but nowhere to be found on the console output:

 -- Begin warnings —
obsolete::configure.ac:34::'AM_CONFIG_HEADER': this macro is obsolete.
You should use the 'AC_CONFIG_HEADERS' macro 
instead.::/usr/local/Cellar/automake/1.15/share/aclocal-1.15/obsolete.m4:15: 
AM_CONFIG_HEADER is expanded from...
configure.ac:34: the top level
------------------------- END OF WARNING -------------------------


obsolete::configure.ac:189::The macro `AC_TRY_CPP' is obsolete.
You should run autoupdate.::../../lib/autoconf/general.m4:2530: AC_TRY_CPP is 
expanded from...
configure.ac:189: the top level
------------------------- END OF WARNING -------------------------


obsolete::configure.ac:286::AC_OUTPUT should be used without arguments.
You should run autoupdate.::
------------------------- END OF WARNING -------------------------


m4trace: -1- AS_VAR_APPEND(ac_configure_args, " '$ac_arg'")
-- End warnings —


The original message seems to be coming from Channels.pm around line 642, a 
line that reads:

  confess "unknown channel $channel" unless exists $channels{$channel};

The same kind of instrumentation added there

        open (my $fh, '>', '/tmp/perldebug');
        print $fh "Unknown channel $channel - We are going to die horribly\n";
        close($fh);

This instrumentation showed that the channel name at that level is legit (it’s 
“fatal”), nothing like the mangled ‘m4trace: -1…’ mangled stuff that is later 
sent to the console:

        Unknown channel fatal - We are going to die horribly

I also checked that the Perl installation is not the problem with the following 
test:

        use Carp qw/croak confess/;
        sub zoo ()
        {
            confess "Boo, I'm dead";
        }
        sub bar () { zoo(); }
        sub foo () { bar(); }
        foo();

This results in the expected output:

        Boo, I'm dead at /tmp/truc.pl line 4.
            main::zoo() called at /tmp/truc.pl line 6
            main::bar() called at /tmp/truc.pl line 7
            main::foo() called at /tmp/truc.pl line 8

I’ll keep investigating, but I thought this was worth a bug report as is.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]