[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: Fix AC_DEFUN_ONCE,
Akim Demaille <=