[CMake] LIST bugs for cmake version 2.6-patch 0 RC-8
Brad King
brad.king at kitware.com
Wed May 7 17:03:17 EDT 2008
Alan W. Irwin wrote:
> On 2008-05-07 14:45-0400 Brad King wrote:
>> Variable expansion without quotes has *always*
>> removed empty items. It occurs before the foreach command even sees
>> them and is consistent across all commands. We should not change this.
>
> I don't agree. For consistency sake with the new CMP0007 policy I think
> you
> should expand out the empty elements in LIST variables so the two foreach
> commands above give consistent results. The current inconsistent results
> between explicit lists (as in the first foreach command above) as
> opposed to
> an expanded LIST variable which contains the same empty and non-empty
> elements (as in the second foreach above) are just confusing. So I hope
> you
> reconsider this decision.
The policy is about the LIST command and how it deals with lists whose
*names* are given and not the *values*. This is the FOREACH command
which currently always deals with values. A fundmental rule in CMake
syntax is that the argument
${MYVAR}
expands lists and removes empty elements in all contexts, and the argument
"${MYVAR}"
is just a string. Changing this rule will be a low-level syntax change
to the language and is out of the question, even with a policy.
The FOREACH command should have no special exception to this rule. As
far as policy CMP0007, the LIST command has no special exception either:
set(L1 a b "" c)
set(L2 x y)
list(APPEND L2 ${L1})
will result in L2 containing "x;y;a;b;c". The ${L1} reference is
expanded and cleaned of empty elements before the LIST command is even
invoked. The same is true for the arguments of FOREACH.
-Brad
More information about the CMake
mailing list