[CMake] if(MATCHES) broken??

Matthew Woehlke mw_triad at users.sourceforge.net
Thu Dec 4 17:37:30 EST 2008


Matthew Woehlke wrote:
> Bill Hoffman wrote:
>> The problem is that if(something MATCHES something) works for either 
>> strings or variable names.  The way that works is by checking to see 
>> if there is a variable defined by the string given to if.  Even if 
>> that string is in quotes, it can still be treated like a variable.
>>
>> So, in this case cmake looks up "CFLAGS" and finds that there is a 
>> variable of that name, and uses that value for the MATCHES statement. 
>> Basically ending up with if("happyjoy" MATCHES "CFLAGS").  You can 
>> verify this by commenting out set(CFLAGS happyjoy) so that CFLAGS does 
>> not have a definition, then your code works.
> 
> Yes, I figured that out. Hmm... at least it's documented, if annoying.
> 
> After poking at this further, there seems to be a bug here... we've 
> established that 'if(CFLAGS MATCHES CFLAGS)' expands the variable on the 
> LHS. That being the case, then it seems - from my reading of the doc - 
> that 'if(CFLAGS STREQUAL CFLAGS)' should be doing likewise, i.e. both 
> should be false. Further, it seems that 'if(bar MATCHES "CFLAGS")' does 
> *not* expand bar... why?
> 
>> I agree this is confusing...  Perhaps there should be some new if
>> arguments that are always string based, and never look up variables.
> 
> What about simply inhibiting "expansion" when the LHS is quoted? (I 
> guess the concern would be compatibility? But given that the current 
> behavior seems buggy - i.e. inconsistent - already...) Since variable 
> names can't contain spaces (ah, they can't, right? :-) ), it seems 
> reasonable that if you are trying to dereference a variable that is 
> supposed to contain the name of another variable, whose value you want 
> to use, that this seems to make sense.
> 
> OTOH, given that '${${bar}}' is a legal construct that does exactly what 
> you'd expect (namely, expand the variable whose name is the expansion of 
> bar), I'm inclined to question using implicit expansion at all. But... 
> it can be convenient, so maybe that would be too much. Inhibiting 
> "expansion" in quoted-strings seems reasonable, though. (After all, 
> who's putting things that are supposed to be variable names in quotes?)

ping?

-- 
Matthew
Please do not quote my e-mail address unobfuscated in message bodies.
-- 
Microsoft, electricity, network connectivity. For a secure system pick 
any two. -- Iain D Broadfoot (paraphrased, from cluefire.net)



More information about the CMake mailing list