mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-10-06 04:03:27 +03:00
cmGraphVizWriter: Updated to create and follow dependers for interface targets
Generating graphs of dependencies now uses interface targets, but graphs of dependers did not include interface targets.
This commit is contained in:
1 parent
166bf4c490
commit
9b4d31dc77
2 files changed
+27
-15
No files matched your search
+26
-15
@@ -29,6 +29,22 @@ enum LinkLibraryScopeType
|
||||
const char* const GRAPHVIZ_PRIVATE_EDEGE_STYLE = "dashed";
|
||||
const char* const GRAPHVIZ_INTERFACE_EDEGE_STYLE = "dotted";
|
||||
|
||||
std::string getLinkLibraryStyle(const LinkLibraryScopeType& type)
|
||||
{
|
||||
std::string style;
|
||||
switch (type) {
|
||||
case LLT_SCOPE_PRIVATE:
|
||||
style = "[style = " + std::string(GRAPHVIZ_PRIVATE_EDEGE_STYLE) + "]";
|
||||
break;
|
||||
case LLT_SCOPE_INTERFACE:
|
||||
style = "[style = " + std::string(GRAPHVIZ_INTERFACE_EDEGE_STYLE) + "]";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return style;
|
||||
}
|
||||
|
||||
const char* getShapeForTarget(const cmGeneratorTarget* target)
|
||||
{
|
||||
if (!target) {
|
||||
@@ -132,6 +148,7 @@ cmGraphVizWriter::cmGraphVizWriter(
|
||||
, GenerateForStaticLibs(true)
|
||||
, GenerateForSharedLibs(true)
|
||||
, GenerateForModuleLibs(true)
|
||||
, GenerateForInterface(true)
|
||||
, GenerateForExternals(true)
|
||||
, GeneratePerTarget(true)
|
||||
, GenerateDependers(true)
|
||||
@@ -192,6 +209,7 @@ void cmGraphVizWriter::ReadSettings(const char* settingsFileName,
|
||||
__set_bool_if_set(this->GenerateForStaticLibs, "GRAPHVIZ_STATIC_LIBS");
|
||||
__set_bool_if_set(this->GenerateForSharedLibs, "GRAPHVIZ_SHARED_LIBS");
|
||||
__set_bool_if_set(this->GenerateForModuleLibs, "GRAPHVIZ_MODULE_LIBS");
|
||||
__set_bool_if_set(this->GenerateForInterface, "GRAPHVIZ_INTERFACE");
|
||||
__set_bool_if_set(this->GenerateForExternals, "GRAPHVIZ_EXTERNAL_LIBS");
|
||||
__set_bool_if_set(this->GeneratePerTarget, "GRAPHVIZ_GENERATE_PER_TARGET");
|
||||
__set_bool_if_set(this->GenerateDependers, "GRAPHVIZ_GENERATE_DEPENDERS");
|
||||
@@ -379,16 +397,7 @@ void cmGraphVizWriter::WriteConnections(
|
||||
|
||||
str << " \"" << myNodeName << "\" -> \"" << libNameIt->second << "\"";
|
||||
|
||||
switch (llit.second) {
|
||||
case LLT_SCOPE_PRIVATE:
|
||||
str << "[style = " << GRAPHVIZ_PRIVATE_EDEGE_STYLE << "]";
|
||||
break;
|
||||
case LLT_SCOPE_INTERFACE:
|
||||
str << "[style = " << GRAPHVIZ_INTERFACE_EDEGE_STYLE << "]";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
str << getLinkLibraryStyle(llit.second);
|
||||
|
||||
str << " // " << targetName << " -> " << libName << std::endl;
|
||||
this->WriteConnections(libName, insertedNodes, insertedConnections, str);
|
||||
@@ -429,12 +438,11 @@ void cmGraphVizWriter::WriteDependerConnections(
|
||||
|
||||
// Now we have a target, check whether it links against targetName.
|
||||
// If so, draw a connection, and then continue with dependers on that one.
|
||||
const cmTarget::LinkLibraryVectorType* ll =
|
||||
&(tptr.second->Target->GetOriginalLinkLibraries());
|
||||
std::map<std::string, LinkLibraryScopeType> ll =
|
||||
getScopedLinkLibrariesFromTarget(tptr.second->Target);
|
||||
|
||||
for (auto const& llit : *ll) {
|
||||
std::string libName = llit.first;
|
||||
if (libName == targetName) {
|
||||
for (auto const& llit : ll) {
|
||||
if (llit.first == targetName) {
|
||||
// So this target links against targetName.
|
||||
std::map<std::string, std::string>::const_iterator dependerNodeNameIt =
|
||||
this->TargetNamesNodes.find(tptr.first);
|
||||
@@ -452,6 +460,7 @@ void cmGraphVizWriter::WriteDependerConnections(
|
||||
str << " \"" << dependerNodeNameIt->second << "\" -> \""
|
||||
<< myNodeName << "\"";
|
||||
str << " // " << targetName << " -> " << tptr.first << std::endl;
|
||||
str << getLinkLibraryStyle(llit.second);
|
||||
this->WriteDependerConnections(tptr.first, insertedNodes,
|
||||
insertedConnections, str);
|
||||
}
|
||||
@@ -572,6 +581,8 @@ bool cmGraphVizWriter::GenerateForTargetType(
|
||||
return this->GenerateForSharedLibs;
|
||||
case cmStateEnums::MODULE_LIBRARY:
|
||||
return this->GenerateForModuleLibs;
|
||||
case cmStateEnums::INTERFACE_LIBRARY:
|
||||
return this->GenerateForInterface;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -79,6 +79,7 @@ protected:
|
||||
bool GenerateForStaticLibs;
|
||||
bool GenerateForSharedLibs;
|
||||
bool GenerateForModuleLibs;
|
||||
bool GenerateForInterface;
|
||||
bool GenerateForExternals;
|
||||
bool GeneratePerTarget;
|
||||
bool GenerateDependers;
|
||||
|
||||
Reference in new issue
Block a user