[cmake-developers] CMakeParseArguments: Do not skip empty arguments
Alexander Neundorf
neundorf at kde.org
Tue Nov 5 14:51:20 EST 2013
On Tuesday 05 November 2013, Daniele E. Domenichelli wrote:
> Hello all,
>
> Current implementation of cmake_parse_arguments skips empty arguments.
>
> For example:
>
> cmake_parse_arguments("OPTION" "SINGLE" "MULTI" ${ARGN})
>
> with ARGN that is set using something like:
>
> <args> SINGLE "" <more args> # (<args>;SINGLE;;<more args>)
> <args> SINGLE "" # (<args>;SINGLE;)
>
> it will fail in 3 different ways:
>
> 1) because the "foreach" skips empty arguments
> 2) because list(APPEND <list> ${currentArg}) will fail to append an
> empty element to the list if currentArg is an empty string.
> 3) because empty arguments are not passed to cmake_parse_arguments
> if not quoted, i.e. if ARGN="a;;b"
> * ${ARGN} will pass the arguments "a", "b"
> * "${ARGN}" will pass the arguments "a", "", "b"
Not sure about the third point. It could be done intentionally that way in
order to ignore empty strings.
> I wrote a small patch to fix this, you can find it in the
> CMakeParseArguments_EmptyArgs topic. This patch fixes the first
> behaviour using foreach(IN LISTS) version, the second by enclosing
> currentArg in quotes where required, and finally fixes the documentation
> in order to suggest to use quoted "${ARGN}" in order not to miss the
> empty arguments at the end of the list.
>
> I don't know if this is to be considered a change of behaviour though,
> but I'd rather consider it a bug, and I would like to see it fixed in
> the next bugfix release... what do you think?
cmake_parse_arguments() is used in quite a few places in the meantime, so I
don't really feel good about changing its behaviour in general.
Maybe an option for the macro what it should do with empty values ?
Alex
More information about the cmake-developers
mailing list