[-cc automake, -cc bug-sed, +cc automake-patches]

Reference:
<http://lists.gnu.org/archive/html/automake/2012-12/msg00039.html>

I wrote:
>
> At any rate, I agree the error message caused by the abrupt removal
> is horrible.  I'll soon post a patch to have still-exiting uses of
> AM_CONFIG_HEADER give a clear error message (as is done for the
> AM_C_PROTOTYPES since Automake 1.12).  Making that fix quickly
> available will be a good reason for a 1.13.1 release.
> 
Attached are a couple of patches for maint, one about AM_CONFIG_HEADER,
and the other about AM_PROG_CC_STDC.  I will push shorty.  I'll also
have to write a similar patch about AM_PROG_MKDIR_P (for master, as
this macro is only deprecated in 1.13, and will be removed in 1.14).

Regards,
  Stefano
>From 8e921bf86103578b56b2910590c7f1157e96e380 Mon Sep 17 00:00:00 2001
Message-Id: <8e921bf86103578b56b2910590c7f1157e96e380.1356862900.git.stefano.lattar...@gmail.com>
From: Stefano Lattarini <stefano.lattar...@gmail.com>
Date: Sun, 30 Dec 2012 10:33:23 +0100
Subject: [PATCH 1/2] obsolete: better error message if AM_CONFIG_HEADER is
 used

In Automake 1.13, the long-deprecated macro AM_CONFIG_HEADER (deprecated
since 2002) has been removed in favour of AC_CONFIG_HEADERS.  However,
the removal was done without a proper deprecation period, and that
caused packages upgrading to Automake 1.13 to fail with very unclear
error messages, e.g.:

    configure.ac:4: warning: macro 'AM_CONFIG_HEADER' not found in library

from aclocal, and:

    configure.ac:4: error: possibly undefined macro: AM_CONFIG_HEADER
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.

from autoconf.

In an attempt to mitigate this issue, we re-add an AM_CONFIG_HEADER
definition that simply raises a *clear* error message when the macro
is used.

Report by Paolo Bonzini:
<http://lists.gnu.org/archive/html/automake/2012-12/msg00039.html>

* t/am-config-header-no-more.sh: New test.
* t/list-of-tests.mk: Add it.
* m4/obsolete-err.m4: New file, contain the new AM_CONFIG_HEADER
"error-raising" definition, as well as the definition of the
similarly obsolete macros 'AM_C_PROTOTYPES' and 'fp_C_PROTOTYPES',
moved in from ...
* m4/protos.m4: ... this file, which has thus been removed.
* Makefile.am (dist_automake_ac_DATA): Adjust.
* t/ansi2knr-no-more.sh: Likewise.
* NEWS: Update.

Signed-off-by: Stefano Lattarini <stefano.lattar...@gmail.com>
---
 Makefile.am                       |  2 +-
 NEWS                              | 10 ++++++++-
 m4/{protos.m4 => obsolete-err.m4} |  8 ++++++--
 t/am-config-header-no-more.sh     | 43 +++++++++++++++++++++++++++++++++++++++
 t/ansi2knr-no-more.sh             |  2 +-
 t/list-of-tests.mk                |  1 +
 6 files changed, 61 insertions(+), 5 deletions(-)
 rename m4/{protos.m4 => obsolete-err.m4} (62%)
 create mode 100755 t/am-config-header-no-more.sh

diff --git a/Makefile.am b/Makefile.am
index 6a4ebd4..8d8e033 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -283,8 +283,8 @@ dist_automake_ac_DATA = \
   m4/minuso.m4 \
   m4/missing.m4 \
   m4/mkdirp.m4 \
+  m4/obsolete-err.m4 \
   m4/options.m4 \
-  m4/protos.m4 \
   m4/python.m4 \
   m4/runlog.m4 \
   m4/sanity.m4 \
diff --git a/NEWS b/NEWS
index bdafaed..ce4a9c8 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-New in 1.13:
+New in 1.13.1:
 
 * WARNING: Future backward-incompatibilities!
 
@@ -51,6 +51,14 @@ New in 1.13:
 
 * Bugs fixed:
 
+  - Use of the obsolete macro AM_CONFIG_HEADER causes a clear and
+    helpful error message, instead of obscure ones (issue introduced
+    in Automake 1.13).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* Bugs fixed:
+
   - ylwrap renames properly header guards in generated header files
     (*.h), instead of leaving Y_TAB_H.
 
diff --git a/m4/protos.m4 b/m4/obsolete-err.m4
similarity index 62%
rename from m4/protos.m4
rename to m4/obsolete-err.m4
index c8c7adc..24321dd 100644
--- a/m4/protos.m4
+++ b/m4/obsolete-err.m4
@@ -1,5 +1,6 @@
 #  -*- Autoconf -*-
-# Obsolete (and now removed) automatic de-ANSI-fiction support.
+# Obsolete and "removed" macros, that must however still report explicit
+# error messages when used, to smooth transition.
 #
 # Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
@@ -7,7 +8,10 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+AC_DEFUN([AM_CONFIG_HEADER],
+[AC_FATAL(['$0': this macro is obsolete.
+    You should use the 'AC][_CONFIG_HEADERS' macro instead.])])
+
 AC_DEFUN([AM_C_PROTOTYPES],
          [AC_FATAL([automatic de-ANSI-fication support has been removed])])
-
 AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
diff --git a/t/am-config-header-no-more.sh b/t/am-config-header-no-more.sh
new file mode 100755
index 0000000..997c42e
--- /dev/null
+++ b/t/am-config-header-no-more.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Check that any attempt to use the obsolete macro AM_CONFIG_HEADER
+# elicits clear and explicit fatal errors.
+
+. test-init.sh
+
+geterr ()
+{
+    "$@" -Wnone 2>stderr && { cat stderr >&2; exit 1; }
+    cat stderr >&2
+    grep "^configure\.ac:4:.*'AM_CONFIG_HEADER'.*obsolete" stderr
+    grep "'AC_CONFIG_HEADERS'.* instead" stderr
+}
+
+$ACLOCAL
+mv aclocal.m4 aclocal.sav
+
+echo AM_CONFIG_HEADER >> configure.ac
+
+geterr $ACLOCAL
+test ! -f aclocal.m4
+
+cat aclocal.sav "$am_automake_acdir"/obsolete-err.m4 > aclocal.m4
+
+geterr $AUTOCONF
+geterr $AUTOMAKE
+
+:
diff --git a/t/ansi2knr-no-more.sh b/t/ansi2knr-no-more.sh
index e28e651..dfb2e17 100755
--- a/t/ansi2knr-no-more.sh
+++ b/t/ansi2knr-no-more.sh
@@ -32,7 +32,7 @@ $ACLOCAL -Wnone 2>stderr && { cat stderr >&2; exit 1; }
 cat stderr >&2
 grep "^configure\\.ac:5:.*$warn_rx" stderr
 
-cat aclocal.sav "$am_automake_acdir"/protos.m4 > aclocal.m4
+cat aclocal.sav "$am_automake_acdir"/obsolete-err.m4 > aclocal.m4
 $AUTOCONF -Wnone 2>stderr && { cat stderr >&2; exit 1; }
 cat stderr >&2
 grep "^configure\\.ac:5:.*$warn_rx" stderr
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 5ee31d0..00162a8 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -131,6 +131,7 @@ t/amhello-cross-compile.sh \
 t/amhello-binpkg.sh \
 t/aminit-moreargs-deprecation.sh \
 t/amassign.sh \
+t/am-config-header-no-more.sh \
 t/am-macro-not-found.sh \
 t/amopt.sh \
 t/amopts-location.sh \
-- 
1.8.1.rc3.27.g3b73c7d

>From 9c07d8926ec97d43f1f811706043e5398ef916cf Mon Sep 17 00:00:00 2001
Message-Id: <9c07d8926ec97d43f1f811706043e5398ef916cf.1356862900.git.stefano.lattar...@gmail.com>
In-Reply-To: <8e921bf86103578b56b2910590c7f1157e96e380.1356862900.git.stefano.lattar...@gmail.com>
References: <8e921bf86103578b56b2910590c7f1157e96e380.1356862900.git.stefano.lattar...@gmail.com>
From: Stefano Lattarini <stefano.lattar...@gmail.com>
Date: Sun, 30 Dec 2012 11:04:39 +0100
Subject: [PATCH 2/2] obsolete: better error message if AM_PROG_CC_STDC is used

In Automake 1.13, the long-deprecated (since 2002) macro AM_PROG_CC_STDC
has been removed.  Such a removal, albeit sensible and justified, was
probably done in a too-abrupt way, since it didn't turn the pre-existing
warning messages into fatal error messages, but simply dropped the macro
definition, so that remaining usages of it would cause unclear error
messages, e.g.:

    configure.ac:4: warning: macro 'AM_PROG_CC_STDC' not found in library

