mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-26 00:00:39 -05:00
Merge topic 'fix-circular-transitive-properties-segfault'
65aa5442Target: Return null when a transitive property is not defined.61ce6547Genex: Fix stack overflow in transitive property evaluation.
This commit is contained in:
@@ -1028,6 +1028,19 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
{
|
||||
if (dagCheckerParent->EvaluatingLinkLibraries())
|
||||
{
|
||||
#define TRANSITIVE_PROPERTY_COMPARE(PROPERTY) \
|
||||
(#PROPERTY == propertyName || "INTERFACE_" #PROPERTY == propertyName) ||
|
||||
if (CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(TRANSITIVE_PROPERTY_COMPARE)
|
||||
false)
|
||||
{
|
||||
reportError(context, content->GetOriginalExpression(),
|
||||
"$<TARGET_PROPERTY:...> expression in link libraries "
|
||||
"evaluation depends on target property which is transitive "
|
||||
"over the link libraries, creating a recursion.");
|
||||
return std::string();
|
||||
}
|
||||
#undef TRANSITIVE_PROPERTY_COMPARE
|
||||
|
||||
if(!prop)
|
||||
{
|
||||
return std::string();
|
||||
|
||||
@@ -3265,6 +3265,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
|
||||
}
|
||||
if(prop == "INCLUDE_DIRECTORIES")
|
||||
{
|
||||
if (this->Internal->IncludeDirectoriesEntries.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static std::string output;
|
||||
output = "";
|
||||
std::string sep;
|
||||
@@ -3283,6 +3288,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
|
||||
}
|
||||
if(prop == "COMPILE_OPTIONS")
|
||||
{
|
||||
if (this->Internal->CompileOptionsEntries.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static std::string output;
|
||||
output = "";
|
||||
std::string sep;
|
||||
@@ -3301,6 +3311,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
|
||||
}
|
||||
if(prop == "COMPILE_FEATURES")
|
||||
{
|
||||
if (this->Internal->CompileFeaturesEntries.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static std::string output;
|
||||
output = "";
|
||||
std::string sep;
|
||||
@@ -3319,6 +3334,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
|
||||
}
|
||||
if(prop == "COMPILE_DEFINITIONS")
|
||||
{
|
||||
if (this->Internal->CompileDefinitionsEntries.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static std::string output;
|
||||
output = "";
|
||||
std::string sep;
|
||||
@@ -3337,6 +3357,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
|
||||
}
|
||||
if(prop == "LINK_LIBRARIES")
|
||||
{
|
||||
if (this->Internal->LinkImplementationPropertyEntries.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static std::string output;
|
||||
output = "";
|
||||
std::string sep;
|
||||
@@ -3359,6 +3384,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
|
||||
|
||||
if(prop == "SOURCES")
|
||||
{
|
||||
if (this->Internal->SourceEntries.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
cmOStringStream ss;
|
||||
const char* sep = "";
|
||||
typedef cmTargetInternals::TargetPropertyEntry
|
||||
|
||||
Reference in New Issue
Block a user