summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2017-11-21 16:35:41 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2017-11-21 16:35:41 (GMT)
commitfb3c5bfdbe87786169dfe6d3ddaa86f4f6a5676f (patch)
treece6bddd731e8c0bd4b2e3d750807481d525bc41e
parentdaeadde88871f4e2473ce429f459ae8d6ed0ffb8 (diff)
downloadCMake-fb3c5bfdbe87786169dfe6d3ddaa86f4f6a5676f.zip
CMake-fb3c5bfdbe87786169dfe6d3ddaa86f4f6a5676f.tar.gz
CMake-fb3c5bfdbe87786169dfe6d3ddaa86f4f6a5676f.tar.bz2
cmTargetPropertyComputer: whitelist custom properties
CMake's properties will never begin with an underscore or a lowercase letter, so allow them to be set by projects.
-rw-r--r--Help/release/dev/whitelist-more-interface-properties.rst7
-rw-r--r--Source/cmTargetPropertyComputer.cxx7
-rw-r--r--Tests/RunCMake/interface_library/whitelist.cmake10
3 files changed, 24 insertions, 0 deletions
diff --git a/Help/release/dev/whitelist-more-interface-properties.rst b/Help/release/dev/whitelist-more-interface-properties.rst
new file mode 100644
index 0000000..793361c
--- /dev/null
+++ b/Help/release/dev/whitelist-more-interface-properties.rst
@@ -0,0 +1,7 @@
+whitelist-more-interface-properties
+-----------------------------------
+
+* ``INTERFACE`` libraries may now have custom properties set on them if they
+ start with either an underscore (``_``) or a lowercase ASCII character. The
+ original intention was to only allow properties which made sense for
+ ``INTERFACE`` libraries, but it also blocked usage of custom properties.
diff --git a/Source/cmTargetPropertyComputer.cxx b/Source/cmTargetPropertyComputer.cxx
index ed9026e..06ce0b1 100644
--- a/Source/cmTargetPropertyComputer.cxx
+++ b/Source/cmTargetPropertyComputer.cxx
@@ -3,6 +3,7 @@
#include "cmTargetPropertyComputer.h"
+#include <cctype>
#include <sstream>
#include <unordered_set>
@@ -49,6 +50,12 @@ bool cmTargetPropertyComputer::WhiteListedInterfaceProperty(
if (cmHasLiteralPrefix(prop, "INTERFACE_")) {
return true;
}
+ if (cmHasLiteralPrefix(prop, "_")) {
+ return true;
+ }
+ if (std::islower(prop[0])) {
+ return true;
+ }
static std::unordered_set<std::string> builtIns;
if (builtIns.empty()) {
builtIns.insert("COMPATIBLE_INTERFACE_BOOL");
diff --git a/Tests/RunCMake/interface_library/whitelist.cmake b/Tests/RunCMake/interface_library/whitelist.cmake
index 98ef05c..bf64f01 100644
--- a/Tests/RunCMake/interface_library/whitelist.cmake
+++ b/Tests/RunCMake/interface_library/whitelist.cmake
@@ -4,3 +4,13 @@ add_library(iface INTERFACE)
set_property(TARGET iface PROPERTY OUTPUT_NAME output)
set_property(TARGET iface APPEND PROPERTY OUTPUT_NAME append)
get_target_property(outname iface OUTPUT_NAME)
+
+# Properties starting with `_` are allowed.
+set_property(TARGET iface PROPERTY "_custom_property" output)
+set_property(TARGET iface APPEND PROPERTY "_custom_property" append)
+get_target_property(outname iface "_custom_property")
+
+# Properties starting with a lowercase letter are allowed.
+set_property(TARGET iface PROPERTY "custom_property" output)
+set_property(TARGET iface APPEND PROPERTY "custom_property" append)
+get_target_property(outname iface "custom_property")