diff options
author | Stephen Kelly <steveire@gmail.com> | 2012-10-19 11:11:59 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-10-22 18:05:48 (GMT) |
commit | e386992152ac3ba5fe2abb66a56ea6ae99d6e8f3 (patch) | |
tree | a0bb84e1d490d88b2863baa9fa1011336ba9298f /Source/cmGeneratorExpressionEvaluator.cxx | |
parent | 95d590ddbac80780f437252de4522b78f4069f45 (diff) | |
download | CMake-e386992152ac3ba5fe2abb66a56ea6ae99d6e8f3.zip CMake-e386992152ac3ba5fe2abb66a56ea6ae99d6e8f3.tar.gz CMake-e386992152ac3ba5fe2abb66a56ea6ae99d6e8f3.tar.bz2 |
GexEx: Validate Target names and property names differently.
In the unit test, use the same IMPORTED_LOCATION trick that
the ExportImport test uses.
Diffstat (limited to 'Source/cmGeneratorExpressionEvaluator.cxx')
-rw-r--r-- | Source/cmGeneratorExpressionEvaluator.cxx | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index 287066a..ee1b60a 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -277,8 +277,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode "$<TARGET_PROPERTY:...> expression requires one or two parameters"); 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; std::string propertyName = *parameters.begin(); @@ -301,9 +305,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode std::string targetName = parameters.front(); 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(), "Target name and property name not supported."); @@ -335,7 +339,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode return std::string(); } - if (!nameValidator.find(propertyName.c_str())) + if (!propertyNameValidator.find(propertyName.c_str())) { ::reportError(context, content->GetOriginalExpression(), "Property name not supported."); @@ -480,7 +484,8 @@ struct TargetFilesystemArtifact : public cmGeneratorExpressionNode std::string name = *parameters.begin(); 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())) { ::reportError(context, content->GetOriginalExpression(), |