|  | @@ -277,8 +277,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
 | 
											
												
													
														|  |            "$<TARGET_PROPERTY:...> expression requires one or two parameters");
 |  |            "$<TARGET_PROPERTY:...> expression requires one or two parameters");
 | 
											
												
													
														|  |        return std::string();
 |  |        return std::string();
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  | -    cmsys::RegularExpression nameValidator;
 |  | 
 | 
											
												
													
														|  | -    nameValidator.compile("^[A-Za-z0-9_.-]+$");
 |  | 
 | 
											
												
													
														|  | 
 |  | +    cmsys::RegularExpression targetNameValidator;
 | 
											
												
													
														|  | 
 |  | +    // The ':' is supported to allow use with IMPORTED targets. At least
 | 
											
												
													
														|  | 
 |  | +    // Qt 4 and 5 IMPORTED targets use ':' as the namespace delimiter.
 | 
											
												
													
														|  | 
 |  | +    targetNameValidator.compile("^[A-Za-z0-9_.:-]+$");
 | 
											
												
													
														|  | 
 |  | +    cmsys::RegularExpression propertyNameValidator;
 | 
											
												
													
														|  | 
 |  | +    propertyNameValidator.compile("^[A-Za-z0-9_]+$");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      cmGeneratorTarget* target = context->Target;
 |  |      cmGeneratorTarget* target = context->Target;
 | 
											
												
													
														|  |      std::string propertyName = *parameters.begin();
 |  |      std::string propertyName = *parameters.begin();
 | 
											
										
											
												
													
														|  | @@ -301,9 +305,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |        std::string targetName = parameters.front();
 |  |        std::string targetName = parameters.front();
 | 
											
												
													
														|  |        propertyName = parameters[1];
 |  |        propertyName = parameters[1];
 | 
											
												
													
														|  | -      if (!nameValidator.find(targetName.c_str()))
 |  | 
 | 
											
												
													
														|  | 
 |  | +      if (!targetNameValidator.find(targetName.c_str()))
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  | -        if (!nameValidator.find(propertyName.c_str()))
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if (!propertyNameValidator.find(propertyName.c_str()))
 | 
											
												
													
														|  |            {
 |  |            {
 | 
											
												
													
														|  |            ::reportError(context, content->GetOriginalExpression(),
 |  |            ::reportError(context, content->GetOriginalExpression(),
 | 
											
												
													
														|  |                          "Target name and property name not supported.");
 |  |                          "Target name and property name not supported.");
 | 
											
										
											
												
													
														|  | @@ -335,7 +339,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
 | 
											
												
													
														|  |        return std::string();
 |  |        return std::string();
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    if (!nameValidator.find(propertyName.c_str()))
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if (!propertyNameValidator.find(propertyName.c_str()))
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  |        ::reportError(context, content->GetOriginalExpression(),
 |  |        ::reportError(context, content->GetOriginalExpression(),
 | 
											
												
													
														|  |                      "Property name not supported.");
 |  |                      "Property name not supported.");
 | 
											
										
											
												
													
														|  | @@ -480,7 +484,8 @@ struct TargetFilesystemArtifact : public cmGeneratorExpressionNode
 | 
											
												
													
														|  |      std::string name = *parameters.begin();
 |  |      std::string name = *parameters.begin();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      cmsys::RegularExpression targetValidator;
 |  |      cmsys::RegularExpression targetValidator;
 | 
											
												
													
														|  | -    targetValidator.compile("^[A-Za-z0-9_.-]+$");
 |  | 
 | 
											
												
													
														|  | 
 |  | +    // The ':' is supported to allow use with IMPORTED targets.
 | 
											
												
													
														|  | 
 |  | +    targetValidator.compile("^[A-Za-z0-9_.:-]+$");
 | 
											
												
													
														|  |      if (!targetValidator.find(name.c_str()))
 |  |      if (!targetValidator.find(name.c_str()))
 | 
											
												
													
														|  |        {
 |  |        {
 | 
											
												
													
														|  |        ::reportError(context, content->GetOriginalExpression(),
 |  |        ::reportError(context, content->GetOriginalExpression(),
 |