[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bad m4 quotation? (was: echo "enhancement" leads to confused legacy
From: |
Noah Misch |
Subject: |
Re: bad m4 quotation? (was: echo "enhancement" leads to confused legacy script tools...) |
Date: |
Sun, 2 Apr 2006 11:32:17 -0700 |
User-agent: |
Mutt/1.5.6i |
On Tue, Mar 21, 2006 at 05:47:59PM +0100, Ralf Wildenhues wrote:
> Hmm. This works:
>
> AC_INIT(a,1,b)
> AC_DEFUN([FOO],
> [AC_CONFIG_FILES(m4_default([$1], [foobar]))])
> FOO
> FOO([baz])
> AC_OUTPUT
>
> But this fails:
>
> AC_INIT(a,1,b)
> AC_DEFUN([FOO],
> [AC_CONFIG_FILES([m4_default([$1], [foobar])])])
> FOO
> FOO([baz])
> AC_OUTPUT
Confirmed.
> Is that a bug? In above code or in Autoconf?
Either way, this example does not demonstrate a regression in CVS. Autoconf
2.59 handled these the same way.
> What about the usage of `ifelse' in AX_PREFIX_CONFIG_H?
This macro uses AC_CONFIG_COMMANDS, not AC_CONFIG_FILES, and CVS _has_ changed
behavior in that macro:
$ cat configure.ac
AC_INIT
AC_CONFIG_COMMANDS([ifelse(0,0,mytag-c)], [echo hi])
AC_CONFIG_FILES([ifelse(0,0,mytag-f)])
AC_CONFIG_HEADERS([ifelse(0,0,mytag-h)])
AC_OUTPUT
$ grep mytag configure-{259,cvs}
configure-259: ac_config_commands="$ac_config_commands mytag-c"
configure-259: ac_config_files="$ac_config_files ifelse(0,0,mytag-f)"
configure-259: ac_config_headers="$ac_config_headers
ifelse(0,0,mytag-h)"
configure-259: "mytag-f" ) CONFIG_FILES="$CONFIG_FILES mytag-f" ;;
configure-259: "mytag-c" ) CONFIG_COMMANDS="$CONFIG_COMMANDS mytag-c" ;;
configure-259: "mytag-h" ) CONFIG_HEADERS="$CONFIG_HEADERS mytag-h" ;;
configure-259: mytag-c ) echo hi ;;
configure-cvs:ac_config_commands="$ac_config_commands ifelse(0,0,mytag-c)"
configure-cvs:ac_config_files="$ac_config_files ifelse(0,0,mytag-f)"
configure-cvs:ac_config_headers="$ac_config_headers ifelse(0,0,mytag-h)"
configure-cvs: mytag-c) CONFIG_COMMANDS="$CONFIG_COMMANDS mytag-c" ;;
configure-cvs: mytag-f) CONFIG_FILES="$CONFIG_FILES mytag-f" ;;
configure-cvs: mytag-h) CONFIG_HEADERS="$CONFIG_HEADERS mytag-h" ;;
configure-cvs: mytag-c:C) echo hi ;;
Notice that this sort of first argument to AC_CONFIG_{FILES,HEADERS} has not
worked, but that AC_CONFIG_COMMANDS had accepted such constructs, and that CVS
now treats AC_CONFIG_COMMANDS like the others (as of a 2005-07-25 change).
(Side note: the removal of double quotes is suspicious; it appears to change
behavior for weird tag names. This may not matter too much.)
Long term, we might want to diagnose and forbid AC_CONFIG_<FOO>S tags containing
characters special to the shell, which would also catch macro calls. For now,
let us fix this regression by treating the first argument to AC_CONFIG_COMMANDS
as we did in Autoconf 2.59:
2006-04-02 Noah Misch <address@hidden>
* lib/autoconf/status.m4 (_AC_CONFIG_FOOS): Do not append normalized
TAGS to ac_config_<foo>s.
(AC_CONFIG_FILES, AC_CONFIG_HEADERS, AC_CONFIG_LINKS): Do so here.
(AC_CONFIG_COMMANDS): Append NAME to ac_config_commands without
normalizing it, consistent it with previous releases.
* tests/torture.at (Macro calls in AC_CONFIG_COMMANDS tags): New test.
diff -urp -X dontdiff ac-clean/lib/autoconf/status.m4
ac-confcom/lib/autoconf/status.m4
--- ac-clean/lib/autoconf/status.m4 2006-03-27 12:42:18.000000000 -0500
+++ ac-confcom/lib/autoconf/status.m4 2006-04-02 13:55:37.000000000 -0400
@@ -233,7 +233,6 @@ m4_define([_AC_CONFIG_FOOS],
m4_define([_AC_SEEN_CONFIG(ANY)])dnl
m4_define([_AC_SEEN_CONFIG($1)])dnl
_AC_CONFIG_COMMANDS_INIT([$4])dnl
-ac_config_[]m4_tolower([$1])="$ac_config_[]m4_tolower([$1]) m4_normalize([$2])"
])
@@ -293,7 +292,9 @@ m4_ifval([$4],
# -------------------------------------------------
# Specify output files, i.e., files that are configured with AC_SUBST.
#
-AC_DEFUN([AC_CONFIG_FILES], [_AC_CONFIG_FOOS([FILES], $@)])
+AC_DEFUN([AC_CONFIG_FILES],
+[_AC_CONFIG_FOOS([FILES], $@)
+ac_config_files="$ac_config_files m4_normalize([$1])"])
# _AC_SED_CMD_LIMIT
@@ -539,7 +540,9 @@ dnl fi
# Specify that the HEADERS are to be created by instantiation of the
# AC_DEFINEs.
#
-AC_DEFUN([AC_CONFIG_HEADERS], [_AC_CONFIG_FOOS([HEADERS], $@)])
+AC_DEFUN([AC_CONFIG_HEADERS],
+[_AC_CONFIG_FOOS([HEADERS], $@)
+ac_config_headers="$ac_config_headers m4_normalize([$1])"])
# AC_CONFIG_HEADER(HEADER-TO-CREATE ...)
@@ -691,7 +694,9 @@ m4_ifdef([_AC_AM_CONFIG_HEADER_HOOK],
# Reject DEST=., because it is makes it hard for ./config.status
# to guess the links to establish (`./config.status .').
#
-AC_DEFUN([AC_CONFIG_LINKS], [_AC_CONFIG_FOOS([LINKS], $@)])
+AC_DEFUN([AC_CONFIG_LINKS],
+[_AC_CONFIG_FOOS([LINKS], $@)
+ac_config_links="$ac_config_links m4_normalize([$1])"])
# AC_LINK_FILES(SOURCE..., DEST...)
@@ -769,7 +774,13 @@ m4_define([_AC_OUTPUT_LINK],
# commands must be associated with a NAME, which should be thought
# as the name of a file the COMMANDS create.
#
-AC_DEFUN([AC_CONFIG_COMMANDS], [_AC_CONFIG_FOOS([COMMANDS], $@)])
+# Unlike other _AC_CONFIG_FOOS, we do not m4_normalize NAME before storing it
in
+# ac_config_commands. This difference is historical, and it allows macro calls
+# in NAME.
+#
+AC_DEFUN([AC_CONFIG_COMMANDS],
+[_AC_CONFIG_FOOS([COMMANDS], $@)
+ac_config_commands="$ac_config_commands $1"])
# AC_OUTPUT_COMMANDS(EXTRA-CMDS, INIT-CMDS)
diff -urp -X dontdiff ac-clean/tests/torture.at ac-confcom/tests/torture.at
--- ac-clean/tests/torture.at 2006-03-06 17:34:34.000000000 -0500
+++ ac-confcom/tests/torture.at 2006-04-02 13:20:24.000000000 -0400
@@ -204,6 +204,25 @@ AT_CLEANUP
+## ---------------------------------------- ##
+## Macro calls in AC_CONFIG_COMMANDS tags. ##
+## ---------------------------------------- ##
+
+AT_SETUP([Macro calls in AC_CONFIG_COMMANDS tags])
+
+AT_DATA_M4SUGAR([configure.ac],
+[[AC_INIT
+AC_CONFIG_COMMANDS([m4_if(1,1,mytag)])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
## ------------------- ##
## Missing templates. ##
## ------------------- ##
- Re: bad m4 quotation? (was: echo "enhancement" leads to confused legacy script tools...),
Noah Misch <=