mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-17 04:31:04 -06:00
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.
This commit is contained in:
7
Help/release/dev/whitelist-more-interface-properties.rst
Normal file
7
Help/release/dev/whitelist-more-interface-properties.rst
Normal file
@@ -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.
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "cmTargetPropertyComputer.h"
|
#include "cmTargetPropertyComputer.h"
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
@@ -49,6 +50,12 @@ bool cmTargetPropertyComputer::WhiteListedInterfaceProperty(
|
|||||||
if (cmHasLiteralPrefix(prop, "INTERFACE_")) {
|
if (cmHasLiteralPrefix(prop, "INTERFACE_")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (cmHasLiteralPrefix(prop, "_")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (std::islower(prop[0])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
static std::unordered_set<std::string> builtIns;
|
static std::unordered_set<std::string> builtIns;
|
||||||
if (builtIns.empty()) {
|
if (builtIns.empty()) {
|
||||||
builtIns.insert("COMPATIBLE_INTERFACE_BOOL");
|
builtIns.insert("COMPATIBLE_INTERFACE_BOOL");
|
||||||
|
|||||||
@@ -4,3 +4,13 @@ add_library(iface INTERFACE)
|
|||||||
set_property(TARGET iface PROPERTY OUTPUT_NAME output)
|
set_property(TARGET iface PROPERTY OUTPUT_NAME output)
|
||||||
set_property(TARGET iface APPEND PROPERTY OUTPUT_NAME append)
|
set_property(TARGET iface APPEND PROPERTY OUTPUT_NAME append)
|
||||||
get_target_property(outname iface OUTPUT_NAME)
|
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")
|
||||||
|
|||||||
Reference in New Issue
Block a user