/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #ifndef CMGRAPHVIZWRITER_H #define CMGRAPHVIZWRITER_H #include "cmConfigure.h" // IWYU pragma: keep #include "cmStateTypes.h" #include "cmsys/RegularExpression.hxx" #include #include #include #include class cmGeneratedFileStream; class cmGeneratorTarget; class cmLocalGenerator; /** This class implements writing files for graphviz (dot) for graphs * representing the dependencies between the targets in the project. */ class cmGraphVizWriter { public: cmGraphVizWriter(const std::vector& localGenerators); void ReadSettings(const char* settingsFileName, const char* fallbackSettingsFileName); void WritePerTargetFiles(const char* fileName); void WriteTargetDependersFiles(const char* fileName); void WriteGlobalFile(const char* fileName); protected: void CollectTargetsAndLibs(); int CollectAllTargets(); int CollectAllExternalLibs(int cnt); void WriteHeader(cmGeneratedFileStream& str) const; void WriteConnections(const std::string& targetName, std::set& insertedNodes, std::set& insertedConnections, cmGeneratedFileStream& str) const; void WriteDependerConnections(const std::string& targetName, std::set& insertedNodes, std::set& insertedConnections, cmGeneratedFileStream& str) const; void WriteNode(const std::string& targetName, const cmGeneratorTarget* target, std::set& insertedNodes, cmGeneratedFileStream& str) const; void WriteFooter(cmGeneratedFileStream& str) const; bool IgnoreThisTarget(const std::string& name); bool GenerateForTargetType(cmStateEnums::TargetType targetType) const; std::string GraphType; std::string GraphName; std::string GraphHeader; std::string GraphNodePrefix; std::vector TargetsToIgnoreRegex; const std::vector& LocalGenerators; std::map TargetPtrs; // maps from the actual target names to node names in dot: std::map TargetNamesNodes; bool GenerateForExecutables; bool GenerateForStaticLibs; bool GenerateForSharedLibs; bool GenerateForModuleLibs; bool GenerateForExternals; bool GeneratePerTarget; bool GenerateDependers; bool HaveTargetsAndLibs; }; #endif