[cmake-developers] CMakeParseArguments: Do not skip empty arguments

Daniele E. Domenichelli daniele.domenichelli at gmail.com
Wed Dec 4 04:57:50 EST 2013


On 03/12/13 17:59, Brad King wrote:
> Why does CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY need to be an
> inherited directory property instead of a variable?  Both have
> essentially the same scope and variables are much more common.
> I'd like to avoid new uses of define_property if possible.  It
> is a legacy from the old builtin documentation system.

Ok, fixed... I saw it used in ExternalProject and I thought it was
something "standard".


> We need to be able to test this even prior to the 3.0 release.
> No one is going to remember to enable that as part of the release
> process, and what if it is broken by then?  You might be able to
> hack the test with
> 
>  set(CMAKE_MINIMUM_REQUIRED_VERSION 3.0.0)
> 
> after the real cmake_minimum_required call.

Ok thanks, fixed.


I fixed these issues and merged in next again.


> Stepping back for a moment: This macro is now a huge amount of
> CMake code to do keyword argument processing for each invocation
> of the calling macro or function.  Accumulation of such uses adds
> overhead to CMake language processing.  It was previously proposed
> in this thread to convert the implementation of the command to be
> in C++.  IMO this is still worth investigating, if only as a follow
> up to this topic.

+1, since this is a very useful feature.

But still it the module should be there for compatibility for
compatibility with scripts already using that, and the old
implementation should be there too in order to be able to backport the
module with older cmake versions...

Perhaps the implementation of the module could be changed to something like

if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.0.0)
  <call c++ command>
else()
  <current implementation>
endif()

Also all the modules that you should be able to backport should have
something like

if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.0.0)
  <call c++ command>
else()
  <current argument parsing implementation>
endif()


Cheers,
 Daniele



More information about the cmake-developers mailing list