bug-autoconf
[Top][All Lists]
Advanced

[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.  ##
 ## ------------------- ##




reply via email to

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