Hello,

I updated the CMakeParseArguments_EmptyArgs topic, the new behaviour is
now decided as follows:

* If CMAKE_MINIMUM_REQUIRED_VERSION < 2.8.13, the default behaviour is
  to skip empty arguments, otherwise the default behaviour is to keep
  them.
* Using the CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY directory
  property the user can explicitly set the default behaviour for a
  folder and its subfolders.
* Using CMAKE_PARSE_ARGUMENTS_(SKIP|KEEP)_EMPTY or as the first
  argument of the call after the mandatory ones, the user can specify
  whether to keep or to skip the empty arguments, regardless of the
  default behaviour for that cmake_parse_arguments() call.

Therefore the new syntax is:

  cmake_parse_arguments(
    <prefix>
    <options>
    <one_value_keywords>
    <multi_value_keywords>
    [CMAKE_PARSE_ARGUMENTS_(SKIP|KEEP)_EMPTY]
    args...
    )

Does it look better now?


Unfortunately there still a big problem, that is probably in the c++
source code, because "set(<var> "<value>" PARENT_SCOPE)" still fails if
<value> is empty. This is a small example that shows the problem:

---

function(_foo)
    set(FOO "" PARENT_SCOPE)
endfunction()

foo(FOO "foo")
_foo()
if(DEFINED FOO)
  message("FOO DEFINED")
else()
  message("FOO NOT DEFINED")
endif()

set(BAR "")
if(DEFINED BAR)
  message("BAR DEFINED")
else()
  message("BAR NOT DEFINED")
endif()

---

The output of this is:

FOO NOT DEFINED
BAR DEFINED

So it looks like that "set(FOO "" PARENT_SCOPE)" instead of setting an
empty FOO value, unsets it in the parent scope, and the behaviour is
definitely different from set for the current scope.

This looks like a bug to me... How should I handle this?


Cheers,
 Daniele
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to