Hi Eric, > The question ... is whether AS_TR_CPP([abc]) should output a quoted > string (which is a change in behavior, but arguably more like > m4_toupper), or a raw string (no worse than what we have today, but > where AS_TR_CPP([[abc]]) would work where today it doesn't). > ... > It's a bug fix either way, so which way do you prefer? Since you mentioned m4_toupper, here's a comparison of m4_toupper, m4_tolower, AS_TR_SH, AS_TR_CPP. To get the big picture. ========================== configure.ac ======================== AC_INIT m4_define([Gregor_Samsa], [Gregor_Samsa_argexpanded]) m4_define([FOO_BAR], [FOO_BAR_argexpanded]) m4_define([GREGOR_SAMSA], [undesired substitution on result]) m4_define([GREGOR_SAMSA_ARGEXPANDED], [arg expanded and undesired substitution on result]) m4_define([foo_bar], [undesired substitution on result]) m4_define([foo_bar_argexpanded], [arg expanded and undesired substitution on result]) XXX_HERE dnl Test with m4_tolower: [gl_]m4_tolower(FOO_BAR) [gl_]m4_quote(m4_tolower(FOO_BAR)) [gl_]m4_tolower([FOO_BAR]) [gl_]m4_quote(m4_tolower([FOO_BAR])) [gl_]m4_tolower([[FOO_BAR]]) [gl_]m4_quote(m4_tolower([[FOO_BAR]])) dnl Test with m4_toupper: [gl_]m4_toupper(Gregor_Samsa) [gl_]m4_quote(m4_toupper(Gregor_Samsa)) [gl_]m4_toupper([Gregor_Samsa]) [gl_]m4_quote(m4_toupper([Gregor_Samsa])) [gl_]m4_toupper([[Gregor_Samsa]]) [gl_]m4_quote(m4_toupper([[Gregor_Samsa]])) dnl Test with AS_TR_SH: [gl_]AS_TR_SH(FOO_BAR) [gl_]m4_quote(AS_TR_SH(FOO_BAR)) [gl_]AS_TR_SH([FOO_BAR]) [gl_]m4_quote(AS_TR_SH([FOO_BAR])) [gl_]AS_TR_SH([[FOO_BAR]]) [gl_]m4_quote(AS_TR_SH([[FOO_BAR]])) dnl Test with AS_TR_CPP: [gl_]AS_TR_CPP(Gregor_Samsa) [gl_]m4_quote(AS_TR_CPP(Gregor_Samsa)) [gl_]AS_TR_CPP([Gregor_Samsa]) [gl_]m4_quote(AS_TR_CPP([Gregor_Samsa])) [gl_]AS_TR_CPP([[Gregor_Samsa]]) [gl_]m4_quote(AS_TR_CPP([[Gregor_Samsa]])) AC_OUTPUT ======================================================================== $ autoconf produces: ------------------------------------------------------------- gl_foo_bar_argexpanded gl_foo_bar_argexpanded gl_foo_bar gl_foo_bar gl_[foo_bar] gl_[foo_bar] gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA gl_GREGOR_SAMSA gl_[GREGOR_SAMSA] gl_[GREGOR_SAMSA] gl_FOO_BAR_argexpanded gl_FOO_BAR_argexpanded gl_FOO_BAR_argexpanded gl_FOO_BAR_argexpanded gl_FOO_BAR gl_FOO_BAR gl_arg expanded and undesired substitution on result gl_arg expanded and undesired substitution on result gl_arg expanded and undesired substitution on result gl_arg expanded and undesired substitution on result gl_undesired substitution on result gl_undesired substitution on result ------------------------------------------------------------- So this means that currently: - m4_tolower and m4_toupper operate in the same way: They expand their arg if it is unquoted, and they don't expand their result. - AS_TR_SH and AS_TR_CPP expand their arg if it unquoted or single-quoted. - AS_TR_SH does not expand its result. - AS_TR_CPP expands its result. The difference between m4_tolower and m4_toupper on one side and AS_TR_SH and AS_TR_CPP on the other side - does it require single-quoting or double-quoting to avoid argument expansion - is a bit surprising, but may be due to the fact that m4_tolower and m4_toupper come from m4 whereas AS_TR_SH and AS_TR_CPP follow the autoconf conventions. I'm not asking to change that. I'm only asking to make AS_TR_CPP not expand its result. In other words, I want the result of above autoconf run to be: ------------------------------------------------------------- gl_foo_bar_argexpanded gl_foo_bar_argexpanded gl_foo_bar gl_foo_bar gl_[foo_bar] gl_[foo_bar] gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA gl_GREGOR_SAMSA gl_[GREGOR_SAMSA] gl_[GREGOR_SAMSA] gl_FOO_BAR_argexpanded gl_FOO_BAR_argexpanded gl_FOO_BAR_argexpanded gl_FOO_BAR_argexpanded gl_FOO_BAR gl_FOO_BAR gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA_ARGEXPANDED gl_GREGOR_SAMSA gl_GREGOR_SAMSA ------------------------------------------------------------- This would make AS_TR_CPP consistent with AS_TR_SH. You are free to convert my sample code into a test case ;-) Bruno _______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf