mirror of
git://git.sv.gnu.org/autoconf
synced 2025-02-23 14:09:51 +08:00
Given better names to the diversions.
* acgeneral.m4 (_AC_DIVERT(NORMAL_2), _AC_DIVERT(NORMAL_3), _AC_DIVERT(NORMAL_4)): Delete, unused. (_AC_DIVERT(NORMAL_1), _AC_DIVERT(NORMAL), AC_DIVERT_DIVERSION): Rename as _AC_DIVERT(PREPARE), _AC_DIVERT(BODY), _AC_DIVERT_DIVERSION.
This commit is contained in:
parent
12e3a8ea6e
commit
370a30d643
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2000-06-26 Akim Demaille <akim@epita.fr>
|
||||
|
||||
Given better names to the diversions.
|
||||
|
||||
* acgeneral.m4 (_AC_DIVERT(NORMAL_2), _AC_DIVERT(NORMAL_3),
|
||||
_AC_DIVERT(NORMAL_4)): Delete, unused.
|
||||
(_AC_DIVERT(NORMAL_1), _AC_DIVERT(NORMAL), AC_DIVERT_DIVERSION):
|
||||
Rename as _AC_DIVERT(PREPARE), _AC_DIVERT(BODY),
|
||||
_AC_DIVERT_DIVERSION.
|
||||
|
||||
2000-06-26 Akim Demaille <akim@epita.fr>
|
||||
|
||||
The current implementation of AC_REQUIRE fails on
|
||||
|
291
acgeneral.m4
291
acgeneral.m4
@ -64,8 +64,8 @@ define([sinclude], [builtin([sinclude], $@)])
|
||||
#
|
||||
# KILL is only used to suppress output.
|
||||
#
|
||||
# The initialization layers of `configure'. We let m4 undivert them
|
||||
# by itself, when it reaches the end of `configure.in'. They are.
|
||||
# The layers of `configure'. We let m4 undivert them by itself, when
|
||||
# it reaches the end of `configure.in'.
|
||||
#
|
||||
# - BINSH
|
||||
# AC_REQUIRE'd #! /bin/sh line
|
||||
@ -75,6 +75,7 @@ define([sinclude], [builtin([sinclude], $@)])
|
||||
# early initializations (defaults)
|
||||
# - INIT_PARSE_ARGS
|
||||
# initialization code, option handling loop.
|
||||
#
|
||||
# - HELP_BEGIN
|
||||
# Handling `configure --help'.
|
||||
# - HELP_CANON
|
||||
@ -87,26 +88,32 @@ define([sinclude], [builtin([sinclude], $@)])
|
||||
# Help msg from AC_ARG_VAR.
|
||||
# - HELP_END
|
||||
# Tail of the handling of --help.
|
||||
#
|
||||
# - VERSION_BEGIN
|
||||
# Copyright notice for --version.
|
||||
# - VERSION_END
|
||||
# Tail of the handling of --version.
|
||||
#
|
||||
# - INIT_PREPARE
|
||||
# Tail of initialization code.
|
||||
#
|
||||
#
|
||||
# These diversions are used by AC_REQUIRE.
|
||||
#
|
||||
# - NORMAL_4
|
||||
# AC_REQUIRE'd code, 4 level deep
|
||||
# - NORMAL_3
|
||||
# AC_REQUIRE'd code, 3 level deep
|
||||
# - NORMAL_2
|
||||
# AC_REQUIRE'd code, 2 level deep
|
||||
# - NORMAL_1
|
||||
# AC_REQUIRE'd code, 1 level deep
|
||||
# - NORMAL
|
||||
# - BODY
|
||||
# the tests and output code
|
||||
#
|
||||
#
|
||||
# This diversion is used by the AC_DEFUN/AC_REQUIRE machinery. It is
|
||||
# important to keep room before PREPARE because for each nested
|
||||
# AC_REQUIRE we use an additional diversion (i.e., two AC_REQUIREs
|
||||
# will use PREPARE - 2. More than 3 levels has never seemed to be
|
||||
# needed.)
|
||||
#
|
||||
# ...
|
||||
# - PREPARE - 2
|
||||
# AC_REQUIRE'd code, 2 level deep
|
||||
# - PREPARE - 1
|
||||
# AC_REQUIRE'd code, 1 level deep
|
||||
# - PREPARE
|
||||
# AC_DEFUN'd macros are elaborated here.
|
||||
|
||||
|
||||
# _AC_DIVERT(DIVERSION-NAME)
|
||||
@ -134,11 +141,9 @@ define([_AC_DIVERT(VERSION_END)], 21)
|
||||
|
||||
define([_AC_DIVERT(INIT_PREPARE)], 30)
|
||||
|
||||
define([_AC_DIVERT(NORMAL_4)], 50)
|
||||
define([_AC_DIVERT(NORMAL_3)], 51)
|
||||
define([_AC_DIVERT(NORMAL_2)], 52)
|
||||
define([_AC_DIVERT(NORMAL_1)], 53)
|
||||
define([_AC_DIVERT(NORMAL)], 54)
|
||||
define([_AC_DIVERT(BODY)], 40)
|
||||
|
||||
define([_AC_DIVERT(PREPARE)], 100)
|
||||
|
||||
define([_AC_DIVERT],
|
||||
[ifdef([_AC_DIVERT($1)],
|
||||
@ -150,8 +155,8 @@ define([_AC_DIVERT],
|
||||
# ------------------------------
|
||||
# Change the diversion stream to DIVERSION-NAME, while stacking old values.
|
||||
define([AC_DIVERT_PUSH],
|
||||
[pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([$1]))dnl
|
||||
divert(AC_DIVERT_DIVERSION)dnl
|
||||
[pushdef([_AC_DIVERT_DIVERSION], _AC_DIVERT([$1]))dnl
|
||||
divert(_AC_DIVERT_DIVERSION)dnl
|
||||
])
|
||||
|
||||
|
||||
@ -159,9 +164,9 @@ divert(AC_DIVERT_DIVERSION)dnl
|
||||
# -------------
|
||||
# Change the diversion stream to its previous value, unstacking it.
|
||||
define([AC_DIVERT_POP],
|
||||
[popdef([AC_DIVERT_DIVERSION])dnl
|
||||
ifndef([AC_DIVERT_DIVERSION], [AC_FATAL([too many AC_DIVERT_POP])])dnl
|
||||
divert(AC_DIVERT_DIVERSION)dnl
|
||||
[popdef([_AC_DIVERT_DIVERSION])dnl
|
||||
ifndef([_AC_DIVERT_DIVERSION], [AC_FATAL([too many AC_DIVERT_POP])])dnl
|
||||
divert(_AC_DIVERT_DIVERSION)dnl
|
||||
])
|
||||
|
||||
|
||||
@ -177,9 +182,9 @@ AC_DIVERT_POP()dnl
|
||||
|
||||
|
||||
# Initialize the diversion setup.
|
||||
define([AC_DIVERT_DIVERSION], _AC_DIVERT([NORMAL]))
|
||||
define([_AC_DIVERT_DIVERSION], _AC_DIVERT([BODY]))
|
||||
# Throw away output until AC_INIT is called.
|
||||
pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
pushdef([_AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
|
||||
|
||||
|
||||
@ -206,9 +211,9 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# -------------------------------------
|
||||
#
|
||||
# When a macro requires another, the other macro is expanded in new
|
||||
# diversion, NORMAL_1. When the outer macro is fully expanded, we first
|
||||
# undivert the most nested diversions (NORMAL_2...), and finally
|
||||
# undivert NORMAL_1. To understand why we need several diversions,
|
||||
# diversion, PREPARE. When the outer macro is fully expanded, we first
|
||||
# undivert the most nested diversions (PREPARE - 1...), and finally
|
||||
# undivert PREPARE. To understand why we need several diversions,
|
||||
# consider the following example:
|
||||
#
|
||||
# | AC_DEFUN([TEST1], [Test...REQUIRE([TEST2])1])
|
||||
@ -219,18 +224,18 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# must keep the expansions of the various level of AC_REQUIRE separated.
|
||||
# Right before executing the epilogue of TEST1, we have:
|
||||
#
|
||||
# NORMAL_3: Test...3
|
||||
# NORMAL_1: Test...2
|
||||
# NORMAL_1: Test...1
|
||||
# NORMAL:
|
||||
# PREPARE - 2: Test...3
|
||||
# PREPARE - 1: Test...2
|
||||
# PREPARE: Test...1
|
||||
# BODY:
|
||||
#
|
||||
# Finally the epilogue of TEST1 undiverts NORMAL_3, 2, and 1 into the
|
||||
# regular flow, NORMAL.
|
||||
# Finally the epilogue of TEST1 undiverts PREPARE - 2, PREPARE - 1, and
|
||||
# PREPARE into the regular flow, BODY.
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_1:
|
||||
# NORMAL_1:
|
||||
# NORMAL: Test...3; Test...2; Test...1
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE:
|
||||
# BODY: Test...3; Test...2; Test...1
|
||||
#
|
||||
# (The semicolons are here for clarification, but of course are not
|
||||
# emitted.) This is what Autoconf 2.0 (I think) to 2.13 (I'm sure)
|
||||
@ -261,20 +266,20 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
#
|
||||
# If you strictly apply the rules given in the previous section you get:
|
||||
#
|
||||
# NORMAL_3: TEST3
|
||||
# NORMAL_2: TEST2a; TEST2b
|
||||
# NORMAL_1: TEST1
|
||||
# NORMAL:
|
||||
# PREPARE - 2: TEST3
|
||||
# PREPARE - 1: TEST2a; TEST2b
|
||||
# PREPARE: TEST1
|
||||
# BODY:
|
||||
#
|
||||
# (TEST2a, although required by TEST3 is not expanded in NORMAL_4
|
||||
# because is has already been expanded before in NORMAL_2, so it has
|
||||
# (TEST2a, although required by TEST3 is not expanded in PREPARE - 3
|
||||
# because is has already been expanded before in PREPARE - 1, so it has
|
||||
# been AC_PROVIDE'd, so it is not expanded again) so when you undivert
|
||||
# the stack of diversions, you get:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1:
|
||||
# NORMAL: TEST3; TEST2a; TEST2b; TEST1
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE:
|
||||
# BODY: TEST3; TEST2a; TEST2b; TEST1
|
||||
#
|
||||
# i.e., TEST2a is expanded after TEST3 although the latter required the
|
||||
# former.
|
||||
@ -292,46 +297,46 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# In the example above, when TEST2a is expanded, but it's epilogue is
|
||||
# not run yet, you have:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2: TEST2a
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL:
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1: TEST2a
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY:
|
||||
#
|
||||
# The epilogue of TEST2a emits it immediately:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a
|
||||
#
|
||||
# TEST2b then requires TEST3, so right before the epilogue of TEST3, you
|
||||
# have:
|
||||
#
|
||||
# NORMAL_3: TEST3
|
||||
# NORMAL_2: Elaboration of TEST2b
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a
|
||||
# PREPARE - 2: TEST3
|
||||
# PREPARE - 1: Elaboration of TEST2b
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a
|
||||
#
|
||||
# The epilogue of TEST3 emits it:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2: Elaboration of TEST2b
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1: Elaboration of TEST2b
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a; TEST3
|
||||
#
|
||||
# TEST2b is now completely expanded, and emitted:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a; TEST3; TEST2b
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a; TEST3; TEST2b
|
||||
#
|
||||
# and finally, TEST1 is finished and emitted:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1:
|
||||
# NORMAL: TEST2a; TEST3; TEST2b: TEST1
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE:
|
||||
# BODY: TEST2a; TEST3; TEST2b: TEST1
|
||||
#
|
||||
# The idea, is simple, but the implementation is a bit evolved. If you
|
||||
# are like me, you will want to see the actual functioning of this
|
||||
@ -351,7 +356,7 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# AC_REQUIRE at hand to follow the steps.
|
||||
#
|
||||
# This implements tries not to assume that of the current diversion is
|
||||
# NORMAL, so as soon as a macro (AC_DEFUN'd) is expanded, we first
|
||||
# BODY, so as soon as a macro (AC_DEFUN'd) is expanded, we first
|
||||
# record the current diversion under the name _AC_DIVERT_DUMP (denoted
|
||||
# DUMP below for short). This introduces an important difference with
|
||||
# the previous versions of Autoconf: you cannot use AC_REQUIRE if you
|
||||
@ -364,113 +369,113 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# any other test was run. I let you imagine the result of requiring
|
||||
# AC_STDC_HEADERS for instance, before AC_PROG_CC was actually run....
|
||||
#
|
||||
# After AC_INIT was run, the current diversion is NORMAL.
|
||||
# After AC_INIT was run, the current diversion is BODY.
|
||||
# * AC_INIT was run
|
||||
# DUMP: undefined
|
||||
# diversion stack: NORMAL |-
|
||||
# diversion stack: BODY |-
|
||||
#
|
||||
# * TEST1 is expanded
|
||||
# The prologue of TEST1 sets AC_DIVERSION_DUMP, which is the diversion
|
||||
# where the current elaboration will be dumped, to the current
|
||||
# diversion. It also AC_DIVERT_PUSH to NORMAL_1, where the full
|
||||
# diversion. It also AC_DIVERT_PUSH to PREPARE, where the full
|
||||
# expansion of TEST1 and its dependencies will be elaborated.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: empty
|
||||
# diversions: NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: empty
|
||||
# diversions: PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2a: prologue
|
||||
# AC_REQUIRE AC_DIVERT_PUSHes another temporary diversion NORMAL_2 (in
|
||||
# AC_REQUIRE AC_DIVERT_PUSHes another temporary diversion PREPARE - 1 (in
|
||||
# fact, the diversion whose number is one less than the current
|
||||
# diversion), and expands TEST2a in there.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: empty
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: empty
|
||||
# diversions: PREPARE-1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST2a is expanded.
|
||||
# Its prologue pushes the current diversion again.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: empty
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# It is expanded in NORMAL_2, and NORMAL_2 is popped by the epilogue
|
||||
# DUMP: BODY
|
||||
# BODY: empty
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# It is expanded in PREPARE - 1, and PREPARE - 1 is popped by the epilogue
|
||||
# of TEST2a.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: nothing
|
||||
# NORMAL_2: TEST2a
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: nothing
|
||||
# PREPARE - 1: TEST2a
|
||||
# diversions: PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2a: epilogue
|
||||
# The content of the current diversion is appended to DUMP (and removed
|
||||
# from the current diversion). A diversion is popped.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2b: prologue
|
||||
# AC_REQUIRE pushes NORMAL_2 and expands TEST2b.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# AC_REQUIRE pushes PREPARE - 1 and expands TEST2b.
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST2b is expanded.
|
||||
# Its prologue pushes the current diversion again.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# The body is expanded here.
|
||||
#
|
||||
# * TEST2b requires TEST3: prologue
|
||||
# AC_REQUIRE pushes NORMAL_3 and expands TEST3.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_3, NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# AC_REQUIRE pushes PREPARE - 2 and expands TEST3.
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE - 2, PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST3 is expanded.
|
||||
# Its prologue pushes the current diversion again.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_3, NORMAL_3, NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE-2, PREPARE-2, PREPARE-1, PREPARE-1, PREPARE, BODY |-
|
||||
# TEST3 requires TEST2a, but TEST2a has already been AC_PROVIDE'd, so
|
||||
# nothing happens. It's body is expanded here, and its epilogue pops a
|
||||
# diversion.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# NORMAL_3: TEST3
|
||||
# diversions: NORMAL_3, NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# PREPARE - 2: TEST3
|
||||
# diversions: PREPARE - 2, PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST2b requires TEST3: epilogue
|
||||
# The current diversion is appended to DUMP, and a diversion is popped.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# The content of TEST2b is expanded here.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# NORMAL_2: TEST2b,
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3
|
||||
# PREPARE - 1: TEST2b,
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# The epilogue of TEST2b pops a diversion.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# NORMAL_2: TEST2b,
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3
|
||||
# PREPARE - 1: TEST2b,
|
||||
# diversions: PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2b: epilogue
|
||||
# The current diversion is appended to DUMP, and a diversion is popped.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3; TEST2b
|
||||
# diversions: NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3; TEST2b
|
||||
# diversions: PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 is expanded: epilogue
|
||||
# TEST1's own content is in NORMAL_1, and it's epilogue pops a diversion.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3; TEST2b
|
||||
# NORMAL_1: TEST1
|
||||
# diversions: NORMAL |-
|
||||
# TEST1's own content is in PREPARE, and it's epilogue pops a diversion.
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3; TEST2b
|
||||
# PREPARE: TEST1
|
||||
# diversions: BODY |-
|
||||
# Here, the epilogue of TEST1 notices the elaboration is done because
|
||||
# DUMP and the current diversion are the same, it then undiverts
|
||||
# NORMAL_1 by hand, and undefines DUMP.
|
||||
# PREPARE by hand, and undefines DUMP.
|
||||
# DUMP: undefined
|
||||
# NORMAL: TEST2a; TEST3; TEST2b; TEST1
|
||||
# diversions: NORMAL |-
|
||||
# BODY: TEST2a; TEST3; TEST2b; TEST1
|
||||
# diversions: BODY |-
|
||||
|
||||
|
||||
# _AC_DEFUN_PRO(MACRO-NAME)
|
||||
@ -479,9 +484,9 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
define([_AC_DEFUN_PRO],
|
||||
[AC_PROVIDE([$1])dnl
|
||||
ifdef([_AC_DIVERT_DUMP],
|
||||
[AC_DIVERT_PUSH(defn([AC_DIVERT_DIVERSION]))],
|
||||
[define([_AC_DIVERT_DUMP], defn([AC_DIVERT_DIVERSION]))dnl
|
||||
AC_DIVERT_PUSH([NORMAL_1])])dnl
|
||||
[AC_DIVERT_PUSH(defn([_AC_DIVERT_DIVERSION]))],
|
||||
[define([_AC_DIVERT_DUMP], defn([_AC_DIVERT_DIVERSION]))dnl
|
||||
AC_DIVERT_PUSH([PREPARE])])dnl
|
||||
])
|
||||
|
||||
|
||||
@ -491,8 +496,8 @@ AC_DIVERT_PUSH([NORMAL_1])])dnl
|
||||
# the PRO/EPI pairs.
|
||||
define([_AC_DEFUN_EPI],
|
||||
[AC_DIVERT_POP()dnl
|
||||
ifelse(_AC_DIVERT_DUMP, AC_DIVERT_DIVERSION,
|
||||
[undivert(_AC_DIVERT([NORMAL_1]))dnl
|
||||
ifelse(_AC_DIVERT_DUMP, _AC_DIVERT_DIVERSION,
|
||||
[undivert(_AC_DIVERT([PREPARE]))dnl
|
||||
undefine([_AC_DIVERT_DUMP])])dnl
|
||||
])
|
||||
|
||||
@ -559,9 +564,9 @@ define([AC_REQUIRE],
|
||||
[AC_FATAL([$0: cannot be used out of an AC_DEFUN'd macro])])dnl
|
||||
AC_PROVIDE_IFELSE([$1],
|
||||
[],
|
||||
[AC_DIVERT_PUSH(m4_eval(AC_DIVERT_DIVERSION - 1))dnl
|
||||
[AC_DIVERT_PUSH(m4_eval(_AC_DIVERT_DIVERSION - 1))dnl
|
||||
$1
|
||||
divert(_AC_DIVERT_DUMP)undivert(AC_DIVERT_DIVERSION)dnl
|
||||
divert(_AC_DIVERT_DUMP)undivert(_AC_DIVERT_DIVERSION)dnl
|
||||
AC_DIVERT_POP()])dnl
|
||||
AC_PROVIDE_IFELSE([$1],
|
||||
[],
|
||||
@ -1854,7 +1859,7 @@ AC_DIVERT_POP()dnl
|
||||
define([_AC_INIT],
|
||||
[AC_DIVERT([BINSH], [@%:@! /bin/sh])
|
||||
_AC_INIT_DEFAULTS()dnl
|
||||
AC_DIVERT_POP()dnl to NORMAL
|
||||
AC_DIVERT_POP()dnl to BODY
|
||||
_AC_INIT_PARSE_ARGS
|
||||
_AC_INIT_SRCDIR
|
||||
_AC_INIT_HELP
|
||||
|
@ -64,8 +64,8 @@ define([sinclude], [builtin([sinclude], $@)])
|
||||
#
|
||||
# KILL is only used to suppress output.
|
||||
#
|
||||
# The initialization layers of `configure'. We let m4 undivert them
|
||||
# by itself, when it reaches the end of `configure.in'. They are.
|
||||
# The layers of `configure'. We let m4 undivert them by itself, when
|
||||
# it reaches the end of `configure.in'.
|
||||
#
|
||||
# - BINSH
|
||||
# AC_REQUIRE'd #! /bin/sh line
|
||||
@ -75,6 +75,7 @@ define([sinclude], [builtin([sinclude], $@)])
|
||||
# early initializations (defaults)
|
||||
# - INIT_PARSE_ARGS
|
||||
# initialization code, option handling loop.
|
||||
#
|
||||
# - HELP_BEGIN
|
||||
# Handling `configure --help'.
|
||||
# - HELP_CANON
|
||||
@ -87,26 +88,32 @@ define([sinclude], [builtin([sinclude], $@)])
|
||||
# Help msg from AC_ARG_VAR.
|
||||
# - HELP_END
|
||||
# Tail of the handling of --help.
|
||||
#
|
||||
# - VERSION_BEGIN
|
||||
# Copyright notice for --version.
|
||||
# - VERSION_END
|
||||
# Tail of the handling of --version.
|
||||
#
|
||||
# - INIT_PREPARE
|
||||
# Tail of initialization code.
|
||||
#
|
||||
#
|
||||
# These diversions are used by AC_REQUIRE.
|
||||
#
|
||||
# - NORMAL_4
|
||||
# AC_REQUIRE'd code, 4 level deep
|
||||
# - NORMAL_3
|
||||
# AC_REQUIRE'd code, 3 level deep
|
||||
# - NORMAL_2
|
||||
# AC_REQUIRE'd code, 2 level deep
|
||||
# - NORMAL_1
|
||||
# AC_REQUIRE'd code, 1 level deep
|
||||
# - NORMAL
|
||||
# - BODY
|
||||
# the tests and output code
|
||||
#
|
||||
#
|
||||
# This diversion is used by the AC_DEFUN/AC_REQUIRE machinery. It is
|
||||
# important to keep room before PREPARE because for each nested
|
||||
# AC_REQUIRE we use an additional diversion (i.e., two AC_REQUIREs
|
||||
# will use PREPARE - 2. More than 3 levels has never seemed to be
|
||||
# needed.)
|
||||
#
|
||||
# ...
|
||||
# - PREPARE - 2
|
||||
# AC_REQUIRE'd code, 2 level deep
|
||||
# - PREPARE - 1
|
||||
# AC_REQUIRE'd code, 1 level deep
|
||||
# - PREPARE
|
||||
# AC_DEFUN'd macros are elaborated here.
|
||||
|
||||
|
||||
# _AC_DIVERT(DIVERSION-NAME)
|
||||
@ -134,11 +141,9 @@ define([_AC_DIVERT(VERSION_END)], 21)
|
||||
|
||||
define([_AC_DIVERT(INIT_PREPARE)], 30)
|
||||
|
||||
define([_AC_DIVERT(NORMAL_4)], 50)
|
||||
define([_AC_DIVERT(NORMAL_3)], 51)
|
||||
define([_AC_DIVERT(NORMAL_2)], 52)
|
||||
define([_AC_DIVERT(NORMAL_1)], 53)
|
||||
define([_AC_DIVERT(NORMAL)], 54)
|
||||
define([_AC_DIVERT(BODY)], 40)
|
||||
|
||||
define([_AC_DIVERT(PREPARE)], 100)
|
||||
|
||||
define([_AC_DIVERT],
|
||||
[ifdef([_AC_DIVERT($1)],
|
||||
@ -150,8 +155,8 @@ define([_AC_DIVERT],
|
||||
# ------------------------------
|
||||
# Change the diversion stream to DIVERSION-NAME, while stacking old values.
|
||||
define([AC_DIVERT_PUSH],
|
||||
[pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([$1]))dnl
|
||||
divert(AC_DIVERT_DIVERSION)dnl
|
||||
[pushdef([_AC_DIVERT_DIVERSION], _AC_DIVERT([$1]))dnl
|
||||
divert(_AC_DIVERT_DIVERSION)dnl
|
||||
])
|
||||
|
||||
|
||||
@ -159,9 +164,9 @@ divert(AC_DIVERT_DIVERSION)dnl
|
||||
# -------------
|
||||
# Change the diversion stream to its previous value, unstacking it.
|
||||
define([AC_DIVERT_POP],
|
||||
[popdef([AC_DIVERT_DIVERSION])dnl
|
||||
ifndef([AC_DIVERT_DIVERSION], [AC_FATAL([too many AC_DIVERT_POP])])dnl
|
||||
divert(AC_DIVERT_DIVERSION)dnl
|
||||
[popdef([_AC_DIVERT_DIVERSION])dnl
|
||||
ifndef([_AC_DIVERT_DIVERSION], [AC_FATAL([too many AC_DIVERT_POP])])dnl
|
||||
divert(_AC_DIVERT_DIVERSION)dnl
|
||||
])
|
||||
|
||||
|
||||
@ -177,9 +182,9 @@ AC_DIVERT_POP()dnl
|
||||
|
||||
|
||||
# Initialize the diversion setup.
|
||||
define([AC_DIVERT_DIVERSION], _AC_DIVERT([NORMAL]))
|
||||
define([_AC_DIVERT_DIVERSION], _AC_DIVERT([BODY]))
|
||||
# Throw away output until AC_INIT is called.
|
||||
pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
pushdef([_AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
|
||||
|
||||
|
||||
@ -206,9 +211,9 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# -------------------------------------
|
||||
#
|
||||
# When a macro requires another, the other macro is expanded in new
|
||||
# diversion, NORMAL_1. When the outer macro is fully expanded, we first
|
||||
# undivert the most nested diversions (NORMAL_2...), and finally
|
||||
# undivert NORMAL_1. To understand why we need several diversions,
|
||||
# diversion, PREPARE. When the outer macro is fully expanded, we first
|
||||
# undivert the most nested diversions (PREPARE - 1...), and finally
|
||||
# undivert PREPARE. To understand why we need several diversions,
|
||||
# consider the following example:
|
||||
#
|
||||
# | AC_DEFUN([TEST1], [Test...REQUIRE([TEST2])1])
|
||||
@ -219,18 +224,18 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# must keep the expansions of the various level of AC_REQUIRE separated.
|
||||
# Right before executing the epilogue of TEST1, we have:
|
||||
#
|
||||
# NORMAL_3: Test...3
|
||||
# NORMAL_1: Test...2
|
||||
# NORMAL_1: Test...1
|
||||
# NORMAL:
|
||||
# PREPARE - 2: Test...3
|
||||
# PREPARE - 1: Test...2
|
||||
# PREPARE: Test...1
|
||||
# BODY:
|
||||
#
|
||||
# Finally the epilogue of TEST1 undiverts NORMAL_3, 2, and 1 into the
|
||||
# regular flow, NORMAL.
|
||||
# Finally the epilogue of TEST1 undiverts PREPARE - 2, PREPARE - 1, and
|
||||
# PREPARE into the regular flow, BODY.
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_1:
|
||||
# NORMAL_1:
|
||||
# NORMAL: Test...3; Test...2; Test...1
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE:
|
||||
# BODY: Test...3; Test...2; Test...1
|
||||
#
|
||||
# (The semicolons are here for clarification, but of course are not
|
||||
# emitted.) This is what Autoconf 2.0 (I think) to 2.13 (I'm sure)
|
||||
@ -261,20 +266,20 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
#
|
||||
# If you strictly apply the rules given in the previous section you get:
|
||||
#
|
||||
# NORMAL_3: TEST3
|
||||
# NORMAL_2: TEST2a; TEST2b
|
||||
# NORMAL_1: TEST1
|
||||
# NORMAL:
|
||||
# PREPARE - 2: TEST3
|
||||
# PREPARE - 1: TEST2a; TEST2b
|
||||
# PREPARE: TEST1
|
||||
# BODY:
|
||||
#
|
||||
# (TEST2a, although required by TEST3 is not expanded in NORMAL_4
|
||||
# because is has already been expanded before in NORMAL_2, so it has
|
||||
# (TEST2a, although required by TEST3 is not expanded in PREPARE - 3
|
||||
# because is has already been expanded before in PREPARE - 1, so it has
|
||||
# been AC_PROVIDE'd, so it is not expanded again) so when you undivert
|
||||
# the stack of diversions, you get:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1:
|
||||
# NORMAL: TEST3; TEST2a; TEST2b; TEST1
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE:
|
||||
# BODY: TEST3; TEST2a; TEST2b; TEST1
|
||||
#
|
||||
# i.e., TEST2a is expanded after TEST3 although the latter required the
|
||||
# former.
|
||||
@ -292,46 +297,46 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# In the example above, when TEST2a is expanded, but it's epilogue is
|
||||
# not run yet, you have:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2: TEST2a
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL:
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1: TEST2a
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY:
|
||||
#
|
||||
# The epilogue of TEST2a emits it immediately:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a
|
||||
#
|
||||
# TEST2b then requires TEST3, so right before the epilogue of TEST3, you
|
||||
# have:
|
||||
#
|
||||
# NORMAL_3: TEST3
|
||||
# NORMAL_2: Elaboration of TEST2b
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a
|
||||
# PREPARE - 2: TEST3
|
||||
# PREPARE - 1: Elaboration of TEST2b
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a
|
||||
#
|
||||
# The epilogue of TEST3 emits it:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2: Elaboration of TEST2b
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1: Elaboration of TEST2b
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a; TEST3
|
||||
#
|
||||
# TEST2b is now completely expanded, and emitted:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1: Elaboration of TEST1
|
||||
# NORMAL: TEST2a; TEST3; TEST2b
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE: Elaboration of TEST1
|
||||
# BODY: TEST2a; TEST3; TEST2b
|
||||
#
|
||||
# and finally, TEST1 is finished and emitted:
|
||||
#
|
||||
# NORMAL_3:
|
||||
# NORMAL_2:
|
||||
# NORMAL_1:
|
||||
# NORMAL: TEST2a; TEST3; TEST2b: TEST1
|
||||
# PREPARE - 2:
|
||||
# PREPARE - 1:
|
||||
# PREPARE:
|
||||
# BODY: TEST2a; TEST3; TEST2b: TEST1
|
||||
#
|
||||
# The idea, is simple, but the implementation is a bit evolved. If you
|
||||
# are like me, you will want to see the actual functioning of this
|
||||
@ -351,7 +356,7 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# AC_REQUIRE at hand to follow the steps.
|
||||
#
|
||||
# This implements tries not to assume that of the current diversion is
|
||||
# NORMAL, so as soon as a macro (AC_DEFUN'd) is expanded, we first
|
||||
# BODY, so as soon as a macro (AC_DEFUN'd) is expanded, we first
|
||||
# record the current diversion under the name _AC_DIVERT_DUMP (denoted
|
||||
# DUMP below for short). This introduces an important difference with
|
||||
# the previous versions of Autoconf: you cannot use AC_REQUIRE if you
|
||||
@ -364,113 +369,113 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
# any other test was run. I let you imagine the result of requiring
|
||||
# AC_STDC_HEADERS for instance, before AC_PROG_CC was actually run....
|
||||
#
|
||||
# After AC_INIT was run, the current diversion is NORMAL.
|
||||
# After AC_INIT was run, the current diversion is BODY.
|
||||
# * AC_INIT was run
|
||||
# DUMP: undefined
|
||||
# diversion stack: NORMAL |-
|
||||
# diversion stack: BODY |-
|
||||
#
|
||||
# * TEST1 is expanded
|
||||
# The prologue of TEST1 sets AC_DIVERSION_DUMP, which is the diversion
|
||||
# where the current elaboration will be dumped, to the current
|
||||
# diversion. It also AC_DIVERT_PUSH to NORMAL_1, where the full
|
||||
# diversion. It also AC_DIVERT_PUSH to PREPARE, where the full
|
||||
# expansion of TEST1 and its dependencies will be elaborated.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: empty
|
||||
# diversions: NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: empty
|
||||
# diversions: PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2a: prologue
|
||||
# AC_REQUIRE AC_DIVERT_PUSHes another temporary diversion NORMAL_2 (in
|
||||
# AC_REQUIRE AC_DIVERT_PUSHes another temporary diversion PREPARE - 1 (in
|
||||
# fact, the diversion whose number is one less than the current
|
||||
# diversion), and expands TEST2a in there.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: empty
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: empty
|
||||
# diversions: PREPARE-1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST2a is expanded.
|
||||
# Its prologue pushes the current diversion again.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: empty
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# It is expanded in NORMAL_2, and NORMAL_2 is popped by the epilogue
|
||||
# DUMP: BODY
|
||||
# BODY: empty
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# It is expanded in PREPARE - 1, and PREPARE - 1 is popped by the epilogue
|
||||
# of TEST2a.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: nothing
|
||||
# NORMAL_2: TEST2a
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: nothing
|
||||
# PREPARE - 1: TEST2a
|
||||
# diversions: PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2a: epilogue
|
||||
# The content of the current diversion is appended to DUMP (and removed
|
||||
# from the current diversion). A diversion is popped.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2b: prologue
|
||||
# AC_REQUIRE pushes NORMAL_2 and expands TEST2b.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# AC_REQUIRE pushes PREPARE - 1 and expands TEST2b.
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST2b is expanded.
|
||||
# Its prologue pushes the current diversion again.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# The body is expanded here.
|
||||
#
|
||||
# * TEST2b requires TEST3: prologue
|
||||
# AC_REQUIRE pushes NORMAL_3 and expands TEST3.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_3, NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# AC_REQUIRE pushes PREPARE - 2 and expands TEST3.
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE - 2, PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST3 is expanded.
|
||||
# Its prologue pushes the current diversion again.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# diversions: NORMAL_3, NORMAL_3, NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# diversions: PREPARE-2, PREPARE-2, PREPARE-1, PREPARE-1, PREPARE, BODY |-
|
||||
# TEST3 requires TEST2a, but TEST2a has already been AC_PROVIDE'd, so
|
||||
# nothing happens. It's body is expanded here, and its epilogue pops a
|
||||
# diversion.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a
|
||||
# NORMAL_3: TEST3
|
||||
# diversions: NORMAL_3, NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a
|
||||
# PREPARE - 2: TEST3
|
||||
# diversions: PREPARE - 2, PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST2b requires TEST3: epilogue
|
||||
# The current diversion is appended to DUMP, and a diversion is popped.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# The content of TEST2b is expanded here.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# NORMAL_2: TEST2b,
|
||||
# diversions: NORMAL_2, NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3
|
||||
# PREPARE - 1: TEST2b,
|
||||
# diversions: PREPARE - 1, PREPARE - 1, PREPARE, BODY |-
|
||||
# The epilogue of TEST2b pops a diversion.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3
|
||||
# NORMAL_2: TEST2b,
|
||||
# diversions: NORMAL_2, NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3
|
||||
# PREPARE - 1: TEST2b,
|
||||
# diversions: PREPARE - 1, PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 requires TEST2b: epilogue
|
||||
# The current diversion is appended to DUMP, and a diversion is popped.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3; TEST2b
|
||||
# diversions: NORMAL_1, NORMAL |-
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3; TEST2b
|
||||
# diversions: PREPARE, BODY |-
|
||||
#
|
||||
# * TEST1 is expanded: epilogue
|
||||
# TEST1's own content is in NORMAL_1, and it's epilogue pops a diversion.
|
||||
# DUMP: NORMAL
|
||||
# NORMAL: TEST2a; TEST3; TEST2b
|
||||
# NORMAL_1: TEST1
|
||||
# diversions: NORMAL |-
|
||||
# TEST1's own content is in PREPARE, and it's epilogue pops a diversion.
|
||||
# DUMP: BODY
|
||||
# BODY: TEST2a; TEST3; TEST2b
|
||||
# PREPARE: TEST1
|
||||
# diversions: BODY |-
|
||||
# Here, the epilogue of TEST1 notices the elaboration is done because
|
||||
# DUMP and the current diversion are the same, it then undiverts
|
||||
# NORMAL_1 by hand, and undefines DUMP.
|
||||
# PREPARE by hand, and undefines DUMP.
|
||||
# DUMP: undefined
|
||||
# NORMAL: TEST2a; TEST3; TEST2b; TEST1
|
||||
# diversions: NORMAL |-
|
||||
# BODY: TEST2a; TEST3; TEST2b; TEST1
|
||||
# diversions: BODY |-
|
||||
|
||||
|
||||
# _AC_DEFUN_PRO(MACRO-NAME)
|
||||
@ -479,9 +484,9 @@ pushdef([AC_DIVERT_DIVERSION], _AC_DIVERT([KILL]))
|
||||
define([_AC_DEFUN_PRO],
|
||||
[AC_PROVIDE([$1])dnl
|
||||
ifdef([_AC_DIVERT_DUMP],
|
||||
[AC_DIVERT_PUSH(defn([AC_DIVERT_DIVERSION]))],
|
||||
[define([_AC_DIVERT_DUMP], defn([AC_DIVERT_DIVERSION]))dnl
|
||||
AC_DIVERT_PUSH([NORMAL_1])])dnl
|
||||
[AC_DIVERT_PUSH(defn([_AC_DIVERT_DIVERSION]))],
|
||||
[define([_AC_DIVERT_DUMP], defn([_AC_DIVERT_DIVERSION]))dnl
|
||||
AC_DIVERT_PUSH([PREPARE])])dnl
|
||||
])
|
||||
|
||||
|
||||
@ -491,8 +496,8 @@ AC_DIVERT_PUSH([NORMAL_1])])dnl
|
||||
# the PRO/EPI pairs.
|
||||
define([_AC_DEFUN_EPI],
|
||||
[AC_DIVERT_POP()dnl
|
||||
ifelse(_AC_DIVERT_DUMP, AC_DIVERT_DIVERSION,
|
||||
[undivert(_AC_DIVERT([NORMAL_1]))dnl
|
||||
ifelse(_AC_DIVERT_DUMP, _AC_DIVERT_DIVERSION,
|
||||
[undivert(_AC_DIVERT([PREPARE]))dnl
|
||||
undefine([_AC_DIVERT_DUMP])])dnl
|
||||
])
|
||||
|
||||
@ -559,9 +564,9 @@ define([AC_REQUIRE],
|
||||
[AC_FATAL([$0: cannot be used out of an AC_DEFUN'd macro])])dnl
|
||||
AC_PROVIDE_IFELSE([$1],
|
||||
[],
|
||||
[AC_DIVERT_PUSH(m4_eval(AC_DIVERT_DIVERSION - 1))dnl
|
||||
[AC_DIVERT_PUSH(m4_eval(_AC_DIVERT_DIVERSION - 1))dnl
|
||||
$1
|
||||
divert(_AC_DIVERT_DUMP)undivert(AC_DIVERT_DIVERSION)dnl
|
||||
divert(_AC_DIVERT_DUMP)undivert(_AC_DIVERT_DIVERSION)dnl
|
||||
AC_DIVERT_POP()])dnl
|
||||
AC_PROVIDE_IFELSE([$1],
|
||||
[],
|
||||
@ -1854,7 +1859,7 @@ AC_DIVERT_POP()dnl
|
||||
define([_AC_INIT],
|
||||
[AC_DIVERT([BINSH], [@%:@! /bin/sh])
|
||||
_AC_INIT_DEFAULTS()dnl
|
||||
AC_DIVERT_POP()dnl to NORMAL
|
||||
AC_DIVERT_POP()dnl to BODY
|
||||
_AC_INIT_PARSE_ARGS
|
||||
_AC_INIT_SRCDIR
|
||||
_AC_INIT_HELP
|
||||
|
Loading…
Reference in New Issue
Block a user