[Cmake-commits] CMake branch, next, updated. v2.8.12.1-6013-ga5f837c
Daniele E. Domenichelli
daniele.domenichelli at gmail.com
Tue Dec 3 10:23:59 EST 2013
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via a5f837c6a3a7992439002389030543c432f07fc9 (commit)
via 10fd6fba767be3035a6342f1ccee51ee9a97e601 (commit)
via fa81f53d448e3345459972147922b7e37cb94ba0 (commit)
via cbb72c8fa45c6aa888f5c1f8083306707b8006a5 (commit)
via a40eb5338fa79ec7f4d11dafa7d79328a3a15d6a (commit)
via 67e0d4d95b14aa2481840a4a17ca44bd37f5beb0 (commit)
via 65eeb81e64af3e40a346892afdd977494d1d2bac (commit)
via 96cf67a21121779cdcd8afacfdd508efe1c1a2b5 (commit)
from a1956c508553fe2e04429b6d133b7e5cacb9c004 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a5f837c6a3a7992439002389030543c432f07fc9
commit a5f837c6a3a7992439002389030543c432f07fc9
Merge: a1956c5 10fd6fb
Author: Daniele E. Domenichelli <daniele.domenichelli at gmail.com>
AuthorDate: Tue Dec 3 10:23:56 2013 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Dec 3 10:23:56 2013 -0500
Merge topic 'CMakeParseArguments_EmptyArgs' into next
10fd6fb CMakeParseArguments: Add unit tests
fa81f53 CMakeParseArguments: Update documentation
cbb72c8 CMakeParseArguments: Use "if(COMMAND)" as module guard
a40eb53 CMakeParseArguments: Add workaround for compatibility with CMake <= 2.8.12
67e0d4d CMakeParseArguments: Keep compatibility with previous behaviour
65eeb81 CMakeParseArguments: Do not skip empty arguments
96cf67a Make define_property() scriptable
diff --cc Tests/RunCMake/CMakeLists.txt
index 98dde92,bb26396..4cdcef9
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@@ -136,5 -134,5 +136,6 @@@ endif(
add_RunCMake_test(File_Generate)
add_RunCMake_test(ExportWithoutLanguage)
add_RunCMake_test(target_link_libraries)
+add_RunCMake_test(target_compile_features)
add_RunCMake_test(CheckModules)
+ add_RunCMake_test(CMakeParseArguments)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=10fd6fba767be3035a6342f1ccee51ee9a97e601
commit 10fd6fba767be3035a6342f1ccee51ee9a97e601
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Thu Nov 14 11:54:29 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 16:20:51 2013 +0100
CMakeParseArguments: Add unit tests
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 209b0b3..bb26396 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -135,3 +135,4 @@ add_RunCMake_test(File_Generate)
add_RunCMake_test(ExportWithoutLanguage)
add_RunCMake_test(target_link_libraries)
add_RunCMake_test(CheckModules)
+add_RunCMake_test(CMakeParseArguments)
diff --git a/Tests/RunCMake/CMakeParseArguments/ARGUMENT-KEEP.cmake b/Tests/RunCMake/CMakeParseArguments/ARGUMENT-KEEP.cmake
new file mode 100644
index 0000000..1913713
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/ARGUMENT-KEEP.cmake
@@ -0,0 +1,29 @@
+# CMAKE_MINIMUM_REQUIRED_VERSION 2.8.12
+# CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 1
+# CMAKE_PARSE_ARGUMENTS_(KEEP|SKIP)_EMPTY KEEP
+# => KEEP
+
+cmake_minimum_required(VERSION 2.8.12)
+
+include(CMakeParseArguments)
+
+set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 1)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" CMAKE_PARSE_ARGUMENTS_KEEP_EMPTY "${ARGN}")
+endmacro()
+
+my_install(DESTINATION "" TARGETS foo "" bar)
+
+if(NOT DEFINED MY_INSTALL_DESTINATION)
+ message(FATAL_ERROR "NOT DEFINED MY_INSTALL_DESTINATION")
+elseif(NOT "${MY_INSTALL_DESTINATION}" STREQUAL "")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_DESTINATION}\" STREQUAL \"\"")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;;bar\"")
+endif()
diff --git a/Tests/RunCMake/CMakeParseArguments/ARGUMENT-SKIP.cmake b/Tests/RunCMake/CMakeParseArguments/ARGUMENT-SKIP.cmake
new file mode 100644
index 0000000..6e0598c
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/ARGUMENT-SKIP.cmake
@@ -0,0 +1,27 @@
+# CMAKE_MINIMUM_REQUIRED_VERSION 2.8.12
+# CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 0
+# CMAKE_PARSE_ARGUMENTS_(KEEP|SKIP)_EMPTY SKIP
+# => SKIP
+
+cmake_minimum_required(VERSION 2.8.12)
+
+include(CMakeParseArguments)
+
+set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 0)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" CMAKE_PARSE_ARGUMENTS_SKIP_EMPTY "${ARGN}")
+endmacro()
+
+my_install(DESTINATION "" TARGETS foo "" bar)
+
+if(DEFINED MY_INSTALL_DESTINATION)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_DESTINATION")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;bar\"")
+endif()
diff --git a/Tests/RunCMake/CMakeParseArguments/CMakeLists.txt b/Tests/RunCMake/CMakeParseArguments/CMakeLists.txt
new file mode 100644
index 0000000..4b3de84
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8.12)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir1/CMakeLists.txt b/Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir1/CMakeLists.txt
new file mode 100644
index 0000000..19871cc
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir1/CMakeLists.txt
@@ -0,0 +1 @@
+include(CMakeParseArguments)
diff --git a/Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir2/CMakeLists.txt b/Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir2/CMakeLists.txt
new file mode 100644
index 0000000..4d1e6e4
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir2/CMakeLists.txt
@@ -0,0 +1,10 @@
+include(CMakeParseArguments)
+
+macro(mymacro)
+ set(options )
+ set(oneValueArgs)
+ set(multiValueArgs)
+ cmake_parse_arguments(MY_ "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}" )
+endmacro()
+
+mymacro()
diff --git a/Tests/RunCMake/CMakeParseArguments/DifferentScope.cmake b/Tests/RunCMake/CMakeParseArguments/DifferentScope.cmake
new file mode 100644
index 0000000..6441bec
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/DifferentScope.cmake
@@ -0,0 +1,4 @@
+cmake_minimum_required(VERSION 2.8.12)
+
+add_subdirectory(DifferentScope-subdir1)
+add_subdirectory(DifferentScope-subdir2)
diff --git a/Tests/RunCMake/CMakeParseArguments/Example.cmake b/Tests/RunCMake/CMakeParseArguments/Example.cmake
new file mode 100644
index 0000000..063b5f8
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/Example.cmake
@@ -0,0 +1,70 @@
+include(CMakeParseArguments)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
+endmacro()
+
+my_install(TARGETS foo bar DESTINATION bin OPTIONAL)
+
+if(NOT MY_INSTALL_OPTIONAL)
+ message(FATAL_ERROR "NOT MY_INSTALL_OPTIONAL")
+endif()
+
+if(MY_INSTALL_FAST)
+ message(FATAL_ERROR "MY_INSTALL_FAST")
+endif()
+
+if(NOT "${MY_INSTALL_DESTINATION}" STREQUAL "bin")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_DESTINATION}\" STREQUAL \"bin\"")
+endif()
+
+if(DEFINED MY_INSTALL_RENAME)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_RENAME")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;bar\"")
+endif()
+
+if(DEFINED MY_INSTALL_CONFIGURATIONS)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_CONFIGURATIONS")
+endif()
+
+if(DEFINED MY_INSTALL_UNPARSED_ARGUMENTS)
+ message(DEFINED MY_INSTALL_UNPARSED_ARGUMENTS)
+endif()
+
+
+
+my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub)
+
+if(NOT MY_INSTALL_OPTIONAL)
+ message(FATAL_ERROR "NOT MY_INSTALL_OPTIONAL")
+endif()
+
+if(MY_INSTALL_FAST)
+ message(FATAL_ERROR "MY_INSTALL_FAST")
+endif()
+
+if(NOT "${MY_INSTALL_DESTINATION}" STREQUAL "bin")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_DESTINATION}\" STREQUAL \"bin\"")
+endif()
+
+if(DEFINED MY_INSTALL_RENAME)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_RENAME")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;bar\"")
+endif()
+
+if(DEFINED MY_INSTALL_CONFIGURATIONS)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_CONFIGURATIONS")
+endif()
+
+if(NOT "${MY_INSTALL_UNPARSED_ARGUMENTS}" STREQUAL "blub")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_UNPARSED_ARGUMENTS}\" STREQUAL \"blub\"")
+endif()
diff --git a/Tests/RunCMake/CMakeParseArguments/PROPERTY-KEEP.cmake b/Tests/RunCMake/CMakeParseArguments/PROPERTY-KEEP.cmake
new file mode 100644
index 0000000..67046ef
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/PROPERTY-KEEP.cmake
@@ -0,0 +1,29 @@
+# CMAKE_MINIMUM_REQUIRED_VERSION 2.8.12
+# CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 0
+# CMAKE_PARSE_ARGUMENTS_(KEEP|SKIP)_EMPTY UNSET
+# => KEEP
+
+cmake_minimum_required(VERSION 2.8.12)
+
+include(CMakeParseArguments)
+
+set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 0)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
+endmacro()
+
+my_install(DESTINATION "" TARGETS foo "" bar)
+
+if(NOT DEFINED MY_INSTALL_DESTINATION)
+ message(FATAL_ERROR "NOT DEFINED MY_INSTALL_DESTINATION")
+elseif(NOT "${MY_INSTALL_DESTINATION}" STREQUAL "")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_DESTINATION}\" STREQUAL \"\"")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;;bar\"")
+endif()
diff --git a/Tests/RunCMake/CMakeParseArguments/PROPERTY-SKIP.cmake b/Tests/RunCMake/CMakeParseArguments/PROPERTY-SKIP.cmake
new file mode 100644
index 0000000..941d63f
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/PROPERTY-SKIP.cmake
@@ -0,0 +1,27 @@
+# CMAKE_MINIMUM_REQUIRED_VERSION 2.8.12
+# CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 1
+# CMAKE_PARSE_ARGUMENTS_(KEEP|SKIP)_EMPTY UNSET
+# => SKIP
+
+cmake_minimum_required(VERSION 2.8.12)
+
+include(CMakeParseArguments)
+
+set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY 1)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
+endmacro()
+
+my_install(DESTINATION "" TARGETS foo "" bar)
+
+if(DEFINED MY_INSTALL_DESTINATION)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_DESTINATION")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;bar\"")
+endif()
diff --git a/Tests/RunCMake/CMakeParseArguments/RunCMakeTest.cmake b/Tests/RunCMake/CMakeParseArguments/RunCMakeTest.cmake
new file mode 100644
index 0000000..7293c02
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/RunCMakeTest.cmake
@@ -0,0 +1,10 @@
+include(RunCMake)
+
+run_cmake(Example)
+run_cmake(VERSION-SKIP)
+# run_cmake(VERSION-KEEP) # Enable when 3.0.0 is released
+run_cmake(PROPERTY-SKIP)
+run_cmake(PROPERTY-KEEP)
+run_cmake(ARGUMENT-SKIP)
+run_cmake(ARGUMENT-KEEP)
+run_cmake(DifferentScope)
diff --git a/Tests/RunCMake/CMakeParseArguments/VERSION-KEEP.cmake b/Tests/RunCMake/CMakeParseArguments/VERSION-KEEP.cmake
new file mode 100644
index 0000000..44967ec
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/VERSION-KEEP.cmake
@@ -0,0 +1,27 @@
+# CMAKE_MINIMUM_REQUIRED_VERSION 3.0.0
+# CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY UNSET
+# CMAKE_PARSE_ARGUMENTS_(KEEP|SKIP)_EMPTY UNSET
+# => KEEP
+
+cmake_minimum_required(VERSION 3.0.0)
+
+include(CMakeParseArguments)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
+endmacro()
+
+my_install(DESTINATION "" TARGETS foo "" bar)
+
+if(NOT DEFINED MY_INSTALL_DESTINATION)
+ message(FATAL_ERROR "NOT DEFINED MY_INSTALL_DESTINATION")
+elseif(NOT "${MY_INSTALL_DESTINATION}" STREQUAL "")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_DESTINATION}\" STREQUAL \"\"")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;;bar\"")
+endif()
diff --git a/Tests/RunCMake/CMakeParseArguments/VERSION-SKIP.cmake b/Tests/RunCMake/CMakeParseArguments/VERSION-SKIP.cmake
new file mode 100644
index 0000000..88ff49c
--- /dev/null
+++ b/Tests/RunCMake/CMakeParseArguments/VERSION-SKIP.cmake
@@ -0,0 +1,25 @@
+# CMAKE_MINIMUM_REQUIRED_VERSION 2.8.12
+# CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY UNSET
+# CMAKE_PARSE_ARGUMENTS_(KEEP|SKIP)_EMPTY UNSET
+# => SKIP
+
+cmake_minimum_required(VERSION 2.8.12)
+
+include(CMakeParseArguments)
+
+macro(MY_INSTALL)
+ set(options OPTIONAL FAST)
+ set(oneValueArgs DESTINATION RENAME)
+ set(multiValueArgs TARGETS CONFIGURATIONS)
+ cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
+endmacro()
+
+my_install(DESTINATION "" TARGETS foo "" bar)
+
+if(DEFINED MY_INSTALL_DESTINATION)
+ message(FATAL_ERROR "DEFINED MY_INSTALL_DESTINATION")
+endif()
+
+if(NOT "${MY_INSTALL_TARGETS}" STREQUAL "foo;bar")
+ message(FATAL_ERROR "NOT \"\${MY_INSTALL_TARGETS}\" STREQUAL \"foo;bar\"")
+endif()
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fa81f53d448e3345459972147922b7e37cb94ba0
commit fa81f53d448e3345459972147922b7e37cb94ba0
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Fri Nov 8 16:41:41 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 16:20:51 2013 +0100
CMakeParseArguments: Update documentation
diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake
index 44a301b..c75d839 100644
--- a/Modules/CMakeParseArguments.cmake
+++ b/Modules/CMakeParseArguments.cmake
@@ -2,16 +2,23 @@
# CMakeParseArguments
# -------------------
#
+# Parse arguments given to a macro or a function.
#
-#
-# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords>
-# <multi_value_keywords> args...)
-#
-# CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions
+# cmake_parse_arguments() is intended to be used in macros or functions
# for parsing the arguments given to that macro or function. It
# processes the arguments and defines a set of variables which hold the
# values of the respective options.
#
+# ::
+#
+# cmake_parse_arguments(<prefix>
+# <options>
+# <one_value_keywords>
+# <multi_value_keywords>
+# [CMAKE_PARSE_ARGUMENTS_SKIP_EMPTY|CMAKE_PARSE_ARGUMENTS_KEEP_EMPTY]
+# args...
+# )
+#
# The <options> argument contains all options for the respective macro,
# i.e. keywords which can be used when calling the macro without any
# value following, like e.g. the OPTIONAL keyword of the install()
@@ -25,7 +32,7 @@
# macro which can be followed by more than one value, like e.g. the
# TARGETS or FILES keywords of the install() command.
#
-# When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the
+# When done, cmake_parse_arguments() will have defined for each of the
# keywords listed in <options>, <one_value_keywords> and
# <multi_value_keywords> a variable composed of the given <prefix>
# followed by "_" and the name of the respective keyword. These
@@ -36,6 +43,17 @@
# <prefix>_UNPARSED_ARGUMENTS, this can be checked afterwards to see
# whether your macro was called with unrecognized parameters.
#
+# The cmake CMAKE_PARSE_ARGUMENTS_SKIP_EMPTY (old behaviour) and
+# CMAKE_PARSE_ARGUMENTS_KEEP_EMPTY options decide how empty arguments
+# should be handled. If none of these options is set, for backwards
+# compatibility, if CMAKE_MINIMUM_REQUIRED_VERSION < 3.0.0, 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.
+#
+#
+#
# As an example here a my_install() macro, which takes similar arguments
# as the real install() command:
#
@@ -80,7 +98,42 @@
# interpreted as the beginning of the new option. E.g.
# my_install(TARGETS foo DESTINATION OPTIONAL) would result in
# MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION
-# would be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor.
+# would be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefore.
+#
+#
+#
+# If the "CMAKE_PARSE_ARGUMENTS_SKIP_EMPTY" option is set,
+# cmake_parse_argumentswill not consider empty arguments.
+# Therefore
+#
+# ::
+#
+# my_install(DESTINATION "" TARGETS foo "" bar)
+#
+# Will set
+#
+# ::
+#
+# MY_INSTALL_DESTINATION = (unset)
+# MY_INSTALL_MULTI = "foo;bar"
+#
+# Using the "CMAKE_PARSE_ARGUMENTS_SKIP_EMPTY" option instead, will set
+#
+# ::
+#
+# MY_INSTALL_SINGLE = ""
+# MY_INSTALL_MULTI = "foo;;bar"
+#
+#
+# It is also important to note that:
+#
+# ::
+#
+# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}" )
+# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+#
+# Will behave differently, because in the latter case empty arguments
+# are not passed to cmake_parse_arguments.
#=============================================================================
# Copyright 2010 Alexander Neundorf <neundorf at kde.org>
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cbb72c8fa45c6aa888f5c1f8083306707b8006a5
commit cbb72c8fa45c6aa888f5c1f8083306707b8006a5
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Mon Dec 2 16:34:07 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 16:20:51 2013 +0100
CMakeParseArguments: Use "if(COMMAND)" as module guard
set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) does not protect from being
included twice if the module is included in different places from
different scopes. Using if(COMMAND) guarantees that the file is not
included twice.
diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake
index 39a9f71..44a301b 100644
--- a/Modules/CMakeParseArguments.cmake
+++ b/Modules/CMakeParseArguments.cmake
@@ -96,10 +96,9 @@
# License text for the above reference.)
-if(__CMAKE_PARSE_ARGUMENTS_INCLUDED)
+if(COMMAND cmake_parse_arguments)
return()
endif()
-set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE)
define_property(DIRECTORY PROPERTY "CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY" INHERITED
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a40eb5338fa79ec7f4d11dafa7d79328a3a15d6a
commit a40eb5338fa79ec7f4d11dafa7d79328a3a15d6a
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Thu Nov 14 11:42:35 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 16:20:51 2013 +0100
CMakeParseArguments: Add workaround for compatibility with CMake <= 2.8.12
This "wrapper" macro is a workaround that allows to use this version of this
module with CMake <= 2.8.12.
Before that version set(VAR "" PARENT_SCOPE) did not set the variable in
the parent scope and instead it used to unset it.
This wrapper calls the real function, but if necessary (i.e. when empty
arguments should not be skipped and CMake < 3.0.0) it parses the arguments
again in order to find single and multiple arguments that have not been set
and sets them to an empty string in the same variable scope as the caller.
diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake
index 1c902d3..39a9f71 100644
--- a/Modules/CMakeParseArguments.cmake
+++ b/Modules/CMakeParseArguments.cmake
@@ -110,40 +110,10 @@ define_property(DIRECTORY PROPERTY "CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY" IN
)
-function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
- # first set all result variables to empty/FALSE
- foreach(arg_name ${_singleArgNames} ${_multiArgNames})
- set(${prefix}_${arg_name})
- endforeach()
-
- foreach(option ${_optionNames})
- set(${prefix}_${option} FALSE)
- endforeach()
-
- set(${prefix}_UNPARSED_ARGUMENTS)
-
+function(_CMAKE_PARSE_ARGUMENTS_INTERNAL prefix _optionNames _singleArgNames _multiArgNames _skipEmpty)
set(insideValues FALSE)
set(currentArgName)
- get_property(_defaultSkipEmptySet DIRECTORY PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY SET)
- get_property(_defaultSkipEmpty DIRECTORY PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY)
-
- if("x${ARGN}" MATCHES "^xCMAKE_PARSE_ARGUMENTS_(SKIP|KEEP)_EMPTY;?")
- if("${CMAKE_MATCH_1}" STREQUAL "SKIP")
- set(_skipEmpty 1)
- elseif("${CMAKE_MATCH_1}" STREQUAL "KEEP")
- set(_skipEmpty 0)
- endif()
- string(REGEX REPLACE "^${CMAKE_MATCH_0}" "" ARGN "x${ARGN}")
- elseif(_defaultSkipEmptySet)
- set(_skipEmpty ${_defaultSkipEmpty})
- elseif(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.0.0)
- # Keep compatibility with previous releases
- set(_skipEmpty 1)
- else()
- set(_skipEmpty 0)
- endif()
-
if(_skipEmpty)
set(_loopARGN ${ARGN})
else()
@@ -204,3 +174,63 @@ function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgName
endforeach()
endfunction()
+
+
+# This "wrapper" macro is a workaround that allows to use this version of this
+# module with CMake <= 2.8.12
+# Before that version set(VAR "" PARENT_SCOPE) did not set the variable in
+# the parent scope and instead it used to unset it.
+# This wrapper calls the real function, but if necessary (i.e. when empty
+# arguments should not be skipped and CMake < 3.0.0) it parses the arguments
+# again in order to find single and multiple arguments that have not been set
+# and sets them to an empty string in the same variable scope as the caller.
+macro(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
+ # first set all result variables to empty/FALSE
+ foreach(arg_name ${_singleArgNames} ${_multiArgNames})
+ set(${prefix}_${arg_name})
+ endforeach()
+
+ foreach(option ${_optionNames})
+ set(${prefix}_${option} FALSE)
+ endforeach()
+
+ set(${prefix}_UNPARSED_ARGUMENTS)
+
+ get_property(_defaultSkipEmptySet DIRECTORY PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY SET)
+ get_property(_defaultSkipEmpty DIRECTORY PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY)
+
+ if("x${ARGN}" MATCHES "^xCMAKE_PARSE_ARGUMENTS_(SKIP|KEEP)_EMPTY;?")
+ if("${CMAKE_MATCH_1}" STREQUAL "SKIP")
+ set(_skipEmpty 1)
+ elseif("${CMAKE_MATCH_1}" STREQUAL "KEEP")
+ set(_skipEmpty 0)
+ endif()
+ string(REGEX REPLACE "^${CMAKE_MATCH_0}" "" ARGN "x${ARGN}")
+ elseif(_defaultSkipEmptySet)
+ set(_skipEmpty "${_defaultSkipEmpty}")
+ elseif(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.0.0)
+ # Keep compatibility with previous releases
+ set(_skipEmpty 1)
+ else()
+ set(_skipEmpty 0)
+ endif()
+
+ _cmake_parse_arguments_internal("${prefix}" "${_optionNames}" "${_singleArgNames}" "${_multiArgNames}" "${_skipEmpty}" "${ARGN}")
+
+ if(NOT _skipEmpty AND CMAKE_VERSION VERSION_LESS 3.0.0)
+ set(__singleArgNames ${_singleArgNames})
+ set(__multiArgNames ${_multiArgNames})
+ foreach(currentArg ${ARGN})
+ if(NOT DEFINED ${prefix}_${currentArg})
+ list(FIND __singleArgNames "${currentArg}" _singleArgIndex)
+ list(FIND __multiArgNames "${currentArg}" _multiArgIndex)
+ if(NOT ${_singleArgIndex} EQUAL -1 OR NOT ${_multiArgIndex} EQUAL -1)
+ set(${prefix}_${currentArg} "")
+ endif()
+ endif()
+ endforeach()
+ unset(__singleArgNames)
+ unset(__multiArgNames)
+ endif()
+
+endmacro()
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=67e0d4d95b14aa2481840a4a17ca44bd37f5beb0
commit 67e0d4d95b14aa2481840a4a17ca44bd37f5beb0
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Fri Nov 8 16:26:06 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 15:54:49 2013 +0100
CMakeParseArguments: Keep compatibility with previous behaviour
The 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_EMPTY|CMAKE_PARSE_ARGUMENTS_KEEP_EMPTY]
args...
)
diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake
index d96e9a4..1c902d3 100644
--- a/Modules/CMakeParseArguments.cmake
+++ b/Modules/CMakeParseArguments.cmake
@@ -102,6 +102,14 @@ endif()
set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE)
+define_property(DIRECTORY PROPERTY "CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY" INHERITED
+ BRIEF_DOCS "Whether empty arguments should be skipped or not by default."
+ FULL_DOCS
+ "See documentation of the cmake_parse_arguments() function in the "
+ "CMakeParseArguments module."
+ )
+
+
function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames)
# first set all result variables to empty/FALSE
foreach(arg_name ${_singleArgNames} ${_multiArgNames})
@@ -117,8 +125,33 @@ function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgName
set(insideValues FALSE)
set(currentArgName)
+ get_property(_defaultSkipEmptySet DIRECTORY PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY SET)
+ get_property(_defaultSkipEmpty DIRECTORY PROPERTY CMAKE_PARSE_ARGUMENTS_DEFAULT_SKIP_EMPTY)
+
+ if("x${ARGN}" MATCHES "^xCMAKE_PARSE_ARGUMENTS_(SKIP|KEEP)_EMPTY;?")
+ if("${CMAKE_MATCH_1}" STREQUAL "SKIP")
+ set(_skipEmpty 1)
+ elseif("${CMAKE_MATCH_1}" STREQUAL "KEEP")
+ set(_skipEmpty 0)
+ endif()
+ string(REGEX REPLACE "^${CMAKE_MATCH_0}" "" ARGN "x${ARGN}")
+ elseif(_defaultSkipEmptySet)
+ set(_skipEmpty ${_defaultSkipEmpty})
+ elseif(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.0.0)
+ # Keep compatibility with previous releases
+ set(_skipEmpty 1)
+ else()
+ set(_skipEmpty 0)
+ endif()
+
+ if(_skipEmpty)
+ set(_loopARGN ${ARGN})
+ else()
+ set(_loopARGN IN LISTS ARGN)
+ endif()
+
# now iterate over all arguments and fill the result variables
- foreach(currentArg IN LISTS ARGN)
+ foreach(currentArg ${_loopARGN})
list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword
list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword
list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword
@@ -126,13 +159,25 @@ function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgName
if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1)
if(insideValues)
if("${insideValues}" STREQUAL "SINGLE")
- set(${prefix}_${currentArgName} "${currentArg}")
+ if(_skipEmpty)
+ set(${prefix}_${currentArgName} ${currentArg})
+ else()
+ set(${prefix}_${currentArgName} "${currentArg}")
+ endif()
set(insideValues FALSE)
elseif("${insideValues}" STREQUAL "MULTI")
- list(APPEND ${prefix}_${currentArgName} "${currentArg}")
+ if(_skipEmpty)
+ list(APPEND ${prefix}_${currentArgName} ${currentArg})
+ else()
+ list(APPEND ${prefix}_${currentArgName} "${currentArg}")
+ endif()
endif()
else()
- list(APPEND ${prefix}_UNPARSED_ARGUMENTS "${currentArg}")
+ if(_skipEmpty)
+ list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg})
+ else()
+ list(APPEND ${prefix}_UNPARSED_ARGUMENTS "${currentArg}")
+ endif()
endif()
else()
if(NOT ${optionIndex} EQUAL -1)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=65eeb81e64af3e40a346892afdd977494d1d2bac
commit 65eeb81e64af3e40a346892afdd977494d1d2bac
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Tue Nov 5 15:31:49 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 15:50:51 2013 +0100
CMakeParseArguments: Do not skip empty arguments
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 4 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 set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE)
will not set an empty variable to the parent scope if
${${prefix}_${arg_name}} is an empty string.
4) 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".
This patch fixes the first behaviour using foreach(IN LISTS) version,
the second and the third by enclosing args 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.
diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake
index 4248176..d96e9a4 100644
--- a/Modules/CMakeParseArguments.cmake
+++ b/Modules/CMakeParseArguments.cmake
@@ -45,7 +45,7 @@
# set(options OPTIONAL FAST)
# set(oneValueArgs DESTINATION RENAME)
# set(multiValueArgs TARGETS CONFIGURATIONS)
-# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+# cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}" )
# ...
#
#
@@ -118,7 +118,7 @@ function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgName
set(currentArgName)
# now iterate over all arguments and fill the result variables
- foreach(currentArg ${ARGN})
+ foreach(currentArg IN LISTS ARGN)
list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword
list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword
list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword
@@ -126,13 +126,13 @@ function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgName
if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1)
if(insideValues)
if("${insideValues}" STREQUAL "SINGLE")
- set(${prefix}_${currentArgName} ${currentArg})
+ set(${prefix}_${currentArgName} "${currentArg}")
set(insideValues FALSE)
elseif("${insideValues}" STREQUAL "MULTI")
- list(APPEND ${prefix}_${currentArgName} ${currentArg})
+ list(APPEND ${prefix}_${currentArgName} "${currentArg}")
endif()
else()
- list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg})
+ list(APPEND ${prefix}_UNPARSED_ARGUMENTS "${currentArg}")
endif()
else()
if(NOT ${optionIndex} EQUAL -1)
@@ -152,9 +152,10 @@ function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgName
endforeach()
# propagate the result variables to the caller:
- foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames})
- set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE)
+ foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames} UNPARSED_ARGUMENTS)
+ if(DEFINED ${prefix}_${arg_name})
+ set(${prefix}_${arg_name} "${${prefix}_${arg_name}}" PARENT_SCOPE)
+ endif()
endforeach()
- set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE)
endfunction()
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=96cf67a21121779cdcd8afacfdd508efe1c1a2b5
commit 96cf67a21121779cdcd8afacfdd508efe1c1a2b5
Author: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
AuthorDate: Thu Nov 14 16:14:30 2013 +0100
Commit: Daniele E. Domenichelli <daniele.domenichelli at iit.it>
CommitDate: Tue Dec 3 15:50:51 2013 +0100
Make define_property() scriptable
This will allow CMakeParseArguments and some other modules that use
define_property (i.e. ExternalProject) to be used in script mode.
diff --git a/Source/cmDefinePropertyCommand.h b/Source/cmDefinePropertyCommand.h
index 8dc4d96..c4143cf 100644
--- a/Source/cmDefinePropertyCommand.h
+++ b/Source/cmDefinePropertyCommand.h
@@ -34,6 +34,13 @@ public:
*/
virtual const char* GetName() const { return "define_property";}
+ /**
+ * This determines if the command is invoked when in script mode.
+ * define_property() will have no effect in script mode, but this will
+ * make many of the modules usable in cmake/ctest scripts.
+ */
+ virtual bool IsScriptable() const { return true; }
+
cmTypeMacro(cmDefinePropertyCommand, cmCommand);
private:
std::string PropertyName;
-----------------------------------------------------------------------
Summary of changes:
Modules/CMakeParseArguments.cmake | 182 +++++++++++++++++---
Source/cmDefinePropertyCommand.h | 7 +
Tests/RunCMake/CMakeLists.txt | 1 +
.../CMakeParseArguments/ARGUMENT-KEEP.cmake | 29 +++
.../CMakeParseArguments/ARGUMENT-SKIP.cmake | 27 +++
.../{set => CMakeParseArguments}/CMakeLists.txt | 0
.../DifferentScope-subdir1/CMakeLists.txt | 1 +
.../DifferentScope-subdir2/CMakeLists.txt | 10 +
.../CMakeParseArguments/DifferentScope.cmake | 4 +
Tests/RunCMake/CMakeParseArguments/Example.cmake | 70 ++++++++
.../CMakeParseArguments/PROPERTY-KEEP.cmake | 29 +++
.../CMakeParseArguments/PROPERTY-SKIP.cmake | 27 +++
.../CMakeParseArguments/RunCMakeTest.cmake | 10 +
.../CMakeParseArguments/VERSION-KEEP.cmake | 27 +++
.../CMakeParseArguments/VERSION-SKIP.cmake | 25 +++
15 files changed, 422 insertions(+), 27 deletions(-)
create mode 100644 Tests/RunCMake/CMakeParseArguments/ARGUMENT-KEEP.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/ARGUMENT-SKIP.cmake
copy Tests/RunCMake/{set => CMakeParseArguments}/CMakeLists.txt (100%)
create mode 100644 Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir1/CMakeLists.txt
create mode 100644 Tests/RunCMake/CMakeParseArguments/DifferentScope-subdir2/CMakeLists.txt
create mode 100644 Tests/RunCMake/CMakeParseArguments/DifferentScope.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/Example.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/PROPERTY-KEEP.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/PROPERTY-SKIP.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/RunCMakeTest.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/VERSION-KEEP.cmake
create mode 100644 Tests/RunCMake/CMakeParseArguments/VERSION-SKIP.cmake
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list