autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/3] autoconf: prefer an unrolled loop for trivial AC_CHECK_F


From: Eric Blake
Subject: Re: [PATCH 1/3] autoconf: prefer an unrolled loop for trivial AC_CHECK_FUNCS
Date: Mon, 31 Oct 2016 12:01:34 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

On 10/31/2016 10:33 AM, Paolo Bonzini wrote:
> 
> 
> On 31/10/2016 16:28, Eric Blake wrote:
>> On 10/31/2016 06:39 AM, Paolo Bonzini wrote:
>>> An unrolled loop avoids the cost of spawning sed in AS_TR_SH and
>>> AS_TR_CPP.  Prefer it if there is nothing in the second and third
>>> argument of AC_CHECK_FUNCS and the first argument is a literal.
>>> Modify AC_CHECK_FUNCS_ONCE to avoid the variable indirection too.
>>>
>>> * lib/autoconf/functions.m4 (AC_CHECK_FUNCS): Unroll loop if safe.
>>> (_AC_CHECK_FUNCS): Move basic implementation here.
>>> (_AC_CHECK_FUNC_ONCE): Expand AC_CHECK_FUNCS here...
>>> (_AC_FUNCS_EXPANSION): ... and not here, so remove.
>>
>>> -          [$3])dnl])
>>> +[m4_if([$2$3]AS_LITERAL_IF([$1], [yes], [no]), []yes,
>>
>> Why []yes instead of the more typical [yes] ?
>>
>> If the user has (unwisely) defined yes as a macro, your version will
>> compare against their expansion, instead of against the intended literal.
> 
> Because I've never understood the rules for m4_if, and thought []yes
> matched what you get from m4_if([$2$3]AS_LITERAL_IF([$1], [yes], [no]).

If 'yes' and 'no' are not macros, then these are identical:

m4_if([$2$3]AS_LITERAL_IF([$1], yes, no), yes, ...)
m4_if([$2$3]AS_LITERAL_IF([$1], [yes], [no]), []yes[], ...)
m4_if([$2$3]AS_LITERAL_IF([$1], [[yes]], [[no]]), [yes], ...)

because of the order in which quotes are stripped through successive
levels of m4 processing.  But if yes or no could be a macro, then only
the latter form is safe against unintended expansions (yes, including
the double-quoting within AS_LITERAL_IF, because one layer of quotes
gets stripped when collecting the args to AS_LITERAL_IF, and another
gets stripped when concatenating to [$2$3] to determine the final string
to compare against the literal of the second argument to m4_if).

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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