On 06/15/2012 07:18 AM, Vincent Torri wrote: >> Show more context of what you are trying to do. > > dnl Macro that checks for a compiler flag availability > dnl > dnl EFL_CHECK_COMPILER_FLAG(EFL, FLAG[, ACTION-IF-FOUND[ > ,ACTION-IF-NOT-FOUND]]) > dnl AC_SUBST : EFL_CFLAGS (EFL being replaced by its value) > dnl AM_CONDITIONAL : EFL_HAVE_FLAG (FLAG being replaced by its value) Now we're getting somewhere. I'm assuming a typical caller would be: EFL_CHECK_COMPILER([efl], [-Wno-foo], ...) > > AC_DEFUN([EFL_CHECK_COMPILER_FLAG], > [ > m4_pushdef([UPEFL], m4_translit([$1], [-a-z], [_A-Z]))dnl > m4_pushdef([UP], m4_translit([$2], [-a-z], [_A-Z]))dnl Unrelated, but this is underquoted, although it is is probably okay based on your intended usage of EFL_CHECK_COMPILER_FLAG. A fully-quoted version would be: m4_pushdef([UP], m4_translit([[$2]], [-a-z], [_A-Z])) where the first argument of m4_translit is double-quoted, since m4_translit strips one level of quoting but you don't want the output ot m4_translit to be reinterpreted as a macro that might accidentally be expanded before you get a chance to assign the macro UP. But what you are doing here is creating a new m4 macro, "UP", whose contents are the munged value of $2 - or in my example caller above, that means UP would be defined as "_WNO_FOO". > > tmp=$2 This is a shell assignment (configure-time processing). It says define the shell variable tmp to the literal string passed in as the second argument to EFL_CHECK_COMPILER_FLAG. Or at shell time, $tmp would evaluate to "-Wno-foo". > m4_if(m4_index([$tmp], [-Wno-]), 0, [m4_define([flagm4], > [m4_bpatsubst([[$tmp]], [no-])])], [m4_define([flagm4], [$tmp])]) But this says to do m4-time processing on the literal string $tmp, which, since it does not start with -Wno-, always falls to the else clause of the m4_if. It sounds like you really wanted to do m4-time processing on the munged value of $2, not on the literal shell text $tmp. And why are you using m4_define here but m4_pushdef above? It sounds like you want 'UP' and 'flagm4' to both be in the same category of temporary m4 variables that contain munged version of the literal arguments, and where you will popdef them at the end of your macro. So why not write it that way? m4_if(m4_index([$2], [-Wno-]), [0], [m4_pushdef([flagm4], [m4_bpatsubst([[$2]], [no-])])], [m4_pushdef([flagm4], [$2])]) > > flag=flagm4 at which point, since flagm4 is a macro, this would result in the shell code: flag=-Wfoo > AC_MSG_NOTICE([flagval :: $flag]) and this would result in a message containing "flagval :: -Wfoo". Or why even bother with shell variables? As long as you've got the m4 variable, why not use it directly: AC_MSG_NOTICE([flagval :: ]flagm4) -- Eric Blake eblake@xxxxxxxxxx +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Autoconf mailing list Autoconf@xxxxxxx https://lists.gnu.org/mailman/listinfo/autoconf