from aclocal, and:

    configure.ac:4: error: possibly undefined macro: AM_PROG_CC_STDC
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.

from autoconf.

In an attempt to mitigate this issue, we re-add an AM_PROG_CC_STDC
definition that simply raises a *clear* error message when the macro
is used.

* t/am-prog-cc-stdc-no-more.sh: New test.
* t/list-of-tests.mk: Add it.
* m4/obsolete-err.m4: Add the new "error-raising" definition for
AM_PROG_CC_STDC; the error message is a variation of the one already
present in the older version of this macro, before it got removed in
commit 'v1.12-15-gd2ca168'.
* NEWS: Update.

Signed-off-by: Stefano Lattarini <stefano.lattar...@gmail.com>
---
 NEWS                         |  6 +++---
 m4/obsolete-err.m4           |  6 ++++++
 t/am-prog-cc-stdc-no-more.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
 t/list-of-tests.mk           |  1 +
 4 files changed, 53 insertions(+), 3 deletions(-)
 create mode 100755 t/am-prog-cc-stdc-no-more.sh

diff --git a/NEWS b/NEWS
index ce4a9c8..b135b2a 100644
--- a/NEWS
+++ b/NEWS
@@ -51,9 +51,9 @@ New in 1.13.1:
 
 * Bugs fixed:
 
-  - Use of the obsolete macro AM_CONFIG_HEADER causes a clear and
-    helpful error message, instead of obscure ones (issue introduced
-    in Automake 1.13).
+  - Use of the obsolete macros AM_CONFIG_HEADER or AM_PROG_CC_STDC now
+    causes a clear and helpful error message, instead of obscure ones
+    (issue introduced in Automake 1.13).
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/m4/obsolete-err.m4 b/m4/obsolete-err.m4
index 24321dd..2d7c518 100644
--- a/m4/obsolete-err.m4
+++ b/m4/obsolete-err.m4
@@ -12,6 +12,12 @@ AC_DEFUN([AM_CONFIG_HEADER],
 [AC_FATAL(['$0': this macro is obsolete.
     You should use the 'AC][_CONFIG_HEADERS' macro instead.])])
 
+AU_DEFUN([AM_PROG_CC_STDC],
+[AC_FATAL(['$0': this macro is obsolete.
+    You should simply use the 'AC][_PROG_CC' macro instead.
+    Also, your code should no longer depend upon 'am_cv_prog_cc_stdc',
+    but upon 'ac_cv_prog_cc_stdc'.])])
+
 AC_DEFUN([AM_C_PROTOTYPES],
          [AC_FATAL([automatic de-ANSI-fication support has been removed])])
 AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
diff --git a/t/am-prog-cc-stdc-no-more.sh b/t/am-prog-cc-stdc-no-more.sh
new file mode 100755
index 0000000..268a4bf
--- /dev/null
+++ b/t/am-prog-cc-stdc-no-more.sh
@@ -0,0 +1,43 @@
+#! /bin/sh
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Check that any attempt to use the obsolete macro AM_CONFIG_HEADER
+# elicits clear and explicit fatal errors.
+
+. test-init.sh
+
+geterr ()
+{
+    "$@" -Wnone 2>stderr && { cat stderr >&2; exit 1; }
+    cat stderr >&2
+    grep "^configure\.ac:4:.*'AM_PROG_CC_STDC'.*obsolete" stderr
+    grep "'AC_PROG_CC'.* instead" stderr
+}
+
+$ACLOCAL
+mv aclocal.m4 aclocal.sav
+
+echo AM_PROG_CC_STDC >> configure.ac
+
+geterr $ACLOCAL
+test ! -f aclocal.m4
+
+cat aclocal.sav "$am_automake_acdir"/obsolete-err.m4 > aclocal.m4
+
+geterr $AUTOCONF
+geterr $AUTOMAKE
+
+:
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 00162a8..4fe8216 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -132,6 +132,7 @@ t/amhello-binpkg.sh \
 t/aminit-moreargs-deprecation.sh \
 t/amassign.sh \
 t/am-config-header-no-more.sh \
+t/am-prog-cc-stdc-no-more.sh \
 t/am-macro-not-found.sh \
 t/amopt.sh \
 t/amopts-location.sh \
-- 
1.8.1.rc3.27.g3b73c7d

Reply via email to