autoconf-patches
[Top][All Lists]
Advanced

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

FYI: Fix AC_DEFUN_ONCE


From: Akim Demaille
Subject: FYI: Fix AC_DEFUN_ONCE
Date: 03 Nov 2000 11:35:26 +0100
User-agent: Gnus/5.0807 (Gnus v5.8.7) XEmacs/21.1 (Channel Islands)

Stupid me, sorry about that (I'm referring to the typo at the origin
of the bug, which is just the acgeneral.m4 patch).  I included a test,
it should never happen again, and cleaned up a few related issues in
M4sugar.


Index: ChangeLog
from  Akim Demaille  <address@hidden>
        AC_REQUIRE and AC_DEFUN_ONCE don't work properly together. This
        caused strange messages about AC_ARG_PROGRAM.
        Reported by Jim Meyering.

        * acgeneral.m4 (AC_DEFUN_ONCE): Fix the indirection to
        m4_defun_once.
        * m4sugar.m4 (m4_defun_once): Also define
        `m4_location(MACRO-NAME)'.  s/ac_warn/m4_warn/.
        Use `m4_defn' to read `m4_location'.
        * tests/base.at (AC_REQUIRE & AC_DEFUN_ONCE): Two new tests.

2000-11-03  Akim Demaille  <address@hidden>

Index: acgeneral.m4
===================================================================
RCS file: /cvs/autoconf/acgeneral.m4,v
retrieving revision 1.612
diff -u -u -r1.612 acgeneral.m4
--- acgeneral.m4 2000/11/03 10:07:40 1.612
+++ acgeneral.m4 2000/11/03 10:36:15
@@ -190,8 +190,7 @@
 # As AC_DEFUN, but issues the EXPANSION only once, and warns if used
 # several times.
 define([AC_DEFUN_ONCE],
-[define([$1],
-[m4_defun_once([$1], [$2[]AC_PROVIDE([$1])])])])
+[m4_defun_once([$1], [$2[]AC_PROVIDE([$1])])])
 
 
 # AC_OBSOLETE(THIS-MACRO-NAME, [SUGGESTION])
Index: m4sugar.m4
===================================================================
RCS file: /cvs/autoconf/m4sugar.m4,v
retrieving revision 2.12
diff -u -u -r2.12 m4sugar.m4
--- m4sugar.m4 2000/11/03 09:08:03 2.12
+++ m4sugar.m4 2000/11/03 10:36:16
@@ -1025,7 +1025,7 @@
        [m4_errprint(m4_defn([_m4_expansion_stack]))dnl
 m4_popdef([_m4_expansion_stack])dnl
 _m4_expansion_stack_dump()],
-       [m4_errprint(m4_location[: the top level])])])
+       [m4_errprint(m4_defn([m4_location])[: the top level])])])
 
 
 # _m4_defun_pro(MACRO-NAME)
