Hello Andreas,
On Mon, Jun 30, 2008 at 03:30:19PM +0200, Andreas Schwab wrote:
> $ cat configure.ac
> AC_INIT
> AC_AIX
> AC_DEFINE(__EXTENSIONS__, 1, [Defined on Solaris to see additional function
> prototypes.])
> AC_CONFIG_HEADERS([config.h])
> AC_OUTPUT
> $ autoheader
> autoheader: warning: missing template: _ALL_SOURCE
> autoheader: Use AC_DEFINE([_ALL_SOURCE], [], [Description])
> autoheader: warning: missing template: _GNU_SOURCE
> autoheader: warning: missing template: _POSIX_PTHREAD_SEMANTICS
> autoheader: warning: missing template: _TANDEM_SOURCE
>
> The same works when moving AC_AIX down after the AC_DEFINE.
AC_AIX is an alias for AC_USE_SYSTEM_EXTENSIONS these days.
The config.h.in fragment in AC_USE_SYSTEM_EXTENSIONS takes care of
all the above cpp macros, including __EXTENSIONS__, and is "indexed"
by the string __EXTENSIONS__. This means that the autoheader script
saves it into a hash under index "__EXTENSIONS__".
So it clashes with the config.h.in fragment created from your
AC_DEFINE. Whoever comes last, wins. That's why the order matters.
The problem you observe did not happen with Autoconf versions before
the commit from 2007-09-11 which merged AC_AIX into
AC_USE_SYSTEM_EXTENSIONS and the config.h.in fragment there, indexed by
"_ALL_SOURCE" became part of the fragment indexed by __EXTENSIONS__.
An easy fix is to remove AC_DEFINE(__EXTENSIONS_, ...) from
configure.ac, AC_USE_SYSTEM_EXTENSIONS takes care about it.
This problem could be fixed in autoheader by breaking that
config.h.in fragment into more parts, so that your
AC_DEFINE(__EXTENSIONS__, clashes only with one part of it.
But I'm not sure this is worth it.
But I see another problem here:
autoheader calls this "warning", but it does not create
config.h.in then. Even worse, if config.h.in existed, it's not
updated.
The mistake was introduced by a change almost
5 years old! The attached diff documents it.
Possible solutions:
- update the template anyway
- call it an error, removing the obsolete template.
- call it an error, leaving template as it is
In my opinion, the above are in decreasing order of preference.
Comments welcome,
Stepan
diff --git a/ChangeLog b/ChangeLog
index 5ca29ed..3d9ba44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2003-08-27 Akim Demaille <[EMAIL PROTECTED]>
+ * bin/autoheader.in: Issue the "Using auxiliary..." message only
+ when -Wobsolete is set.
+ Set it on by default.
+ Suggested by Klee Dienes.
+
+2003-08-27 Akim Demaille <[EMAIL PROTECTED]>
+
* doc/autoconf.texi (AC_FUNC_FSEEKO, AC_SYS_LARGEFILE): More
documentation.
From Guido Draheim.
diff --git a/NEWS b/NEWS
index ca44b27..1bc0160 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,11 @@
This became a significant problem since aclocal and automake can
run autoconf behind the scene.
+** autoheader warnings
+ The warnings of autoheader can be turned off, using --warning.
+ For instance, -Wno-obsolete disables the complaints about acconfig.h
+ and other deprecated constructs.
+
* Major changes in Autoconf 2.57a
Released 2003-06-20 by Akim Demaille.
diff --git a/bin/autoheader.in b/bin/autoheader.in
index caafa27..46faefe 100644
--- a/bin/autoheader.in
+++ b/bin/autoheader.in
@@ -126,6 +126,7 @@ sub parse_args ()
## -------------- ##
mktmpdir ('ah');
+switch_warning 'obsolete';
parse_args;
# Preach.
@@ -146,14 +147,14 @@ if ($config_h_top || $config_h_bot || $acconfig_h)
\`AC_DEFINE_UNQUOTED\' allows to define a template without
\`acconfig.h\':
- AC_DEFINE([NEED_MAIN], 1,
+ AC_DEFINE([NEED_FUNC_MAIN], 1,
[Define if a function \`main\' is needed.])
More sophisticated templates can also be produced, see the
documentation.
END
$msg =~ s/^ /WARNING: /gm;
- print STDERR $msg;
+ msg 'obsolete', $msg;
}
# Set up autoconf.
@@ -265,10 +266,10 @@ $out->close;
}
foreach (sort keys %symbol)
{
- print STDERR "$me: missing template: $_\n";
+ msg 'syntax', "warning: missing template: $_";
if ($suggest_ac_define)
{
- print STDERR "Use AC_DEFINE([$_], [], [Description])\n";
+ msg 'syntax', "Use AC_DEFINE([$_], [], [Description])";
$suggest_ac_define = 0;
}
diff --git a/bin/autoupdate.in b/bin/autoupdate.in
index e7eb8f8..f2fea3d 100644
--- a/bin/autoupdate.in
+++ b/bin/autoupdate.in
@@ -172,9 +172,9 @@ my (%ac_macros, %au_macros);
sub handle_autoconf_macros ()
{
my $macros = new Autom4te::XFile ("$autoconf"
- . " --trace AU_DEFUN:'AU:\$f:\$1'"
- . " --trace define:'AC:\$f:\$1'"
- . " --melt /dev/null |");
+ . " --trace AU_DEFUN:'AU:\$f:\$1'"
+ . " --trace define:'AC:\$f:\$1'"
+ . " --melt /dev/null |");
while ($_ = $macros->getline)
{
chomp;