GNU bug report logs - #25740
Error reporting with confess mangles messages

Previous Next

Package: autoconf;

Reported by: Christophe de Dinechin <dinechin <at> redhat.com>

Date: Wed, 15 Feb 2017 16:26:02 UTC

Severity: normal

Full log


Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Christophe de Dinechin <dinechin <at> redhat.com>
To: bug-automake <at> gnu.org
Subject: 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.



This bug report was last modified 4 years and 287 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.