@@ -1033,7 +1033,7 @@
 # The prologue for Autoconf macros.
 m4_define([_m4_defun_pro],
 [m4_pushdef([_m4_expansion_stack],
-         m4_defn([m4_location($1)])[: $1 is expanded from...])dnl
+            m4_defn([m4_location($1)])[: $1 is expanded from...])dnl
 m4_pushdef([_m4_expanding($1)])dnl
 ifdef([_m4_divert_dump],
       [m4_divert_push(m4_defn([_m4_divert_diversion]))],
@@ -1068,7 +1068,7 @@
 # macros that are not involved in ordering constraints, to save m4
 # processing.
 m4_define([m4_defun],
-[m4_define([m4_location($1)], m4_location)dnl
+[m4_define([m4_location($1)], m4_defn([m4_location]))dnl
 m4_define([$1],
           [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])
 
@@ -1078,10 +1078,11 @@
 # As m4_defun, but issues the EXPANSION only once, and warns if used
 # several times.
 m4_define([m4_defun_once],
-[m4_define([$1],
-[m4_provide_ifelse([$1],
-                   [ac_warn([syntax], [$1 invoked multiple times])],
-                   [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])])
+[m4_define([m4_location($1)], m4_defn([m4_location]))dnl
+m4_define([$1],
+          [m4_provide_ifelse([$1],
+                             [m4_warn([syntax], [$1 invoked multiple times])],
+                             [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])])
 
 
 ## ----------------------------- ##
@@ -1127,7 +1128,7 @@
 #   it passes to `AC_LANG_COMPILER(C)'.
 m4_define([_m4_require],
 [m4_pushdef([_m4_expansion_stack],
-            m4_location[: $1 is required by...])dnl
+            m4_defn([m4_location])[: $1 is required by...])dnl
 ifdef([_m4_expanding($1)],
       [m4_fatal([m4_require: circular dependency of $1])])dnl
 ifndef([_m4_divert_dump],
Index: tests/base.at
===================================================================
RCS file: /cvs/autoconf/tests/base.at,v
retrieving revision 1.3
diff -u -u -r1.3 base.at
--- tests/base.at 2000/11/01 19:57:55 1.3
+++ tests/base.at 2000/11/03 10:36:16
@@ -13,7 +13,7 @@
 
 # Check that dependencies are always properly honored.
 
-AT_SETUP(AC_REQUIRE)
+AT_SETUP(AC_REQUIRE: topological sort)
 
 AT_DATA(configure.in,
 [[define([REQUIRE_AND_CHECK],
@@ -43,7 +43,92 @@
 AS_EXIT(0)
 ]])
 
-AT_CHECK([../autoconf --autoconf-dir .. -l $at_srcdir], 0, [], [])
+AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir], 0, [], [])
 AT_CHECK([./configure], 0)
+
+AT_CLEANUP(configure)
+
+
+
+## ----------------------------------------------- ##
+## AC_REQUIRE and AC_DEFUN_ONCE: Require, expand.  ##
+## ----------------------------------------------- ##
+
+AT_SETUP(AC_REQUIRE & AC_DEFUN_ONCE: Require, expand)
+
+AT_DATA([configure.in],
+[[AC_DEFUN([TEST],
+[AC_REQUIRE([MULTI_TEST])
+AC_REQUIRE([SINGLE_TEST])])
+
+AC_DEFUN([MULTI_TEST],
+[multi_test=".$multi_test"])
+
+AC_DEFUN_ONCE([SINGLE_TEST],
+[single_test=".$single_test"])
+
+AC_PLAIN_SCRIPT
+TEST
+TEST
+MULTI_TEST
+MULTI_TEST
+SINGLE_TEST
+SINGLE_TEST
+
+case $multi_test:$single_test in
+  ...:. ) AS_EXIT(0);;
+  ...:* ) AC_MSG_ERROR([DEFUN_ONCE is broken]);;
+  *:.   ) AC_MSG_ERROR([DEFUN is broken (Wow, congrats!)]);;
+esac
+]])
+
+AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir], 0, [],
+[configure.in:16: warning: SINGLE_TEST invoked multiple times
+configure.in:17: warning: SINGLE_TEST invoked multiple times
+])
+
+AT_CHECK([./configure], 0)
+
+AT_CLEANUP(configure)
+
+
+
+## ----------------------------------------------- ##
+## AC_REQUIRE and AC_DEFUN_ONCE: Expand, require.  ##
+## ----------------------------------------------- ##
+
+AT_SETUP(AC_REQUIRE & AC_DEFUN_ONCE: Expand, require)
+
+AT_DATA([configure.in],
+[[AC_DEFUN([TEST],
+[AC_REQUIRE([MULTI_TEST])
+AC_REQUIRE([SINGLE_TEST])])
+
+AC_DEFUN([MULTI_TEST],
+[multi_test=".$multi_test"])
+
+AC_DEFUN_ONCE([SINGLE_TEST],
+[single_test=".$single_test"])
+
+AC_PLAIN_SCRIPT
+MULTI_TEST
+MULTI_TEST
+SINGLE_TEST
+SINGLE_TEST
+TEST
+TEST
+
+case $multi_test:$single_test in
+  ..:. ) AS_EXIT(0);;
+  ..:* ) AC_MSG_ERROR([DEFUN_ONCE is broken]);;
+  *:.  ) AC_MSG_ERROR([DEFUN is broken (Wow, congrats!)]);;
+esac
+]])
+
+AT_CHECK([autoconf --autoconf-dir .. -l $at_srcdir], 0, [],
+[configure.in:15: warning: SINGLE_TEST invoked multiple times
+])
+AT_CHECK([./configure], 0)
+
 
 AT_CLEANUP(configure)



reply via email to

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