De-duplicate validation of genex target names.
This commit is contained in:
parent
92e98dd909
commit
7c0ec75cfa
|
@ -371,10 +371,20 @@ std::string::size_type cmGeneratorExpression::Find(const std::string &input)
|
|||
{
|
||||
const std::string::size_type openpos = input.find("$<");
|
||||
if (openpos != std::string::npos
|
||||
&& input.find(">", openpos) != std::string::npos)
|
||||
{
|
||||
return openpos;
|
||||
}
|
||||
&& input.find(">", openpos) != std::string::npos)
|
||||
{
|
||||
return openpos;
|
||||
}
|
||||
return std::string::npos;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmGeneratorExpression::IsValidTargetName(const std::string &input)
|
||||
{
|
||||
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_.:-]+$");
|
||||
|
||||
return targetNameValidator.find(input.c_str());
|
||||
}
|
||||
|
|
|
@ -64,6 +64,8 @@ public:
|
|||
|
||||
static std::string::size_type Find(const std::string &input);
|
||||
|
||||
static bool IsValidTargetName(const std::string &input);
|
||||
|
||||
private:
|
||||
cmGeneratorExpression(const cmGeneratorExpression &);
|
||||
void operator=(const cmGeneratorExpression &);
|
||||
|
|
|
@ -333,10 +333,6 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
"$<TARGET_PROPERTY:...> expression requires one or two parameters");
|
||||
return std::string();
|
||||
}
|
||||
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_]+$");
|
||||
|
||||
|
@ -372,7 +368,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
|
||||
std::string targetName = parameters.front();
|
||||
propertyName = parameters[1];
|
||||
if (!targetNameValidator.find(targetName.c_str()))
|
||||
if (!cmGeneratorExpression::IsValidTargetName(targetName))
|
||||
{
|
||||
if (!propertyNameValidator.find(propertyName.c_str()))
|
||||
{
|
||||
|
@ -867,10 +863,7 @@ struct TargetFilesystemArtifact : public cmGeneratorExpressionNode
|
|||
// Lookup the referenced target.
|
||||
std::string name = *parameters.begin();
|
||||
|
||||
cmsys::RegularExpression targetValidator;
|
||||
// The ':' is supported to allow use with IMPORTED targets.
|
||||
targetValidator.compile("^[A-Za-z0-9_.:-]+$");
|
||||
if (!targetValidator.find(name.c_str()))
|
||||
if (!cmGeneratorExpression::IsValidTargetName(name))
|
||||
{
|
||||
::reportError(context, content->GetOriginalExpression(),
|
||||
"Expression syntax not recognized.");
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
============================================================================*/
|
||||
#include "cmTargetLinkLibrariesCommand.h"
|
||||
|
||||
#include "cmGeneratorExpression.h"
|
||||
|
||||
const char* cmTargetLinkLibrariesCommand::LinkLibraryTypeNames[3] =
|
||||
{
|
||||
"general",
|
||||
|
@ -271,9 +273,8 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const char* lib,
|
|||
{
|
||||
const bool isGenex = cmGeneratorExpression::Find(lib) != std::string::npos;
|
||||
|
||||
cmsys::RegularExpression targetNameValidator;
|
||||
targetNameValidator.compile("^[A-Za-z0-9_.:-]+$");
|
||||
const bool potentialTargetName = targetNameValidator.find(lib);
|
||||
const bool potentialTargetName
|
||||
= cmGeneratorExpression::IsValidTargetName(lib);
|
||||
|
||||
if (potentialTargetName || isGenex)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue