|  | @@ -3,15 +3,12 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include "cmTargetPropertyComputer.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#include <cctype>
 | 
	
		
			
				|  |  |  #include <sstream>
 | 
	
		
			
				|  |  | -#include <unordered_set>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include "cmMessageType.h"
 | 
	
		
			
				|  |  |  #include "cmMessenger.h"
 | 
	
		
			
				|  |  |  #include "cmPolicies.h"
 | 
	
		
			
				|  |  |  #include "cmStateSnapshot.h"
 | 
	
		
			
				|  |  | -#include "cmStringAlgorithms.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool cmTargetPropertyComputer::HandleLocationPropertyPolicy(
 | 
	
		
			
				|  |  |    std::string const& tgtName, cmMessenger* messenger,
 | 
	
	
		
			
				|  | @@ -44,69 +41,3 @@ bool cmTargetPropertyComputer::HandleLocationPropertyPolicy(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    return messageType != MessageType::FATAL_ERROR;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -bool cmTargetPropertyComputer::WhiteListedInterfaceProperty(
 | 
	
		
			
				|  |  | -  const std::string& prop)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  if (cmHasLiteralPrefix(prop, "INTERFACE_")) {
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  if (cmHasLiteralPrefix(prop, "_")) {
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  if (std::islower(prop[0])) {
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  static std::unordered_set<std::string> const builtIns{
 | 
	
		
			
				|  |  | -    "COMPATIBLE_INTERFACE_BOOL",
 | 
	
		
			
				|  |  | -    "COMPATIBLE_INTERFACE_NUMBER_MAX",
 | 
	
		
			
				|  |  | -    "COMPATIBLE_INTERFACE_NUMBER_MIN",
 | 
	
		
			
				|  |  | -    "COMPATIBLE_INTERFACE_STRING",
 | 
	
		
			
				|  |  | -    "DEPRECATION",
 | 
	
		
			
				|  |  | -    "EXPORT_NAME",
 | 
	
		
			
				|  |  | -    "EXPORT_PROPERTIES",
 | 
	
		
			
				|  |  | -    "IMPORTED",
 | 
	
		
			
				|  |  | -    "IMPORTED_GLOBAL",
 | 
	
		
			
				|  |  | -    "MANUALLY_ADDED_DEPENDENCIES",
 | 
	
		
			
				|  |  | -    "NAME",
 | 
	
		
			
				|  |  | -    "PRIVATE_HEADER",
 | 
	
		
			
				|  |  | -    "PUBLIC_HEADER",
 | 
	
		
			
				|  |  | -    "TYPE"
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  if (builtIns.count(prop)) {
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  if (prop == "IMPORTED_CONFIGURATIONS" || prop == "IMPORTED_LIBNAME" ||
 | 
	
		
			
				|  |  | -      cmHasLiteralPrefix(prop, "IMPORTED_LIBNAME_") ||
 | 
	
		
			
				|  |  | -      cmHasLiteralPrefix(prop, "MAP_IMPORTED_CONFIG_")) {
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // This property should not be allowed but was incorrectly added in
 | 
	
		
			
				|  |  | -  // CMake 3.8.  We can't remove it from the whitelist without breaking
 | 
	
		
			
				|  |  | -  // projects that try to set it.  One day we could warn about this, but
 | 
	
		
			
				|  |  | -  // for now silently accept it.
 | 
	
		
			
				|  |  | -  if (prop == "NO_SYSTEM_FROM_IMPORTED") {
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  return false;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -bool cmTargetPropertyComputer::PassesWhitelist(
 | 
	
		
			
				|  |  | -  cmStateEnums::TargetType tgtType, std::string const& prop,
 | 
	
		
			
				|  |  | -  cmMessenger* messenger, cmListFileBacktrace const& context)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -  if (tgtType == cmStateEnums::INTERFACE_LIBRARY &&
 | 
	
		
			
				|  |  | -      !WhiteListedInterfaceProperty(prop)) {
 | 
	
		
			
				|  |  | -    std::ostringstream e;
 | 
	
		
			
				|  |  | -    e << "INTERFACE_LIBRARY targets may only have whitelisted properties.  "
 | 
	
		
			
				|  |  | -         "The property \""
 | 
	
		
			
				|  |  | -      << prop << "\" is not allowed.";
 | 
	
		
			
				|  |  | -    messenger->IssueMessage(MessageType::FATAL_ERROR, e.str(), context);
 | 
	
		
			
				|  |  | -    return false;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return true;
 | 
	
		
			
				|  |  | -}
 |